├── .gitignore ├── src └── main │ ├── webapp │ ├── index.jsp │ ├── static │ │ ├── img │ │ │ ├── 3.png │ │ │ ├── glyphicons-halflings.png │ │ │ └── glyphicons-halflings-white.png │ │ ├── js │ │ │ ├── app.js │ │ │ ├── vue-resource.min.js │ │ │ ├── vue-router.min.js │ │ │ ├── bootstrap.min.js │ │ │ └── bootstrap.js │ │ └── css │ │ │ ├── bootstrap-responsive.min.css │ │ │ └── bootstrap-responsive.css │ └── WEB-INF │ │ ├── mvc-servlet.xml │ │ ├── web.xml │ │ └── views │ │ └── home.jsp │ ├── resources │ ├── config.properties │ ├── log4j.properties │ ├── mapper │ │ └── MovieMapper.xml │ ├── generatorConfig.xml │ └── applicationContext.xml │ └── java │ └── com │ └── kaishengit │ ├── exception │ └── NotFoundException.java │ ├── controller │ ├── HomeController.java │ └── MovieController.java │ ├── dao │ └── MovieMapper.java │ ├── service │ └── MovieService.java │ └── pojo │ └── Movie.java ├── README.md └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.ipr 3 | *.iws 4 | .idea/ 5 | target/ 6 | -------------------------------------------------------------------------------- /src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | <%response.sendRedirect("/home");%> -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### 学习Vue.js 2 | 3 | 后端使用SpringMVC3+Spring3+MyBatis3 4 | 5 | 前端Vue 6 | -------------------------------------------------------------------------------- /src/main/webapp/static/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fankay/ssmVue/HEAD/src/main/webapp/static/img/3.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fankay/ssmVue/HEAD/src/main/webapp/static/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /src/main/resources/config.properties: -------------------------------------------------------------------------------- 1 | jdbc.driver=com.mysql.jdbc.Driver 2 | jdbc.url=jdbc:mysql:///douban_movie 3 | jdbc.username=root 4 | jdbc.password=root -------------------------------------------------------------------------------- /src/main/webapp/static/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fankay/ssmVue/HEAD/src/main/webapp/static/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /src/main/java/com/kaishengit/exception/NotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.kaishengit.exception; 2 | 3 | import org.springframework.http.HttpStatus; 4 | import org.springframework.web.bind.annotation.ResponseStatus; 5 | 6 | @ResponseStatus(value = HttpStatus.NOT_FOUND) 7 | public class NotFoundException extends RuntimeException { 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/kaishengit/controller/HomeController.java: -------------------------------------------------------------------------------- 1 | package com.kaishengit.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | @Controller 7 | public class HomeController { 8 | 9 | @RequestMapping("/home") 10 | public String home() { 11 | return "home"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/kaishengit/dao/MovieMapper.java: -------------------------------------------------------------------------------- 1 | package com.kaishengit.dao; 2 | 3 | import com.kaishengit.pojo.Movie; 4 | 5 | import java.util.List; 6 | 7 | public interface MovieMapper { 8 | 9 | List findAll(); 10 | 11 | void save(Movie movie); 12 | 13 | Movie findById(Integer id); 14 | 15 | void remove(Integer id); 16 | 17 | void update(Movie movie); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.appender.sout=org.apache.log4j.ConsoleAppender 2 | log4j.appender.sout.layout=org.apache.log4j.PatternLayout 3 | log4j.appender.sout.layout.ConversionPattern=[%p]-[%m]-[%l]-[%d]%n 4 | 5 | #log4j.appender.sfile=org.apache.log4j.FileAppender 6 | #log4j.appender.sfile.layout=org.apache.log4j.PatternLayout 7 | #log4j.appender.sfile.layout.ConversionPattern=[%p]-[%m]-[%l]-[%d]%n 8 | #log4j.appender.sfile.file=D:/bbs.log 9 | 10 | #log4j.appender.sday=org.apache.log4j.DailyRollingFileAppender 11 | #log4j.appender.sday.layout=org.apache.log4j.PatternLayout 12 | #log4j.appender.sday.layout.ConversionPattern=[%p]-[%m]-[%l]-[%d]%n 13 | #log4j.appender.sday.file=D:/bbs.log 14 | #log4j.appender.sday.DatePattern='.'yyyy-MM-dd 15 | #log4j.appender.sday.Threshold=error 16 | #log4j.logger.org.apache.ibatis.logging=info 17 | #log4j.category.org.apache.ibatis=info 18 | log4j.category.org.springframework=info 19 | log4j.rootLogger=debug,sout -------------------------------------------------------------------------------- /src/main/java/com/kaishengit/service/MovieService.java: -------------------------------------------------------------------------------- 1 | package com.kaishengit.service; 2 | 3 | import com.kaishengit.dao.MovieMapper; 4 | import com.kaishengit.pojo.Movie; 5 | import org.springframework.transaction.annotation.Transactional; 6 | 7 | import javax.inject.Inject; 8 | import javax.inject.Named; 9 | import java.util.List; 10 | 11 | @Named 12 | @Transactional 13 | public class MovieService { 14 | 15 | @Inject 16 | private MovieMapper movieMapper; 17 | 18 | public List findAll() { 19 | return movieMapper.findAll(); 20 | } 21 | 22 | 23 | public void save(Movie movie) { 24 | movieMapper.save(movie); 25 | } 26 | 27 | public Movie findMovieById(Integer id) { 28 | return movieMapper.findById(id); 29 | } 30 | 31 | public void delMovie(Integer id) { 32 | movieMapper.remove(id); 33 | } 34 | 35 | public void editMovie(Movie movie) { 36 | movieMapper.update(movie); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/resources/mapper/MovieMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 15 | 16 | 17 | INSERT INTO movie(title,rate,releaseyear,sendtime,daoyan,jianjie) 18 | VALUES 19 | (#{title},#{rate},#{releaseyear},#{sendtime},#{daoyan},#{jianjie}) 20 | 21 | 22 | 23 | DELETE FROM movie WHERE id = #{id} 24 | 25 | 26 | 27 | UPDATE movie set title=#{title},rate=#{rate},releaseyear=#{releaseyear}, 28 | sendtime=#{sendtime},daoyan=#{daoyan},jianjie=#{jianjie} 29 | WHERE id = #{id} 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/main/resources/generatorConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
33 |
34 |
-------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/mvc-servlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/main/java/com/kaishengit/pojo/Movie.java: -------------------------------------------------------------------------------- 1 | package com.kaishengit.pojo; 2 | 3 | import java.io.Serializable; 4 | 5 | public class Movie implements Serializable{ 6 | private Integer id; 7 | 8 | private String title; 9 | 10 | private Float rate; 11 | 12 | private String releaseyear; 13 | 14 | private String sendtime; 15 | 16 | private String daoyan; 17 | 18 | private String jianjie; 19 | 20 | public Integer getId() { 21 | return id; 22 | } 23 | 24 | public void setId(Integer id) { 25 | this.id = id; 26 | } 27 | 28 | public String getTitle() { 29 | return title; 30 | } 31 | 32 | public void setTitle(String title) { 33 | this.title = title; 34 | } 35 | 36 | public Float getRate() { 37 | return rate; 38 | } 39 | 40 | public void setRate(Float rate) { 41 | this.rate = rate; 42 | } 43 | 44 | public String getReleaseyear() { 45 | return releaseyear; 46 | } 47 | 48 | public void setReleaseyear(String releaseyear) { 49 | this.releaseyear = releaseyear; 50 | } 51 | 52 | public String getSendtime() { 53 | return sendtime; 54 | } 55 | 56 | public void setSendtime(String sendtime) { 57 | this.sendtime = sendtime; 58 | } 59 | 60 | public String getDaoyan() { 61 | return daoyan; 62 | } 63 | 64 | public void setDaoyan(String daoyan) { 65 | this.daoyan = daoyan; 66 | } 67 | 68 | public String getJianjie() { 69 | return jianjie; 70 | } 71 | 72 | public void setJianjie(String jianjie) { 73 | this.jianjie = jianjie; 74 | } 75 | } -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | mvc 10 | org.springframework.web.servlet.DispatcherServlet 11 | 1 12 | 13 | 14 | mvc 15 | 16 | / 17 | 18 | 19 | 20 | 21 | 22 | CharacterEncodingFilter 23 | org.springframework.web.filter.CharacterEncodingFilter 24 | 25 | encoding 26 | UTF-8 27 | 28 | 29 | forceEncoding 30 | true 31 | 32 | 33 | 34 | CharacterEncodingFilter 35 | /* 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | org.springframework.web.context.ContextLoaderListener 44 | 45 | 46 | contextConfigLocation 47 | classpath*:applicationContext*.xml 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /src/main/java/com/kaishengit/controller/MovieController.java: -------------------------------------------------------------------------------- 1 | package com.kaishengit.controller; 2 | 3 | import com.kaishengit.pojo.Movie; 4 | import com.kaishengit.service.MovieService; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.PathVariable; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.bind.annotation.ResponseBody; 10 | 11 | import javax.inject.Inject; 12 | import java.util.List; 13 | 14 | @Controller 15 | @RequestMapping("/movie") 16 | public class MovieController { 17 | 18 | @Inject 19 | private MovieService movieService; 20 | 21 | @RequestMapping(method = RequestMethod.GET) 22 | @ResponseBody 23 | public List list() { 24 | return movieService.findAll(); 25 | } 26 | 27 | @RequestMapping(value = "/{id:\\d+}.json",method = RequestMethod.GET) 28 | @ResponseBody 29 | public Movie viewMovie(@PathVariable Integer id) { 30 | return movieService.findMovieById(id); 31 | } 32 | 33 | @RequestMapping(value = "/new",method = RequestMethod.POST) 34 | @ResponseBody 35 | public Movie newMovie(Movie movie) { 36 | movieService.save(movie); 37 | return movie; 38 | } 39 | 40 | @RequestMapping(value = "/{id:\\d+}",method = RequestMethod.DELETE) 41 | @ResponseBody 42 | public String remove(@PathVariable Integer id) { 43 | movieService.delMovie(id); 44 | return "success"; 45 | } 46 | 47 | @RequestMapping(value = "/edit",method = RequestMethod.POST) 48 | @ResponseBody 49 | public String update(Movie movie) { 50 | movieService.editMovie(movie); 51 | return "success"; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/resources/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/app.js: -------------------------------------------------------------------------------- 1 | Vue.use(VueRouter); 2 | //Vue.config.debug = true; 3 | 4 | Vue.http.options.emulateJSON = true; 5 | 6 | var Home = Vue.extend({ 7 | template:'#tableTemplate', 8 | data:function(){ 9 | this.$http.get("/movie.json").then(function(response){ 10 | this.$set('movies',response.data); 11 | }).catch(function(){ 12 | alert("获取服务器端数据错误"); 13 | }); 14 | return { 15 | movies:[] 16 | }; 17 | } 18 | }); 19 | 20 | var ViewMovie = Vue.extend({ 21 | template:"#movieTemplate", 22 | data:function(){ 23 | this.$http.get("/movie/"+this.$route.params.movieId+".json").then(function(response){ 24 | this.$set('movie',response.data); 25 | }).catch(function(){ 26 | alert("获取服务器数据错误"); 27 | }); 28 | return { 29 | movie:{} 30 | }; 31 | }, 32 | methods:{ 33 | remove:function(movie){ 34 | if(confirm("确定要删除该影片吗")) { 35 | this.$http.delete("/movie/"+movie.id).then(function(response){ 36 | if(response.data == "success") { 37 | router.replace({path:'/'}); 38 | } 39 | }).catch(function(ex){ 40 | alert("删除数据错误:" + ex); 41 | }); 42 | } 43 | }, 44 | edit:function(movie){ 45 | router.go({name:'editMovie',params:{"movieId":movie.id}}); 46 | } 47 | } 48 | }); 49 | 50 | var NewMovie = Vue.extend({ 51 | template:"#newTemplate", 52 | data:function(){ 53 | return { 54 | movie:{} 55 | }; 56 | }, 57 | methods:{ 58 | save:function(){ 59 | this.$http.post("/movie/new",this.movie).then(function(response){ 60 | if(response.data) { 61 | router.replace({name:'movieView',params:{movieId:response.data.id}}); 62 | } 63 | }).catch(function(ex){ 64 | alert("数据保存错误" + ex); 65 | }); 66 | } 67 | } 68 | }); 69 | var EditMovie = Vue.extend({ 70 | template:"#editTemplate", 71 | data:function(){ 72 | this.$http.get("/movie/"+this.$route.params.movieId+".json").then(function(response){ 73 | this.$set("movie",response.data); 74 | }).catch(function(ex){ 75 | alert("获取数据异常:" + ex); 76 | }); 77 | return { 78 | movie:{} 79 | }; 80 | }, 81 | methods:{ 82 | save:function(){ 83 | this.$http.post("/movie/edit",this.movie).then(function(response){ 84 | if(response.data == "success") { 85 | router.replace({name:'movieView',params:{movieId:this.movie.id}}); 86 | } 87 | }).catch(function(ex){ 88 | alert("保存数据异常:" + ex); 89 | }); 90 | } 91 | } 92 | }); 93 | 94 | 95 | 96 | var App = Vue.extend({}); 97 | var router = new VueRouter(); 98 | router.map({ 99 | '/':{ 100 | component:Home 101 | }, 102 | '/movie/:movieId':{ 103 | name:'movieView', 104 | component:ViewMovie 105 | }, 106 | '/new':{ 107 | component:NewMovie 108 | }, 109 | '/edit/:movieId':{ 110 | name:"editMovie", 111 | component:EditMovie 112 | } 113 | }); 114 | router.start(App, '#app'); 115 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/views/home.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 |
11 | 12 |
13 | 14 | 15 | 16 | 17 | 42 | 51 | 71 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.kaishengit 5 | framework 6 | war 7 | 1.0-SNAPSHOT 8 | framework Maven Webapp 9 | http://maven.apache.org 10 | 11 | 12 | junit 13 | junit 14 | 3.8.1 15 | 16 | 17 | 18 | mysql 19 | mysql-connector-java 20 | 5.1.38 21 | 22 | 23 | 24 | javax.servlet 25 | javax.servlet-api 26 | 3.1.0 27 | provided 28 | 29 | 30 | jstl 31 | jstl 32 | 1.2 33 | 34 | 35 | 36 | 37 | org.mybatis 38 | mybatis 39 | 3.3.0 40 | 41 | 42 | 43 | com.google.guava 44 | guava 45 | 18.0 46 | 47 | 48 | log4j 49 | log4j 50 | 1.2.17 51 | 52 | 53 | org.slf4j 54 | slf4j-api 55 | 1.7.13 56 | 57 | 58 | org.slf4j 59 | slf4j-log4j12 60 | 1.7.13 61 | 62 | 63 | 64 | org.springframework 65 | spring-context 66 | 3.2.16.RELEASE 67 | 68 | 69 | org.springframework 70 | spring-aop 71 | 3.2.16.RELEASE 72 | 73 | 74 | org.springframework 75 | spring-aspects 76 | 3.2.16.RELEASE 77 | 78 | 79 | org.springframework 80 | spring-jdbc 81 | 3.2.16.RELEASE 82 | 83 | 84 | org.springframework 85 | spring-webmvc 86 | 3.2.16.RELEASE 87 | 88 | 89 | org.springframework 90 | spring-web 91 | 3.2.16.RELEASE 92 | 93 | 94 | 95 | com.fasterxml.jackson.core 96 | jackson-databind 97 | 2.6.4 98 | 99 | 100 | 101 | commons-fileupload 102 | commons-fileupload 103 | 1.3.1 104 | 105 | 106 | 107 | 108 | org.mybatis 109 | mybatis-spring 110 | 1.2.3 111 | 112 | 113 | 114 | 115 | 116 | javax.inject 117 | javax.inject 118 | 1 119 | 120 | 121 | 122 | commons-dbcp 123 | commons-dbcp 124 | 1.4 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | framework 136 | 137 | 138 | org.mybatis.generator 139 | mybatis-generator-maven-plugin 140 | 1.3.2 141 | 142 | 143 | org.apache.tomcat.maven 144 | tomcat7-maven-plugin 145 | 2.2 146 | 147 | 80 148 | / 149 | 150 | 151 | 152 | 153 | 154 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/vue-resource.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * vue-resource v0.6.1 3 | * https://github.com/vuejs/vue-resource 4 | * Released under the MIT License. 5 | */ 6 | 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.VueResource=e():t.VueResource=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){function r(t){var e=n(1);e.config=t.config,e.warning=t.util.warn,e.nextTick=t.util.nextTick,t.url=n(2),t.http=n(8),t.resource=n(23),t.Promise=n(10),Object.defineProperties(t.prototype,{$url:{get:function(){return e.options(t.url,this,this.$options.url)}},$http:{get:function(){return e.options(t.http,this,this.$options.http)}},$resource:{get:function(){return t.resource.bind(this)}},$promise:{get:function(){return function(e){return new t.Promise(e,this)}.bind(this)}}})}window.Vue&&Vue.use(r),t.exports=r},function(t,e){function n(t,e,o){for(var i in e)o&&(r.isPlainObject(e[i])||r.isArray(e[i]))?(r.isPlainObject(e[i])&&!r.isPlainObject(t[i])&&(t[i]={}),r.isArray(e[i])&&!r.isArray(t[i])&&(t[i]=[]),n(t[i],e[i],o)):void 0!==e[i]&&(t[i]=e[i])}var r=e,o=[],i=window.console;r.warn=function(t){i&&r.warning&&(!r.config.silent||r.config.debug)&&i.warn("[VueResource warn]: "+t)},r.error=function(t){i&&i.error(t)},r.trim=function(t){return t.replace(/^\s*|\s*$/g,"")},r.toLower=function(t){return t?t.toLowerCase():""},r.isArray=Array.isArray,r.isString=function(t){return"string"==typeof t},r.isFunction=function(t){return"function"==typeof t},r.isObject=function(t){return null!==t&&"object"==typeof t},r.isPlainObject=function(t){return r.isObject(t)&&Object.getPrototypeOf(t)==Object.prototype},r.options=function(t,e,n){return n=n||{},r.isFunction(n)&&(n=n.call(e)),r.merge(t.bind({$vm:e,$options:n}),t,{$options:n})},r.each=function(t,e){var n,o;if("number"==typeof t.length)for(n=0;n=200&&t.status<300,t})}},function(t,e,n){function r(t,e){t instanceof i?this.promise=t:this.promise=new i(t.bind(e)),this.context=e}var o=n(1),i=window.Promise||n(11);r.all=function(t,e){return new r(i.all(t),e)},r.resolve=function(t,e){return new r(i.resolve(t),e)},r.reject=function(t,e){return new r(i.reject(t),e)},r.race=function(t,e){return new r(i.race(t),e)};var s=r.prototype;s.bind=function(t){return this.context=t,this},s.then=function(t,e){return t&&t.bind&&this.context&&(t=t.bind(this.context)),e&&e.bind&&this.context&&(e=e.bind(this.context)),this.promise=this.promise.then(t,e),this},s["catch"]=function(t){return t&&t.bind&&this.context&&(t=t.bind(this.context)),this.promise=this.promise["catch"](t),this},s["finally"]=function(t){return this.then(function(e){return t.call(this),e},function(e){return t.call(this),i.reject(e)})},s.success=function(t){return o.warn("The `success` method has been deprecated. Use the `then` method instead."),this.then(function(e){return t.call(this,e.data,e.status,e)||e})},s.error=function(t){return o.warn("The `error` method has been deprecated. Use the `catch` method instead."),this["catch"](function(e){return t.call(this,e.data,e.status,e)||e})},s.always=function(t){o.warn("The `always` method has been deprecated. Use the `finally` method instead.");var e=function(e){return t.call(this,e.data,e.status,e)||e};return this.then(e,e)},t.exports=r},function(t,e,n){function r(t){this.state=a,this.value=void 0,this.deferred=[];var e=this;try{t(function(t){e.resolve(t)},function(t){e.reject(t)})}catch(n){e.reject(n)}}var o=n(1),i=0,s=1,a=2;r.reject=function(t){return new r(function(e,n){n(t)})},r.resolve=function(t){return new r(function(e,n){e(t)})},r.all=function(t){return new r(function(e,n){function o(n){return function(r){s[n]=r,i+=1,i===t.length&&e(s)}}var i=0,s=[];0===t.length&&e(s);for(var a=0;ali{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} 10 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/vue-router.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * vue-router v0.7.8 3 | * (c) 2016 Evan You 4 | * Released under the MIT License. 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueRouter=e()}(this,function(){"use strict";function t(t,e,n){this.path=t,this.matcher=e,this.delegate=n}function e(t){this.routes={},this.children={},this.target=t}function n(e,r,i){return function(o,a){var s=e+o;return a?void a(n(s,r,i)):new t(e+o,r,i)}}function r(t,e,n){for(var r=0,i=0,o=t.length;o>i;i++)r+=t[i].path.length;e=e.substr(r);var a={path:e,handler:n};t.push(a)}function i(t,e,n,o){var a=e.routes;for(var s in a)if(a.hasOwnProperty(s)){var h=t.slice();r(h,s,a[s]),e.children[s]?i(h,e.children[s],n,o):n.call(o,h)}}function o(t,r){var o=new e;t(n("",o,this.delegate)),i([],o,function(t){r?r(this,t):this.add(t)},this)}function a(t){return"[object Array]"===Object.prototype.toString.call(t)}function s(t){this.string=t}function h(t){this.name=t}function c(t){this.name=t}function u(){}function l(t,e,n){"/"===t.charAt(0)&&(t=t.substr(1));var r=t.split("/"),i=[];n.val="";for(var o=0,a=r.length;a>o;o++){var l,p=r[o];(l=p.match(/^:([^\/]+)$/))?(i.push(new h(l[1])),e.push(l[1]),n.val+="3"):(l=p.match(/^\*([^\/]+)$/))?(i.push(new c(l[1])),n.val+="2",e.push(l[1])):""===p?(i.push(new u),n.val+="1"):(i.push(new s(p)),n.val+="4")}return n.val=+n.val,i}function p(t){this.charSpec=t,this.nextStates=[]}function f(t){return t.sort(function(t,e){return e.specificity.val-t.specificity.val})}function d(t,e){for(var n=[],r=0,i=t.length;i>r;r++){var o=t[r];n=n.concat(o.match(e))}return n}function v(t){this.queryParams=t||{}}function g(t,e,n){for(var r=t.handlers,i=t.regex,o=e.match(i),a=1,s=new v(n),h=0,c=r.length;c>h;h++){for(var u=r[h],l=u.names,p={},f=0,d=l.length;d>f;f++)p[l[f]]=o[a++];s.push({handler:u.handler,params:p,isDynamic:!!l.length})}return s}function y(t,e){return e.eachChar(function(e){t=t.put(e)}),t}function m(t){return t=t.replace(/\+/gm,"%20"),decodeURIComponent(t)}function _(t){window.console&&(console.warn("[vue-router] "+t),(!N.Vue||N.Vue.config.debug)&&console.warn(new Error("warning stack trace:").stack))}function w(t,e,n){var r=t.match(/(\?.*)$/);if(r&&(r=r[1],t=t.slice(0,-r.length)),"?"===e.charAt(0))return t+e;var i=t.split("/");n&&i[i.length-1]||i.pop();for(var o=e.replace(/^\//,"").split("/"),a=0;a can only be used inside a router-enabled app.");this._isDynamicLiteral=!0,n.bind.call(this);for(var e=void 0,r=this.vm;r;){if(r._routerView){e=r._routerView;break}r=r.$parent}if(e)this.parentView=e,e.childView=this;else{var i=t.router;i._rootView=this}var o=t.router._currentTransition;if(!e&&o.done||e&&e.activated){var a=e?e.depth+1:0;V(this,o,a)}},unbind:function(){this.parentView&&(this.parentView.childView=null),n.unbind.call(this)}}),t.elementDirective("router-view",r)}function q(t){function e(t){return t.protocol===location.protocol&&t.hostname===location.hostname&&t.port===location.port}var n=t.util,r=n.bind,i=n.isObject,o=n.addClass,a=n.removeClass;t.directive("link-active",{priority:1001,bind:function(){this.el.__v_link_active=!0}}),t.directive("link",{priority:1e3,bind:function(){var t=this.vm;if(!t.$route)return void _("v-link can only be used inside a router-enabled app.");if(this.router=t.$route.router,this.unwatch=t.$watch("$route",r(this.onRouteUpdate,this)),"A"!==this.el.tagName||"_blank"!==this.el.getAttribute("target")){this.el.addEventListener("click",r(this.onClick,this)),this.activeEl=this.el;for(var e=this.el.parentNode;e;){if(e.__v_link_active){this.activeEl=e;break}e=e.parentNode}}},update:function(t){this.target=t,i(t)&&(this.append=t.append,this.exact=t.exact,this.prevActiveClass=this.activeClass,this.activeClass=t.activeClass),this.onRouteUpdate(this.vm.$route)},onClick:function(t){if(!(t.metaKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||0!==t.button)){var n=this.target;if(n)t.preventDefault(),this.router.go(n);else{for(var r=t.target;"A"!==r.tagName&&r!==this.el;)r=r.parentNode;"A"===r.tagName&&e(r)&&(t.preventDefault(),this.router.go({path:r.pathname,replace:n&&n.replace,append:n&&n.append}))}}},onRouteUpdate:function(t){var e=this.router._stringifyPath(this.target);this.path!==e&&(this.path=e,this.updateActiveMatch(),this.updateHref()),this.updateClasses(t.path)},updateActiveMatch:function(){this.activeRE=this.path&&!this.exact?new RegExp("^"+this.path.replace(/\/$/,"").replace(nt,"").replace(et,"\\$&")+"(\\/|$)"):null},updateHref:function(){if("A"===this.el.tagName){if(this.target&&this.target.name)return void(this.el.href="#"+this.target.name);var t=this.path,e=this.router,n="/"===t.charAt(0),r=t&&("hash"===e.mode||n)?e.history.formatPath(t,this.append):t;r?this.el.href=r:this.el.removeAttribute("href")}},updateClasses:function(t){var e=this.activeEl,n=this.activeClass||this.router._linkActiveClass;this.prevActiveClass!==n&&a(e,this.prevActiveClass);var r=this.path.replace(nt,"");t=t.replace(nt,""),this.exact?r===t||"/"!==r.charAt(r.length-1)&&r===t.replace(tt,"")?o(e,n):a(e,n):this.activeRE&&this.activeRE.test(t)?o(e,n):a(e,n)},unbind:function(){this.el.removeEventListener("click",this.handler),this.unwatch&&this.unwatch()}})}function D(t,e){var n=e.component;it.util.isPlainObject(n)&&(n=e.component=it.extend(n)),"function"!=typeof n&&(e.component=null,_('invalid component for route "'+t+'".'))}var z={};z.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.prototype={to:function(t,e){var n=this.delegate;if(n&&n.willAddRoute&&(t=n.willAddRoute(this.matcher.target,t)),this.matcher.add(this.path,t),e){if(0===e.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,t,e,this.delegate)}return this}},e.prototype={add:function(t,e){this.routes[t]=e},addChild:function(t,r,i,o){var a=new e(r);this.children[t]=a;var s=n(t,a,o);o&&o.contextEntered&&o.contextEntered(r,s),i(s)}};var Q=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],F=new RegExp("(\\"+Q.join("|\\")+")","g");s.prototype={eachChar:function(t){for(var e,n=this.string,r=0,i=n.length;i>r;r++)e=n.charAt(r),t({validChars:e})},regex:function(){return this.string.replace(F,"\\$1")},generate:function(){return this.string}},h.prototype={eachChar:function(t){t({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(t){return t[this.name]}},c.prototype={eachChar:function(t){t({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(t){return t[this.name]}},u.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}},p.prototype={get:function(t){for(var e=this.nextStates,n=0,r=e.length;r>n;n++){var i=e[n],o=i.charSpec.validChars===t.validChars;if(o=o&&i.charSpec.invalidChars===t.invalidChars)return i}},put:function(t){var e;return(e=this.get(t))?e:(e=new p(t),this.nextStates.push(e),t.repeat&&e.nextStates.push(e),e)},match:function(t){for(var e,n,r,i=this.nextStates,o=[],a=0,s=i.length;s>a;a++)e=i[a],n=e.charSpec,"undefined"!=typeof(r=n.validChars)?-1!==r.indexOf(t)&&o.push(e):"undefined"!=typeof(r=n.invalidChars)&&-1===r.indexOf(t)&&o.push(e);return o}};var U=Object.create||function(t){function e(){}return e.prototype=t,new e};v.prototype=U({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var L=function(){this.rootState=new p,this.names={}};L.prototype={add:function(t,e){for(var n,r=this.rootState,i="^",o={},a=[],s=[],h=!0,c=0,p=t.length;p>c;c++){var f=t[c],d=[],v=l(f.path,d,o);s=s.concat(v);for(var g=0,m=v.length;m>g;g++){var _=v[g];_ instanceof u||(h=!1,r=r.put({validChars:"/"}),i+="/",r=y(r,_),i+=_.regex())}var w={handler:f.handler,names:d};a.push(w)}h&&(r=r.put({validChars:"/"}),i+="/"),r.handlers=a,r.regex=new RegExp(i+"$"),r.specificity=o,(n=e&&e.as)&&(this.names[n]={segments:s,handlers:a})},handlersFor:function(t){var e=this.names[t],n=[];if(!e)throw new Error("There is no route named "+t);for(var r=0,i=e.handlers.length;i>r;r++)n.push(e.handlers[r]);return n},hasRoute:function(t){return!!this.names[t]},generate:function(t,e){var n=this.names[t],r="";if(!n)throw new Error("There is no route named "+t);for(var i=n.segments,o=0,a=i.length;a>o;o++){var s=i[o];s instanceof u||(r+="/",r+=s.generate(e))}return"/"!==r.charAt(0)&&(r="/"+r),e&&e.queryParams&&(r+=this.generateQueryString(e.queryParams)),r},generateQueryString:function(t){var e=[],n=[];for(var r in t)t.hasOwnProperty(r)&&n.push(r);n.sort();for(var i=0,o=n.length;o>i;i++){r=n[i];var s=t[r];if(null!=s){var h=encodeURIComponent(r);if(a(s))for(var c=0,u=s.length;u>c;c++){var l=r+"[]="+encodeURIComponent(s[c]);e.push(l)}else h+="="+encodeURIComponent(s),e.push(h)}}return 0===e.length?"":"?"+e.join("&")},parseQueryString:function(t){for(var e=t.split("&"),n={},r=0;r2&&"[]"===a.slice(s-2)&&(h=!0,a=a.slice(0,s-2),n[a]||(n[a]=[])),i=o[1]?m(o[1]):""),h?n[a].push(i):n[a]=i}return n},recognize:function(t){var e,n,r,i,o=[this.rootState],a={},s=!1;if(i=t.indexOf("?"),-1!==i){var h=t.substr(i+1,t.length);t=t.substr(0,i),a=this.parseQueryString(h)}for(t=decodeURI(t),"/"!==t.charAt(0)&&(t="/"+t),e=t.length,e>1&&"/"===t.charAt(e-1)&&(t=t.substr(0,e-1),s=!0),n=0,r=t.length;r>n&&(o=d(o,t.charAt(n)),o.length);n++);var c=[];for(n=0,r=o.length;r>n;n++)o[n].handlers&&c.push(o[n]);o=f(c);var u=c[0];return u&&u.handlers?(s&&"(.+)$"===u.regex.source.slice(-5)&&(t+="/"),g(u,t,a)):void 0}},L.prototype.map=o,L.VERSION="0.1.9";var I=L.prototype.generateQueryString,N={},B=void 0,G=/#.*$/,K=function(){function t(e){var n=e.root,r=e.onChange;z.classCallCheck(this,t),n?("/"!==n.charAt(0)&&(n="/"+n),this.root=n.replace(/\/$/,""),this.rootRE=new RegExp("^\\"+this.root)):this.root=null,this.onChange=r;var i=document.querySelector("base");this.base=i&&i.getAttribute("href")}return t.prototype.start=function(){var t=this;this.listener=function(e){var n=decodeURI(location.pathname+location.search);t.root&&(n=n.replace(t.rootRE,"")),t.onChange(n,e&&e.state,location.hash)},window.addEventListener("popstate",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("popstate",this.listener)},t.prototype.go=function(t,e,n){var r=this.formatPath(t,n);e?history.replaceState({},"",r):(history.replaceState({pos:{x:window.pageXOffset,y:window.pageYOffset}},""),history.pushState({},"",r));var i=t.match(G),o=i&&i[0];t=r.replace(G,"").replace(this.rootRE,""),this.onChange(t,null,o)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?this.root?this.root+"/"+t.replace(/^\//,""):t:w(this.base||location.pathname,t,e)},t}(),X=function(){function t(e){var n=e.hashbang,r=e.onChange;z.classCallCheck(this,t),this.hashbang=n,this.onChange=r}return t.prototype.start=function(){var t=this;this.listener=function(){var e=location.hash,n=e.replace(/^#!?/,"");"/"!==n.charAt(0)&&(n="/"+n);var r=t.formatPath(n);if(r!==e)return void location.replace(r);var i=location.search&&e.indexOf("?")>-1?"&"+location.search.slice(1):location.search;t.onChange(decodeURI(e.replace(/^#!?/,"")+i))},window.addEventListener("hashchange",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("hashchange",this.listener)},t.prototype.go=function(t,e,n){t=this.formatPath(t,n),e?location.replace(t):location.hash=t},t.prototype.formatPath=function(t,e){var n="/"===t.charAt(0),r="#"+(this.hashbang?"!":"");return n?r+t:r+w(location.hash.replace(/^#!?/,""),t,e)},t}(),Y=function(){function t(e){var n=e.onChange;z.classCallCheck(this,t),this.onChange=n,this.currentPath="/"}return t.prototype.start=function(){this.onChange("/")},t.prototype.stop=function(){},t.prototype.go=function(t,e,n){t=this.currentPath=this.formatPath(t,n),this.onChange(t)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?t:w(this.currentPath,t,e)},t}(),J=function(){function t(e,n,r){z.classCallCheck(this,t),this.router=e,this.to=n,this.from=r,this.next=null,this.aborted=!1,this.done=!1}return t.prototype.abort=function(){if(!this.aborted){this.aborted=!0;var t=!this.from.path&&"/"===this.to.path;t||this.router.replace(this.from.path||"/")}},t.prototype.redirect=function(t){this.aborted||(this.aborted=!0,"string"==typeof t?t=k(t,this.to.params,this.to.query):(t.params=t.params||this.to.params,t.query=t.query||this.to.query),this.router.replace(t))},t.prototype.start=function(t){for(var e=this,n=[],r=this.router._rootView;r;)n.unshift(r),r=r.childView;var i=n.slice().reverse(),o=this.activateQueue=H(this.to.matched).map(function(t){return t.handler}),a=void 0,s=void 0;for(a=0;a0&&(s=i.slice(0,a),n=i.slice(a).reverse(),o=o.slice(a)),e.runQueue(n,$,function(){e.runQueue(o,x,function(){e.runQueue(n,E,function(){if(e.router._onTransitionValidated(e),s&&s.forEach(function(t){return S(t,e)}),n.length){var r=n[n.length-1],i=s?s.length:0;V(r,e,i,t)}else t()})})})},t.prototype.runQueue=function(t,e,n){function r(o){o>=t.length?n():e(t[o],i,function(){r(o+1)})}var i=this;r(0)},t.prototype.callHook=function(t,e,n){var r=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],i=r.expectBoolean,o=void 0===i?!1:i,a=r.expectData,s=void 0===a?!1:a,h=r.cleanup,c=this,u=!1,l=function(){h&&h(),c.abort()},p=function(t){if(h?f():l(),t&&!c.router._suppress)throw _("Uncaught error during transition: "),t instanceof Error?t:new Error(t)},f=function(t){return u?void _("transition.next() should be called only once."):(u=!0,c.aborted?void(h&&h()):void(n&&n(t,p)))},d={to:c.to,from:c.from,abort:l,next:f,redirect:function(){c.redirect.apply(c,arguments)}},v=void 0;try{v=t.call(e,d)}catch(g){return p(g)}var y=b(v);o?"boolean"==typeof v?v?f():l():y?v.then(function(t){t?f():l()},p):t.length||f(v):y?v.then(f,p):(s&&T(v)||!t.length)&&f(v)},t.prototype.callHooks=function(t,e,n,r){var i=this;Array.isArray(t)?!function(){var o=[];o._needMerge=!0;var a=void 0;i.runQueue(t,function(t,n,a){i.aborted||i.callHook(t,e,function(t,e){t&&o.push(t),e=e,a()},r)},function(){n(o,a)})}():this.callHook(t,e,n,r)},t}(),W=/^(component|subRoutes)$/,Z=function at(t,e){var n=this;z.classCallCheck(this,at);var r=e._recognizer.recognize(t);r&&([].forEach.call(r,function(t){for(var e in t.handler)W.test(e)||(n[e]=t.handler[e])}),this.query=r.queryParams,this.params=[].reduce.call(r,function(t,e){if(e.params)for(var n in e.params)t[n]=e.params[n];return t},{})),this.path=t,this.router=e,this.matched=r||e._notFoundHandler,Object.freeze(this)},tt=/\/$/,et=/[-.*+?^${}()|[\]\/\\]/g,nt=/\?.*$/,rt={"abstract":Y,hash:X,html5:K},it=void 0,ot=function(){function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=e.hashbang,r=void 0===n?!0:n,i=e["abstract"],o=void 0===i?!1:i,a=e.history,s=void 0===a?!1:a,h=e.saveScrollPosition,c=void 0===h?!1:h,u=e.transitionOnLoad,l=void 0===u?!1:u,p=e.suppressTransitionError,f=void 0===p?!1:p,d=e.root,v=void 0===d?null:d,g=e.linkActiveClass,y=void 0===g?"v-link-active":g;if(z.classCallCheck(this,t),!t.installed)throw new Error("Please install the Router with Vue.use() before creating an instance.");this.app=null,this._children=[],this._recognizer=new L,this._guardRecognizer=new L,this._started=!1,this._startCb=null,this._currentRoute={},this._currentTransition=null,this._previousTransition=null,this._notFoundHandler=null,this._notFoundRedirect=null,this._beforeEachHooks=[],this._afterEachHooks=[],this._hasPushState="undefined"!=typeof window&&window.history&&window.history.pushState,this._rendered=!1,this._transitionOnLoad=l,this._abstract=o,this._hashbang=r,this._history=this._hasPushState&&s,this._saveScrollPosition=c,this._linkActiveClass=y,this._suppress=f;var m=it.util.inBrowser;this.mode=!m||this._abstract?"abstract":this._history?"html5":"hash";var _=rt[this.mode],w=this;this.history=new _({root:v,hashbang:this._hashbang,onChange:function(t,e,n){w._match(t,e,n)}})}return t.prototype.map=function(t){for(var e in t)this.on(e,t[e]);return this},t.prototype.on=function(t,e){return"*"===t?this._notFound(e):this._addRoute(t,e,[]),this},t.prototype.redirect=function(t){for(var e in t)this._addRedirect(e,t[e]);return this},t.prototype.alias=function(t){for(var e in t)this._addAlias(e,t[e]);return this},t.prototype.beforeEach=function(t){return this._beforeEachHooks.push(t),this},t.prototype.afterEach=function(t){return this._afterEachHooks.push(t),this},t.prototype.go=function(t){var e=!1,n=!1;it.util.isObject(t)&&(e=t.replace,n=t.append),t=this._stringifyPath(t),t&&this.history.go(t,e,n)},t.prototype.replace=function(t){"string"==typeof t&&(t={path:t}),t.replace=!0,this.go(t)},t.prototype.start=function(t,e,n){if(this._started)return void _("already started.");if(this._started=!0,this._startCb=n,!this.app){if(!t||!e)throw new Error("Must start vue-router with a component and a root container.");if(t instanceof it)throw new Error("Must start vue-router with a component, not a Vue instance.");this._appContainer=e;var r=this._appConstructor="function"==typeof t?t:it.extend(t);r.options.name=r.options.name||"RouterApp"}this.history.start()},t.prototype.stop=function(){this.history.stop(),this._started=!1},t.prototype._addRoute=function(t,e,n){if(D(t,e),e.path=t,e.fullPath=(n.reduce(function(t,e){return t+e.path},"")+t).replace("//","/"),n.push({path:t,handler:e}),this._recognizer.add(n,{as:e.name}),e.subRoutes)for(var r in e.subRoutes)this._addRoute(r,e.subRoutes[r],n.slice())},t.prototype._notFound=function(t){D("*",t),this._notFoundHandler=[{handler:t}]},t.prototype._addRedirect=function(t,e){"*"===t?this._notFoundRedirect=e:this._addGuard(t,e,this.replace)},t.prototype._addAlias=function(t,e){this._addGuard(t,e,this._match)},t.prototype._addGuard=function(t,e,n){var r=this;this._guardRecognizer.add([{path:t,handler:function(t,i){var o=k(e,t.params,i);n.call(r,o)}}])},t.prototype._checkGuard=function(t){var e=this._guardRecognizer.recognize(t);return e?(e[0].handler(e[0],e.queryParams),!0):this._notFoundRedirect&&(e=this._recognizer.recognize(t),!e)?(this.replace(this._notFoundRedirect),!0):void 0},t.prototype._match=function(t,e,n){var r=this;if(!this._checkGuard(t)){var i=this._currentRoute,o=this._currentTransition;if(o){if(o.to.path===t)return;if(i.path===t)return o.aborted=!0,void(this._currentTransition=this._prevTransition);o.aborted=!0}var a=new Z(t,this),s=new J(this,a,i);this._prevTransition=o,this._currentTransition=s,this.app||!function(){var t=r;r.app=new r._appConstructor({el:r._appContainer,created:function(){this.$router=t},_meta:{$route:a}})}();var h=this._beforeEachHooks,c=function(){s.start(function(){r._postTransition(a,e,n)})};h.length?s.runQueue(h,function(t,e,n){s===r._currentTransition&&s.callHook(t,null,n,{expectBoolean:!0})},c):c(),!this._rendered&&this._startCb&&this._startCb.call(null),this._rendered=!0}},t.prototype._onTransitionValidated=function(t){var e=this._currentRoute=t.to;this.app.$route!==e&&(this.app.$route=e,this._children.forEach(function(t){t.$route=e})),this._afterEachHooks.length&&this._afterEachHooks.forEach(function(e){return e.call(null,{to:t.to,from:t.from})}),this._currentTransition.done=!0},t.prototype._postTransition=function(t,e,n){var r=e&&e.pos;r&&this._saveScrollPosition?it.nextTick(function(){window.scrollTo(r.x,r.y)}):n&&it.nextTick(function(){var t=document.getElementById(n.slice(1));t&&window.scrollTo(window.scrollX,t.offsetTop)})},t.prototype._stringifyPath=function(t){if(t&&"object"==typeof t){if(t.name){var e=it.util.extend,n=this._currentTransition.to.params,r=t.params||{},i=n?e(e({},n),r):r;return t.query&&(i.queryParams=t.query),this._recognizer.generate(t.name,i)}if(t.path){var o=t.path;if(t.query){var a=this._recognizer.generateQueryString(t.query);o+=o.indexOf("?")>-1?"&"+a.slice(1):a}return o}return""}return t?t+"":""},t}();return ot.installed=!1,ot.install=function(t){return ot.installed?void _("already installed."):(it=t,j(it),M(it),q(it),N.Vue=it,void(ot.installed=!0))},"undefined"!=typeof window&&window.Vue&&window.Vue.use(ot),ot}); -------------------------------------------------------------------------------- /src/main/webapp/static/js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap.js by @fat & @mdo 3 | * Copyright 2013 Twitter, Inc. 4 | * http://www.apache.org/licenses/LICENSE-2.0.txt 5 | */ 6 | !function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('