├── .gitignore ├── LICENSE ├── README.md ├── bin └── start_luckyBlog.sh ├── pom.xml └── src ├── main ├── java │ └── com │ │ └── msun │ │ └── luckyBlog │ │ ├── Launcher.java │ │ ├── controller │ │ ├── AdminController.java │ │ └── FontEndController.java │ │ ├── persistence │ │ ├── domain │ │ │ ├── Archive.java │ │ │ ├── BlogView.java │ │ │ ├── Info.java │ │ │ ├── Project.java │ │ │ ├── Resume.java │ │ │ ├── ReversePath.java │ │ │ ├── SystemSetting.java │ │ │ └── UploadPic.java │ │ ├── mapper │ │ │ ├── BlogMapper.java │ │ │ ├── InfoMapper.java │ │ │ └── ProjectMapper.java │ │ └── service │ │ │ ├── BlogSer.java │ │ │ ├── FileUploadSer.java │ │ │ ├── InfoSer.java │ │ │ ├── MonitorSer.java │ │ │ └── ProjectSer.java │ │ └── support │ │ ├── FileTools.java │ │ ├── MSUNUtils.java │ │ ├── WebMvcConf.java │ │ ├── exception │ │ └── CtrlExceptionHandler.java │ │ └── interceptor │ │ └── UserSecurityInterceptor.java └── resources │ ├── application.properties │ ├── data.sql │ ├── ehcache.xml │ ├── import.sql │ ├── log4j.properties │ ├── mybatis-config.xml │ ├── static │ ├── css │ │ ├── bootstrap-tagsinput.min.css │ │ ├── editormd.min.css │ │ ├── jcala-md.min.css │ │ ├── landing-page-dark.min.css │ │ ├── landing-page.min.css │ │ ├── login-page.min.css │ │ ├── result-page.min.css │ │ └── sb-admin.min.css │ ├── fonts │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── img │ │ ├── avatar.jpg │ │ ├── dog.png │ │ ├── intro-bg-dark.jpg │ │ ├── intro-bg.jpg │ │ ├── ipad.png │ │ ├── loading.gif │ │ ├── loading@2x.gif │ │ ├── loading@3x.gif │ │ └── phones.png │ ├── js │ │ ├── CodeMirror.js │ │ ├── bootstrap-tagsinput.min.js │ │ ├── editormd.min.js │ │ ├── front-end.min.js │ │ ├── jcala-form.min.js │ │ ├── jcala-md-form.min.js │ │ ├── jquery.bootstrap-growl.min.js │ │ └── jquery.confirm.min.js │ ├── lib │ │ ├── codemirror │ │ │ ├── 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 │ │ │ ├── codemirror.min.css │ │ │ ├── codemirror.min.js │ │ │ ├── mode │ │ │ │ ├── apl │ │ │ │ │ └── apl.js │ │ │ │ ├── asterisk │ │ │ │ │ └── asterisk.js │ │ │ │ ├── clike │ │ │ │ │ └── clike.js │ │ │ │ ├── clojure │ │ │ │ │ └── clojure.js │ │ │ │ ├── cobol │ │ │ │ │ └── cobol.js │ │ │ │ ├── coffeescript │ │ │ │ │ └── coffeescript.js │ │ │ │ ├── commonlisp │ │ │ │ │ └── commonlisp.js │ │ │ │ ├── css │ │ │ │ │ └── css.js │ │ │ │ ├── cypher │ │ │ │ │ └── cypher.js │ │ │ │ ├── d │ │ │ │ │ └── d.js │ │ │ │ ├── dart │ │ │ │ │ └── dart.js │ │ │ │ ├── diff │ │ │ │ │ └── diff.js │ │ │ │ ├── django │ │ │ │ │ └── django.js │ │ │ │ ├── dockerfile │ │ │ │ │ └── dockerfile.js │ │ │ │ ├── dtd │ │ │ │ │ └── dtd.js │ │ │ │ ├── dylan │ │ │ │ │ └── dylan.js │ │ │ │ ├── ebnf │ │ │ │ │ └── ebnf.js │ │ │ │ ├── ecl │ │ │ │ │ └── ecl.js │ │ │ │ ├── eiffel │ │ │ │ │ └── eiffel.js │ │ │ │ ├── erlang │ │ │ │ │ └── erlang.js │ │ │ │ ├── forth │ │ │ │ │ └── forth.js │ │ │ │ ├── fortran │ │ │ │ │ └── fortran.js │ │ │ │ ├── gas │ │ │ │ │ └── gas.js │ │ │ │ ├── gfm │ │ │ │ │ └── gfm.js │ │ │ │ ├── gherkin │ │ │ │ │ └── gherkin.js │ │ │ │ ├── go │ │ │ │ │ └── go.js │ │ │ │ ├── groovy │ │ │ │ │ └── groovy.js │ │ │ │ ├── haml │ │ │ │ │ └── haml.js │ │ │ │ ├── haskell │ │ │ │ │ └── haskell.js │ │ │ │ ├── haxe │ │ │ │ │ └── haxe.js │ │ │ │ ├── htmlembedded │ │ │ │ │ └── htmlembedded.js │ │ │ │ ├── htmlmixed │ │ │ │ │ └── htmlmixed.js │ │ │ │ ├── http │ │ │ │ │ └── http.js │ │ │ │ ├── idl │ │ │ │ │ └── idl.js │ │ │ │ ├── javascript │ │ │ │ │ └── javascript.js │ │ │ │ ├── jinja2 │ │ │ │ │ └── jinja2.js │ │ │ │ ├── julia │ │ │ │ │ └── julia.js │ │ │ │ ├── kotlin │ │ │ │ │ └── kotlin.js │ │ │ │ ├── livescript │ │ │ │ │ └── livescript.js │ │ │ │ ├── lua │ │ │ │ │ └── lua.js │ │ │ │ ├── markdown │ │ │ │ │ └── markdown.js │ │ │ │ ├── meta.js │ │ │ │ ├── mirc │ │ │ │ │ └── mirc.js │ │ │ │ ├── mllike │ │ │ │ │ └── mllike.js │ │ │ │ ├── modelica │ │ │ │ │ └── modelica.js │ │ │ │ ├── nginx │ │ │ │ │ └── nginx.js │ │ │ │ ├── ntriples │ │ │ │ │ └── ntriples.js │ │ │ │ ├── octave │ │ │ │ │ └── octave.js │ │ │ │ ├── pascal │ │ │ │ │ └── pascal.js │ │ │ │ ├── pegjs │ │ │ │ │ └── pegjs.js │ │ │ │ ├── perl │ │ │ │ │ └── perl.js │ │ │ │ ├── php │ │ │ │ │ └── php.js │ │ │ │ ├── pig │ │ │ │ │ └── pig.js │ │ │ │ ├── properties │ │ │ │ │ └── properties.js │ │ │ │ ├── puppet │ │ │ │ │ └── puppet.js │ │ │ │ ├── python │ │ │ │ │ └── python.js │ │ │ │ ├── q │ │ │ │ │ └── q.js │ │ │ │ ├── r │ │ │ │ │ └── r.js │ │ │ │ ├── rpm │ │ │ │ │ └── rpm.js │ │ │ │ ├── rst │ │ │ │ │ └── rst.js │ │ │ │ ├── ruby │ │ │ │ │ └── ruby.js │ │ │ │ ├── rust │ │ │ │ │ └── rust.js │ │ │ │ ├── sass │ │ │ │ │ └── sass.js │ │ │ │ ├── scheme │ │ │ │ │ └── scheme.js │ │ │ │ ├── shell │ │ │ │ │ └── shell.js │ │ │ │ ├── sieve │ │ │ │ │ └── sieve.js │ │ │ │ ├── slim │ │ │ │ │ └── slim.js │ │ │ │ ├── smalltalk │ │ │ │ │ └── smalltalk.js │ │ │ │ ├── smarty │ │ │ │ │ └── smarty.js │ │ │ │ ├── smartymixed │ │ │ │ │ └── smartymixed.js │ │ │ │ ├── solr │ │ │ │ │ └── solr.js │ │ │ │ ├── soy │ │ │ │ │ └── soy.js │ │ │ │ ├── sparql │ │ │ │ │ └── sparql.js │ │ │ │ ├── spreadsheet │ │ │ │ │ └── spreadsheet.js │ │ │ │ ├── sql │ │ │ │ │ └── sql.js │ │ │ │ ├── stex │ │ │ │ │ └── stex.js │ │ │ │ ├── stylus │ │ │ │ │ └── stylus.js │ │ │ │ ├── tcl │ │ │ │ │ └── tcl.js │ │ │ │ ├── textile │ │ │ │ │ └── textile.js │ │ │ │ ├── tiddlywiki │ │ │ │ │ ├── tiddlywiki.css │ │ │ │ │ └── tiddlywiki.js │ │ │ │ ├── tiki │ │ │ │ │ ├── tiki.css │ │ │ │ │ └── tiki.js │ │ │ │ ├── toml │ │ │ │ │ └── toml.js │ │ │ │ ├── tornado │ │ │ │ │ └── tornado.js │ │ │ │ ├── turtle │ │ │ │ │ └── turtle.js │ │ │ │ ├── vb │ │ │ │ │ └── vb.js │ │ │ │ ├── vbscript │ │ │ │ │ └── vbscript.js │ │ │ │ ├── velocity │ │ │ │ │ └── velocity.js │ │ │ │ ├── verilog │ │ │ │ │ └── verilog.js │ │ │ │ ├── xml │ │ │ │ │ └── xml.js │ │ │ │ ├── xquery │ │ │ │ │ └── xquery.js │ │ │ │ ├── yaml │ │ │ │ │ └── yaml.js │ │ │ │ └── z80 │ │ │ │ │ └── z80.js │ │ │ ├── modes.min.js │ │ │ └── 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 │ │ ├── html-entities-dialog │ │ ├── html-entities-dialog.js │ │ └── html-entities.json │ │ ├── image-dialog │ │ └── image-dialog.js │ │ ├── link-dialog │ │ └── link-dialog.js │ │ ├── preformatted-text-dialog │ │ └── preformatted-text-dialog.js │ │ └── table-dialog │ │ └── table-dialog.js │ └── templates │ ├── VM_global_library.vm │ ├── about.vm │ ├── admin │ ├── blog_add.vm │ ├── blog_list.vm │ ├── blog_modify.vm │ ├── info.vm │ ├── monitor.vm │ ├── project.vm │ ├── result.vm │ └── resume.vm │ ├── archives.vm │ ├── error.vm │ ├── index.vm │ ├── login.vm │ ├── module │ ├── admin-header.vm │ ├── footer.vm │ └── header.vm │ ├── post.vm │ ├── projects.vm │ ├── tagView.vm │ └── tags.vm └── test └── java └── com └── msun └── luckyBlog └── Test.java /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | # Mobile Tools for Java (J2ME) 3 | .mtj.tmp/ 4 | # Package Files # 5 | *.jar 6 | *.war 7 | *.ear 8 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 9 | hs_err_pid* 10 | *.settings 11 | target 12 | *.classpath 13 | *.project 14 | .externalToolBuilders/ 15 | logs/ 16 | *.log 17 | .DS_Store 18 | 19 | #idea 20 | *.idea 21 | *.iml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # luckyBlog 2 | 响应式个人博客网站 3 | 4 | ### 技术栈 5 | * 后端:`SpringBoot`, `Mybatis`, `Mysql`, `velocity`, `ehcache`, `druid` 6 | * 前端:`html`, `css`, `javascript`, `jQuery` 7 | * 构建:`Maven` 8 | 9 | 10 | ## install & depoly 11 | ### 安裝本地依赖包 12 | ``` 13 | mvn clean 14 | # 15 | mvn -B -DskipTests clean dependency:list install 16 | ``` 17 | 18 | ### 下载依赖 & 测试 19 | ``` 20 | mvn clean install 21 | ``` 22 | 23 | ### 打包 24 | ``` 25 | mvn clean package -DskipTests 26 | ``` 27 | 28 | ### 运行 29 | ``` 30 | jps -l|awk '{print $1}'|xargs kill 31 | # 32 | java -Dserver.port=8080 -cp "/usr/local/java/bin/lib:/usr/local/java/bin/jre/lib:conf/:lib/*:" com.msun.luckyBlog.Launcher 33 | # 34 | nohup java -Dserver.port=8080 -cp "/usr/local/java/bin/lib:/usr/local/java/bin/jre/lib:conf/:lib/*:" com.msun.luckyBlog.Launcher > /dev/null 2>&1 & 35 | # 36 | nohup java -Dserver.port=80 -cp "/data/jdk1.7.0_55/lib:/data/jdk1.7.0_55/jre/lib:/data/lucky-blog-1.0.0-SNAPSHOT/conf/:/data/lucky-blog-1.0.0-SNAPSHOT/lib/*:" com.msun.luckyBlog.Launcher > /dev/null 2>&1 & -------------------------------------------------------------------------------- /bin/start_luckyBlog.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | JAVA_HOME=/usr/local/java 3 | export JAVA_HOME 4 | 5 | SCRIPT="$0" 6 | while [ -h "$SCRIPT" ] ; do 7 | ls=`ls -ld "$SCRIPT"` 8 | # Drop everything prior to -> 9 | link=`expr "$ls" : '.*-> \(.*\)$'` 10 | if expr "$link" : '/.*' > /dev/null; then 11 | SCRIPT="$link" 12 | else 13 | SCRIPT=`dirname "$SCRIPT"`/"$link" 14 | fi 15 | done 16 | 17 | SERVER_HOME=`dirname "$SCRIPT"` 18 | SERVER_HOME=`cd "$SERVER_HOME"; pwd` 19 | export SERVER_HOME 20 | 21 | LIBDIR=$SERVER_HOME/lib 22 | export LIBDIR 23 | 24 | CLASSPATH=${CLASSPATH}:${SERVER_HOME}/conf 25 | for lib in ${LIBDIR}/*.jar 26 | do 27 | CLASSPATH=$CLASSPATH:$lib 28 | export CLASSPATH 29 | done 30 | 31 | PATH=${JAVA_HOME}/bin:${PATH} 32 | export PATH 33 | 34 | java=$JAVA_HOME/bin/java 35 | 36 | #java opts 37 | #JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m" 38 | JAVA_OPTS="-server -Xms2048m -Xmx2048m \ 39 | -XX:PermSize=1024m \ 40 | -XX:MaxPermSize=1024m \ 41 | -XX:+UseConcMarkSweepGC \ 42 | -XX:+CMSClassUnloadingEnabled \ 43 | -XX:+UseParNewGC \ 44 | -XX:ParallelGCThreads=4 \ 45 | -XX:+PrintGCDetails \ 46 | -Xloggc:/data/logs/msun/lucky/blog/jvm_gc.log" 47 | 48 | 49 | export JAVA_OPTS 50 | 51 | echo "JAVA_HOME :$JAVA_HOME" 52 | echo "SERVER_HOME:$SERVER_HOME" 53 | echo "CLASSPATH :$CLASSPATH" 54 | 55 | exec $java $JAVA_OPTS com.msun.luckyBlog.Launcher $* & 56 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/Launcher.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog; 5 | 6 | import org.springframework.boot.SpringApplication; 7 | import org.springframework.boot.autoconfigure.SpringBootApplication; 8 | import org.springframework.boot.builder.SpringApplicationBuilder; 9 | import org.springframework.boot.web.support.SpringBootServletInitializer; 10 | import org.springframework.cache.annotation.EnableCaching; 11 | import org.springframework.transaction.annotation.EnableTransactionManagement; 12 | 13 | /** 14 | * @author zxc Dec 1, 2016 5:51:58 PM 15 | */ 16 | @SpringBootApplication 17 | @EnableTransactionManagement 18 | @EnableCaching 19 | public class Launcher extends SpringBootServletInitializer { 20 | 21 | @Override 22 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 23 | return application.sources(Launcher.class); 24 | } 25 | 26 | public static void main(String[] args) throws Exception { 27 | SpringApplication.run(Launcher.class, args); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/Archive.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 前端页面archives显示的博客列表对应的实体 10 | * 11 | * @author zxc Dec 1, 2016 6:35:53 PM 12 | */ 13 | public class Archive { 14 | 15 | private int year; // 年份 16 | private List list; // 此年份的博客列表 17 | 18 | public Archive() { 19 | 20 | } 21 | 22 | public Archive(int year, List list) { 23 | this.year = year; 24 | this.list = list; 25 | } 26 | 27 | public int getYear() { 28 | return year; 29 | } 30 | 31 | public void setYear(int year) { 32 | this.year = year; 33 | } 34 | 35 | public List getList() { 36 | return list; 37 | } 38 | 39 | public void setList(List list) { 40 | this.list = list; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/BlogView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | import java.sql.Date; 7 | 8 | /** 9 | * 博客页面的存储,包括id,日期,标题和博客页面 10 | * 11 | * @author zxc Dec 1, 2016 6:36:01 PM 12 | */ 13 | public class BlogView { 14 | 15 | private Integer vid; // id 16 | private Date date; // 博客创建日期 17 | private String title; // 博客标题,不可为空 18 | private String article; // 博客内容的html文本 19 | private String tags; // 标签,不同标签以,隔开 20 | private String md; // 博客内容的markdown文本 21 | private String monthDay; // 形如"Oct 04",为了方便archives页面显示,并不对应数据库的任何一列 22 | 23 | public BlogView() { 24 | 25 | } 26 | 27 | public BlogView(Integer vid, Date date, String title, String article, String tags, String md, String monthDay) { 28 | this.vid = vid; 29 | this.date = date; 30 | this.title = title; 31 | this.article = article; 32 | this.tags = tags; 33 | this.md = md; 34 | this.monthDay = monthDay; 35 | } 36 | 37 | public BlogView(String title, String tags, String md) { 38 | this.title = title; 39 | this.tags = tags; 40 | this.md = md; 41 | } 42 | 43 | public BlogView(int vid, String title, String tags) { 44 | this.vid = vid; 45 | this.title = title; 46 | this.tags = tags; 47 | } 48 | 49 | public Integer getVid() { 50 | return vid; 51 | } 52 | 53 | public void setVid(Integer vid) { 54 | this.vid = vid; 55 | } 56 | 57 | public Date getDate() { 58 | return date; 59 | } 60 | 61 | public void setDate(Date date) { 62 | this.date = date; 63 | } 64 | 65 | public String getTitle() { 66 | return title; 67 | } 68 | 69 | public void setTitle(String title) { 70 | this.title = title; 71 | } 72 | 73 | public String getArticle() { 74 | return article; 75 | } 76 | 77 | public void setArticle(String article) { 78 | this.article = article; 79 | } 80 | 81 | public String getTags() { 82 | return tags; 83 | } 84 | 85 | public void setTags(String tags) { 86 | this.tags = tags; 87 | } 88 | 89 | public String getMd() { 90 | return md; 91 | } 92 | 93 | public void setMd(String md) { 94 | this.md = md; 95 | } 96 | 97 | public String getMonthDay() { 98 | return monthDay; 99 | } 100 | 101 | public void setMonthDay(String monthDay) { 102 | this.monthDay = monthDay; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/Info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | /** 7 | * 个人信息 8 | * 9 | * @author zxc Dec 1, 2016 6:36:10 PM 10 | */ 11 | public class Info { 12 | 13 | private String username; // 用户名 14 | private String password; // md5加密后的密码 15 | private String email; // 邮箱,默认为# 16 | private String github; // github地址,默认为# 17 | private String twitter; // twitter地址,默认为# 18 | private String md; // 简历的markdown文本,为了admin管理时能够回显 19 | private String resume; // 简历的html文本 20 | private String Avatar; // 头像地址 21 | 22 | public String getUsername() { 23 | return username; 24 | } 25 | 26 | public void setUsername(String username) { 27 | this.username = username; 28 | } 29 | 30 | public String getPassword() { 31 | return password; 32 | } 33 | 34 | public void setPassword(String password) { 35 | this.password = password; 36 | } 37 | 38 | public String getEmail() { 39 | return email; 40 | } 41 | 42 | public void setEmail(String email) { 43 | this.email = email; 44 | } 45 | 46 | public String getGithub() { 47 | return github; 48 | } 49 | 50 | public void setGithub(String github) { 51 | this.github = github; 52 | } 53 | 54 | public String getTwitter() { 55 | return twitter; 56 | } 57 | 58 | public void setTwitter(String twitter) { 59 | this.twitter = twitter; 60 | } 61 | 62 | public String getMd() { 63 | return md; 64 | } 65 | 66 | public void setMd(String md) { 67 | this.md = md; 68 | } 69 | 70 | public String getResume() { 71 | return resume; 72 | } 73 | 74 | public void setResume(String resume) { 75 | this.resume = resume; 76 | } 77 | 78 | public String getAvatar() { 79 | return Avatar; 80 | } 81 | 82 | public void setAvatar(String avatar) { 83 | Avatar = avatar; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/Project.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | import java.sql.Timestamp; 7 | 8 | /** 9 | * @author zxc Dec 1, 2016 6:36:23 PM 10 | */ 11 | public class Project { 12 | 13 | private int id; // id 14 | private String name; // 项目名称 15 | private String url; // 项目url地址,例如https://github.com/jcalaz/jcalaBlog 16 | private String tech; // 项目所用技术 17 | private String desp; // 项目描述 18 | private Timestamp date; // 项目创建时间 19 | 20 | public int getId() { 21 | return id; 22 | } 23 | 24 | public void setId(int id) { 25 | this.id = id; 26 | } 27 | 28 | public String getName() { 29 | return name; 30 | } 31 | 32 | public void setName(String name) { 33 | this.name = name; 34 | } 35 | 36 | public String getUrl() { 37 | return url; 38 | } 39 | 40 | public void setUrl(String url) { 41 | this.url = url; 42 | } 43 | 44 | public String getTech() { 45 | return tech; 46 | } 47 | 48 | public void setTech(String tech) { 49 | this.tech = tech; 50 | } 51 | 52 | public String getDesp() { 53 | return desp; 54 | } 55 | 56 | public void setDesp(String desp) { 57 | this.desp = desp; 58 | } 59 | 60 | public Timestamp getDate() { 61 | return date; 62 | } 63 | 64 | public void setDate(Timestamp date) { 65 | this.date = date; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/Resume.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | /** 7 | * @author zxc Dec 1, 2016 6:36:34 PM 8 | */ 9 | public class Resume { 10 | 11 | private String md; 12 | private String article; 13 | 14 | public String getMd() { 15 | return md; 16 | } 17 | 18 | public void setMd(String md) { 19 | this.md = md; 20 | } 21 | 22 | public String getArticle() { 23 | return article; 24 | } 25 | 26 | public void setArticle(String article) { 27 | this.article = article; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/ReversePath.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | /** 7 | * 封装反向代理服务器的路径信息 8 | * 9 | * @author zxc Dec 1, 2016 6:36:41 PM 10 | */ 11 | public class ReversePath { 12 | 13 | private String picFilePath; // 图片文件所在基础路径,形如"/home/jcala/blog/static/img/" 14 | private String picUrlPath; // 图片的链接基础路径,形如"http://127.0.0.1:8090/static/img/" 15 | private String cssUrlPath; // css文件链接基础路径,形如"http://127.0.0.1:8090/static/css/" 16 | private String jsUrlPath; // js文件链接基础路径,形如"http://127.0.0.1:8090/static/js/" 17 | 18 | public String getPicFilePath() { 19 | return picFilePath; 20 | } 21 | 22 | public void setPicFilePath(String picFilePath) { 23 | this.picFilePath = picFilePath; 24 | } 25 | 26 | public String getPicUrlPath() { 27 | return picUrlPath; 28 | } 29 | 30 | public void setPicUrlPath(String picUrlPath) { 31 | this.picUrlPath = picUrlPath; 32 | } 33 | 34 | public String getCssUrlPath() { 35 | return cssUrlPath; 36 | } 37 | 38 | public void setCssUrlPath(String cssUrlPath) { 39 | this.cssUrlPath = cssUrlPath; 40 | } 41 | 42 | public String getJsUrlPath() { 43 | return jsUrlPath; 44 | } 45 | 46 | public void setJsUrlPath(String jsUrlPath) { 47 | this.jsUrlPath = jsUrlPath; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/SystemSetting.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | /** 7 | * 全局配置类,用于储存自定义的全局变量 8 | * 9 | * @author zxc Dec 1, 2016 6:36:50 PM 10 | */ 11 | public class SystemSetting { 12 | 13 | private String picHome; 14 | 15 | public SystemSetting() { 16 | 17 | } 18 | 19 | public SystemSetting(String picHome) { 20 | this.picHome = picHome; 21 | } 22 | 23 | public String getPicHome() { 24 | return picHome; 25 | } 26 | 27 | public void setPicHome(String picHome) { 28 | this.picHome = picHome; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/domain/UploadPic.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.domain; 5 | 6 | /** 7 | * 上传图片回显提示的实体类 8 | * 9 | * @author zxc Dec 1, 2016 6:37:00 PM 10 | */ 11 | public class UploadPic { 12 | 13 | private int success; // 0 表示上传失败,1 表示上传成功 14 | private String message; // 图片上传提示信息,包括上传成功或上传失败及错误信息等 15 | private String url; // 图片上传成功后返回的地址 16 | 17 | public int getSuccess() { 18 | return success; 19 | } 20 | 21 | public void setSuccess(int success) { 22 | this.success = success; 23 | } 24 | 25 | public String getMessage() { 26 | return message; 27 | } 28 | 29 | public void setMessage(String message) { 30 | this.message = message; 31 | } 32 | 33 | public String getUrl() { 34 | return url; 35 | } 36 | 37 | public void setUrl(String url) { 38 | this.url = url; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/mapper/InfoMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.mapper; 5 | 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | import org.apache.ibatis.annotations.Select; 9 | import org.apache.ibatis.annotations.Update; 10 | import org.springframework.stereotype.Repository; 11 | 12 | import com.msun.luckyBlog.persistence.domain.Info; 13 | 14 | /** 15 | * mybatis的mapper 映射所有个人信息操作的sql语句 16 | * 17 | * @author zxc Dec 1, 2016 6:37:25 PM 18 | */ 19 | @Repository 20 | @Mapper 21 | public interface InfoMapper { 22 | 23 | @Select({ 24 | "select username,email,", 25 | "github,twitter,avatar", 26 | "from admin limit 1" 27 | }) 28 | Info select() throws RuntimeException; 29 | 30 | @Select({ 31 | "select count(*) ", 32 | "from admin ", 33 | "where username = #{un} ", 34 | "and password = #{pw}" 35 | }) 36 | int selectByPw(@Param("un") String username, @Param("pw") String password) throws RuntimeException; 37 | 38 | @Select({ 39 | "select count(*) ", 40 | "from admin ", 41 | "where password = #{pw}" 42 | }) 43 | int selectByOldPass(@Param("pw") String oldPass) throws RuntimeException; 44 | 45 | @Select("select md from admin limit 1") 46 | String selectMd() throws RuntimeException; 47 | 48 | @Select("select resume from admin limit 1") 49 | String selectResume() throws RuntimeException; 50 | 51 | @Update({ 52 | "update admin set username = #{if.username},", 53 | "email= #{if.email},github=#{if.github},", 54 | "twitter=#{if.twitter} limit 1", 55 | }) 56 | void update(@Param("if") Info info); 57 | 58 | 59 | @Update({ 60 | "update admin set", 61 | "password = #{np} ", 62 | "limit 1" 63 | }) 64 | int updataPass(@Param("np") String newPass) throws RuntimeException; 65 | 66 | @Update({ 67 | "update admin ", 68 | "set md = #{if.md},", 69 | "resume = #{if.resume} ", 70 | "limit 1" 71 | }) 72 | void updateResume(@Param("if") Info info) throws RuntimeException; 73 | 74 | @Update({ 75 | "update admin", 76 | "set avatar = #{ava}", 77 | "limit 1" 78 | }) 79 | void updateAvater(@Param("ava") String avatar) throws RuntimeException; 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/mapper/ProjectMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.mapper; 5 | 6 | import java.util.List; 7 | 8 | import org.apache.ibatis.annotations.*; 9 | import org.springframework.stereotype.Repository; 10 | 11 | import com.msun.luckyBlog.persistence.domain.Project; 12 | 13 | /** 14 | * mybatis的mapper 映射所有项目操作的sql语句 15 | * 16 | * @author zxc Dec 1, 2016 6:37:33 PM 17 | */ 18 | @Repository 19 | @Mapper 20 | public interface ProjectMapper { 21 | 22 | @Select({ 23 | "select name,url,tech,desp,date", 24 | "from project ", 25 | "limit #{st},5" 26 | }) 27 | List select(@Param("st") int start) throws RuntimeException; 28 | 29 | @Select({ 30 | "select id,name,url,tech,desp", 31 | "from project", 32 | "where id = #{id}", 33 | "limit 1" 34 | }) 35 | Project selectById(@Param("id") int id) throws RuntimeException; 36 | 37 | @Select({ 38 | "select id,name,url", 39 | "from project", 40 | "limit #{st},10" 41 | }) 42 | List adminSelect(@Param("st") int start) throws RuntimeException; 43 | 44 | @Select("select count(*) from project") 45 | int count() throws RuntimeException; 46 | 47 | @Insert({ 48 | "insert into project", 49 | "set name= #{p.name},", 50 | "url = #{p.url},date=#{p.date},", 51 | "tech=#{p.tech},desp=#{p.desp}" 52 | }) 53 | void insert(@Param("p") Project project) throws RuntimeException; 54 | 55 | 56 | 57 | @Delete({ 58 | "delete from project", 59 | "where id = #{id}", 60 | "limit 1" 61 | }) 62 | void delete(@Param("id") int id) throws RuntimeException; 63 | 64 | 65 | @Update({ 66 | "update project", 67 | "set name= #{p.name},url = #{p.url},", 68 | "tech=#{p.tech},desp=#{p.desp}", 69 | "where id = #{p.id}", 70 | "limit 1" 71 | }) 72 | void Update(@Param("p") Project project) throws RuntimeException; 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/service/FileUploadSer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.service; 5 | 6 | import java.io.File; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | 10 | import org.slf4j.Logger; 11 | import org.slf4j.LoggerFactory; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.http.HttpHeaders; 14 | import org.springframework.http.HttpStatus; 15 | import org.springframework.http.MediaType; 16 | import org.springframework.http.ResponseEntity; 17 | import org.springframework.stereotype.Service; 18 | import org.springframework.transaction.annotation.Isolation; 19 | import org.springframework.transaction.annotation.Transactional; 20 | 21 | import com.msun.luckyBlog.persistence.domain.Info; 22 | import com.msun.luckyBlog.persistence.domain.SystemSetting; 23 | import com.msun.luckyBlog.persistence.domain.UploadPic; 24 | import com.msun.luckyBlog.support.FileTools; 25 | 26 | /** 27 | * @author zxc Dec 1, 2016 6:37:51 PM 28 | */ 29 | @Service 30 | public class FileUploadSer { 31 | 32 | static final Logger log = LoggerFactory.getLogger(FileUploadSer.class); 33 | 34 | @Autowired 35 | private InfoSer infoSer; 36 | @Autowired 37 | private SystemSetting setting; 38 | 39 | public UploadPic uploadPic(HttpServletRequest request) { 40 | String picUrl = ""; 41 | try { 42 | picUrl = FileTools.updatePic("/pic/", setting.getPicHome(), request); 43 | } catch (Exception e) { 44 | log.warn("上传图片时发生错误:" + e.getLocalizedMessage()); 45 | } 46 | final UploadPic upload = new UploadPic(); 47 | if ("".equals(picUrl)) { 48 | upload.setSuccess(0); 49 | upload.setMessage("Upload picture fail!"); 50 | upload.setUrl(""); 51 | return upload; 52 | } 53 | upload.setSuccess(1); 54 | upload.setMessage("Upload picture success!"); 55 | upload.setUrl(picUrl); 56 | return upload; 57 | } 58 | 59 | @Transactional(isolation = Isolation.READ_COMMITTED) 60 | public Info updateAvatar(HttpServletRequest request) { 61 | String url = uploadPic(request).getUrl(); 62 | if (!"".equals(url)) { 63 | infoSer.updateAvatar(url); 64 | } 65 | return infoSer.getInfo(); 66 | } 67 | 68 | public ResponseEntity gainPic(String dir, String picName) { 69 | File file = new File(setting.getPicHome() + File.separatorChar + dir + File.separatorChar + picName); 70 | byte[] bytes; 71 | try { 72 | bytes = FileTools.readFileToByteArray(file); 73 | } catch (Exception e) { 74 | log.warn(e.getLocalizedMessage()); 75 | return new ResponseEntity<>(HttpStatus.NOT_FOUND); 76 | } 77 | HttpHeaders headers = new HttpHeaders(); 78 | headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 79 | headers.setContentDispositionFormData("attachment", picName); 80 | return new ResponseEntity<>(bytes, headers, HttpStatus.OK); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/service/MonitorSer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.service; 5 | 6 | import java.lang.management.ManagementFactory; 7 | 8 | import org.springframework.stereotype.Service; 9 | 10 | import com.sun.management.OperatingSystemMXBean; 11 | 12 | /** 13 | * @author zxc Dec 1, 2016 6:38:04 PM 14 | */ 15 | @SuppressWarnings("restriction") 16 | @Service 17 | public class MonitorSer { 18 | 19 | // List getVisiters();//获取访问人数列表 20 | 21 | // 获取剩余内存百分比 22 | public int getFreeMemory() { 23 | OperatingSystemMXBean osmxb = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class); 24 | long totalVirtualMemory = osmxb.getTotalPhysicalMemorySize(); 25 | long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize(); 26 | Double compare = (freePhysicalMemorySize * 1.0 / totalVirtualMemory) * 100; 27 | return compare.intValue(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/persistence/service/ProjectSer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.persistence.service; 5 | 6 | import java.sql.Timestamp; 7 | import java.util.List; 8 | 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.cache.annotation.CacheEvict; 11 | import org.springframework.cache.annotation.Cacheable; 12 | import org.springframework.cache.annotation.Caching; 13 | import org.springframework.stereotype.Service; 14 | import org.springframework.transaction.annotation.Isolation; 15 | import org.springframework.transaction.annotation.Transactional; 16 | 17 | import com.msun.luckyBlog.persistence.domain.Project; 18 | import com.msun.luckyBlog.persistence.mapper.ProjectMapper; 19 | 20 | /** 21 | * @author zxc Dec 1, 2016 6:38:11 PM 22 | */ 23 | @Service 24 | public class ProjectSer { 25 | 26 | @Autowired 27 | private ProjectMapper projectMapper; 28 | 29 | // 前端project页面获取项目列表 30 | @Cacheable(value = "projects", condition = "#page==1", key = "1") 31 | public List getPros(int page) { 32 | int start = (page - 1) * 5; 33 | return projectMapper.select(start); 34 | } 35 | 36 | // 后台管理添加项目 37 | @Caching(evict = { @CacheEvict(value = "projects", key = "1"), @CacheEvict(value = "projectPageNum", key = "1") }) 38 | @Transactional(isolation = Isolation.READ_COMMITTED) 39 | public void addPro(Project project) { 40 | Timestamp timestamp = new Timestamp(System.currentTimeMillis()); 41 | project.setDate(timestamp); 42 | projectMapper.insert(project); 43 | } 44 | 45 | // 后台管理中获取项目列表 46 | public List adminGetPros(int page) { 47 | int start = (page - 1) * 10; 48 | return projectMapper.adminSelect(start); 49 | } 50 | 51 | // 后台管理中获取项目页面总数量 52 | public int adminGetPageNum() { 53 | int count = projectMapper.count(); 54 | return count % 10 == 0 ? count / 10 : count / 10 + 1; 55 | } 56 | 57 | // 后台管理删除项目 58 | @Caching(evict = { @CacheEvict(value = "projects", key = "1"), @CacheEvict(value = "projectPageNum", key = "1") }) 59 | public void deletePro(int id) { 60 | projectMapper.delete(id); 61 | } 62 | 63 | // 后台管理获取项目所有信息 64 | public Project getProById(String idStr) { 65 | int id = Integer.valueOf(idStr); 66 | return projectMapper.selectById(id); 67 | } 68 | 69 | // 后台管理更新博客信息 70 | @CacheEvict(value = "projects", key = "1") 71 | public void updatePro(Project project) { 72 | projectMapper.Update(project); 73 | } 74 | 75 | // 前端获取项目页面总数 76 | @Cacheable(value = "projectPageNum", key = "1") 77 | public int getPageNum() { 78 | int count = projectMapper.count(); 79 | return count % 5 == 0 ? count / 5 : count / 5 + 1; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/support/MSUNUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.support; 5 | 6 | import java.text.SimpleDateFormat; 7 | import java.util.Calendar; 8 | import java.util.Date; 9 | import java.util.Locale; 10 | 11 | /** 12 | * @author zxc Dec 1, 2016 5:45:25 PM 13 | */ 14 | public class MSUNUtils { 15 | 16 | private static final Calendar CALENDAR = Calendar.getInstance(); 17 | 18 | /** 19 | * 获取当前月往前数前两个月的月份 20 | */ 21 | public static String last2Month() { 22 | Date date = new Date();// 当前日期 23 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 格式化对象 24 | CALENDAR.setTime(date);// 设置当前日期 25 | CALENDAR.add(Calendar.MONTH, -2); 26 | return sdf.format(CALENDAR.getTime()); 27 | } 28 | 29 | /** 30 | * 返回年份 31 | * 32 | * @param date 日期 33 | * @return 返回年份 34 | */ 35 | public static int getYear(Date date) { 36 | CALENDAR.setTime(date); 37 | return CALENDAR.get(Calendar.YEAR); 38 | } 39 | 40 | public static String getEdate(Date date) { 41 | SimpleDateFormat df = new SimpleDateFormat("MMM dd", Locale.UK); 42 | df.setTimeZone(new java.util.SimpleTimeZone(0, "GMT")); 43 | return df.format(date); 44 | } 45 | 46 | public static String getYearMonthOfNow() { 47 | CALENDAR.setTime(new Date()); 48 | int year = CALENDAR.get(Calendar.YEAR); 49 | int month = CALENDAR.get(Calendar.MONTH); 50 | return year + "" + month; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/support/WebMvcConf.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.support; 5 | 6 | import java.util.Arrays; 7 | 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.beans.factory.annotation.Value; 10 | import org.springframework.context.annotation.Bean; 11 | import org.springframework.context.annotation.Configuration; 12 | import org.springframework.web.cors.CorsConfiguration; 13 | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; 14 | import org.springframework.web.filter.CorsFilter; 15 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 16 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 17 | 18 | import com.msun.luckyBlog.persistence.domain.SystemSetting; 19 | import com.msun.luckyBlog.support.interceptor.UserSecurityInterceptor; 20 | 21 | /** 22 | * web页面配置类,拦截器地址在此注册 23 | * 24 | * @author zxc Dec 1, 2016 6:39:26 PM 25 | */ 26 | @Configuration 27 | public class WebMvcConf extends WebMvcConfigurerAdapter { 28 | 29 | @Value("${pic.home}") 30 | private String picHome; 31 | 32 | @Autowired 33 | private UserSecurityInterceptor securityInterceptor; 34 | 35 | @Override 36 | public void addInterceptors(InterceptorRegistry registry) { 37 | registry.addInterceptor(securityInterceptor).addPathPatterns("/admin/**");// 配置登录拦截器拦截路径 38 | } 39 | 40 | @Bean 41 | public CorsFilter corsFilter() { 42 | UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 43 | CorsConfiguration configuration = new CorsConfiguration(); 44 | configuration.setAllowCredentials(true); 45 | configuration.addAllowedOrigin("*"); 46 | configuration.addAllowedHeader("*"); 47 | configuration.setAllowedMethods(Arrays.asList("GET", "PUT", "POST", "DELETE")); 48 | source.registerCorsConfiguration("/**", configuration); 49 | return new CorsFilter(source); 50 | } 51 | 52 | @Bean 53 | public SystemSetting systemSetting() { 54 | return new SystemSetting(picHome); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/support/exception/CtrlExceptionHandler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.support.exception; 5 | 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.http.HttpStatus; 9 | import org.springframework.web.bind.annotation.ControllerAdvice; 10 | import org.springframework.web.bind.annotation.ExceptionHandler; 11 | import org.springframework.web.bind.annotation.ResponseStatus; 12 | import org.springframework.web.servlet.ModelAndView; 13 | 14 | /** 15 | * 全局异常处理类 16 | * 17 | * @author zxc Dec 1, 2016 6:38:25 PM 18 | */ 19 | @ControllerAdvice 20 | public class CtrlExceptionHandler { 21 | 22 | static final Logger log = LoggerFactory.getLogger(CtrlExceptionHandler.class); 23 | 24 | @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) 25 | @ExceptionHandler(Exception.class) 26 | public ModelAndView handleIOException(Exception e) { 27 | log.info(e.getLocalizedMessage()); 28 | return new ModelAndView("/error"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/msun/luckyBlog/support/interceptor/UserSecurityInterceptor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog.support.interceptor; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | import javax.servlet.http.HttpServletResponse; 8 | 9 | import org.springframework.stereotype.Component; 10 | import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 11 | 12 | import com.msun.luckyBlog.persistence.domain.Info; 13 | 14 | /** 15 | * 用户登录后台管理的拦截器 存在该用户session则允许通过,否则返回登录页面 16 | * 17 | * @author zxc Dec 1, 2016 6:38:46 PM 18 | */ 19 | @Component 20 | public class UserSecurityInterceptor extends HandlerInterceptorAdapter { 21 | 22 | @Override 23 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 24 | Object obj = request.getSession().getAttribute("cur_user"); 25 | if (obj == null || !(obj instanceof Info)) { 26 | response.sendRedirect(request.getContextPath() + "/login"); 27 | return false; 28 | } 29 | return true; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=80 2 | server.session.timeout=30 3 | spring.main.show-banner=false 4 | application.message: Hello, zxc! 5 | 6 | server.compression.min-response-size: 512 7 | server.compression.enabled: true 8 | server.compression.mime-types: text/html,text/css,text/javascript,application/javascript,image/gif,image/png,image/jpg 9 | 10 | server.undertow.io-threads: 4 11 | server.undertow.worker-threads: 10 12 | server.undertow.buffer-size: 16384 13 | server.undertow.accesslog.enabled: true 14 | server.undertow.accesslog.dir: /data/blog/log/server_log 15 | server.undertow.accesslog.pattern: combined 16 | 17 | spring.mvc.locale=zh_CN 18 | spring.mvc.date-format=EEE, MMM d, yyyy hh:mm:ss a z 19 | 20 | spring.velocity.cache: true 21 | spring.velocity.charset: UTF-8 22 | spring.velocity.view-names: error,error500,index,projects,tags,tagView,archives,post,about,login,admin/blog_add,admin/project,admin/monitor,admin/blog_modify,admin/blog_list,admin/info,admin/result,admin/resume 23 | spring.velocity.properties.input.encoding: UTF-8 24 | spring.velocity.properties.output.encoding: UTF-8 25 | spring.velocity.properties.velocimacro.library: VM_global_library.vm 26 | spring.velocity.properties.directive.parse.max.depth: 2 27 | 28 | spring.http.encoding.charset: UTF-8 29 | spring.http.encoding.force: false 30 | spring.http.multipart.max-file-size: 3MB 31 | spring.http.multipart.max-request-size: 10MB 32 | 33 | spring.cache.cache-names: ehcache 34 | spring.cache.ehcache.config: ehcache.xml 35 | 36 | spring.datasource.type: com.alibaba.druid.pool.DruidDataSource 37 | spring.datasource.driverClassName: com.mysql.jdbc.Driver 38 | spring.datasource.url: jdbc:mysql://192.168.180.154:3306/test?useUnicode:true&characterEncoding:UTF-8 39 | spring.datasource.username: root 40 | spring.datasource.password: 123456 41 | spring.datasource.schema: classpath:import.sql 42 | spring.datasource.data: classpath:data.sql 43 | spring.datasource.initialize: false 44 | spring.datasource.sql-script-encoding: UTF-8 45 | spring.datasource.initialSize=1 46 | spring.datasource.minIdle=1 47 | spring.datasource.maxActive=20 48 | spring.datasource.maxWait=60000 49 | spring.datasource.timeBetweenEvictionRunsMillis=60000 50 | spring.datasource.filters=stat,wall 51 | 52 | mybatis.type-aliases-package: com.msun.luckyBlog.persistence.domain,com.msun.luckyBlog.persistence.mapper 53 | mybatis.type-handlers-package: org.apache.ibatis.type.LocalDateTypeHandler 54 | mybatis.config-location: classpath:mybatis-config.xml 55 | 56 | pic.home: /data -------------------------------------------------------------------------------- /src/main/resources/ehcache.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 23 | 32 | 33 | 36 | 39 | 42 | 45 | 48 | 51 | 54 | -------------------------------------------------------------------------------- /src/main/resources/import.sql: -------------------------------------------------------------------------------- 1 | /*!40101 SET NAMES utf8 */; 2 | 3 | /*!40101 SET SQL_MODE=''*/; 4 | 5 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 6 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 7 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 8 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 9 | CREATE DATABASE IF NOT EXISTS `test` /*!40100 DEFAULT CHARACTER SET utf8 */; 10 | 11 | USE `test`; 12 | 13 | /*Table structure for table `admin` */ 14 | 15 | DROP TABLE IF EXISTS `admin`; 16 | 17 | CREATE TABLE `admin` ( 18 | `username` varchar(50) NOT NULL, 19 | `password` varchar(50) NOT NULL, 20 | `email` varchar(64) DEFAULT '#', 21 | `github` varchar(64) NOT NULL DEFAULT '#', 22 | `twitter` varchar(64) NOT NULL DEFAULT '#', 23 | `md` text, 24 | `resume` text, 25 | `avatar` varchar(80) NOT NULL DEFAULT '/img/avatar.jpg', 26 | PRIMARY KEY (`username`) 27 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 28 | 29 | /*Table structure for table `blog_view` */ 30 | 31 | DROP TABLE IF EXISTS `blog_view`; 32 | 33 | CREATE TABLE `blog_view` ( 34 | `vid` int(11) NOT NULL AUTO_INCREMENT, 35 | `date` date NOT NULL, 36 | `title` varchar(50) NOT NULL, 37 | `article` text NOT NULL, 38 | `tags` varchar(80) NOT NULL, 39 | `md` text NOT NULL, 40 | PRIMARY KEY (`vid`) 41 | ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8; 42 | 43 | /*Table structure for table `project` */ 44 | 45 | DROP TABLE IF EXISTS `project`; 46 | 47 | CREATE TABLE `project` ( 48 | `id` int(11) NOT NULL AUTO_INCREMENT, 49 | `name` varchar(60) NOT NULL, 50 | `url` varchar(60) NOT NULL DEFAULT '#', 51 | `tech` varchar(250) NOT NULL, 52 | `desp` text NOT NULL, 53 | `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 54 | PRIMARY KEY (`id`) 55 | ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 56 | 57 | 58 | /*Table structure for table `view_tag` */ 59 | 60 | DROP TABLE IF EXISTS `view_tag`; 61 | 62 | CREATE TABLE `view_tag` ( 63 | `name` varchar(40) NOT NULL, 64 | `vid` int(11) NOT NULL DEFAULT '0', 65 | PRIMARY KEY (`name`,`vid`), 66 | KEY `fk_vid` (`vid`), 67 | CONSTRAINT `fk_vid` FOREIGN KEY (`vid`) REFERENCES `blog_view` (`vid`) ON DELETE CASCADE ON UPDATE CASCADE 68 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 69 | 70 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 71 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 72 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 73 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=DEBUG,stdout,all 2 | 3 | ### direct log messages to stdout ### 4 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 | log4j.appender.stdout.Target=System.out 6 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}:%L - %m%n 8 | 9 | log4j.appender.all=org.apache.log4j.DailyRollingFileAppender 10 | log4j.appender.all.File=logs/luckyBlog/all.log 11 | log4j.appender.all.layout=org.apache.log4j.PatternLayout 12 | log4j.appender.all.Append=true 13 | log4j.appender.all.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}:%L - %m%n 14 | 15 | log4j.logger.ERROR_LOG = error, ERROR_LOG 16 | log4j.appender.ERROR_LOG=org.apache.log4j.DailyRollingFileAppender 17 | log4j.appender.ERROR_LOG.File=logs/luckyBlog/error.log 18 | log4j.appender.ERROR_LOG.layout=org.apache.log4j.PatternLayout 19 | log4j.appender.ERROR_LOG.Append=true 20 | log4j.appender.ERROR_LOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}:%L - %m%n -------------------------------------------------------------------------------- /src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/resources/static/css/bootstrap-tagsinput.min.css: -------------------------------------------------------------------------------- 1 | .bootstrap-tagsinput{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);display:inline-block;padding:4px 6px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;cursor:text}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.bootstrap-tagsinput.form-control input::-moz-placeholder{color:#777;opacity:1}.bootstrap-tagsinput.form-control input:-ms-input-placeholder{color:#777}.bootstrap-tagsinput.form-control input::-webkit-input-placeholder{color:#777}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)} -------------------------------------------------------------------------------- /src/main/resources/static/css/result-page.min.css: -------------------------------------------------------------------------------- 1 | *{line-height:1.2;margin:0}html{color:#888;display:table;font-family:sans-serif;height:100%;text-align:center;width:100%}body{display:table-cell;vertical-align:middle;margin:2em auto}h1{color:#555;font-size:2em;font-weight:400}h1.fail{color:#f00f0f}h1.success{color:#5cb85c}p{margin:0 auto;width:500px}p.fail{color:#f00f0f}p.errorInfo{font-size:1.5em;color:#7f2f43}p.success{color:#5cb85c}@media only screen and (max-width:280px){body,p{width:95%}h1{font-size:1.5em;margin:0 0 .3em}} -------------------------------------------------------------------------------- /src/main/resources/static/css/sb-admin.min.css: -------------------------------------------------------------------------------- 1 | body{margin-top:50px}.navbar{background-color:#373e4a}#wrapper{padding-left:0}#page-wrapper{width:100%;padding:5px 15px}.messages-dropdown .dropdown-menu .message-preview .avatar,.messages-dropdown .dropdown-menu .message-preview .name,.messages-dropdown .dropdown-menu .message-preview .message,.messages-dropdown .dropdown-menu .message-preview .time{display:block}.messages-dropdown .dropdown-menu .message-preview .avatar{float:left;margin-right:15px}.messages-dropdown .dropdown-menu .message-preview .name{font-weight:bold}.messages-dropdown .dropdown-menu .message-preview .message{font-size:12px}.messages-dropdown .dropdown-menu .message-preview .time{font-size:12px}.announcement-heading{font-size:50px;margin:0}.announcement-text{margin:0}table.tablesorter thead{cursor:pointer}table.tablesorter thead tr th:hover{background-color:#f5f5f5}.flot-chart{display:block;height:400px}.flot-chart-content{width:100%;height:100%}@media(min-width:768px){#wrapper{padding-left:225px}#page-wrapper{padding:15px 25px}.side-nav{margin-left:-225px;left:225px;width:225px;position:fixed;top:50px;height:100%;border-radius:0;border:0;background-color:#373e4a;overflow-y:auto}.side-nav>li.dropdown>ul.dropdown-menu{position:relative;min-width:225px;margin:0;padding:0;border:0;border-radius:0;background-color:transparent;box-shadow:none;-webkit-box-shadow:none}.side-nav>li.dropdown>ul.dropdown-menu>li>a{color:#999;padding:15px 15px 15px 25px}.side-nav>li.dropdown>ul.dropdown-menu>li>a:hover,.side-nav>li.dropdown>ul.dropdown-menu>li>a.active,.side-nav>li.dropdown>ul.dropdown-menu>li>a:focus{color:#fff;background-color:#373e4a}.side-nav>li>a{width:225px}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{background-color:#373e4a}.messages-dropdown .dropdown-menu{min-width:300px}.messages-dropdown .dropdown-menu li a{white-space:normal}}.login-avatar{width:120px;height:120px;border-radius:120px;border:5px solid #fff;box-shadow:0 0 10px #000;background:url(../img/avatar.jpg) no-repeat center center;margin-left:auto;margin-right:auto} -------------------------------------------------------------------------------- /src/main/resources/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/img/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/avatar.jpg -------------------------------------------------------------------------------- /src/main/resources/static/img/dog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/dog.png -------------------------------------------------------------------------------- /src/main/resources/static/img/intro-bg-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/intro-bg-dark.jpg -------------------------------------------------------------------------------- /src/main/resources/static/img/intro-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/intro-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/img/ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/ipad.png -------------------------------------------------------------------------------- /src/main/resources/static/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/img/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/loading@2x.gif -------------------------------------------------------------------------------- /src/main/resources/static/img/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/loading@3x.gif -------------------------------------------------------------------------------- /src/main/resources/static/img/phones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/img/phones.png -------------------------------------------------------------------------------- /src/main/resources/static/js/CodeMirror.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MSUNorg/luckyBlog/4e2888b44cdc4b952033a162f2bda1a19e6d241d/src/main/resources/static/js/CodeMirror.js -------------------------------------------------------------------------------- /src/main/resources/static/js/front-end.min.js: -------------------------------------------------------------------------------- 1 | function switch_theme_others(){var a,b,c;"dark"==localStorage.blog_theme&&(a=document.getElementById("md-container"),null!=a&&(a.className="editormd-preview editormd-preview-theme-dark"),b=document.getElementById("day-night"),c=document.getElementById("day-night-name"),b.className="fa fa-sun-o",c.textContent="DAY")}function day_night(){var a=document.getElementById("day-night"),b=document.getElementById("md-container"),c=document.getElementById("day-night-name"),d=document.getElementById("theme-css");"fa fa-sun-o"==a.className?(a.className="fa fa-moon-o",c.textContent="NIGHT",d.href="/css/landing-page.min.css",null!=b&&(b.className="editormd-preview"),localStorage.blog_theme="light"):(a.className="fa fa-sun-o",c.textContent="DAY",d.href="/css/landing-page-dark.min.css",null!=b&&(b.className="editormd-preview editormd-preview-theme-dark"),localStorage.blog_theme="dark")}$(document).ready(function(){switch_theme_others();var a=$("#blog_content").offset().top;$("html,body").animate({scrollTop:a},1e3)}); -------------------------------------------------------------------------------- /src/main/resources/static/js/jcala-form.min.js: -------------------------------------------------------------------------------- 1 | $(function(){function a(a){$.getJSON("/admin/pro.json?id="+a,function(a){bootbox.dialog({title:"Update Project",message:'
'+'
'+' '+'
'+' '+"
"+'
'+' '+'
'+' '+"
"+'
'+' '+'
'+'
"+'
'+' '+'
'+'
"+"
",buttons:{success:{label:"Update",className:"btn-success",callback:function(){var a=document.getElementById("add_pro_form");a.action="/admin/updPro.action",a.method="post",a.submit()}}}})})}$("#info_update").bind("click",function(){var a=document.forms[0];a.action="/admin/info.action",a.method="post",a.submit()}),$("#update_pass").bind("click",function(){var d,a=document.newPassForm.old_pass_bef.value,b=document.newPassForm.new_pass_one.value,c=document.newPassForm.new_pass_two.value;b!=c?alert("Two passwords are not consistent!"):(d=document.forms[1],d.action="/admin/pass.action",d.method="post",document.newPassForm.old_pass.value=md5(a),document.newPassForm.new_pass.value=md5(b),d.submit())}),$("#login-admin").bind("click",function(){var b,a=document.forms[0];a.action="/login.action",b=document.loginForm.passBefore.value,document.loginForm.password.value=md5(b),a.method="post",a.submit()}),$(document).on("click","#add_project",function(){bootbox.dialog({title:"New Project",message:'
',buttons:{success:{label:"Save",className:"btn-success",callback:function(){var a=document.getElementById("add_pro_form");a.action="/admin/addPro.action",a.method="post",a.submit()}}}})}),$(".upd_project").click(function(){var b=$(this).attr("name");a(b)})}); -------------------------------------------------------------------------------- /src/main/resources/static/js/jcala-md-form.min.js: -------------------------------------------------------------------------------- 1 | var mdEditor;$(function(){function a(a,b,c,d){var f,g,h,i,e=$("#"+a);for(localStorage[c]=b[0],f=0,g=b.length;g>f;f++)h=b[f],i=localStorage[c]==h?'selected="selected"':"",e.append('");return e.bind("change",function(){var a=$(this).val();return""===a?!1:(console.log("lsKey =>",c,a),localStorage[c]=a,d(e,a),void 0)}),e}mdEditor=editormd("markdown-editor",{width:"100%",height:900,syncScrolling:"single",path:"../lib/",imageUpload:!0,imageFormats:["jpg","jpeg","gif","png","bmp","webp"],imageUploadURL:"/admin/file/uplPic.action",saveHTMLToTextarea:!0}),a("editormd-theme-select",editormd.themes,"theme",function(a,b){mdEditor.setTheme(b)}),a("editor-area-theme-select",editormd.editorThemes,"editorTheme",function(a,b){mdEditor.setCodeMirrorTheme(b)}),a("preview-area-theme-select",editormd.previewThemes,"previewTheme",function(a,b){mdEditor.setPreviewTheme(b)}),$("#add-blog").bind("click",function(){var a=document.forms[0];a.action="/admin/post.action",a.method="post",document.blogForm.article.value=$(".markdown-body")[0].innerHTML,document.blogForm.md.value=mdEditor.getMarkdown(),a.submit()}),$("#update-blog").bind("click",function(){var a=document.forms[0];a.action="/admin/update.action",a.method="post",document.blogForm.article.value=$(".markdown-body")[0].innerHTML,document.blogForm.md.value=mdEditor.getMarkdown(),a.submit()}),$("#update-resume").bind("click",function(){var a=document.forms[0];a.action="/admin/resume.action",a.method="post",document.resumeForm.resume.value=$(".markdown-body")[0].innerHTML,document.resumeForm.md.value=mdEditor.getMarkdown(),a.submit()})}); -------------------------------------------------------------------------------- /src/main/resources/static/js/jquery.bootstrap-growl.min.js: -------------------------------------------------------------------------------- 1 | (function(){var c;c=jQuery;c.bootstrapGrowl=function(f,a){var b,e,d;a=c.extend({},c.bootstrapGrowl.default_options,a);b=c("
");b.attr("class","bootstrap-growl alert");a.type&&b.addClass("alert-"+a.type);a.allow_dismiss&&(b.addClass("alert-dismissible"),b.append(''));b.append(f);a.top_offset&&(a.offset={from:"top",amount:a.top_offset});d=a.offset.amount;c(".bootstrap-growl").each(function(){return d= Math.max(d,parseInt(c(this).css(a.offset.from))+c(this).outerHeight()+a.stackup_spacing)});e={position:"body"===a.ele?"fixed":"absolute",margin:0,"z-index":"9999",display:"none"};e[a.offset.from]=d+"px";b.css(e);"auto"!==a.width&&b.css("width",a.width+"px");c(a.ele).append(b);switch(a.align){case "center":b.css({left:"50%","margin-left":"-"+b.outerWidth()/2+"px"});break;case "left":b.css("left","20px");break;default:b.css("right","20px")}b.fadeIn();00){return}var j={};if(f.button){var b={title:"title",text:"text","confirm-button":"confirmButton","submit-form":"submitForm","cancel-button":"cancelButton","confirm-button-class":"confirmButtonClass","cancel-button-class":"cancelButtonClass","dialog-class":"dialogClass"};a.each(b,function(e,k){var l=f.button.data(e);if(l){j[k]=l}})}var g=a.extend({},a.confirm.options,{confirm:function(){if(j.submitForm){i.target.closest("form").submit()}else{var e=i&&(("string"===typeof i&&i)||(i.currentTarget&&i.currentTarget.attributes.href.value));if(e){if(f.post){var k=a('
');a("body").append(k);k.submit()}else{window.location=e}}}},cancel:function(e){},button:null},j,f);var c="";if(g.title!==""){c='"}var d='";var h=a(d);h.on("shown.bs.modal",function(){h.find(".btn-primary:first").focus()});h.on("hidden.bs.modal",function(){h.remove()});h.find(".confirm").click(function(){g.confirm(g.button)});h.find(".cancel").click(function(){g.cancel(g.button)});a("body").append(h);h.modal("show")};a.confirm.options={text:"Are you sure?",title:"",confirmButton:"Yes",cancelButton:"Cancel",post:false,submitForm:false,confirmButtonClass:"btn-primary",cancelButtonClass:"btn-default",dialogClass:"modal-dialog"}})(jQuery); -------------------------------------------------------------------------------- /src/main/resources/static/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/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/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/lib/codemirror/addon/display/placeholder.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("placeholder", "", function(cm, val, old) { 13 | var prev = old && old != CodeMirror.Init; 14 | if (val && !prev) { 15 | cm.on("blur", onBlur); 16 | cm.on("change", onChange); 17 | onChange(cm); 18 | } else if (!val && prev) { 19 | cm.off("blur", onBlur); 20 | cm.off("change", onChange); 21 | clearPlaceholder(cm); 22 | var wrapper = cm.getWrapperElement(); 23 | wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); 24 | } 25 | 26 | if (val && !cm.hasFocus()) onBlur(cm); 27 | }); 28 | 29 | function clearPlaceholder(cm) { 30 | if (cm.state.placeholder) { 31 | cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); 32 | cm.state.placeholder = null; 33 | } 34 | } 35 | function setPlaceholder(cm) { 36 | clearPlaceholder(cm); 37 | var elt = cm.state.placeholder = document.createElement("pre"); 38 | elt.style.cssText = "height: 0; overflow: visible"; 39 | elt.className = "CodeMirror-placeholder"; 40 | elt.appendChild(document.createTextNode(cm.getOption("placeholder"))); 41 | cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); 42 | } 43 | 44 | function onBlur(cm) { 45 | if (isEmpty(cm)) setPlaceholder(cm); 46 | } 47 | function onChange(cm) { 48 | var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); 49 | wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); 50 | 51 | if (empty) setPlaceholder(cm); 52 | else clearPlaceholder(cm); 53 | } 54 | 55 | function isEmpty(cm) { 56 | return (cm.lineCount() === 1) && (cm.getLine(0) === ""); 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/display/rulers.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("rulers", false, function(cm, val, old) { 15 | if (old && old != CodeMirror.Init) { 16 | clearRulers(cm); 17 | cm.off("refresh", refreshRulers); 18 | } 19 | if (val && val.length) { 20 | setRulers(cm); 21 | cm.on("refresh", refreshRulers); 22 | } 23 | }); 24 | 25 | function clearRulers(cm) { 26 | for (var i = cm.display.lineSpace.childNodes.length - 1; i >= 0; i--) { 27 | var node = cm.display.lineSpace.childNodes[i]; 28 | if (/(^|\s)CodeMirror-ruler($|\s)/.test(node.className)) 29 | node.parentNode.removeChild(node); 30 | } 31 | } 32 | 33 | function setRulers(cm) { 34 | var val = cm.getOption("rulers"); 35 | var cw = cm.defaultCharWidth(); 36 | var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), "div").left; 37 | var minH = cm.display.scroller.offsetHeight + 30; 38 | for (var i = 0; i < val.length; i++) { 39 | var elt = document.createElement("div"); 40 | elt.className = "CodeMirror-ruler"; 41 | var col, cls = null, conf = val[i]; 42 | if (typeof conf == "number") { 43 | col = conf; 44 | } else { 45 | col = conf.column; 46 | if (conf.className) elt.className += " " + conf.className; 47 | if (conf.color) elt.style.borderColor = conf.color; 48 | if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle; 49 | if (conf.width) elt.style.borderLeftWidth = conf.width; 50 | cls = val[i].className; 51 | } 52 | elt.style.left = (left + col * cw) + "px"; 53 | elt.style.top = "-50px"; 54 | elt.style.bottom = "-20px"; 55 | elt.style.minHeight = minH + "px"; 56 | cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv); 57 | } 58 | } 59 | 60 | function refreshRulers(cm) { 61 | clearRulers(cm); 62 | setRulers(cm); 63 | } 64 | }); 65 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/edit/continuelist.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\s*)/, 15 | emptyListRE = /^(\s*)(>[> ]*|[*+-]|(\d+)\.)(\s*)$/, 16 | unorderedListRE = /[*+-]\s/; 17 | 18 | CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { 19 | if (cm.getOption("disableInput")) return CodeMirror.Pass; 20 | var ranges = cm.listSelections(), replacements = []; 21 | for (var i = 0; i < ranges.length; i++) { 22 | var pos = ranges[i].head, match; 23 | var eolState = cm.getStateAfter(pos.line); 24 | var inList = eolState.list !== false; 25 | var inQuote = eolState.quote !== false; 26 | 27 | if (!ranges[i].empty() || (!inList && !inQuote) || !(match = cm.getLine(pos.line).match(listRE))) { 28 | cm.execCommand("newlineAndIndent"); 29 | return; 30 | } 31 | if (cm.getLine(pos.line).match(emptyListRE)) { 32 | cm.replaceRange("", { 33 | line: pos.line, ch: 0 34 | }, { 35 | line: pos.line, ch: pos.ch + 1 36 | }); 37 | replacements[i] = "\n"; 38 | 39 | } else { 40 | var indent = match[1], after = match[4]; 41 | var bullet = unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0 42 | ? match[2] 43 | : (parseInt(match[3], 10) + 1) + "."; 44 | 45 | replacements[i] = "\n" + indent + bullet + after; 46 | } 47 | } 48 | 49 | cm.replaceSelections(replacements); 50 | }; 51 | }); 52 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/edit/matchtags.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("../fold/xml-fold")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../fold/xml-fold"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineOption("matchTags", false, function(cm, val, old) { 15 | if (old && old != CodeMirror.Init) { 16 | cm.off("cursorActivity", doMatchTags); 17 | cm.off("viewportChange", maybeUpdateMatch); 18 | clear(cm); 19 | } 20 | if (val) { 21 | cm.state.matchBothTags = typeof val == "object" && val.bothTags; 22 | cm.on("cursorActivity", doMatchTags); 23 | cm.on("viewportChange", maybeUpdateMatch); 24 | doMatchTags(cm); 25 | } 26 | }); 27 | 28 | function clear(cm) { 29 | if (cm.state.tagHit) cm.state.tagHit.clear(); 30 | if (cm.state.tagOther) cm.state.tagOther.clear(); 31 | cm.state.tagHit = cm.state.tagOther = null; 32 | } 33 | 34 | function doMatchTags(cm) { 35 | cm.state.failedTagMatch = false; 36 | cm.operation(function() { 37 | clear(cm); 38 | if (cm.somethingSelected()) return; 39 | var cur = cm.getCursor(), range = cm.getViewport(); 40 | range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to); 41 | var match = CodeMirror.findMatchingTag(cm, cur, range); 42 | if (!match) return; 43 | if (cm.state.matchBothTags) { 44 | var hit = match.at == "open" ? match.open : match.close; 45 | if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"}); 46 | } 47 | var other = match.at == "close" ? match.open : match.close; 48 | if (other) 49 | cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"}); 50 | else 51 | cm.state.failedTagMatch = true; 52 | }); 53 | } 54 | 55 | function maybeUpdateMatch(cm) { 56 | if (cm.state.failedTagMatch) doMatchTags(cm); 57 | } 58 | 59 | CodeMirror.commands.toMatchingTag = function(cm) { 60 | var found = CodeMirror.findMatchingTag(cm, cm.getCursor()); 61 | if (found) { 62 | var other = found.at == "close" ? found.open : found.close; 63 | if (other) cm.extendSelection(other.to, other.from); 64 | } 65 | }; 66 | }); 67 | -------------------------------------------------------------------------------- /src/main/resources/static/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/lib/codemirror/addon/fold/comment-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.registerGlobalHelper("fold", "comment", function(mode) { 15 | return mode.blockCommentStart && mode.blockCommentEnd; 16 | }, function(cm, start) { 17 | var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; 18 | if (!startToken || !endToken) return; 19 | var line = start.line, lineText = cm.getLine(line); 20 | 21 | var startCh; 22 | for (var at = start.ch, pass = 0;;) { 23 | var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); 24 | if (found == -1) { 25 | if (pass == 1) return; 26 | pass = 1; 27 | at = lineText.length; 28 | continue; 29 | } 30 | if (pass == 1 && found < start.ch) return; 31 | if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) { 32 | startCh = found + startToken.length; 33 | break; 34 | } 35 | at = found - 1; 36 | } 37 | 38 | var depth = 1, lastLine = cm.lastLine(), end, endCh; 39 | outer: for (var i = line; i <= lastLine; ++i) { 40 | var text = cm.getLine(i), pos = i == line ? startCh : 0; 41 | for (;;) { 42 | var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); 43 | if (nextOpen < 0) nextOpen = text.length; 44 | if (nextClose < 0) nextClose = text.length; 45 | pos = Math.min(nextOpen, nextClose); 46 | if (pos == text.length) break; 47 | if (pos == nextOpen) ++depth; 48 | else if (!--depth) { end = i; endCh = pos; break outer; } 49 | ++pos; 50 | } 51 | } 52 | if (end == null || line == end && endCh == startCh) return; 53 | return {from: CodeMirror.Pos(line, startCh), 54 | to: CodeMirror.Pos(end, endCh)}; 55 | }); 56 | 57 | }); 58 | -------------------------------------------------------------------------------- /src/main/resources/static/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/lib/codemirror/addon/fold/indent-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.registerHelper("fold", "indent", function(cm, start) { 15 | var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); 16 | if (!/\S/.test(firstLine)) return; 17 | var getIndent = function(line) { 18 | return CodeMirror.countColumn(line, null, tabSize); 19 | }; 20 | var myIndent = getIndent(firstLine); 21 | var lastLineInFold = null; 22 | // Go through lines until we find a line that definitely doesn't belong in 23 | // the block we're folding, or to the end. 24 | for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { 25 | var curLine = cm.getLine(i); 26 | var curIndent = getIndent(curLine); 27 | if (curIndent > myIndent) { 28 | // Lines with a greater indent are considered part of the block. 29 | lastLineInFold = i; 30 | } else if (!/\S/.test(curLine)) { 31 | // Empty lines might be breaks within the block we're trying to fold. 32 | } else { 33 | // A non-empty line at an indent equal to or less than ours marks the 34 | // start of another block. 35 | break; 36 | } 37 | } 38 | if (lastLineInFold) return { 39 | from: CodeMirror.Pos(start.line, firstLine.length), 40 | to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) 41 | }; 42 | }); 43 | 44 | }); 45 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/fold/markdown-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.registerHelper("fold", "markdown", function(cm, start) { 15 | var maxDepth = 100; 16 | 17 | function isHeader(lineNo) { 18 | var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); 19 | return tokentype && /\bheader\b/.test(tokentype); 20 | } 21 | 22 | function headerLevel(lineNo, line, nextLine) { 23 | var match = line && line.match(/^#+/); 24 | if (match && isHeader(lineNo)) return match[0].length; 25 | match = nextLine && nextLine.match(/^[=\-]+\s*$/); 26 | if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; 27 | return maxDepth; 28 | } 29 | 30 | var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); 31 | var level = headerLevel(start.line, firstLine, nextLine); 32 | if (level === maxDepth) return undefined; 33 | 34 | var lastLineNo = cm.lastLine(); 35 | var end = start.line, nextNextLine = cm.getLine(end + 2); 36 | while (end < lastLineNo) { 37 | if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; 38 | ++end; 39 | nextLine = nextNextLine; 40 | nextNextLine = cm.getLine(end + 2); 41 | } 42 | 43 | return { 44 | from: CodeMirror.Pos(start.line, firstLine.length), 45 | to: CodeMirror.Pos(end, cm.getLine(end).length) 46 | }; 47 | }); 48 | 49 | }); 50 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/hint/anyword-hint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var WORD = /[\w$]+/, RANGE = 500; 15 | 16 | CodeMirror.registerHelper("hint", "anyword", function(editor, options) { 17 | var word = options && options.word || WORD; 18 | var range = options && options.range || RANGE; 19 | var cur = editor.getCursor(), curLine = editor.getLine(cur.line); 20 | var end = cur.ch, start = end; 21 | while (start && word.test(curLine.charAt(start - 1))) --start; 22 | var curWord = start != end && curLine.slice(start, end); 23 | 24 | var list = [], seen = {}; 25 | var re = new RegExp(word.source, "g"); 26 | for (var dir = -1; dir <= 1; dir += 2) { 27 | var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; 28 | for (; line != endLine; line += dir) { 29 | var text = editor.getLine(line), m; 30 | while (m = re.exec(text)) { 31 | if (line == cur.line && m[0] === curWord) continue; 32 | if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { 33 | seen[m[0]] = true; 34 | list.push(m[0]); 35 | } 36 | } 37 | } 38 | } 39 | return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/hint/css-hint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("../../mode/css/css")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../../mode/css/css"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var pseudoClasses = {link: 1, visited: 1, active: 1, hover: 1, focus: 1, 15 | "first-letter": 1, "first-line": 1, "first-child": 1, 16 | before: 1, after: 1, lang: 1}; 17 | 18 | CodeMirror.registerHelper("hint", "css", function(cm) { 19 | var cur = cm.getCursor(), token = cm.getTokenAt(cur); 20 | var inner = CodeMirror.innerMode(cm.getMode(), token.state); 21 | if (inner.mode.name != "css") return; 22 | 23 | var start = token.start, end = cur.ch, word = token.string.slice(0, end - start); 24 | if (/[^\w$_-]/.test(word)) { 25 | word = ""; start = end = cur.ch; 26 | } 27 | 28 | var spec = CodeMirror.resolveMode("text/css"); 29 | 30 | var result = []; 31 | function add(keywords) { 32 | for (var name in keywords) 33 | if (!word || name.lastIndexOf(word, 0) == 0) 34 | result.push(name); 35 | } 36 | 37 | var st = inner.state.state; 38 | if (st == "pseudo" || token.type == "variable-3") { 39 | add(pseudoClasses); 40 | } else if (st == "block" || st == "maybeprop") { 41 | add(spec.propertyKeywords); 42 | } else if (st == "prop" || st == "parens" || st == "at" || st == "params") { 43 | add(spec.valueKeywords); 44 | add(spec.colorKeywords); 45 | } else if (st == "media" || st == "media_parens") { 46 | add(spec.mediaTypes); 47 | add(spec.mediaFeatures); 48 | } 49 | 50 | if (result.length) return { 51 | list: result, 52 | from: CodeMirror.Pos(cur.line, start), 53 | to: CodeMirror.Pos(cur.line, end) 54 | }; 55 | }); 56 | }); 57 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/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/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/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/lib/codemirror/addon/mode/loadmode.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"), "cjs"); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); }); 9 | else // Plain browser env 10 | mod(CodeMirror, "plain"); 11 | })(function(CodeMirror, env) { 12 | if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; 13 | 14 | var loading = {}; 15 | function splitCallback(cont, n) { 16 | var countDown = n; 17 | return function() { if (--countDown == 0) cont(); }; 18 | } 19 | function ensureDeps(mode, cont) { 20 | var deps = CodeMirror.modes[mode].dependencies; 21 | if (!deps) return cont(); 22 | var missing = []; 23 | for (var i = 0; i < deps.length; ++i) { 24 | if (!CodeMirror.modes.hasOwnProperty(deps[i])) 25 | missing.push(deps[i]); 26 | } 27 | if (!missing.length) return cont(); 28 | var split = splitCallback(cont, missing.length); 29 | for (var i = 0; i < missing.length; ++i) 30 | CodeMirror.requireMode(missing[i], split); 31 | } 32 | 33 | CodeMirror.requireMode = function(mode, cont) { 34 | if (typeof mode != "string") mode = mode.name; 35 | if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); 36 | if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); 37 | 38 | var file = CodeMirror.modeURL.replace(/%N/g, mode); 39 | if (env == "plain") { 40 | var script = document.createElement("script"); 41 | script.src = file; 42 | var others = document.getElementsByTagName("script")[0]; 43 | var list = loading[mode] = [cont]; 44 | CodeMirror.on(script, "load", function() { 45 | ensureDeps(mode, function() { 46 | for (var i = 0; i < list.length; ++i) list[i](); 47 | }); 48 | }); 49 | others.parentNode.insertBefore(script, others); 50 | } else if (env == "cjs") { 51 | require(file); 52 | cont(); 53 | } else if (env == "amd") { 54 | requirejs([file], cont); 55 | } 56 | }; 57 | 58 | CodeMirror.autoLoadMode = function(instance, mode) { 59 | if (!CodeMirror.modes.hasOwnProperty(mode)) 60 | CodeMirror.requireMode(mode, function() { 61 | instance.setOption("mode", instance.getOption("mode")); 62 | }); 63 | }; 64 | }); 65 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/lib/codemirror/addon/runmode/runmode.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.runMode = function(string, modespec, callback, options) { 15 | var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); 16 | var ie = /MSIE \d/.test(navigator.userAgent); 17 | var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); 18 | 19 | if (callback.nodeType == 1) { 20 | var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; 21 | var node = callback, col = 0; 22 | node.innerHTML = ""; 23 | callback = function(text, style) { 24 | if (text == "\n") { 25 | // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. 26 | // Emitting a carriage return makes everything ok. 27 | node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); 28 | col = 0; 29 | return; 30 | } 31 | var content = ""; 32 | // replace tabs 33 | for (var pos = 0;;) { 34 | var idx = text.indexOf("\t", pos); 35 | if (idx == -1) { 36 | content += text.slice(pos); 37 | col += text.length - pos; 38 | break; 39 | } else { 40 | col += idx - pos; 41 | content += text.slice(pos, idx); 42 | var size = tabSize - col % tabSize; 43 | col += size; 44 | for (var i = 0; i < size; ++i) content += " "; 45 | pos = idx + 1; 46 | } 47 | } 48 | 49 | if (style) { 50 | var sp = node.appendChild(document.createElement("span")); 51 | sp.className = "cm-" + style.replace(/ +/g, " cm-"); 52 | sp.appendChild(document.createTextNode(content)); 53 | } else { 54 | node.appendChild(document.createTextNode(content)); 55 | } 56 | }; 57 | } 58 | 59 | var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); 60 | for (var i = 0, e = lines.length; i < e; ++i) { 61 | if (i) callback("\n"); 62 | var stream = new CodeMirror.StringStream(lines[i]); 63 | if (!stream.string && mode.blankLine) mode.blankLine(state); 64 | while (!stream.eol()) { 65 | var style = mode.token(stream, state); 66 | callback(stream.current(), style, i, stream.start, state); 67 | stream.start = stream.pos; 68 | } 69 | } 70 | }; 71 | 72 | }); 73 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/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/lib/codemirror/addon/selection/active-line.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Because sometimes you need to style the cursor's line. 5 | // 6 | // Adds an option 'styleActiveLine' which, when enabled, gives the 7 | // active line's wrapping
the CSS class "CodeMirror-activeline", 8 | // and gives its background
the class "CodeMirror-activeline-background". 9 | 10 | (function(mod) { 11 | if (typeof exports == "object" && typeof module == "object") // CommonJS 12 | mod(require("../../lib/codemirror")); 13 | else if (typeof define == "function" && define.amd) // AMD 14 | define(["../../lib/codemirror"], mod); 15 | else // Plain browser env 16 | mod(CodeMirror); 17 | })(function(CodeMirror) { 18 | "use strict"; 19 | var WRAP_CLASS = "CodeMirror-activeline"; 20 | var BACK_CLASS = "CodeMirror-activeline-background"; 21 | 22 | CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { 23 | var prev = old && old != CodeMirror.Init; 24 | if (val && !prev) { 25 | cm.state.activeLines = []; 26 | updateActiveLines(cm, cm.listSelections()); 27 | cm.on("beforeSelectionChange", selectionChange); 28 | } else if (!val && prev) { 29 | cm.off("beforeSelectionChange", selectionChange); 30 | clearActiveLines(cm); 31 | delete cm.state.activeLines; 32 | } 33 | }); 34 | 35 | function clearActiveLines(cm) { 36 | for (var i = 0; i < cm.state.activeLines.length; i++) { 37 | cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); 38 | cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); 39 | } 40 | } 41 | 42 | function sameArray(a, b) { 43 | if (a.length != b.length) return false; 44 | for (var i = 0; i < a.length; i++) 45 | if (a[i] != b[i]) return false; 46 | return true; 47 | } 48 | 49 | function updateActiveLines(cm, ranges) { 50 | var active = []; 51 | for (var i = 0; i < ranges.length; i++) { 52 | var range = ranges[i]; 53 | if (!range.empty()) continue; 54 | var line = cm.getLineHandleVisualStart(range.head.line); 55 | if (active[active.length - 1] != line) active.push(line); 56 | } 57 | if (sameArray(cm.state.activeLines, active)) return; 58 | cm.operation(function() { 59 | clearActiveLines(cm); 60 | for (var i = 0; i < active.length; i++) { 61 | cm.addLineClass(active[i], "wrap", WRAP_CLASS); 62 | cm.addLineClass(active[i], "background", BACK_CLASS); 63 | } 64 | cm.state.activeLines = active; 65 | }); 66 | } 67 | 68 | function selectionChange(cm, sel) { 69 | updateActiveLines(cm, sel.ranges); 70 | } 71 | }); 72 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/addon/tern/tern.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-Tern-completion { 2 | padding-left: 22px; 3 | position: relative; 4 | } 5 | .CodeMirror-Tern-completion:before { 6 | position: absolute; 7 | left: 2px; 8 | bottom: 2px; 9 | border-radius: 50%; 10 | font-size: 12px; 11 | font-weight: bold; 12 | height: 15px; 13 | width: 15px; 14 | line-height: 16px; 15 | text-align: center; 16 | color: white; 17 | -moz-box-sizing: border-box; 18 | box-sizing: border-box; 19 | } 20 | .CodeMirror-Tern-completion-unknown:before { 21 | content: "?"; 22 | background: #4bb; 23 | } 24 | .CodeMirror-Tern-completion-object:before { 25 | content: "O"; 26 | background: #77c; 27 | } 28 | .CodeMirror-Tern-completion-fn:before { 29 | content: "F"; 30 | background: #7c7; 31 | } 32 | .CodeMirror-Tern-completion-array:before { 33 | content: "A"; 34 | background: #c66; 35 | } 36 | .CodeMirror-Tern-completion-number:before { 37 | content: "1"; 38 | background: #999; 39 | } 40 | .CodeMirror-Tern-completion-string:before { 41 | content: "S"; 42 | background: #999; 43 | } 44 | .CodeMirror-Tern-completion-bool:before { 45 | content: "B"; 46 | background: #999; 47 | } 48 | 49 | .CodeMirror-Tern-completion-guess { 50 | color: #999; 51 | } 52 | 53 | .CodeMirror-Tern-tooltip { 54 | border: 1px solid silver; 55 | border-radius: 3px; 56 | color: #444; 57 | padding: 2px 5px; 58 | font-size: 90%; 59 | font-family: monospace; 60 | background-color: white; 61 | white-space: pre-wrap; 62 | 63 | max-width: 40em; 64 | position: absolute; 65 | z-index: 10; 66 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 67 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 68 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 69 | 70 | transition: opacity 1s; 71 | -moz-transition: opacity 1s; 72 | -webkit-transition: opacity 1s; 73 | -o-transition: opacity 1s; 74 | -ms-transition: opacity 1s; 75 | } 76 | 77 | .CodeMirror-Tern-hint-doc { 78 | max-width: 25em; 79 | margin-top: -3px; 80 | } 81 | 82 | .CodeMirror-Tern-fname { color: black; } 83 | .CodeMirror-Tern-farg { color: #70a; } 84 | .CodeMirror-Tern-farg-current { text-decoration: underline; } 85 | .CodeMirror-Tern-type { color: #07c; } 86 | .CodeMirror-Tern-fhint-guess { opacity: .7; } 87 | -------------------------------------------------------------------------------- /src/main/resources/static/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/lib/codemirror/mode/dart/dart.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("../clike/clike")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../clike/clike"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var keywords = ("this super static final const abstract class extends external factory " + 15 | "implements get native operator set typedef with enum throw rethrow " + 16 | "assert break case continue default in return new deferred async await " + 17 | "try catch finally do else for if switch while import library export " + 18 | "part of show hide is").split(" "); 19 | var blockKeywords = "try catch finally do else for if switch while".split(" "); 20 | var atoms = "true false null".split(" "); 21 | var builtins = "void bool num int double dynamic var String".split(" "); 22 | 23 | function set(words) { 24 | var obj = {}; 25 | for (var i = 0; i < words.length; ++i) obj[words[i]] = true; 26 | return obj; 27 | } 28 | 29 | CodeMirror.defineMIME("application/dart", { 30 | name: "clike", 31 | keywords: set(keywords), 32 | multiLineStrings: true, 33 | blockKeywords: set(blockKeywords), 34 | builtin: set(builtins), 35 | atoms: set(atoms), 36 | hooks: { 37 | "@": function(stream) { 38 | stream.eatWhile(/[\w\$_]/); 39 | return "meta"; 40 | } 41 | } 42 | }); 43 | 44 | CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); 45 | 46 | // This is needed to make loading through meta.js work. 47 | CodeMirror.defineMode("dart", function(conf) { 48 | return CodeMirror.getMode(conf, "application/dart"); 49 | }, "clike"); 50 | }); 51 | -------------------------------------------------------------------------------- /src/main/resources/static/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/lib/codemirror/mode/django/django.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("../htmlmixed/htmlmixed"), 7 | require("../../addon/mode/overlay")); 8 | else if (typeof define == "function" && define.amd) // AMD 9 | define(["../../lib/codemirror", "../htmlmixed/htmlmixed", 10 | "../../addon/mode/overlay"], mod); 11 | else // Plain browser env 12 | mod(CodeMirror); 13 | })(function(CodeMirror) { 14 | "use strict"; 15 | 16 | CodeMirror.defineMode("django:inner", function() { 17 | var keywords = ["block", "endblock", "for", "endfor", "in", "true", "false", 18 | "loop", "none", "self", "super", "if", "endif", "as", "not", "and", 19 | "else", "import", "with", "endwith", "without", "context", "ifequal", "endifequal", 20 | "ifnotequal", "endifnotequal", "extends", "include", "load", "length", "comment", 21 | "endcomment", "empty"]; 22 | keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); 23 | 24 | function tokenBase (stream, state) { 25 | stream.eatWhile(/[^\{]/); 26 | var ch = stream.next(); 27 | if (ch == "{") { 28 | if (ch = stream.eat(/\{|%|#/)) { 29 | state.tokenize = inTag(ch); 30 | return "tag"; 31 | } 32 | } 33 | } 34 | function inTag (close) { 35 | if (close == "{") { 36 | close = "}"; 37 | } 38 | return function (stream, state) { 39 | var ch = stream.next(); 40 | if ((ch == close) && stream.eat("}")) { 41 | state.tokenize = tokenBase; 42 | return "tag"; 43 | } 44 | if (stream.match(keywords)) { 45 | return "keyword"; 46 | } 47 | return close == "#" ? "comment" : "string"; 48 | }; 49 | } 50 | return { 51 | startState: function () { 52 | return {tokenize: tokenBase}; 53 | }, 54 | token: function (stream, state) { 55 | return state.tokenize(stream, state); 56 | } 57 | }; 58 | }); 59 | 60 | CodeMirror.defineMode("django", function(config) { 61 | var htmlBase = CodeMirror.getMode(config, "text/html"); 62 | var djangoInner = CodeMirror.getMode(config, "django:inner"); 63 | return CodeMirror.overlayMode(htmlBase, djangoInner); 64 | }); 65 | 66 | CodeMirror.defineMIME("text/x-django", "django"); 67 | }); 68 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/mode/dockerfile/dockerfile.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("../../addon/mode/simple")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../../addon/mode/simple"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | // Collect all Dockerfile directives 15 | var instructions = ["from", "maintainer", "run", "cmd", "expose", "env", 16 | "add", "copy", "entrypoint", "volume", "user", 17 | "workdir", "onbuild"], 18 | instructionRegex = "(" + instructions.join('|') + ")", 19 | instructionOnlyLine = new RegExp(instructionRegex + "\\s*$", "i"), 20 | instructionWithArguments = new RegExp(instructionRegex + "(\\s+)", "i"); 21 | 22 | CodeMirror.defineSimpleMode("dockerfile", { 23 | start: [ 24 | // Block comment: This is a line starting with a comment 25 | { 26 | regex: /#.*$/, 27 | token: "comment" 28 | }, 29 | // Highlight an instruction without any arguments (for convenience) 30 | { 31 | regex: instructionOnlyLine, 32 | token: "variable-2" 33 | }, 34 | // Highlight an instruction followed by arguments 35 | { 36 | regex: instructionWithArguments, 37 | token: ["variable-2", null], 38 | next: "arguments" 39 | }, 40 | { 41 | regex: /./, 42 | token: null 43 | } 44 | ], 45 | arguments: [ 46 | { 47 | // Line comment without instruction arguments is an error 48 | regex: /#.*$/, 49 | token: "error", 50 | next: "start" 51 | }, 52 | { 53 | regex: /[^#]+\\$/, 54 | token: null 55 | }, 56 | { 57 | // Match everything except for the inline comment 58 | regex: /[^#]+/, 59 | token: null, 60 | next: "start" 61 | }, 62 | { 63 | regex: /$/, 64 | token: null, 65 | next: "start" 66 | }, 67 | // Fail safe return to start 68 | { 69 | token: null, 70 | next: "start" 71 | } 72 | ] 73 | }); 74 | 75 | CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); 76 | }); 77 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/mode/properties/properties.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("properties", function() { 15 | return { 16 | token: function(stream, state) { 17 | var sol = stream.sol() || state.afterSection; 18 | var eol = stream.eol(); 19 | 20 | state.afterSection = false; 21 | 22 | if (sol) { 23 | if (state.nextMultiline) { 24 | state.inMultiline = true; 25 | state.nextMultiline = false; 26 | } else { 27 | state.position = "def"; 28 | } 29 | } 30 | 31 | if (eol && ! state.nextMultiline) { 32 | state.inMultiline = false; 33 | state.position = "def"; 34 | } 35 | 36 | if (sol) { 37 | while(stream.eatSpace()); 38 | } 39 | 40 | var ch = stream.next(); 41 | 42 | if (sol && (ch === "#" || ch === "!" || ch === ";")) { 43 | state.position = "comment"; 44 | stream.skipToEnd(); 45 | return "comment"; 46 | } else if (sol && ch === "[") { 47 | state.afterSection = true; 48 | stream.skipTo("]"); stream.eat("]"); 49 | return "header"; 50 | } else if (ch === "=" || ch === ":") { 51 | state.position = "quote"; 52 | return null; 53 | } else if (ch === "\\" && state.position === "quote") { 54 | if (stream.next() !== "u") { // u = Unicode sequence \u1234 55 | // Multiline value 56 | state.nextMultiline = true; 57 | } 58 | } 59 | 60 | return state.position; 61 | }, 62 | 63 | startState: function() { 64 | return { 65 | position : "def", // Current position, "def", "quote" or "comment" 66 | nextMultiline : false, // Is the next line multiline value 67 | inMultiline : false, // Is the current line a multiline value 68 | afterSection : false // Did we just open a section 69 | }; 70 | } 71 | 72 | }; 73 | }); 74 | 75 | CodeMirror.defineMIME("text/x-properties", "properties"); 76 | CodeMirror.defineMIME("text/x-ini", "properties"); 77 | 78 | }); 79 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/mode/solr/solr.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("solr", function() { 15 | "use strict"; 16 | 17 | var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\^\"\\]/; 18 | var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/; 19 | var isOperatorString = /^(OR|AND|NOT|TO)$/i; 20 | 21 | function isNumber(word) { 22 | return parseFloat(word, 10).toString() === word; 23 | } 24 | 25 | function tokenString(quote) { 26 | return function(stream, state) { 27 | var escaped = false, next; 28 | while ((next = stream.next()) != null) { 29 | if (next == quote && !escaped) break; 30 | escaped = !escaped && next == "\\"; 31 | } 32 | 33 | if (!escaped) state.tokenize = tokenBase; 34 | return "string"; 35 | }; 36 | } 37 | 38 | function tokenOperator(operator) { 39 | return function(stream, state) { 40 | var style = "operator"; 41 | if (operator == "+") 42 | style += " positive"; 43 | else if (operator == "-") 44 | style += " negative"; 45 | else if (operator == "|") 46 | stream.eat(/\|/); 47 | else if (operator == "&") 48 | stream.eat(/\&/); 49 | else if (operator == "^") 50 | style += " boost"; 51 | 52 | state.tokenize = tokenBase; 53 | return style; 54 | }; 55 | } 56 | 57 | function tokenWord(ch) { 58 | return function(stream, state) { 59 | var word = ch; 60 | while ((ch = stream.peek()) && ch.match(isStringChar) != null) { 61 | word += stream.next(); 62 | } 63 | 64 | state.tokenize = tokenBase; 65 | if (isOperatorString.test(word)) 66 | return "operator"; 67 | else if (isNumber(word)) 68 | return "number"; 69 | else if (stream.peek() == ":") 70 | return "field"; 71 | else 72 | return "string"; 73 | }; 74 | } 75 | 76 | function tokenBase(stream, state) { 77 | var ch = stream.next(); 78 | if (ch == '"') 79 | state.tokenize = tokenString(ch); 80 | else if (isOperatorChar.test(ch)) 81 | state.tokenize = tokenOperator(ch); 82 | else if (isStringChar.test(ch)) 83 | state.tokenize = tokenWord(ch); 84 | 85 | return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null; 86 | } 87 | 88 | return { 89 | startState: function() { 90 | return { 91 | tokenize: tokenBase 92 | }; 93 | }, 94 | 95 | token: function(stream, state) { 96 | if (stream.eatSpace()) return null; 97 | return state.tokenize(stream, state); 98 | } 99 | }; 100 | }); 101 | 102 | CodeMirror.defineMIME("text/x-solr", "solr"); 103 | 104 | }); 105 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/lib/codemirror/mode/toml/toml.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("toml", function () { 15 | return { 16 | startState: function () { 17 | return { 18 | inString: false, 19 | stringType: "", 20 | lhs: true, 21 | inArray: 0 22 | }; 23 | }, 24 | token: function (stream, state) { 25 | //check for state changes 26 | if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { 27 | state.stringType = stream.peek(); 28 | stream.next(); // Skip quote 29 | state.inString = true; // Update state 30 | } 31 | if (stream.sol() && state.inArray === 0) { 32 | state.lhs = true; 33 | } 34 | //return state 35 | if (state.inString) { 36 | while (state.inString && !stream.eol()) { 37 | if (stream.peek() === state.stringType) { 38 | stream.next(); // Skip quote 39 | state.inString = false; // Clear flag 40 | } else if (stream.peek() === '\\') { 41 | stream.next(); 42 | stream.next(); 43 | } else { 44 | stream.match(/^.[^\\\"\']*/); 45 | } 46 | } 47 | return state.lhs ? "property string" : "string"; // Token style 48 | } else if (state.inArray && stream.peek() === ']') { 49 | stream.next(); 50 | state.inArray--; 51 | return 'bracket'; 52 | } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { 53 | stream.next();//skip closing ] 54 | // array of objects has an extra open & close [] 55 | if (stream.peek() === ']') stream.next(); 56 | return "atom"; 57 | } else if (stream.peek() === "#") { 58 | stream.skipToEnd(); 59 | return "comment"; 60 | } else if (stream.eatSpace()) { 61 | return null; 62 | } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { 63 | return "property"; 64 | } else if (state.lhs && stream.peek() === "=") { 65 | stream.next(); 66 | state.lhs = false; 67 | return null; 68 | } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { 69 | return 'atom'; //date 70 | } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { 71 | return 'atom'; 72 | } else if (!state.lhs && stream.peek() === '[') { 73 | state.inArray++; 74 | stream.next(); 75 | return 'bracket'; 76 | } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { 77 | return 'number'; 78 | } else if (!stream.eatSpace()) { 79 | stream.next(); 80 | } 81 | return null; 82 | } 83 | }; 84 | }); 85 | 86 | CodeMirror.defineMIME('text/x-toml', 'toml'); 87 | 88 | }); 89 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/mode/tornado/tornado.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("../htmlmixed/htmlmixed"), 7 | require("../../addon/mode/overlay")); 8 | else if (typeof define == "function" && define.amd) // AMD 9 | define(["../../lib/codemirror", "../htmlmixed/htmlmixed", 10 | "../../addon/mode/overlay"], mod); 11 | else // Plain browser env 12 | mod(CodeMirror); 13 | })(function(CodeMirror) { 14 | "use strict"; 15 | 16 | CodeMirror.defineMode("tornado:inner", function() { 17 | var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", 18 | "continue","datetime","def","del","elif","else","end","escape","except", 19 | "exec","extends","false","finally","for","from","global","if","import","in", 20 | "include","is","json_encode","lambda","length","linkify","load","module", 21 | "none","not","or","pass","print","put","raise","raw","return","self","set", 22 | "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; 23 | keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); 24 | 25 | function tokenBase (stream, state) { 26 | stream.eatWhile(/[^\{]/); 27 | var ch = stream.next(); 28 | if (ch == "{") { 29 | if (ch = stream.eat(/\{|%|#/)) { 30 | state.tokenize = inTag(ch); 31 | return "tag"; 32 | } 33 | } 34 | } 35 | function inTag (close) { 36 | if (close == "{") { 37 | close = "}"; 38 | } 39 | return function (stream, state) { 40 | var ch = stream.next(); 41 | if ((ch == close) && stream.eat("}")) { 42 | state.tokenize = tokenBase; 43 | return "tag"; 44 | } 45 | if (stream.match(keywords)) { 46 | return "keyword"; 47 | } 48 | return close == "#" ? "comment" : "string"; 49 | }; 50 | } 51 | return { 52 | startState: function () { 53 | return {tokenize: tokenBase}; 54 | }, 55 | token: function (stream, state) { 56 | return state.tokenize(stream, state); 57 | } 58 | }; 59 | }); 60 | 61 | CodeMirror.defineMode("tornado", function(config) { 62 | var htmlBase = CodeMirror.getMode(config, "text/html"); 63 | var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); 64 | return CodeMirror.overlayMode(htmlBase, tornadoInner); 65 | }); 66 | 67 | CodeMirror.defineMIME("text/x-tornado", "tornado"); 68 | }); 69 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/3024-day.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: 3024 day 4 | Author: Jan T. Sott (http://github.com/idleberg) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} 12 | .cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} 13 | .cm-s-3024-day.CodeMirror ::selection { background: #d6d5d4; } 14 | .cm-s-3024-day.CodeMirror ::-moz-selection { background: #d9d9d9; } 15 | 16 | .cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} 17 | .cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } 18 | .cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } 19 | .cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} 20 | 21 | .cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} 22 | 23 | .cm-s-3024-day span.cm-comment {color: #cdab53;} 24 | .cm-s-3024-day span.cm-atom {color: #a16a94;} 25 | .cm-s-3024-day span.cm-number {color: #a16a94;} 26 | 27 | .cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} 28 | .cm-s-3024-day span.cm-keyword {color: #db2d20;} 29 | .cm-s-3024-day span.cm-string {color: #fded02;} 30 | 31 | .cm-s-3024-day span.cm-variable {color: #01a252;} 32 | .cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} 33 | .cm-s-3024-day span.cm-def {color: #e8bbd0;} 34 | .cm-s-3024-day span.cm-bracket {color: #3a3432;} 35 | .cm-s-3024-day span.cm-tag {color: #db2d20;} 36 | .cm-s-3024-day span.cm-link {color: #a16a94;} 37 | .cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} 38 | 39 | .cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;} 40 | .cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important;} 41 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/3024-night.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: 3024 night 4 | Author: Jan T. Sott (http://github.com/idleberg) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;} 12 | .cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;} 13 | .cm-s-3024-night.CodeMirror ::selection { background: rgba(58, 52, 50, .99); } 14 | .cm-s-3024-night.CodeMirror ::-moz-selection { background: rgba(58, 52, 50, .99); } 15 | .cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;} 16 | .cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } 17 | .cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } 18 | .cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;} 19 | 20 | .cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;} 21 | 22 | .cm-s-3024-night span.cm-comment {color: #cdab53;} 23 | .cm-s-3024-night span.cm-atom {color: #a16a94;} 24 | .cm-s-3024-night span.cm-number {color: #a16a94;} 25 | 26 | .cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;} 27 | .cm-s-3024-night span.cm-keyword {color: #db2d20;} 28 | .cm-s-3024-night span.cm-string {color: #fded02;} 29 | 30 | .cm-s-3024-night span.cm-variable {color: #01a252;} 31 | .cm-s-3024-night span.cm-variable-2 {color: #01a0e4;} 32 | .cm-s-3024-night span.cm-def {color: #e8bbd0;} 33 | .cm-s-3024-night span.cm-bracket {color: #d6d5d4;} 34 | .cm-s-3024-night span.cm-tag {color: #db2d20;} 35 | .cm-s-3024-night span.cm-link {color: #a16a94;} 36 | .cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;} 37 | 38 | .cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;} 39 | .cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 40 | -------------------------------------------------------------------------------- /src/main/resources/static/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/lib/codemirror/theme/base16-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Base16 Default Dark 4 | Author: Chris Kempson (http://chriskempson.com) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;} 12 | .cm-s-base16-dark div.CodeMirror-selected {background: #303030 !important;} 13 | .cm-s-base16-dark.CodeMirror ::selection { background: rgba(48, 48, 48, .99); } 14 | .cm-s-base16-dark.CodeMirror ::-moz-selection { background: rgba(48, 48, 48, .99); } 15 | .cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;} 16 | .cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } 17 | .cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } 18 | .cm-s-base16-dark .CodeMirror-linenumber {color: #505050;} 19 | .cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;} 20 | 21 | .cm-s-base16-dark span.cm-comment {color: #8f5536;} 22 | .cm-s-base16-dark span.cm-atom {color: #aa759f;} 23 | .cm-s-base16-dark span.cm-number {color: #aa759f;} 24 | 25 | .cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;} 26 | .cm-s-base16-dark span.cm-keyword {color: #ac4142;} 27 | .cm-s-base16-dark span.cm-string {color: #f4bf75;} 28 | 29 | .cm-s-base16-dark span.cm-variable {color: #90a959;} 30 | .cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;} 31 | .cm-s-base16-dark span.cm-def {color: #d28445;} 32 | .cm-s-base16-dark span.cm-bracket {color: #e0e0e0;} 33 | .cm-s-base16-dark span.cm-tag {color: #ac4142;} 34 | .cm-s-base16-dark span.cm-link {color: #aa759f;} 35 | .cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;} 36 | 37 | .cm-s-base16-dark .CodeMirror-activeline-background {background: #202020 !important;} 38 | .cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 39 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/base16-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Base16 Default Light 4 | Author: Chris Kempson (http://chriskempson.com) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} 12 | .cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} 13 | .cm-s-base16-light.CodeMirror ::selection { background: #e0e0e0; } 14 | .cm-s-base16-light.CodeMirror ::-moz-selection { background: #e0e0e0; } 15 | .cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} 16 | .cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } 17 | .cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } 18 | .cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} 19 | .cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} 20 | 21 | .cm-s-base16-light span.cm-comment {color: #8f5536;} 22 | .cm-s-base16-light span.cm-atom {color: #aa759f;} 23 | .cm-s-base16-light span.cm-number {color: #aa759f;} 24 | 25 | .cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} 26 | .cm-s-base16-light span.cm-keyword {color: #ac4142;} 27 | .cm-s-base16-light span.cm-string {color: #f4bf75;} 28 | 29 | .cm-s-base16-light span.cm-variable {color: #90a959;} 30 | .cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} 31 | .cm-s-base16-light span.cm-def {color: #d28445;} 32 | .cm-s-base16-light span.cm-bracket {color: #202020;} 33 | .cm-s-base16-light span.cm-tag {color: #ac4142;} 34 | .cm-s-base16-light span.cm-link {color: #aa759f;} 35 | .cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} 36 | 37 | .cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;} 38 | .cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 39 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/blackboard.css: -------------------------------------------------------------------------------- 1 | /* Port of TextMate's Blackboard theme */ 2 | 3 | .cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } 4 | .cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; } 5 | .cm-s-blackboard.CodeMirror ::selection { background: rgba(37, 59, 118, .99); } 6 | .cm-s-blackboard.CodeMirror ::-moz-selection { background: rgba(37, 59, 118, .99); } 7 | .cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } 8 | .cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } 9 | .cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } 10 | .cm-s-blackboard .CodeMirror-linenumber { color: #888; } 11 | .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } 12 | 13 | .cm-s-blackboard .cm-keyword { color: #FBDE2D; } 14 | .cm-s-blackboard .cm-atom { color: #D8FA3C; } 15 | .cm-s-blackboard .cm-number { color: #D8FA3C; } 16 | .cm-s-blackboard .cm-def { color: #8DA6CE; } 17 | .cm-s-blackboard .cm-variable { color: #FF6400; } 18 | .cm-s-blackboard .cm-operator { color: #FBDE2D;} 19 | .cm-s-blackboard .cm-comment { color: #AEAEAE; } 20 | .cm-s-blackboard .cm-string { color: #61CE3C; } 21 | .cm-s-blackboard .cm-string-2 { color: #61CE3C; } 22 | .cm-s-blackboard .cm-meta { color: #D8FA3C; } 23 | .cm-s-blackboard .cm-builtin { color: #8DA6CE; } 24 | .cm-s-blackboard .cm-tag { color: #8DA6CE; } 25 | .cm-s-blackboard .cm-attribute { color: #8DA6CE; } 26 | .cm-s-blackboard .cm-header { color: #FF6400; } 27 | .cm-s-blackboard .cm-hr { color: #AEAEAE; } 28 | .cm-s-blackboard .cm-link { color: #8DA6CE; } 29 | .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } 30 | 31 | .cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;} 32 | .cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} -------------------------------------------------------------------------------- /src/main/resources/static/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/lib/codemirror/theme/colorforth.css: -------------------------------------------------------------------------------- 1 | .cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } 2 | .cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 3 | .cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } 4 | .cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } 5 | .cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } 6 | .cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white !important; } 7 | 8 | .cm-s-colorforth span.cm-comment { color: #ededed; } 9 | .cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } 10 | .cm-s-colorforth span.cm-keyword { color: #ffd900; } 11 | .cm-s-colorforth span.cm-builtin { color: #00d95a; } 12 | .cm-s-colorforth span.cm-variable { color: #73ff00; } 13 | .cm-s-colorforth span.cm-string { color: #007bff; } 14 | .cm-s-colorforth span.cm-number { color: #00c4ff; } 15 | .cm-s-colorforth span.cm-atom { color: #606060; } 16 | 17 | .cm-s-colorforth span.cm-variable-2 { color: #EEE; } 18 | .cm-s-colorforth span.cm-variable-3 { color: #DDD; } 19 | .cm-s-colorforth span.cm-property {} 20 | .cm-s-colorforth span.cm-operator {} 21 | 22 | .cm-s-colorforth span.cm-meta { color: yellow; } 23 | .cm-s-colorforth span.cm-qualifier { color: #FFF700; } 24 | .cm-s-colorforth span.cm-bracket { color: #cc7; } 25 | .cm-s-colorforth span.cm-tag { color: #FFBD40; } 26 | .cm-s-colorforth span.cm-attribute { color: #FFF700; } 27 | .cm-s-colorforth span.cm-error { color: #f00; } 28 | 29 | .cm-s-colorforth .CodeMirror-selected { background: #333d53 !important; } 30 | 31 | .cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } 32 | 33 | .cm-s-colorforth .CodeMirror-activeline-background {background: #253540 !important;} 34 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/lib/codemirror/theme/erlang-dark.css: -------------------------------------------------------------------------------- 1 | .cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } 2 | .cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; } 3 | .cm-s-erlang-dark.CodeMirror ::selection { background: rgba(179, 101, 57, .99); } 4 | .cm-s-erlang-dark.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); } 5 | .cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 6 | .cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } 7 | .cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 8 | .cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } 9 | .cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; } 10 | 11 | .cm-s-erlang-dark span.cm-atom { color: #f133f1; } 12 | .cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } 13 | .cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } 14 | .cm-s-erlang-dark span.cm-builtin { color: #eaa; } 15 | .cm-s-erlang-dark span.cm-comment { color: #77f; } 16 | .cm-s-erlang-dark span.cm-def { color: #e7a; } 17 | .cm-s-erlang-dark span.cm-keyword { color: #ffee80; } 18 | .cm-s-erlang-dark span.cm-meta { color: #50fefe; } 19 | .cm-s-erlang-dark span.cm-number { color: #ffd0d0; } 20 | .cm-s-erlang-dark span.cm-operator { color: #d55; } 21 | .cm-s-erlang-dark span.cm-property { color: #ccc; } 22 | .cm-s-erlang-dark span.cm-qualifier { color: #ccc; } 23 | .cm-s-erlang-dark span.cm-quote { color: #ccc; } 24 | .cm-s-erlang-dark span.cm-special { color: #ffbbbb; } 25 | .cm-s-erlang-dark span.cm-string { color: #3ad900; } 26 | .cm-s-erlang-dark span.cm-string-2 { color: #ccc; } 27 | .cm-s-erlang-dark span.cm-tag { color: #9effff; } 28 | .cm-s-erlang-dark span.cm-variable { color: #50fe50; } 29 | .cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } 30 | .cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } 31 | .cm-s-erlang-dark span.cm-error { color: #9d1e15; } 32 | 33 | .cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;} 34 | .cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 35 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/lesser-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | http://lesscss.org/ dark theme 3 | Ported to CodeMirror by Peter Kroon 4 | */ 5 | .cm-s-lesser-dark { 6 | line-height: 1.3em; 7 | } 8 | .cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } 9 | .cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/ 10 | .cm-s-lesser-dark.CodeMirror ::selection { background: rgba(69, 68, 59, .99); } 11 | .cm-s-lesser-dark.CodeMirror ::-moz-selection { background: rgba(69, 68, 59, .99); } 12 | .cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; } 13 | .cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ 14 | 15 | .cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ 16 | 17 | .cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } 18 | .cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } 19 | .cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } 20 | .cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } 21 | 22 | .cm-s-lesser-dark span.cm-keyword { color: #599eff; } 23 | .cm-s-lesser-dark span.cm-atom { color: #C2B470; } 24 | .cm-s-lesser-dark span.cm-number { color: #B35E4D; } 25 | .cm-s-lesser-dark span.cm-def {color: white;} 26 | .cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } 27 | .cm-s-lesser-dark span.cm-variable-2 { color: #669199; } 28 | .cm-s-lesser-dark span.cm-variable-3 { color: white; } 29 | .cm-s-lesser-dark span.cm-property {color: #92A75C;} 30 | .cm-s-lesser-dark span.cm-operator {color: #92A75C;} 31 | .cm-s-lesser-dark span.cm-comment { color: #666; } 32 | .cm-s-lesser-dark span.cm-string { color: #BCD279; } 33 | .cm-s-lesser-dark span.cm-string-2 {color: #f50;} 34 | .cm-s-lesser-dark span.cm-meta { color: #738C73; } 35 | .cm-s-lesser-dark span.cm-qualifier {color: #555;} 36 | .cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } 37 | .cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } 38 | .cm-s-lesser-dark span.cm-tag { color: #669199; } 39 | .cm-s-lesser-dark span.cm-attribute {color: #00c;} 40 | .cm-s-lesser-dark span.cm-header {color: #a0a;} 41 | .cm-s-lesser-dark span.cm-quote {color: #090;} 42 | .cm-s-lesser-dark span.cm-hr {color: #999;} 43 | .cm-s-lesser-dark span.cm-link {color: #00c;} 44 | .cm-s-lesser-dark span.cm-error { color: #9d1e15; } 45 | 46 | .cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;} 47 | .cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 48 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/mbo.css: -------------------------------------------------------------------------------- 1 | /****************************************************************/ 2 | /* Based on mbonaci's Brackets mbo theme */ 3 | /* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ 4 | /* Create your own: http://tmtheme-editor.herokuapp.com */ 5 | /****************************************************************/ 6 | 7 | .cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffec;} 8 | .cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;} 9 | .cm-s-mbo.CodeMirror ::selection { background: rgba(113, 108, 98, .99); } 10 | .cm-s-mbo.CodeMirror ::-moz-selection { background: rgba(113, 108, 98, .99); } 11 | .cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;} 12 | .cm-s-mbo .CodeMirror-guttermarker { color: white; } 13 | .cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } 14 | .cm-s-mbo .CodeMirror-linenumber {color: #dadada;} 15 | .cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;} 16 | 17 | .cm-s-mbo span.cm-comment {color: #95958a;} 18 | .cm-s-mbo span.cm-atom {color: #00a8c6;} 19 | .cm-s-mbo span.cm-number {color: #00a8c6;} 20 | 21 | .cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;} 22 | .cm-s-mbo span.cm-keyword {color: #ffb928;} 23 | .cm-s-mbo span.cm-string {color: #ffcf6c;} 24 | .cm-s-mbo span.cm-string.cm-property {color: #ffffec;} 25 | 26 | .cm-s-mbo span.cm-variable {color: #ffffec;} 27 | .cm-s-mbo span.cm-variable-2 {color: #00a8c6;} 28 | .cm-s-mbo span.cm-def {color: #ffffec;} 29 | .cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;} 30 | .cm-s-mbo span.cm-tag {color: #9ddfe9;} 31 | .cm-s-mbo span.cm-link {color: #f54b07;} 32 | .cm-s-mbo span.cm-error {border-bottom: #636363; color: #ffffec;} 33 | .cm-s-mbo span.cm-qualifier {color: #ffffec;} 34 | 35 | .cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;} 36 | .cm-s-mbo .CodeMirror-matchingbracket {color: #222 !important;} 37 | .cm-s-mbo .CodeMirror-matchingtag {background: rgba(255, 255, 255, .37);} 38 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/midnight.css: -------------------------------------------------------------------------------- 1 | /* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ 2 | 3 | /**/ 4 | .cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; } 5 | .cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } 6 | 7 | /**/ 8 | .cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;} 9 | 10 | .cm-s-midnight.CodeMirror { 11 | background: #0F192A; 12 | color: #D1EDFF; 13 | } 14 | 15 | .cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;} 16 | 17 | .cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;} 18 | .cm-s-midnight.CodeMirror ::selection { background: rgba(49, 77, 103, .99); } 19 | .cm-s-midnight.CodeMirror ::-moz-selection { background: rgba(49, 77, 103, .99); } 20 | .cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;} 21 | .cm-s-midnight .CodeMirror-guttermarker { color: white; } 22 | .cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 23 | .cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;} 24 | .cm-s-midnight .CodeMirror-cursor { 25 | border-left: 1px solid #F8F8F0 !important; 26 | } 27 | 28 | .cm-s-midnight span.cm-comment {color: #428BDD;} 29 | .cm-s-midnight span.cm-atom {color: #AE81FF;} 30 | .cm-s-midnight span.cm-number {color: #D1EDFF;} 31 | 32 | .cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;} 33 | .cm-s-midnight span.cm-keyword {color: #E83737;} 34 | .cm-s-midnight span.cm-string {color: #1DC116;} 35 | 36 | .cm-s-midnight span.cm-variable {color: #FFAA3E;} 37 | .cm-s-midnight span.cm-variable-2 {color: #FFAA3E;} 38 | .cm-s-midnight span.cm-def {color: #4DD;} 39 | .cm-s-midnight span.cm-bracket {color: #D1EDFF;} 40 | .cm-s-midnight span.cm-tag {color: #449;} 41 | .cm-s-midnight span.cm-link {color: #AE81FF;} 42 | .cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;} 43 | 44 | .cm-s-midnight .CodeMirror-matchingbracket { 45 | text-decoration: underline; 46 | color: white !important; 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/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/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/lib/codemirror/theme/paraiso-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Paraíso (Dark) 4 | Author: Jan T. Sott 5 | 6 | Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) 7 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 8 | 9 | */ 10 | 11 | .cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;} 12 | .cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;} 13 | .cm-s-paraiso-dark.CodeMirror ::selection { background: rgba(65, 50, 63, .99); } 14 | .cm-s-paraiso-dark.CodeMirror ::-moz-selection { background: rgba(65, 50, 63, .99); } 15 | .cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;} 16 | .cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } 17 | .cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } 18 | .cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;} 19 | .cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;} 20 | 21 | .cm-s-paraiso-dark span.cm-comment {color: #e96ba8;} 22 | .cm-s-paraiso-dark span.cm-atom {color: #815ba4;} 23 | .cm-s-paraiso-dark span.cm-number {color: #815ba4;} 24 | 25 | .cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;} 26 | .cm-s-paraiso-dark span.cm-keyword {color: #ef6155;} 27 | .cm-s-paraiso-dark span.cm-string {color: #fec418;} 28 | 29 | .cm-s-paraiso-dark span.cm-variable {color: #48b685;} 30 | .cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;} 31 | .cm-s-paraiso-dark span.cm-def {color: #f99b15;} 32 | .cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;} 33 | .cm-s-paraiso-dark span.cm-tag {color: #ef6155;} 34 | .cm-s-paraiso-dark span.cm-link {color: #815ba4;} 35 | .cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;} 36 | 37 | .cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;} 38 | .cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 39 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/paraiso-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Paraíso (Light) 4 | Author: Jan T. Sott 5 | 6 | Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) 7 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 8 | 9 | */ 10 | 11 | .cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;} 12 | .cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;} 13 | .cm-s-paraiso-light.CodeMirror ::selection { background: #b9b6b0; } 14 | .cm-s-paraiso-light.CodeMirror ::-moz-selection { background: #b9b6b0; } 15 | .cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;} 16 | .cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } 17 | .cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } 18 | .cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;} 19 | .cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;} 20 | 21 | .cm-s-paraiso-light span.cm-comment {color: #e96ba8;} 22 | .cm-s-paraiso-light span.cm-atom {color: #815ba4;} 23 | .cm-s-paraiso-light span.cm-number {color: #815ba4;} 24 | 25 | .cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;} 26 | .cm-s-paraiso-light span.cm-keyword {color: #ef6155;} 27 | .cm-s-paraiso-light span.cm-string {color: #fec418;} 28 | 29 | .cm-s-paraiso-light span.cm-variable {color: #48b685;} 30 | .cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;} 31 | .cm-s-paraiso-light span.cm-def {color: #f99b15;} 32 | .cm-s-paraiso-light span.cm-bracket {color: #41323f;} 33 | .cm-s-paraiso-light span.cm-tag {color: #ef6155;} 34 | .cm-s-paraiso-light span.cm-link {color: #815ba4;} 35 | .cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;} 36 | 37 | .cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;} 38 | .cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 39 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/pastel-on-dark.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Pastel On Dark theme ported from ACE editor 3 | * @license MIT 4 | * @copyright AtomicPages LLC 2014 5 | * @author Dennis Thompson, AtomicPages LLC 6 | * @version 1.1 7 | * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme 8 | */ 9 | 10 | .cm-s-pastel-on-dark.CodeMirror { 11 | background: #2c2827; 12 | color: #8F938F; 13 | line-height: 1.5; 14 | font-size: 14px; 15 | } 16 | .cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2) !important; } 17 | .cm-s-pastel-on-dark.CodeMirror ::selection { background: rgba(221,240,255,0.2); } 18 | .cm-s-pastel-on-dark.CodeMirror ::-moz-selection { background: rgba(221,240,255,0.2); } 19 | 20 | .cm-s-pastel-on-dark .CodeMirror-gutters { 21 | background: #34302f; 22 | border-right: 0px; 23 | padding: 0 3px; 24 | } 25 | .cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } 26 | .cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } 27 | .cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } 28 | .cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } 29 | .cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } 30 | .cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } 31 | .cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } 32 | .cm-s-pastel-on-dark span.cm-property { color: #8F938F; } 33 | .cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } 34 | .cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } 35 | .cm-s-pastel-on-dark span.cm-string { color: #66A968; } 36 | .cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } 37 | .cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } 38 | .cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; } 39 | .cm-s-pastel-on-dark span.cm-def { color: #757aD8; } 40 | .cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } 41 | .cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } 42 | .cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } 43 | .cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } 44 | .cm-s-pastel-on-dark span.cm-error { 45 | background: #757aD8; 46 | color: #f8f8f0; 47 | } 48 | .cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031) !important; } 49 | .cm-s-pastel-on-dark .CodeMirror-matchingbracket { 50 | border: 1px solid rgba(255,255,255,0.25); 51 | color: #8F938F !important; 52 | margin: -1px -1px 0 -1px; 53 | } 54 | -------------------------------------------------------------------------------- /src/main/resources/static/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/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/lib/codemirror/theme/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Tomorrow Night - Bright 4 | Author: Chris Kempson 5 | 6 | Port done by Gerard Braad 7 | 8 | */ 9 | 10 | .cm-s-tomorrow-night-bright.CodeMirror {background: #000000; color: #eaeaea;} 11 | .cm-s-tomorrow-night-bright div.CodeMirror-selected {background: #424242 !important;} 12 | .cm-s-tomorrow-night-bright .CodeMirror-gutters {background: #000000; border-right: 0px;} 13 | .cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } 14 | .cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } 15 | .cm-s-tomorrow-night-bright .CodeMirror-linenumber {color: #424242;} 16 | .cm-s-tomorrow-night-bright .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} 17 | 18 | .cm-s-tomorrow-night-bright span.cm-comment {color: #d27b53;} 19 | .cm-s-tomorrow-night-bright span.cm-atom {color: #a16a94;} 20 | .cm-s-tomorrow-night-bright span.cm-number {color: #a16a94;} 21 | 22 | .cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute {color: #99cc99;} 23 | .cm-s-tomorrow-night-bright span.cm-keyword {color: #d54e53;} 24 | .cm-s-tomorrow-night-bright span.cm-string {color: #e7c547;} 25 | 26 | .cm-s-tomorrow-night-bright span.cm-variable {color: #b9ca4a;} 27 | .cm-s-tomorrow-night-bright span.cm-variable-2 {color: #7aa6da;} 28 | .cm-s-tomorrow-night-bright span.cm-def {color: #e78c45;} 29 | .cm-s-tomorrow-night-bright span.cm-bracket {color: #eaeaea;} 30 | .cm-s-tomorrow-night-bright span.cm-tag {color: #d54e53;} 31 | .cm-s-tomorrow-night-bright span.cm-link {color: #a16a94;} 32 | .cm-s-tomorrow-night-bright span.cm-error {background: #d54e53; color: #6A6A6A;} 33 | 34 | .cm-s-tomorrow-night-bright .CodeMirror-activeline-background {background: #2a2a2a !important;} 35 | .cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 36 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/tomorrow-night-eighties.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Tomorrow Night - Eighties 4 | Author: Chris Kempson 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;} 12 | .cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;} 13 | .cm-s-tomorrow-night-eighties.CodeMirror ::selection { background: rgba(45, 45, 45, 0.99); } 14 | .cm-s-tomorrow-night-eighties.CodeMirror ::-moz-selection { background: rgba(45, 45, 45, 0.99); } 15 | .cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;} 16 | .cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } 17 | .cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } 18 | .cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;} 19 | .cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} 20 | 21 | .cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;} 22 | .cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;} 23 | .cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;} 24 | 25 | .cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;} 26 | .cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;} 27 | .cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;} 28 | 29 | .cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;} 30 | .cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;} 31 | .cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;} 32 | .cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;} 33 | .cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;} 34 | .cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;} 35 | .cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;} 36 | 37 | .cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;} 38 | .cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 39 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/twilight.css: -------------------------------------------------------------------------------- 1 | .cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ 2 | .cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/ 3 | .cm-s-twilight.CodeMirror ::selection { background: rgba(50, 50, 50, 0.99); } 4 | .cm-s-twilight.CodeMirror ::-moz-selection { background: rgba(50, 50, 50, 0.99); } 5 | 6 | .cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } 7 | .cm-s-twilight .CodeMirror-guttermarker { color: white; } 8 | .cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } 9 | .cm-s-twilight .CodeMirror-linenumber { color: #aaa; } 10 | .cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; } 11 | 12 | .cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ 13 | .cm-s-twilight .cm-atom { color: #FC0; } 14 | .cm-s-twilight .cm-number { color: #ca7841; } /**/ 15 | .cm-s-twilight .cm-def { color: #8DA6CE; } 16 | .cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ 17 | .cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ 18 | .cm-s-twilight .cm-operator { color: #cda869; } /**/ 19 | .cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ 20 | .cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ 21 | .cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/ 22 | .cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ 23 | .cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ 24 | .cm-s-twilight .cm-tag { color: #997643; } /**/ 25 | .cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ 26 | .cm-s-twilight .cm-header { color: #FF6400; } 27 | .cm-s-twilight .cm-hr { color: #AEAEAE; } 28 | .cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ 29 | .cm-s-twilight .cm-error { border-bottom: 1px solid red; } 30 | 31 | .cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;} 32 | .cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 33 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/vibrant-ink.css: -------------------------------------------------------------------------------- 1 | /* Taken from the popular Visual Studio Vibrant Ink Schema */ 2 | 3 | .cm-s-vibrant-ink.CodeMirror { background: black; color: white; } 4 | .cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; } 5 | .cm-s-vibrant-ink.CodeMirror ::selection { background: rgba(53, 73, 60, 0.99); } 6 | .cm-s-vibrant-ink.CodeMirror ::-moz-selection { background: rgba(53, 73, 60, 0.99); } 7 | 8 | .cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 9 | .cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } 10 | .cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 11 | .cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } 12 | .cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; } 13 | 14 | .cm-s-vibrant-ink .cm-keyword { color: #CC7832; } 15 | .cm-s-vibrant-ink .cm-atom { color: #FC0; } 16 | .cm-s-vibrant-ink .cm-number { color: #FFEE98; } 17 | .cm-s-vibrant-ink .cm-def { color: #8DA6CE; } 18 | .cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D } 19 | .cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D } 20 | .cm-s-vibrant-ink .cm-operator { color: #888; } 21 | .cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } 22 | .cm-s-vibrant-ink .cm-string { color: #A5C25C } 23 | .cm-s-vibrant-ink .cm-string-2 { color: red } 24 | .cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } 25 | .cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } 26 | .cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } 27 | .cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } 28 | .cm-s-vibrant-ink .cm-header { color: #FF6400; } 29 | .cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } 30 | .cm-s-vibrant-ink .cm-link { color: blue; } 31 | .cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } 32 | 33 | .cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;} 34 | .cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 35 | -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/xq-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2011 by MarkLogic Corporation 3 | Author: Mike Brevoort 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | */ 23 | .cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } 24 | .cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; } 25 | .cm-s-xq-dark.CodeMirror ::selection { background: rgba(39, 0, 122, 0.99); } 26 | .cm-s-xq-dark.CodeMirror ::-moz-selection { background: rgba(39, 0, 122, 0.99); } 27 | .cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 28 | .cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } 29 | .cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } 30 | .cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } 31 | .cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; } 32 | 33 | .cm-s-xq-dark span.cm-keyword {color: #FFBD40;} 34 | .cm-s-xq-dark span.cm-atom {color: #6C8CD5;} 35 | .cm-s-xq-dark span.cm-number {color: #164;} 36 | .cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;} 37 | .cm-s-xq-dark span.cm-variable {color: #FFF;} 38 | .cm-s-xq-dark span.cm-variable-2 {color: #EEE;} 39 | .cm-s-xq-dark span.cm-variable-3 {color: #DDD;} 40 | .cm-s-xq-dark span.cm-property {} 41 | .cm-s-xq-dark span.cm-operator {} 42 | .cm-s-xq-dark span.cm-comment {color: gray;} 43 | .cm-s-xq-dark span.cm-string {color: #9FEE00;} 44 | .cm-s-xq-dark span.cm-meta {color: yellow;} 45 | .cm-s-xq-dark span.cm-qualifier {color: #FFF700;} 46 | .cm-s-xq-dark span.cm-builtin {color: #30a;} 47 | .cm-s-xq-dark span.cm-bracket {color: #cc7;} 48 | .cm-s-xq-dark span.cm-tag {color: #FFBD40;} 49 | .cm-s-xq-dark span.cm-attribute {color: #FFF700;} 50 | .cm-s-xq-dark span.cm-error {color: #f00;} 51 | 52 | .cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;} 53 | .cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/xq-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2011 by MarkLogic Corporation 3 | Author: Mike Brevoort 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | */ 23 | .cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; } 24 | .cm-s-xq-light span.cm-atom {color: #6C8CD5;} 25 | .cm-s-xq-light span.cm-number {color: #164;} 26 | .cm-s-xq-light span.cm-def {text-decoration:underline;} 27 | .cm-s-xq-light span.cm-variable {color: black; } 28 | .cm-s-xq-light span.cm-variable-2 {color:black;} 29 | .cm-s-xq-light span.cm-variable-3 {color: black; } 30 | .cm-s-xq-light span.cm-property {} 31 | .cm-s-xq-light span.cm-operator {} 32 | .cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;} 33 | .cm-s-xq-light span.cm-string {color: red;} 34 | .cm-s-xq-light span.cm-meta {color: yellow;} 35 | .cm-s-xq-light span.cm-qualifier {color: grey} 36 | .cm-s-xq-light span.cm-builtin {color: #7EA656;} 37 | .cm-s-xq-light span.cm-bracket {color: #cc7;} 38 | .cm-s-xq-light span.cm-tag {color: #3F7F7F;} 39 | .cm-s-xq-light span.cm-attribute {color: #7F007F;} 40 | .cm-s-xq-light span.cm-error {color: #f00;} 41 | 42 | .cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;} 43 | .cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;} -------------------------------------------------------------------------------- /src/main/resources/static/lib/codemirror/theme/zenburn.css: -------------------------------------------------------------------------------- 1 | /** 2 | * " 3 | * Using Zenburn color palette from the Emacs Zenburn Theme 4 | * https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el 5 | * 6 | * Also using parts of https://github.com/xavi/coderay-lighttable-theme 7 | * " 8 | * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css 9 | */ 10 | 11 | .cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; } 12 | .cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; } 13 | .cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white !important; } 14 | .cm-s-zenburn { background-color: #3f3f3f; color: #dcdccc; } 15 | .cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; } 16 | .cm-s-zenburn span.cm-comment { color: #7f9f7f; } 17 | .cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; } 18 | .cm-s-zenburn span.cm-atom { color: #bfebbf; } 19 | .cm-s-zenburn span.cm-def { color: #dcdccc; } 20 | .cm-s-zenburn span.cm-variable { color: #dfaf8f; } 21 | .cm-s-zenburn span.cm-variable-2 { color: #dcdccc; } 22 | .cm-s-zenburn span.cm-string { color: #cc9393; } 23 | .cm-s-zenburn span.cm-string-2 { color: #cc9393; } 24 | .cm-s-zenburn span.cm-number { color: #dcdccc; } 25 | .cm-s-zenburn span.cm-tag { color: #93e0e3; } 26 | .cm-s-zenburn span.cm-property { color: #dfaf8f; } 27 | .cm-s-zenburn span.cm-attribute { color: #dfaf8f; } 28 | .cm-s-zenburn span.cm-qualifier { color: #7cb8bb; } 29 | .cm-s-zenburn span.cm-meta { color: #f0dfaf; } 30 | .cm-s-zenburn span.cm-header { color: #f0efd0; } 31 | .cm-s-zenburn span.cm-operator { color: #f0efd0; } 32 | .cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; } 33 | .cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; } 34 | .cm-s-zenburn .CodeMirror-activeline { background: #000000; } 35 | .cm-s-zenburn .CodeMirror-activeline-background { background: #000000; } 36 | .cm-s-zenburn .CodeMirror-selected { background: #545454; } 37 | .cm-s-zenburn .CodeMirror-focused .CodeMirror-selected { background: #4f4f4f; } 38 | -------------------------------------------------------------------------------- /src/main/resources/static/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/templates/VM_global_library.vm: -------------------------------------------------------------------------------- 1 | #macro(flip $pageNum $current $href) 2 | #set( $arr = [0..$pageNum] ) 3 |
    4 | #if($current<2) 5 |
  • «
  • 6 | #else 7 | #set($prevPage = $current - 1) 8 |
  • «
  • 9 | #end 10 | #foreach($page in $arr) 11 | #if($page > 0) 12 | #if($current==$page) 13 |
  • $page
  • 14 | #else 15 |
  • $page
  • 16 | #end 17 | #end 18 | #end 19 | #if($current>=$pageNum) 20 |
  • »
  • 21 | #else 22 | #set($nextPage = $current + 1) 23 |
  • »
  • 24 | #end 25 |
26 | #end 27 | 28 | #macro(liClass $count) 29 | #if($count%4 == 1) 30 | 31 | #elseif($count%4 == 2) 32 | 33 | #elseif($count%4 == 3) 34 | 35 | #else 36 | 37 | #end 38 | #end 39 | 40 | #macro(frontFlip $pageNum $current $href) 41 | #set($prev = $current - 1) 42 | #set($next = $current + 1) 43 | #if($pageNum<=1) 44 | #elseif($current<=1) 45 | Next 46 | #elseif($current>=$pageNum) 47 | Prev 48 | #else 49 | Prev 50 | Next 51 | #end 52 | #end -------------------------------------------------------------------------------- /src/main/resources/templates/about.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 | 7 |
8 |
9 | $!{resume} 10 |
11 |
12 |
13 |
14 |
15 | #include("/templates/module/footer.vm") -------------------------------------------------------------------------------- /src/main/resources/templates/admin/blog_add.vm: -------------------------------------------------------------------------------- 1 | #include("/templates/module/admin-header.vm") 2 |
3 |
4 |
5 |
6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 | 16 | 17 |
18 | 19 | 20 |
21 |
22 |
23 |
24 |
25 |
26 | 29 | 32 | 35 |
36 |
37 |
38 |
39 | 40 |
41 |
42 |
43 |
44 | 45 |
46 |
47 |
48 |
49 | 50 |
51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/blog_list.vm: -------------------------------------------------------------------------------- 1 | #include("/templates/module/admin-header.vm") 2 |
3 |
4 |
5 |

Blog List

6 | 10 |
11 |
12 | 13 |
14 |
15 |

All Pages

16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | #foreach($item in ${blogList}) 27 | #liClass($velocityCount) 28 | 29 | 30 | 35 | 36 | #end 37 | 38 |
BlogTagsOperation
$!{item.Title}$!{item.Tags} 31 | 32 | 33 | 34 |
39 |
40 | #set($href = "/admin/blogList") 41 | #flip($pageNum $current $href) 42 |
43 | 44 |
45 |
46 |
47 |
48 | 49 |
50 | 51 | 52 | 53 | 54 | 57 | 58 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/blog_modify.vm: -------------------------------------------------------------------------------- 1 | #include("/templates/module/admin-header.vm") 2 |
3 |
4 |
5 |
6 |
7 | 8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 | 17 | 18 |
19 | 20 | 21 |
22 |
23 |
24 |
25 |
26 |
27 | 30 | 33 | 36 |
37 |
38 |
39 |
40 | 41 |
42 |
43 |
44 |
45 | 46 |
47 |
48 |
49 |
50 | 51 |
52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/monitor.vm: -------------------------------------------------------------------------------- 1 | #include("/templates/module/admin-header.vm") 2 |
3 |
4 |
5 |
6 |
7 |

The usage of memory

8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/project.vm: -------------------------------------------------------------------------------- 1 | #include("/templates/module/admin-header.vm") 2 |
3 |
4 |
5 |

Project

6 | 10 | 11 |


12 |
13 |
14 |
15 |
16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | #foreach($item in ${proList}) 26 | #liClass($velocityCount) 27 | 28 | 29 | 34 | 35 | #end 36 | 37 |
nameaddressoperation
$!{item.Name}$!{item.Url} 30 | 31 | 32 | 33 |
38 |
39 | #set($href = "/admin/project") 40 | #flip($pageNum $current $href) 41 |
42 |
43 | 44 |
45 |
46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 58 | 59 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/result.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | success 6 | 7 | #set($ta = "/") 8 | #set($ta = ${targetUrl}) 9 | 10 | 11 | 12 | 13 | #set($re = 1) 14 | #set($re = ${result}) 15 | #if(${re} > 0) 16 |

Operation succeeded!

17 |

Congratulations,your operation has been successful.

18 | #else 19 |

Operation failed!

20 |

Unfortunately,your operation has failed.

21 |
22 |

For more details, please check the log

23 | #end 24 | 25 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/resume.vm: -------------------------------------------------------------------------------- 1 | #include("/templates/module/admin-header.vm") 2 |
3 |
4 |
5 |
6 | 7 | 8 |
9 | 10 |
11 |
12 |
13 |
14 |
15 | 18 | 21 | 24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 33 |
34 |
35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/main/resources/templates/archives.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 |
6 | #foreach($archive in ${archives}) 7 |

${archive.Year}

8 | #foreach($bv in ${archive.List}) 9 |
10 |
11 | $!{bv.MonthDay} 12 |
13 | $!{bv.Title} 14 |
15 | #end 16 |

17 | #end 18 |
19 | #set($href = "/archives") 20 | #frontFlip($pageNum $current $href) 21 |
22 |
23 |
24 | #include("/templates/module/footer.vm") 25 | -------------------------------------------------------------------------------- /src/main/resources/templates/error.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Page Not Found 6 | 7 | 8 | 9 |

Page Not Found

10 |

Sorry, but the page you were trying to view does not exist.

11 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 |
6 |
7 |
8 |

java,scala,goLang:

9 |

They are three programming languages those i use most,and scala is my favorite

10 |
11 |
12 | 13 |
14 |
15 | 16 |
17 |
18 |
19 | 20 |
21 | 22 |
23 |
24 |
25 |
26 |

passion:

27 |

The reason why i become a programmer just because i like it,rather than for living

28 |
29 |
30 | 31 |
32 |
33 |
34 |
35 |
36 |
37 | 38 |
39 |
40 |
41 |
42 |

new:

43 |

I never refuse new things. for example,I use gradle instead of maven or ant,because I think gradle is better

44 |
45 |
46 | 47 |
48 |
49 |
50 |
51 | #include("/templates/module/footer.vm") -------------------------------------------------------------------------------- /src/main/resources/templates/login.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | login 6 | 7 | 8 | 9 | 10 | 11 | 13 | 42 | 43 | 44 | 45 | 46 | 47 | 60 | 61 | -------------------------------------------------------------------------------- /src/main/resources/templates/module/admin-header.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | admin 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/resources/templates/module/footer.vm: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 22 | 23 |
24 |
25 |
26 |
27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/main/resources/templates/post.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 |
6 |
7 | $!{article} 8 |
9 |
10 |

11 | #if($prev) 12 |  $!{prev.Title} 13 | #end 14 | #if($next) 15 | $!{next.Title}  16 | #end 17 |
18 |
19 |
20 | #include("/templates/module/footer.vm") 21 | -------------------------------------------------------------------------------- /src/main/resources/templates/projects.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 |
6 |
7 | #foreach($item in ${projects}) 8 |

9 | 10 | 11 | $!{item.Name}

12 |
    13 |
  • 14 | Date : $!{item.Date}
  • 15 |
  • 16 | Technology : $!{item.Tech}
  • 17 |
  • 18 | Discription : 19 |
    20 |

    $!{item.Desp}

    21 |
    22 |
  • 23 |
24 |

25 | #end 26 |
27 |
28 | #set($href = "/projects") 29 | #frontFlip($pageNum $current $href) 30 |
31 |
32 |
33 | #include("/templates/module/footer.vm") -------------------------------------------------------------------------------- /src/main/resources/templates/tagView.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 |
6 |

${tagName}

7 | #foreach($bv in ${views}) 8 |
9 |
10 | $!{bv.MonthDay} 11 |
12 | $!{bv.Title} 13 |
14 | #end 15 |

16 |
17 |
18 |
19 |
20 | #include("/templates/module/footer.vm") 21 | -------------------------------------------------------------------------------- /src/main/resources/templates/tags.vm: -------------------------------------------------------------------------------- 1 | #parse("/templates/module/header.vm") 2 |
3 |
4 |
5 |
    6 | #foreach($tag in ${tags}) 7 |
  • $!tag
  • 8 | #end 9 |
10 |
11 |
12 |
13 | #include("/templates/module/footer.vm") -------------------------------------------------------------------------------- /src/test/java/com/msun/luckyBlog/Test.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2020 msun.com All right reserved. 3 | */ 4 | package com.msun.luckyBlog; 5 | 6 | /** 7 | * @author zxc Aug 15, 2016 5:27:51 PM 8 | */ 9 | public class Test { 10 | 11 | public static void main(String[] args) { 12 | 13 | } 14 | } 15 | --------------------------------------------------------------------------------