├── SSM_CRUD ├── src ├── main │ ├── webapp │ │ ├── images │ │ │ └── ico.jpeg │ │ ├── static │ │ │ ├── bootstrap-3.3.7-dist │ │ │ │ ├── fonts │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ ├── js │ │ │ │ │ └── npm.js │ │ │ │ └── css │ │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ │ └── bootstrap-theme.css │ │ │ └── js │ │ │ │ └── index.crud.js │ │ ├── WEB-INF │ │ │ └── web.xml │ │ ├── index.html │ │ └── index.jsp │ ├── resources │ │ ├── db.properties │ │ ├── mybatis-config.xml │ │ ├── spring │ │ │ ├── dispatcherServlet-servlet.xml │ │ │ └── applicationContext.xml │ │ └── mapper │ │ │ ├── DepartmentMapper.xml │ │ │ └── EmployeeMapper.xml │ └── java │ │ └── com │ │ └── jelly │ │ └── crud │ │ ├── bean │ │ ├── Department.java │ │ ├── Employee.java │ │ ├── DepartmentExample.java │ │ └── EmployeeExample.java │ │ ├── service │ │ ├── DepartmentService.java │ │ └── EmployeeService.java │ │ ├── controller │ │ ├── DepartmentController.java │ │ └── EmployeeController.java │ │ ├── dao │ │ ├── DepartmentMapper.java │ │ └── EmployeeMapper.java │ │ └── util │ │ └── Msg.java └── test │ └── java │ └── com │ └── jelly │ └── crud │ └── dao │ └── ArraryListTest.java ├── .idea ├── encodings.xml ├── modules.xml ├── artifacts │ ├── SSM_CRUD_war.xml │ └── SSM_CRUD_war_exploded.xml ├── libraries │ ├── Maven__jstl_jstl_1_2.xml │ ├── Maven__c3p0_c3p0_0_9_1.xml │ ├── Maven__junit_junit_4_12.xml │ ├── Maven__org_mybatis_mybatis_3_4_2.xml │ ├── Maven__com_fasterxml_classmate_1_3_1.xml │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml │ ├── Maven__org_aspectj_aspectjweaver_1_8_9.xml │ ├── Maven__org_mybatis_mybatis_spring_1_3_1.xml │ ├── Maven__commons_logging_commons_logging_1_2.xml │ ├── Maven__com_github_jsqlparser_jsqlparser_0_9_5.xml │ ├── Maven__com_github_pagehelper_pagehelper_5_0_0.xml │ ├── Maven__mysql_mysql_connector_java_5_1_41.xml │ ├── Maven__javax_servlet_javax_servlet_api_3_0_1.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_core_2_8_8.xml │ ├── Maven__org_springframework_spring_tx_4_3_7_RELEASE.xml │ ├── Maven__org_jboss_logging_jboss_logging_3_3_0_Final.xml │ ├── Maven__org_springframework_spring_aop_4_3_7_RELEASE.xml │ ├── Maven__org_springframework_spring_web_4_3_7_RELEASE.xml │ ├── Maven__javax_validation_validation_api_1_1_0_Final.xml │ ├── Maven__org_springframework_spring_core_4_3_7_RELEASE.xml │ ├── Maven__org_springframework_spring_jdbc_4_3_7_RELEASE.xml │ ├── Maven__org_springframework_spring_test_4_3_7_RELEASE.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_8_8.xml │ ├── Maven__org_springframework_spring_beans_4_3_7_RELEASE.xml │ ├── Maven__org_springframework_spring_webmvc_4_3_7_RELEASE.xml │ ├── Maven__org_hibernate_hibernate_validator_5_4_1_Final.xml │ ├── Maven__org_springframework_spring_aspects_4_3_7_RELEASE.xml │ ├── Maven__org_springframework_spring_context_4_3_7_RELEASE.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml │ └── Maven__org_springframework_spring_expression_4_3_7_RELEASE.xml ├── misc.xml └── compiler.xml ├── README.md ├── SSM_CRUD.iml └── pom.xml /SSM_CRUD: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/webapp/images/ico.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tf2jaguar/SSM_CRUD/HEAD/src/main/webapp/images/ico.jpeg -------------------------------------------------------------------------------- /src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | jdbc.driverClass=com.mysql.jdbc.Driver 2 | jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_crud 3 | jdbc.user=root 4 | jdbc.password=123456 -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tf2jaguar/SSM_CRUD/HEAD/src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tf2jaguar/SSM_CRUD/HEAD/src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tf2jaguar/SSM_CRUD/HEAD/src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tf2jaguar/SSM_CRUD/HEAD/src/main/webapp/static/bootstrap-3.3.7-dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/artifacts/SSM_CRUD_war.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/target 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__jstl_jstl_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__c3p0_c3p0_0_9_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/test/java/com/jelly/crud/dao/ArraryListTest.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.dao; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Arrays; 5 | 6 | public class ArraryListTest { 7 | public static void main(String[] args) { 8 | ArrayList ints = new ArrayList(Arrays.asList(0, 1, 2, 9 | 3, 4, 5, 6)); 10 | // fromIndex low endpoint (inclusive) of the subList 11 | // toIndex high endpoint (exclusive) of the subList 12 | ints.subList(2, 4).clear(); 13 | System.out.println(ints); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/bean/Department.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.bean; 2 | 3 | public class Department { 4 | private Integer deptId; 5 | 6 | private String deptName; 7 | 8 | public Integer getDeptId() { 9 | return deptId; 10 | } 11 | 12 | public void setDeptId(Integer deptId) { 13 | this.deptId = deptId; 14 | } 15 | 16 | public String getDeptName() { 17 | return deptName; 18 | } 19 | 20 | public void setDeptName(String deptName) { 21 | this.deptName = deptName == null ? null : deptName.trim(); 22 | } 23 | } -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mybatis_mybatis_3_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_classmate_1_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mybatis_mybatis_spring_1_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_0_9_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__mysql_mysql_connector_java_5_1_41.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/service/DepartmentService.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.service; 2 | 3 | import com.jelly.crud.bean.Department; 4 | import com.jelly.crud.dao.DepartmentMapper; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | public class DepartmentService { 12 | @Autowired 13 | DepartmentMapper departmentMapper; 14 | 15 | /** 16 | * 获取所有的部门信息 17 | * 18 | * @return 19 | */ 20 | public List selectByExample() { 21 | return departmentMapper.selectByExample(null); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_tx_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_0_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_aop_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_web_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_core_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_jdbc_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_test_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_beans_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hibernate_hibernate_validator_5_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_aspects_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_context_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_expression_4_3_7_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/controller/DepartmentController.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.controller; 2 | 3 | import com.jelly.crud.bean.Department; 4 | import com.jelly.crud.service.DepartmentService; 5 | import com.jelly.crud.util.Msg; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Controller; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.ResponseBody; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 部门CRUD的操作 15 | */ 16 | @Controller 17 | public class DepartmentController { 18 | @Autowired 19 | DepartmentService departmentService; 20 | 21 | /** 22 | * 返回所有部门信息 23 | * 24 | * @return 25 | */ 26 | @RequestMapping("/getDeps") 27 | @ResponseBody 28 | public Msg getDeps() { 29 | List departments = departmentService.selectByExample(); 30 | return Msg.success().add("deps", departments); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/dao/DepartmentMapper.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.dao; 2 | 3 | import com.jelly.crud.bean.Department; 4 | import com.jelly.crud.bean.DepartmentExample; 5 | import java.util.List; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | public interface DepartmentMapper { 9 | int countByExample(DepartmentExample example); 10 | 11 | int deleteByExample(DepartmentExample example); 12 | 13 | int deleteByPrimaryKey(Integer deptId); 14 | 15 | int insert(Department record); 16 | 17 | int insertSelective(Department record); 18 | 19 | List selectByExample(DepartmentExample example); 20 | 21 | Department selectByPrimaryKey(Integer deptId); 22 | 23 | int updateByExampleSelective(@Param("record") Department record, @Param("example") DepartmentExample example); 24 | 25 | int updateByExample(@Param("record") Department record, @Param("example") DepartmentExample example); 26 | 27 | int updateByPrimaryKeySelective(Department record); 28 | 29 | int updateByPrimaryKey(Department record); 30 | } -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/dao/EmployeeMapper.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.dao; 2 | 3 | import com.jelly.crud.bean.Employee; 4 | import com.jelly.crud.bean.EmployeeExample; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface EmployeeMapper { 10 | int countByExample(EmployeeExample example); 11 | 12 | int deleteByExample(EmployeeExample example); 13 | 14 | int deleteByPrimaryKey(Integer empId); 15 | 16 | int insert(Employee record); 17 | 18 | int insertSelective(Employee record); 19 | 20 | List selectByExample(EmployeeExample example); 21 | 22 | Employee selectByPrimaryKey(Integer empId); 23 | 24 | //查询全部员工带部门信息 25 | List selectByExampleWithDept(); 26 | 27 | //根据主键查询员工带部门信息 28 | Employee selectByPrimaryKeyWithDept(Integer empId); 29 | 30 | int updateByExampleSelective(@Param("record") Employee record, @Param("example") EmployeeExample example); 31 | 32 | int updateByExample(@Param("record") Employee record, @Param("example") EmployeeExample example); 33 | 34 | int updateByPrimaryKeySelective(Employee record); 35 | 36 | int updateByPrimaryKey(Employee record); 37 | } -------------------------------------------------------------------------------- /src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/util/Msg.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.util; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 通用返回的类 8 | */ 9 | public class Msg { 10 | //状态码 100-成功 200-失败 11 | private int code; 12 | //提示信息 13 | private String msg; 14 | 15 | private Map datas = new HashMap(); 16 | 17 | 18 | public static Msg success() { 19 | Msg result = new Msg(); 20 | result.setCode(100); 21 | result.setMsg("处理成功"); 22 | return result; 23 | } 24 | 25 | public static Msg fail() { 26 | Msg result = new Msg(); 27 | result.setCode(200); 28 | result.setMsg("处理失败"); 29 | return result; 30 | } 31 | 32 | public Msg add(String key, Object value) { 33 | this.getDatas().put(key, value); 34 | return this; 35 | } 36 | 37 | public int getCode() { 38 | return code; 39 | } 40 | 41 | public void setCode(int code) { 42 | this.code = code; 43 | } 44 | 45 | public String getMsg() { 46 | return msg; 47 | } 48 | 49 | public void setMsg(String msg) { 50 | this.msg = msg; 51 | } 52 | 53 | public Map getDatas() { 54 | return datas; 55 | } 56 | 57 | public void setDatas(Map messag) { 58 | datas = datas; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/resources/spring/dispatcherServlet-servlet.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/service/EmployeeService.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.service; 2 | 3 | import com.jelly.crud.bean.Employee; 4 | import com.jelly.crud.bean.EmployeeExample; 5 | import com.jelly.crud.dao.EmployeeMapper; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.List; 10 | 11 | @Service 12 | public class EmployeeService { 13 | 14 | @Autowired 15 | EmployeeMapper employeeMapper; 16 | 17 | /** 18 | * 根据主键更新员工信息 19 | * 20 | * @param record 21 | * @return 22 | */ 23 | public int updateByPrimaryKeySelective(Employee record) { 24 | return employeeMapper.updateByPrimaryKeySelective(record); 25 | } 26 | 27 | /** 28 | * 根据主键获取员工数据 29 | * 30 | * @param empId 31 | * @return 32 | */ 33 | public Employee selectByPrimaryKey(Integer empId) { 34 | return employeeMapper.selectByPrimaryKey(empId); 35 | } 36 | 37 | /** 38 | * 批量删除员工 39 | * 40 | * @param del_ids 41 | * @return 42 | */ 43 | public int deleteBanch(List del_ids) { 44 | EmployeeExample example = new EmployeeExample(); 45 | EmployeeExample.Criteria criteria = example.createCriteria(); 46 | criteria.andEmpIdIn(del_ids); 47 | return employeeMapper.deleteByExample(example); 48 | } 49 | 50 | /** 51 | * 删除单个员工 52 | * 53 | * @param del_id 54 | * @return 55 | */ 56 | public int deleteEmployee(Integer del_id) { 57 | return employeeMapper.deleteByPrimaryKey(del_id); 58 | } 59 | 60 | /** 61 | * 保存员工 62 | * 63 | * @param employee 64 | */ 65 | public void saveEmp(Employee employee) { 66 | employeeMapper.insertSelective(employee); 67 | } 68 | 69 | /** 70 | * 检查注册名是否重复 71 | * 72 | * @param empName 73 | * @return 74 | */ 75 | public boolean checkEmpName(String empName) { 76 | EmployeeExample example = new EmployeeExample(); 77 | EmployeeExample.Criteria criteria = example.createCriteria(); 78 | criteria.andEmpNameEqualTo(empName); 79 | int i = employeeMapper.countByExample(example); 80 | return i > 0; 81 | } 82 | 83 | /** 84 | * 获取所有的员工 包含部门信息 85 | * 86 | * @return 87 | */ 88 | public List selectByExampleWithDept() { 89 | return employeeMapper.selectByExampleWithDept(); 90 | } 91 | 92 | } 93 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/bean/Employee.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.bean; 2 | 3 | import javax.validation.constraints.Pattern; 4 | 5 | public class Employee { 6 | private Integer empId; 7 | @Pattern(regexp = "(^[a-zA-Z0-9_-]{4,16}$)|(^[\\u2E80-\\u9FFF]{2,5}$)",message = "用户名为4到16位数字字母或者2-5个汉字") 8 | private String empName; 9 | 10 | private String gender; 11 | @Pattern(regexp = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$",message = "请输入正确的邮箱") 12 | private String email; 13 | 14 | private Integer dId; 15 | 16 | //希望查询员工的同时部门信息也是查询好的 17 | private Department department; 18 | 19 | public Employee(Integer empId, String empName, String gender, String email, Integer dId) { 20 | this.empId = empId; 21 | this.empName = empName; 22 | this.gender = gender; 23 | this.email = email; 24 | this.dId = dId; 25 | } 26 | 27 | public Employee() { 28 | } 29 | 30 | @Override 31 | public String toString() { 32 | return "Employee{" + 33 | "empId=" + empId + 34 | ", empName='" + empName + '\'' + 35 | ", gender='" + gender + '\'' + 36 | ", email='" + email + '\'' + 37 | ", dId=" + dId + 38 | ", department=" + department + 39 | '}'; 40 | } 41 | 42 | public Department getDepartment() { 43 | return department; 44 | } 45 | 46 | public void setDepartment(Department department) { 47 | this.department = department; 48 | } 49 | 50 | public Integer getEmpId() { 51 | return empId; 52 | } 53 | 54 | public void setEmpId(Integer empId) { 55 | this.empId = empId; 56 | } 57 | 58 | public String getEmpName() { 59 | return empName; 60 | } 61 | 62 | public void setEmpName(String empName) { 63 | this.empName = empName == null ? null : empName.trim(); 64 | } 65 | 66 | public String getGender() { 67 | return gender; 68 | } 69 | 70 | public void setGender(String gender) { 71 | this.gender = gender == null ? null : gender.trim(); 72 | } 73 | 74 | public String getEmail() { 75 | return email; 76 | } 77 | 78 | public void setEmail(String email) { 79 | this.email = email == null ? null : email.trim(); 80 | } 81 | 82 | public Integer getdId() { 83 | return dId; 84 | } 85 | 86 | public void setdId(Integer dId) { 87 | this.dId = dId; 88 | } 89 | } -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | contextConfigLocation 11 | classpath:spring/applicationContext.xml 12 | 13 | 14 | 15 | 16 | org.springframework.web.context.ContextLoaderListener 17 | 18 | 19 | 20 | 21 | 22 | dispatcherServlet 23 | org.springframework.web.servlet.DispatcherServlet 24 | 25 | contextConfigLocation 26 | classpath:spring/dispatcherServlet-servlet.xml 27 | 28 | 1 29 | 30 | 31 | 32 | 33 | dispatcherServlet 34 | / 35 | 36 | 37 | 38 | 39 | CharacterEncodingFilter 40 | org.springframework.web.filter.CharacterEncodingFilter 41 | 42 | encoding 43 | utf-8 44 | 45 | 46 | forceRequestEncoding 47 | true 48 | 49 | 50 | forceResponseEncoding 51 | true 52 | 53 | 54 | 55 | CharacterEncodingFilter 56 | /* 57 | 58 | 59 | 60 | 61 | HiddenHttpMethodFilter 62 | org.springframework.web.filter.HiddenHttpMethodFilter 63 | 64 | 65 | HiddenHttpMethodFilter 66 | /* 67 | 68 | 69 | HttpPutFormContentFilter 70 | org.springframework.web.filter.HttpPutFormContentFilter 71 | 72 | 73 | HttpPutFormContentFilter 74 | /* 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /.idea/artifacts/SSM_CRUD_war_exploded.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/target/SSM_CRUD 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/main/resources/spring/applicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

3 | read 4 | stars 5 | forks 6 | issues 7 |

8 |
9 | 10 | # SSM_CRUD 11 | 12 | (Spring+SpringMVC+Mybatis)整合项目练习 13 | 14 | 项目是在IDEA中编写的,使用maven构建依赖,MySQL数据库.前端用bootstrap框架搭建界面 15 | 16 | 使用了mybatis逆向工程生成的bean-dao-mapper。(使用了Example类) 17 | 18 | 界面使用ajax异步访问,将界面静态化,使前、后端脱离。 19 | 20 | 构建了一个通用返回类,用于返回json数据。 21 | 22 | 使用了REST风格传参(注意PUT方法) 23 | 24 | 使用PageHelper插件做分页。 25 | 26 | 实现了前端jquary校验、ajax异步访问校验、后端JSR303校验,三次校验数据(数据库校验未实现) 27 | 28 | 是一个很好的SSM增删改差的练习项目。 29 | 30 | 31 | 32 | ## ssm:SpringMVC+Spring+MyBatis 33 | 34 | ## CRUD: Create(创建)Retrieve(查询)Update(更新)Delete(删除) 35 | 36 | 37 | ps:此项目笔者写了很详细的备注,便于理解,已更新,换为HTML静态页,相关自己的js在 38 | 39 | ```java 40 | /src/webapp/静态主/js/index.crud.js 41 | ``` 42 | 43 | 源码下载地址:--> https://github.com/tf2jaguar/SSM_CRUD 44 | 45 | ## 功能点 46 | >1、分页 47 | >2、数据校验    jquery前端校验+JSR303后端校验 48 | >3、 ajax 49 | >4、 Rest风格的URI;使用HTTP协议请求方式的动词,来表示对资源的操作( GET(查询), POST(新增), PUT(修改), DELETE(删除)) 50 | 51 | 52 | ## 技术点 53 | >基础框架-ssm( SpringMVC+Spring+MyBatis) 54 | >数据库-MySQL 55 | >前端框架-bootstrap快速搭建简洁美观的界面 56 | >项目的依赖管理-Maven 57 | >分页-pagehelper 58 | >逆向工程-MyBatis Generator    59 | 60 | 61 | ## 基础环境搭建 62 | >1、创建一个maven工程 63 | >2、引入项目依赖的jar包 64 | >   spring 65 | >   springmvc 66 | >   mybatis 67 | >   数据库连接池,驱动包 68 | >   其他( jstl, servlet-api, junit) 69 | >3、引入bootstrap前端框架 70 | >4、编写ssm整合的关键配置文件 web.xml, spring,springmvc,mybatis,使用mybatis的逆向工程生成对应的bean以及mapper 71 | >5、测试mapper 72 | 73 |
74 | 75 | 76 | ## 查询 77 | >1、访问index.jsp页面 78 | >2、 index.jsp页面发送出查询员工列表请求 79 | >3、 EmployeeController来接受请求,查出员工数据 80 | >4、来到list.jsp页面进行展示 81 | >5、 pageHelper分页插件完成分页查询功能 82 |   URI: /emp 83 | 84 | ## 查询-ajax 85 | >1、 index.jsp页面直接发送ajax请求进行员工分页数据的查询 86 | >2、服务器将查出的数据,以json字符串的形式返回给浏览器 87 | >3、浏览器收到js字符串。可以使用js对json进行解析,使用js通过dom增删改改变页面。 88 | >4、返回json。实现客户端的无关性 89 | 90 | 91 | 92 | ## 新增 93 |
94 | 95 | ## 新增-逻辑 96 | >1、在index.jsp页面点击”新增” 97 | >2、弹出新增对话框 98 | >3、去数据库查询部门列表,显示在对话框中 99 | >4、用户输入数据,并进行校验jquery前端校验, ajax用户名重复校验,重要数据(后端校验(JSR303),唯一约束); 100 | >5、完成保存 101 | 102 | URI: 103 |   /emp/{id} GET 查询员工 104 |   /emp POST 保存员工 105 |   /emp/{id} PUT 修改员工 106 |   /emp/{id} DELETE 删除员工 107 | 108 | 109 | ## 修改 110 |
111 | 112 | ## 修改-逻辑 113 | >1、点击编辑 114 | >2、弹出用户修改的模态框(显示用户信息) 115 | >3、点击更新,完成用户修改 116 | 117 | 118 | ## 删除 119 |
120 | 121 |
122 | 123 | ## 删除-逻辑 124 | >1、单个删除 125 | >>URI:/emp/{id} DELETE 126 | 127 | >2、批量删除 128 | 129 | -------------------------------------------------------------------------------- /SSM_CRUD.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.jelly 5 | SSM_CRUD 6 | war 7 | 1.0-SNAPSHOT 8 | SSM_CRUD 9 | http://maven.apache.org 10 | 11 | 12 | 13 | 14 | 15 | 16 | com.github.pagehelper 17 | pagehelper 18 | 5.0.0 19 | 20 | 21 | 22 | org.springframework 23 | spring-webmvc 24 | 4.3.7.RELEASE 25 | 26 | 27 | 28 | 29 | com.fasterxml.jackson.core 30 | jackson-databind 31 | 2.9.8 32 | 33 | 34 | 35 | 36 | org.hibernate 37 | hibernate-validator 38 | 5.4.1.Final 39 | 40 | 41 | 42 | 43 | 44 | org.springframework 45 | spring-jdbc 46 | 4.3.7.RELEASE 47 | 48 | 49 | 50 | 51 | 52 | org.springframework 53 | spring-test 54 | 4.3.7.RELEASE 55 | test 56 | 57 | 58 | 59 | 60 | org.springframework 61 | spring-aspects 62 | 4.3.7.RELEASE 63 | 64 | 65 | 66 | 67 | 68 | 69 | org.mybatis 70 | mybatis 71 | 3.4.2 72 | 73 | 74 | 75 | 76 | org.mybatis 77 | mybatis-spring 78 | 1.3.1 79 | 80 | 81 | 82 | 83 | 84 | c3p0 85 | c3p0 86 | 0.9.1 87 | 88 | 89 | 90 | mysql 91 | mysql-connector-java 92 | 5.1.41 93 | 94 | 95 | 96 | 97 | 98 | jstl 99 | jstl 100 | 1.2 101 | 102 | 103 | 104 | javax.servlet 105 | javax.servlet-api 106 | 3.0.1 107 | provided 108 | 109 | 110 | 111 | 112 | 113 | junit 114 | junit 115 | 4.12 116 | test 117 | 118 | 119 | 120 | 121 | SSM_CRUD 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/controller/EmployeeController.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.controller; 2 | 3 | import com.github.pagehelper.PageHelper; 4 | import com.github.pagehelper.PageInfo; 5 | import com.jelly.crud.bean.Employee; 6 | import com.jelly.crud.service.EmployeeService; 7 | import com.jelly.crud.util.Msg; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.validation.BindingResult; 11 | import org.springframework.validation.FieldError; 12 | import org.springframework.web.bind.annotation.*; 13 | 14 | import javax.validation.Valid; 15 | import java.util.ArrayList; 16 | import java.util.HashMap; 17 | import java.util.List; 18 | import java.util.Map; 19 | 20 | /** 21 | * 员工的CRUD操作 22 | */ 23 | @Controller 24 | public class EmployeeController { 25 | 26 | @Autowired 27 | EmployeeService employeeService; 28 | 29 | /** 30 | * 如果直接发送ajax=PUT形式的请求 31 | * 封装的数据 32 | * Employee 33 | * [empId=1014, empName=null, gender=null, email=null, dId=null] 34 | *

35 | * 问题: 36 | * 请求体中有数据; 37 | * 但是Employee对象封装不上; 38 | * update tbl_emp where emp_id = 1014; 39 | *

40 | * 原因: 41 | * Tomcat: 42 | * 1、将请求体中的数据,封装一个map。 43 | * 2、request.getParameter("empName")就会从这个map中取值。 44 | * 3、SpringMVC封装POJO对象的时候。会把POJO中每个属性的值,request.getParamter("email"); 45 | * AJAX发送PUT请求引发的血案: 46 | * PUT请求,请求体中的数据,request.getParameter("empName")拿不到 47 | * Tomcat一看是PUT不会封装请求体中的数据为map,只有POST形式的请求才封装请求体为map 48 | * org.apache.catalina.connector.Request--parseParameters() (3111); 49 | *

50 | * protected String parseBodyMethods = "POST"; 51 | * if( !getConnector().isParseBodyMethod(getMethod()) ) { 52 | * success = true; 53 | * return; 54 | * } 55 | *

56 | *

57 | * 解决方案; 58 | * 我们要能支持直接发送PUT之类的请求还要封装请求体中的数据 59 | * 1、配置上HttpPutFormContentFilter; 60 | * 2、他的作用;将请求体中的数据解析包装成一个map。 61 | * 3、request被重新包装,request.getParameter()被重写,就会从自己封装的map中取数据 62 | * 员工更新方法 63 | *

64 | * 根据id更新员工信息 65 | * 66 | * @param id 67 | * @param employee 68 | * @return 69 | */ 70 | @ResponseBody 71 | @RequestMapping(value = "/emp/{empId}", method = RequestMethod.PUT) 72 | public Msg updateEmp(@PathVariable("empId") Integer id, Employee employee) { 73 | employeeService.updateByPrimaryKeySelective(employee); 74 | return Msg.success(); 75 | } 76 | 77 | /** 78 | * 根据id获取员工信息 79 | * 80 | * @param id 81 | * @return 82 | */ 83 | @ResponseBody 84 | @RequestMapping(value = "/emp/{empId}", method = RequestMethod.GET) 85 | public Msg getEmpById(@PathVariable("empId") Integer id) { 86 | Employee employee = employeeService.selectByPrimaryKey(id); 87 | return Msg.success().add("emp", employee); 88 | } 89 | 90 | /** 91 | * 单个员工删除+批量员工删除 92 | * 93 | * @param ids 94 | * @return 95 | */ 96 | @ResponseBody 97 | @RequestMapping(value = "/emp/{del_empIds}", method = RequestMethod.DELETE) 98 | public Msg deleteEmp(@PathVariable("del_empIds") String ids) { 99 | 100 | if (ids.contains("-")) { 101 | String[] str_ids = ids.split("-"); 102 | List del_ids = new ArrayList(); 103 | for (String s : str_ids) { 104 | del_ids.add(Integer.parseInt(s)); 105 | } 106 | employeeService.deleteBanch(del_ids); 107 | } else { 108 | employeeService.deleteEmployee(Integer.parseInt(ids)); 109 | } 110 | return Msg.success(); 111 | } 112 | 113 | /** 114 | * 员工保存 115 | * 1.支持JSR303校验 116 | * 2.导入Hibernate-Validate 117 | * 118 | * @return 119 | */ 120 | @ResponseBody 121 | @RequestMapping(value = "/emp", method = RequestMethod.POST) 122 | public Msg saveEmp(@Valid Employee employee, BindingResult result) { 123 | System.out.println("进入 emp 添加"); 124 | if (result.hasErrors()) { 125 | //后端校验失败, 126 | //应该返回失败,在模态框中显示校验失败提示信息 127 | Map map = new HashMap<>(); 128 | List errors = result.getFieldErrors(); 129 | for (FieldError f : errors) { 130 | System.out.println("错误的字段: " + f.getField()); 131 | System.out.println("错误信息: " + f.getDefaultMessage()); 132 | map.put(f.getField(), f.getDefaultMessage()); 133 | } 134 | return Msg.fail().add("JSR303Error", map); 135 | } else { 136 | employeeService.saveEmp(employee); 137 | return Msg.success().add("msg", "添加成功!!"); 138 | } 139 | } 140 | 141 | /** 142 | * 检查注册名是否重复 143 | * 144 | * @return 145 | */ 146 | @ResponseBody 147 | @RequestMapping("/checkEmpName") 148 | public Msg checkEmpName(@RequestParam("empName") String empName) { 149 | if (employeeService.checkEmpName(empName)) { 150 | return Msg.fail(); 151 | } else { 152 | return Msg.success(); 153 | } 154 | } 155 | 156 | /** 157 | * 查询员工 158 | * 获取的员工列表,并执行分页查询。 159 | * 默认从第一页查询,每页显示五行数据 160 | * 161 | * @param pn 从第 pn 页查询 162 | * @return 163 | */ 164 | @ResponseBody 165 | @RequestMapping("/emps") 166 | public Msg getEmps(@RequestParam(value = "pn", defaultValue = "1") Integer pn) { 167 | // 引入PageHelper分页插件 168 | // 在查询之前只需要调用,传入页码,以及每页的大小 169 | PageHelper.startPage(pn, 5); 170 | // startPage后面紧跟的这个查询就是一个分页查询 171 | List list = employeeService.selectByExampleWithDept(); 172 | // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。 173 | // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数 174 | PageInfo page = new PageInfo(list, 5); 175 | return Msg.success().add("pageInfo", page); 176 | } 177 | 178 | } 179 | -------------------------------------------------------------------------------- /src/main/resources/mapper/DepartmentMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | and ${criterion.condition} 17 | 18 | 19 | and ${criterion.condition} #{criterion.value} 20 | 21 | 22 | and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} 23 | 24 | 25 | and ${criterion.condition} 26 | 27 | #{listItem} 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | and ${criterion.condition} 46 | 47 | 48 | and ${criterion.condition} #{criterion.value} 49 | 50 | 51 | and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} 52 | 53 | 54 | and ${criterion.condition} 55 | 56 | #{listItem} 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | dept_id, dept_name 68 | 69 | 83 | 89 | 90 | delete from tbl_dept 91 | where dept_id = #{deptId,jdbcType=INTEGER} 92 | 93 | 94 | delete from tbl_dept 95 | 96 | 97 | 98 | 99 | 100 | insert into tbl_dept (dept_id, dept_name) 101 | values (#{deptId,jdbcType=INTEGER}, #{deptName,jdbcType=VARCHAR}) 102 | 103 | 104 | insert into tbl_dept 105 | 106 | 107 | dept_id, 108 | 109 | 110 | dept_name, 111 | 112 | 113 | 114 | 115 | #{deptId,jdbcType=INTEGER}, 116 | 117 | 118 | #{deptName,jdbcType=VARCHAR}, 119 | 120 | 121 | 122 | 128 | 129 | update tbl_dept 130 | 131 | 132 | dept_id = #{record.deptId,jdbcType=INTEGER}, 133 | 134 | 135 | dept_name = #{record.deptName,jdbcType=VARCHAR}, 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | update tbl_dept 144 | set dept_id = #{record.deptId,jdbcType=INTEGER}, 145 | dept_name = #{record.deptName,jdbcType=VARCHAR} 146 | 147 | 148 | 149 | 150 | 151 | update tbl_dept 152 | 153 | 154 | dept_name = #{deptName,jdbcType=VARCHAR}, 155 | 156 | 157 | where dept_id = #{deptId,jdbcType=INTEGER} 158 | 159 | 160 | update tbl_dept 161 | set dept_name = #{deptName,jdbcType=VARCHAR} 162 | where dept_id = #{deptId,jdbcType=INTEGER} 163 | 164 | -------------------------------------------------------------------------------- /src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 员工列表 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

71 | 124 | 125 | 126 | 127 |
128 | 129 |
130 |
131 |

SSM_CRUD

132 |
133 |
134 | 135 |
136 |
137 | 140 | 143 |
144 |
145 | 146 |
147 |
148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 |
IDempNamegenderemaildeptName操作
163 |
164 |
165 | 166 |
167 | 168 |
169 | 170 | 171 |
172 | 173 |
174 | 175 | 176 | 177 | -------------------------------------------------------------------------------- /src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" %> 3 | 4 | 5 | 6 | 7 | 员工列表 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 72 | 125 | 126 | 127 | 128 |
129 | 130 |
131 |
132 |

SSM_CRUD

133 |
134 |
135 | 136 |
137 |
138 | 141 | 144 |
145 |
146 | 147 |
148 |
149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 |
IDempNamegenderemaildeptName操作
164 |
165 |
166 | 167 |
168 | 169 |
170 | 171 | 172 |
173 | 174 |
175 | 176 | 177 | -------------------------------------------------------------------------------- /src/main/resources/mapper/EmployeeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | and ${criterion.condition} 33 | 34 | 35 | and ${criterion.condition} #{criterion.value} 36 | 37 | 38 | and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} 39 | 40 | 41 | and ${criterion.condition} 42 | 43 | #{listItem} 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | and ${criterion.condition} 62 | 63 | 64 | and ${criterion.condition} #{criterion.value} 65 | 66 | 67 | and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} 68 | 69 | 70 | and ${criterion.condition} 71 | 72 | #{listItem} 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | emp_id, emp_name, gender, email, d_id 84 | 85 | 86 | 87 | e.emp_id, e.emp_name, e.gender, e.email, e.d_id, d.dept_id, d.dept_name 88 | 89 | 90 | 91 | 105 | 106 | 107 | 113 | 114 | 128 | 134 | 135 | delete from tbl_emp 136 | where emp_id = #{empId,jdbcType=INTEGER} 137 | 138 | 139 | delete from tbl_emp 140 | 141 | 142 | 143 | 144 | 145 | insert into tbl_emp (emp_id, emp_name, gender, 146 | email, d_id) 147 | values (#{empId,jdbcType=INTEGER}, #{empName,jdbcType=VARCHAR}, #{gender,jdbcType=CHAR}, 148 | #{email,jdbcType=VARCHAR}, #{dId,jdbcType=INTEGER}) 149 | 150 | 151 | insert into tbl_emp 152 | 153 | 154 | emp_id, 155 | 156 | 157 | emp_name, 158 | 159 | 160 | gender, 161 | 162 | 163 | email, 164 | 165 | 166 | d_id, 167 | 168 | 169 | 170 | 171 | #{empId,jdbcType=INTEGER}, 172 | 173 | 174 | #{empName,jdbcType=VARCHAR}, 175 | 176 | 177 | #{gender,jdbcType=CHAR}, 178 | 179 | 180 | #{email,jdbcType=VARCHAR}, 181 | 182 | 183 | #{dId,jdbcType=INTEGER}, 184 | 185 | 186 | 187 | 193 | 194 | update tbl_emp 195 | 196 | 197 | emp_id = #{record.empId,jdbcType=INTEGER}, 198 | 199 | 200 | emp_name = #{record.empName,jdbcType=VARCHAR}, 201 | 202 | 203 | gender = #{record.gender,jdbcType=CHAR}, 204 | 205 | 206 | email = #{record.email,jdbcType=VARCHAR}, 207 | 208 | 209 | d_id = #{record.dId,jdbcType=INTEGER}, 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | update tbl_emp 218 | set emp_id = #{record.empId,jdbcType=INTEGER}, 219 | emp_name = #{record.empName,jdbcType=VARCHAR}, 220 | gender = #{record.gender,jdbcType=CHAR}, 221 | email = #{record.email,jdbcType=VARCHAR}, 222 | d_id = #{record.dId,jdbcType=INTEGER} 223 | 224 | 225 | 226 | 227 | 228 | update tbl_emp 229 | 230 | 231 | emp_name = #{empName,jdbcType=VARCHAR}, 232 | 233 | 234 | gender = #{gender,jdbcType=CHAR}, 235 | 236 | 237 | email = #{email,jdbcType=VARCHAR}, 238 | 239 | 240 | d_id = #{dId,jdbcType=INTEGER}, 241 | 242 | 243 | where emp_id = #{empId,jdbcType=INTEGER} 244 | 245 | 246 | update tbl_emp 247 | set emp_name = #{empName,jdbcType=VARCHAR}, 248 | gender = #{gender,jdbcType=CHAR}, 249 | email = #{email,jdbcType=VARCHAR}, 250 | d_id = #{dId,jdbcType=INTEGER} 251 | where emp_id = #{empId,jdbcType=INTEGER} 252 | 253 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/bean/DepartmentExample.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.bean; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class DepartmentExample { 7 | protected String orderByClause; 8 | 9 | protected boolean distinct; 10 | 11 | protected List oredCriteria; 12 | 13 | public DepartmentExample() { 14 | oredCriteria = new ArrayList(); 15 | } 16 | 17 | public void setOrderByClause(String orderByClause) { 18 | this.orderByClause = orderByClause; 19 | } 20 | 21 | public String getOrderByClause() { 22 | return orderByClause; 23 | } 24 | 25 | public void setDistinct(boolean distinct) { 26 | this.distinct = distinct; 27 | } 28 | 29 | public boolean isDistinct() { 30 | return distinct; 31 | } 32 | 33 | public List getOredCriteria() { 34 | return oredCriteria; 35 | } 36 | 37 | public void or(Criteria criteria) { 38 | oredCriteria.add(criteria); 39 | } 40 | 41 | public Criteria or() { 42 | Criteria criteria = createCriteriaInternal(); 43 | oredCriteria.add(criteria); 44 | return criteria; 45 | } 46 | 47 | public Criteria createCriteria() { 48 | Criteria criteria = createCriteriaInternal(); 49 | if (oredCriteria.size() == 0) { 50 | oredCriteria.add(criteria); 51 | } 52 | return criteria; 53 | } 54 | 55 | protected Criteria createCriteriaInternal() { 56 | Criteria criteria = new Criteria(); 57 | return criteria; 58 | } 59 | 60 | public void clear() { 61 | oredCriteria.clear(); 62 | orderByClause = null; 63 | distinct = false; 64 | } 65 | 66 | protected abstract static class GeneratedCriteria { 67 | protected List criteria; 68 | 69 | protected GeneratedCriteria() { 70 | super(); 71 | criteria = new ArrayList(); 72 | } 73 | 74 | public boolean isValid() { 75 | return criteria.size() > 0; 76 | } 77 | 78 | public List getAllCriteria() { 79 | return criteria; 80 | } 81 | 82 | public List getCriteria() { 83 | return criteria; 84 | } 85 | 86 | protected void addCriterion(String condition) { 87 | if (condition == null) { 88 | throw new RuntimeException("Value for condition cannot be null"); 89 | } 90 | criteria.add(new Criterion(condition)); 91 | } 92 | 93 | protected void addCriterion(String condition, Object value, String property) { 94 | if (value == null) { 95 | throw new RuntimeException("Value for " + property + " cannot be null"); 96 | } 97 | criteria.add(new Criterion(condition, value)); 98 | } 99 | 100 | protected void addCriterion(String condition, Object value1, Object value2, String property) { 101 | if (value1 == null || value2 == null) { 102 | throw new RuntimeException("Between values for " + property + " cannot be null"); 103 | } 104 | criteria.add(new Criterion(condition, value1, value2)); 105 | } 106 | 107 | public Criteria andDeptIdIsNull() { 108 | addCriterion("dept_id is null"); 109 | return (Criteria) this; 110 | } 111 | 112 | public Criteria andDeptIdIsNotNull() { 113 | addCriterion("dept_id is not null"); 114 | return (Criteria) this; 115 | } 116 | 117 | public Criteria andDeptIdEqualTo(Integer value) { 118 | addCriterion("dept_id =", value, "deptId"); 119 | return (Criteria) this; 120 | } 121 | 122 | public Criteria andDeptIdNotEqualTo(Integer value) { 123 | addCriterion("dept_id <>", value, "deptId"); 124 | return (Criteria) this; 125 | } 126 | 127 | public Criteria andDeptIdGreaterThan(Integer value) { 128 | addCriterion("dept_id >", value, "deptId"); 129 | return (Criteria) this; 130 | } 131 | 132 | public Criteria andDeptIdGreaterThanOrEqualTo(Integer value) { 133 | addCriterion("dept_id >=", value, "deptId"); 134 | return (Criteria) this; 135 | } 136 | 137 | public Criteria andDeptIdLessThan(Integer value) { 138 | addCriterion("dept_id <", value, "deptId"); 139 | return (Criteria) this; 140 | } 141 | 142 | public Criteria andDeptIdLessThanOrEqualTo(Integer value) { 143 | addCriterion("dept_id <=", value, "deptId"); 144 | return (Criteria) this; 145 | } 146 | 147 | public Criteria andDeptIdIn(List values) { 148 | addCriterion("dept_id in", values, "deptId"); 149 | return (Criteria) this; 150 | } 151 | 152 | public Criteria andDeptIdNotIn(List values) { 153 | addCriterion("dept_id not in", values, "deptId"); 154 | return (Criteria) this; 155 | } 156 | 157 | public Criteria andDeptIdBetween(Integer value1, Integer value2) { 158 | addCriterion("dept_id between", value1, value2, "deptId"); 159 | return (Criteria) this; 160 | } 161 | 162 | public Criteria andDeptIdNotBetween(Integer value1, Integer value2) { 163 | addCriterion("dept_id not between", value1, value2, "deptId"); 164 | return (Criteria) this; 165 | } 166 | 167 | public Criteria andDeptNameIsNull() { 168 | addCriterion("dept_name is null"); 169 | return (Criteria) this; 170 | } 171 | 172 | public Criteria andDeptNameIsNotNull() { 173 | addCriterion("dept_name is not null"); 174 | return (Criteria) this; 175 | } 176 | 177 | public Criteria andDeptNameEqualTo(String value) { 178 | addCriterion("dept_name =", value, "deptName"); 179 | return (Criteria) this; 180 | } 181 | 182 | public Criteria andDeptNameNotEqualTo(String value) { 183 | addCriterion("dept_name <>", value, "deptName"); 184 | return (Criteria) this; 185 | } 186 | 187 | public Criteria andDeptNameGreaterThan(String value) { 188 | addCriterion("dept_name >", value, "deptName"); 189 | return (Criteria) this; 190 | } 191 | 192 | public Criteria andDeptNameGreaterThanOrEqualTo(String value) { 193 | addCriterion("dept_name >=", value, "deptName"); 194 | return (Criteria) this; 195 | } 196 | 197 | public Criteria andDeptNameLessThan(String value) { 198 | addCriterion("dept_name <", value, "deptName"); 199 | return (Criteria) this; 200 | } 201 | 202 | public Criteria andDeptNameLessThanOrEqualTo(String value) { 203 | addCriterion("dept_name <=", value, "deptName"); 204 | return (Criteria) this; 205 | } 206 | 207 | public Criteria andDeptNameLike(String value) { 208 | addCriterion("dept_name like", value, "deptName"); 209 | return (Criteria) this; 210 | } 211 | 212 | public Criteria andDeptNameNotLike(String value) { 213 | addCriterion("dept_name not like", value, "deptName"); 214 | return (Criteria) this; 215 | } 216 | 217 | public Criteria andDeptNameIn(List values) { 218 | addCriterion("dept_name in", values, "deptName"); 219 | return (Criteria) this; 220 | } 221 | 222 | public Criteria andDeptNameNotIn(List values) { 223 | addCriterion("dept_name not in", values, "deptName"); 224 | return (Criteria) this; 225 | } 226 | 227 | public Criteria andDeptNameBetween(String value1, String value2) { 228 | addCriterion("dept_name between", value1, value2, "deptName"); 229 | return (Criteria) this; 230 | } 231 | 232 | public Criteria andDeptNameNotBetween(String value1, String value2) { 233 | addCriterion("dept_name not between", value1, value2, "deptName"); 234 | return (Criteria) this; 235 | } 236 | } 237 | 238 | public static class Criteria extends GeneratedCriteria { 239 | 240 | protected Criteria() { 241 | super(); 242 | } 243 | } 244 | 245 | public static class Criterion { 246 | private String condition; 247 | 248 | private Object value; 249 | 250 | private Object secondValue; 251 | 252 | private boolean noValue; 253 | 254 | private boolean singleValue; 255 | 256 | private boolean betweenValue; 257 | 258 | private boolean listValue; 259 | 260 | private String typeHandler; 261 | 262 | public String getCondition() { 263 | return condition; 264 | } 265 | 266 | public Object getValue() { 267 | return value; 268 | } 269 | 270 | public Object getSecondValue() { 271 | return secondValue; 272 | } 273 | 274 | public boolean isNoValue() { 275 | return noValue; 276 | } 277 | 278 | public boolean isSingleValue() { 279 | return singleValue; 280 | } 281 | 282 | public boolean isBetweenValue() { 283 | return betweenValue; 284 | } 285 | 286 | public boolean isListValue() { 287 | return listValue; 288 | } 289 | 290 | public String getTypeHandler() { 291 | return typeHandler; 292 | } 293 | 294 | protected Criterion(String condition) { 295 | super(); 296 | this.condition = condition; 297 | this.typeHandler = null; 298 | this.noValue = true; 299 | } 300 | 301 | protected Criterion(String condition, Object value, String typeHandler) { 302 | super(); 303 | this.condition = condition; 304 | this.value = value; 305 | this.typeHandler = typeHandler; 306 | if (value instanceof List) { 307 | this.listValue = true; 308 | } else { 309 | this.singleValue = true; 310 | } 311 | } 312 | 313 | protected Criterion(String condition, Object value) { 314 | this(condition, value, null); 315 | } 316 | 317 | protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { 318 | super(); 319 | this.condition = condition; 320 | this.value = value; 321 | this.secondValue = secondValue; 322 | this.typeHandler = typeHandler; 323 | this.betweenValue = true; 324 | } 325 | 326 | protected Criterion(String condition, Object value, Object secondValue) { 327 | this(condition, value, secondValue, null); 328 | } 329 | } 330 | } -------------------------------------------------------------------------------- /src/main/webapp/static/js/index.crud.js: -------------------------------------------------------------------------------- 1 | //定义两个全局变量 总记录数,当前页 2 | var totalRecord, currentPage; 3 | //界面初始化完成后执行的js 4 | $(function () { 5 | to_page(1); 6 | }); 7 | 8 | //ajax异步请求要访问的页面,传入页数 9 | function to_page(pn) { 10 | //解决刷新后checkbox为选中状态 11 | $("#check_all").prop("checked", false); 12 | //发送ajax请求 13 | $.ajax({ 14 | url: "emps", 15 | data: "pn=" + pn, 16 | type: "GET", 17 | success: function (result) { 18 | //1、解析并显示员工数据 19 | build_emps_table(result); 20 | //2、解析并显示分页信息 21 | build_page_info(result); 22 | //3、解析显示分页条数据 23 | build_page_nav(result); 24 | } 25 | }); 26 | 27 | } 28 | 29 | //构建数据表格 30 | function build_emps_table(result) { 31 | //清空表格 32 | $("#emps_table tbody").empty(); 33 | var emps = result.datas.pageInfo.list; 34 | $.each(emps, function (index, item) { 35 | var checkBoxTd = $(""); 36 | var empIdTd = $("").append(item.empId); 37 | var empNameTd = $("").append(item.empName); 38 | var genderTd = $("").append(item.gender == 'M' ? "男" : "女"); 39 | var emailTd = $("").append(item.email); 40 | var deptNameTd = $("").append(item.department.deptName); 41 | //定义编辑/删除按钮 42 | /* 43 | * 46 | */ 47 | var editBtn = $("").addClass("btn btn-info btn-sm edit_btn").append($("").addClass("glyphicon glyphicon-pencil")).append("编辑"); 48 | editBtn.attr("edi_id", item.empId); 49 | var deleBtn = $("").addClass("btn btn-danger btn-sm delete_btn").append($("").addClass("glyphicon glyphicon-trash")).append("删除"); 50 | deleBtn.attr("del_id", item.empId); 51 | var btnTd = $("").append(editBtn).append(" ").append(deleBtn); 52 | 53 | $("").append(checkBoxTd) 54 | .append(empIdTd) 55 | .append(empNameTd) 56 | .append(genderTd) 57 | .append(emailTd) 58 | .append(deptNameTd) 59 | .append(btnTd) 60 | .appendTo("#emps_table tbody"); 61 | }); 62 | } 63 | 64 | //构建分页信息 65 | function build_page_info(result) { 66 | var pageInfo = result.datas.pageInfo; 67 | $("#page_info_area").empty(); 68 | $("#page_info_area").append("当前第 " + pageInfo.pageNum + " 页,总计 " + pageInfo.pages + " 页,总 " + pageInfo.total + " 条记录"); 69 | totalRecord = pageInfo.total; 70 | currentPage = pageInfo.pageNum; 71 | } 72 | 73 | //构建分页条信息 74 | function build_page_nav(result) { 75 | //每次写入前先清空 76 | $("#page_nav_area").empty(); 77 | //构建元素 78 | var nav = $("").attr("aria-label", "Page navigation"); 79 | var ul = $("
    ").addClass("pagination"); 80 | 81 | var firstPageLi = $("
  • ").append($("").append("首页").attr("href", "#")); 82 | var prePageLi = $("
  • ").append($("").append("«")); 83 | //判断是否有前一页 84 | if (result.datas.pageInfo.hasPreviousPage) { 85 | firstPageLi.click(function () { 86 | to_page(1); 87 | }); 88 | prePageLi.click(function () { 89 | to_page(result.datas.pageInfo.prePage); 90 | }); 91 | } 92 | else { 93 | firstPageLi.addClass("disabled"); 94 | prePageLi.addClass("disabled"); 95 | } 96 | 97 | var nextPageLi = $("
  • ").append($("").append("»")); 98 | var lastPageLi = $("
  • ").append($("").append("末页").attr("href", "#")) 99 | //判断是否有下一页 100 | if (result.datas.pageInfo.hasNextPage) { 101 | lastPageLi.click(function () { 102 | to_page(result.datas.pageInfo.total + 100); 103 | }); 104 | nextPageLi.click(function () { 105 | to_page(result.datas.pageInfo.nextPage); 106 | }); 107 | } 108 | else { 109 | nextPageLi.addClass("disabled"); 110 | lastPageLi.addClass("disabled"); 111 | } 112 | //添加首页和前一页 113 | ul.append(firstPageLi).append(prePageLi); 114 | 115 | //遍历给ul中添加页码提示 116 | $.each(result.datas.pageInfo.navigatepageNums, function (index, item) { 117 | var numLi = $("
  • ").append($("").append(item)); 118 | if (result.datas.pageInfo.pageNum == item) { 119 | numLi.addClass("active"); 120 | } 121 | numLi.click(function () { 122 | to_page(item) 123 | }); 124 | ul.append(numLi); 125 | }); 126 | //添加下一页和最后一页 127 | ul.append(nextPageLi).append(lastPageLi); 128 | nav.append(ul).appendTo("#page_nav_area"); 129 | } 130 | 131 | //清空表单样式及内容 132 | function reset_form(ele) { 133 | $(ele)[0].reset(); 134 | //清空表单样式 135 | $(ele).find("*").removeClass("has-error has-success"); 136 | $(ele).find(".help-block").text(""); 137 | } 138 | 139 | //添加员工模态框调用方法 140 | $("#emp_add_modal_btn").click(function () { 141 | reset_form('#empAddModal form'); 142 | getDeps('#empAddModal select'); 143 | $('#empAddModal').modal({ 144 | backdrop: 'static' 145 | }) 146 | }); 147 | 148 | //获取部门列表 149 | function getDeps(ele) { 150 | $(ele).empty(); 151 | $.ajax({ 152 | url: "getDeps", 153 | type: "GET", 154 | success: function (result) { 155 | $.each(result.datas.deps, function (index, item) { 156 | $("").append(item.deptName).attr("value", item.deptId).appendTo(ele); 157 | }); 158 | } 159 | }); 160 | } 161 | 162 | //显示校验后展示信息 163 | function show_validate_msg(ele, status, msg) { 164 | $(ele).parent().removeClass("has-success has-error"); 165 | $(ele).next("span").text(""); 166 | if ("success" == status) { 167 | $(ele).parent().addClass("has-success"); 168 | } else if ("error" == status) { 169 | $(ele).parent().addClass("has-error"); 170 | } 171 | $(ele).next("span").text(msg); 172 | 173 | } 174 | 175 | //校验提交前的数据 176 | //ajax校验用户名是否可用 177 | function valudate_empName(empName) { 178 | $.ajax({ 179 | url: "checkEmpName", 180 | data: "empName=" + empName, 181 | type: "POST", 182 | success: function (result) { 183 | if (result.code == 100) { 184 | show_validate_msg("#empName_add_input", "success", "用户名可用"); 185 | } else if (result.code == 200) { 186 | show_validate_msg("#empName_add_input", "error", "该用户名已存在,不可用"); 187 | } 188 | } 189 | }); 190 | } 191 | 192 | //1. 校验用户名是否符合规范,是否在数据库已存在 193 | $("#empName_add_input").focusout(function () { 194 | var empName = $("#empName_add_input").val(); 195 | var regName = /(^[a-zA-Z0-9_-]{4,16}$)|(^[\u2E80-\u9FFF]{2,5}$)/; 196 | if (!regName.test(empName)) { 197 | show_validate_msg("#empName_add_input", "error", "用户名为4到16位数字字母或者2-5个汉字"); 198 | } else { 199 | show_validate_msg("#empName_add_input", "success", "用户名符合规范"); 200 | //进行ajax验证 201 | valudate_empName(empName); 202 | } 203 | }); 204 | 205 | //正则校验邮箱 206 | function checkEmail(ele) { 207 | var email = $(ele).val(); 208 | var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/; 209 | if (!regEmail.test(email)) { 210 | show_validate_msg(ele, "error", "请输入正确的邮箱"); 211 | } else { 212 | show_validate_msg(ele, "success", "邮箱可用"); 213 | } 214 | } 215 | 216 | //2. 校验邮箱是否符合规范 217 | $("#email_add_input").focusout(function () { 218 | checkEmail("#email_add_input"); 219 | }); 220 | 221 | //添加的员工数据提交服务器 222 | $("#emp_save_btn").click(function () { 223 | //进行提交前的数据检查 224 | //非空验证 225 | if ($("#empName_add_input").val() == "") { 226 | show_validate_msg("#empName_add_input", "error", "请填写姓名!!"); 227 | return false; 228 | } else if ($("#email_add_input").val() == "") { 229 | show_validate_msg("#email_add_input", "error", "请填可用的邮箱!!"); 230 | return false; 231 | } else if (($("#empName_add_input").parent().hasClass("has-error")) || ($("#email_add_input").parent().hasClass("has-error"))) { 232 | alert("请填写正确的信息!"); 233 | return false; 234 | } 235 | //发送ajax,保存数据 236 | $.ajax({ 237 | url: "emp", 238 | type: "POST", 239 | data: $("#empAddModal form").serialize(), 240 | success: function (result) { 241 | if (result.code == 100) {//添加成功 242 | //关闭模态框 243 | $('#empAddModal').modal('hide'); 244 | //返回最后一页 245 | to_page(totalRecord); 246 | } else { 247 | //显示错误信息 248 | if (undefined != result.datas.JSR303Error.empName) { 249 | show_validate_msg("#empName_add_input", "error", result.datas.JSR303Error.empName); 250 | } 251 | if (undefined != result.datas.JSR303Error.email) { 252 | show_validate_msg("#email_add_input", "error", result.datas.JSR303Error.email); 253 | } 254 | } 255 | } 256 | }); 257 | 258 | }); 259 | 260 | //删除单个员工 261 | $(document).on("click", ".delete_btn", function () { 262 | var del_empName = $(this).parents("tr").find("td:eq(2)").text(); 263 | var del_empIds = $(this).attr("del_id"); 264 | if (confirm("确定要删除【" + del_empName + "】么?")) { 265 | //确认,发送ajax请求删除即可 266 | $.ajax({ 267 | url: "emp/" + del_empIds, 268 | type: "DELETE", 269 | success: function (result) { 270 | alert(result.msg); 271 | //回到本页 272 | to_page(currentPage); 273 | } 274 | }); 275 | } 276 | }); 277 | 278 | //完成check的全选全不选功能 279 | $("#check_all").click(function () { 280 | //attr获取checked是undefined; 281 | //我们这些dom原生的属性;attr获取自定义属性的值; 282 | //prop修改和读取dom原生属性的值 283 | $(".check_item").prop("checked", $(this).prop("checked")); 284 | }); 285 | $(document).on("click", ".check_item", function () { 286 | var flag = $(".check_item:checked").length == $(".check_item").length; 287 | $("#check_all").prop("checked", flag); 288 | }); 289 | 290 | //批量删除员工 291 | $("#emp_del_modal_btn").click(function () { 292 | var del_empNames = ""; 293 | var del_empIds = ""; 294 | $.each($(".check_item:checked"), function () { 295 | del_empNames += $(this).parents("tr").find("td:eq(2)").text() + ","; 296 | del_empIds += $(this).parents("tr").find("td:eq(1)").text() + "-"; 297 | }); 298 | //去除多余的, 299 | del_empNames = del_empNames.substring(0, del_empNames.length - 1); 300 | //去除多余的- 301 | del_empIds = del_empIds.substring(0, del_empIds.length - 1); 302 | //发出确认的alert 303 | if(del_empNames==""){ 304 | alert("请选择要删除的员工!"); 305 | }else if (confirm("确定删除【" + del_empNames + "】么?")) { 306 | //确认删除,发送ajax请求 307 | $.ajax({ 308 | url: "emp/" + del_empIds, 309 | type: "DELETE", 310 | success: function (result) { 311 | alert(result.msg); 312 | to_page(currentPage); 313 | } 314 | }); 315 | } 316 | }); 317 | 318 | 319 | //根据id获取员工信息 320 | function getEmp(empId) { 321 | $.ajax({ 322 | url: "emp/" + empId, 323 | type: "Get", 324 | success: function (result) { 325 | // console.log(result); 326 | $("#empName_update_input").text(result.datas.emp.empName); 327 | $("#email_update_input").val(result.datas.emp.email); 328 | $("#empUpdateModal input[name=gender]").val([result.datas.emp.gender]); 329 | $("#empUpdateModal select").val([result.datas.emp.dId]); 330 | } 331 | }); 332 | } 333 | 334 | //更新时展示员工数据、调用模态框 335 | $(document).on("click", ".edit_btn", function () { 336 | //清除之前选中的 337 | $(this).parents("tbody").find(".check_item").prop("checked", false); 338 | //标记当前选中的 339 | $(this).parents("tr").find(".check_item").prop("checked", true); 340 | //清空之前的表单 341 | reset_form('#empUpdateModal form'); 342 | var empId = $(this).attr("edi_id"); 343 | //1、查出部门信息,并显示部门列表 344 | getDeps("#empUpdateModal select"); 345 | //2、查出员工信息,显示员工信息 346 | getEmp(empId); 347 | 348 | //3、把员工的id传递给模态框的更新按钮 349 | $("#emp_update_btn").attr("edit-id", empId); 350 | $("#empUpdateModal").modal({ 351 | backdrop: "static" 352 | }); 353 | }) 354 | 355 | //更新数据前的数据校验 356 | $("#email_update_input").focusout(function () { 357 | checkEmail("#email_update_input"); 358 | }); 359 | 360 | //更新员工数据 361 | $("#emp_update_btn").click(function () { 362 | //先要对提交的数据进行校验,当前只用校验邮箱 363 | if ($("#email_update_input").val() == "") { 364 | show_validate_msg("#email_update_input", "error", "请填可用的邮箱!!"); 365 | return false; 366 | } else if ($("#email_update_input").parent().hasClass("has-error")) { 367 | alert("请填写正确的信息!"); 368 | return false; 369 | } 370 | $.ajax({ 371 | url: "emp/" + $(this).attr("edit-id"), 372 | data: $("#empUpdateModal form").serialize(), 373 | type: "PUT", 374 | success: function (result) { 375 | if (result.code == 100) {//添加成功 376 | //关闭模态框 377 | $('#empUpdateModal').modal('hide'); 378 | //返回最后一页 379 | to_page(currentPage); 380 | } 381 | } 382 | }); 383 | }); 384 | -------------------------------------------------------------------------------- /src/main/java/com/jelly/crud/bean/EmployeeExample.java: -------------------------------------------------------------------------------- 1 | package com.jelly.crud.bean; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class EmployeeExample { 7 | protected String orderByClause; 8 | 9 | protected boolean distinct; 10 | 11 | protected List oredCriteria; 12 | 13 | public EmployeeExample() { 14 | oredCriteria = new ArrayList(); 15 | } 16 | 17 | public void setOrderByClause(String orderByClause) { 18 | this.orderByClause = orderByClause; 19 | } 20 | 21 | public String getOrderByClause() { 22 | return orderByClause; 23 | } 24 | 25 | public void setDistinct(boolean distinct) { 26 | this.distinct = distinct; 27 | } 28 | 29 | public boolean isDistinct() { 30 | return distinct; 31 | } 32 | 33 | public List getOredCriteria() { 34 | return oredCriteria; 35 | } 36 | 37 | public void or(Criteria criteria) { 38 | oredCriteria.add(criteria); 39 | } 40 | 41 | public Criteria or() { 42 | Criteria criteria = createCriteriaInternal(); 43 | oredCriteria.add(criteria); 44 | return criteria; 45 | } 46 | 47 | public Criteria createCriteria() { 48 | Criteria criteria = createCriteriaInternal(); 49 | if (oredCriteria.size() == 0) { 50 | oredCriteria.add(criteria); 51 | } 52 | return criteria; 53 | } 54 | 55 | protected Criteria createCriteriaInternal() { 56 | Criteria criteria = new Criteria(); 57 | return criteria; 58 | } 59 | 60 | public void clear() { 61 | oredCriteria.clear(); 62 | orderByClause = null; 63 | distinct = false; 64 | } 65 | 66 | protected abstract static class GeneratedCriteria { 67 | protected List criteria; 68 | 69 | protected GeneratedCriteria() { 70 | super(); 71 | criteria = new ArrayList(); 72 | } 73 | 74 | public boolean isValid() { 75 | return criteria.size() > 0; 76 | } 77 | 78 | public List getAllCriteria() { 79 | return criteria; 80 | } 81 | 82 | public List getCriteria() { 83 | return criteria; 84 | } 85 | 86 | protected void addCriterion(String condition) { 87 | if (condition == null) { 88 | throw new RuntimeException("Value for condition cannot be null"); 89 | } 90 | criteria.add(new Criterion(condition)); 91 | } 92 | 93 | protected void addCriterion(String condition, Object value, String property) { 94 | if (value == null) { 95 | throw new RuntimeException("Value for " + property + " cannot be null"); 96 | } 97 | criteria.add(new Criterion(condition, value)); 98 | } 99 | 100 | protected void addCriterion(String condition, Object value1, Object value2, String property) { 101 | if (value1 == null || value2 == null) { 102 | throw new RuntimeException("Between values for " + property + " cannot be null"); 103 | } 104 | criteria.add(new Criterion(condition, value1, value2)); 105 | } 106 | 107 | public Criteria andEmpIdIsNull() { 108 | addCriterion("emp_id is null"); 109 | return (Criteria) this; 110 | } 111 | 112 | public Criteria andEmpIdIsNotNull() { 113 | addCriterion("emp_id is not null"); 114 | return (Criteria) this; 115 | } 116 | 117 | public Criteria andEmpIdEqualTo(Integer value) { 118 | addCriterion("emp_id =", value, "empId"); 119 | return (Criteria) this; 120 | } 121 | 122 | public Criteria andEmpIdNotEqualTo(Integer value) { 123 | addCriterion("emp_id <>", value, "empId"); 124 | return (Criteria) this; 125 | } 126 | 127 | public Criteria andEmpIdGreaterThan(Integer value) { 128 | addCriterion("emp_id >", value, "empId"); 129 | return (Criteria) this; 130 | } 131 | 132 | public Criteria andEmpIdGreaterThanOrEqualTo(Integer value) { 133 | addCriterion("emp_id >=", value, "empId"); 134 | return (Criteria) this; 135 | } 136 | 137 | public Criteria andEmpIdLessThan(Integer value) { 138 | addCriterion("emp_id <", value, "empId"); 139 | return (Criteria) this; 140 | } 141 | 142 | public Criteria andEmpIdLessThanOrEqualTo(Integer value) { 143 | addCriterion("emp_id <=", value, "empId"); 144 | return (Criteria) this; 145 | } 146 | 147 | public Criteria andEmpIdIn(List values) { 148 | addCriterion("emp_id in", values, "empId"); 149 | return (Criteria) this; 150 | } 151 | 152 | public Criteria andEmpIdNotIn(List values) { 153 | addCriterion("emp_id not in", values, "empId"); 154 | return (Criteria) this; 155 | } 156 | 157 | public Criteria andEmpIdBetween(Integer value1, Integer value2) { 158 | addCriterion("emp_id between", value1, value2, "empId"); 159 | return (Criteria) this; 160 | } 161 | 162 | public Criteria andEmpIdNotBetween(Integer value1, Integer value2) { 163 | addCriterion("emp_id not between", value1, value2, "empId"); 164 | return (Criteria) this; 165 | } 166 | 167 | public Criteria andEmpNameIsNull() { 168 | addCriterion("emp_name is null"); 169 | return (Criteria) this; 170 | } 171 | 172 | public Criteria andEmpNameIsNotNull() { 173 | addCriterion("emp_name is not null"); 174 | return (Criteria) this; 175 | } 176 | 177 | public Criteria andEmpNameEqualTo(String value) { 178 | addCriterion("emp_name =", value, "empName"); 179 | return (Criteria) this; 180 | } 181 | 182 | public Criteria andEmpNameNotEqualTo(String value) { 183 | addCriterion("emp_name <>", value, "empName"); 184 | return (Criteria) this; 185 | } 186 | 187 | public Criteria andEmpNameGreaterThan(String value) { 188 | addCriterion("emp_name >", value, "empName"); 189 | return (Criteria) this; 190 | } 191 | 192 | public Criteria andEmpNameGreaterThanOrEqualTo(String value) { 193 | addCriterion("emp_name >=", value, "empName"); 194 | return (Criteria) this; 195 | } 196 | 197 | public Criteria andEmpNameLessThan(String value) { 198 | addCriterion("emp_name <", value, "empName"); 199 | return (Criteria) this; 200 | } 201 | 202 | public Criteria andEmpNameLessThanOrEqualTo(String value) { 203 | addCriterion("emp_name <=", value, "empName"); 204 | return (Criteria) this; 205 | } 206 | 207 | public Criteria andEmpNameLike(String value) { 208 | addCriterion("emp_name like", value, "empName"); 209 | return (Criteria) this; 210 | } 211 | 212 | public Criteria andEmpNameNotLike(String value) { 213 | addCriterion("emp_name not like", value, "empName"); 214 | return (Criteria) this; 215 | } 216 | 217 | public Criteria andEmpNameIn(List values) { 218 | addCriterion("emp_name in", values, "empName"); 219 | return (Criteria) this; 220 | } 221 | 222 | public Criteria andEmpNameNotIn(List values) { 223 | addCriterion("emp_name not in", values, "empName"); 224 | return (Criteria) this; 225 | } 226 | 227 | public Criteria andEmpNameBetween(String value1, String value2) { 228 | addCriterion("emp_name between", value1, value2, "empName"); 229 | return (Criteria) this; 230 | } 231 | 232 | public Criteria andEmpNameNotBetween(String value1, String value2) { 233 | addCriterion("emp_name not between", value1, value2, "empName"); 234 | return (Criteria) this; 235 | } 236 | 237 | public Criteria andGederIsNull() { 238 | addCriterion("geder is null"); 239 | return (Criteria) this; 240 | } 241 | 242 | public Criteria andGederIsNotNull() { 243 | addCriterion("geder is not null"); 244 | return (Criteria) this; 245 | } 246 | 247 | public Criteria andGederEqualTo(String value) { 248 | addCriterion("geder =", value, "geder"); 249 | return (Criteria) this; 250 | } 251 | 252 | public Criteria andGederNotEqualTo(String value) { 253 | addCriterion("geder <>", value, "geder"); 254 | return (Criteria) this; 255 | } 256 | 257 | public Criteria andGederGreaterThan(String value) { 258 | addCriterion("geder >", value, "geder"); 259 | return (Criteria) this; 260 | } 261 | 262 | public Criteria andGederGreaterThanOrEqualTo(String value) { 263 | addCriterion("geder >=", value, "geder"); 264 | return (Criteria) this; 265 | } 266 | 267 | public Criteria andGederLessThan(String value) { 268 | addCriterion("geder <", value, "geder"); 269 | return (Criteria) this; 270 | } 271 | 272 | public Criteria andGederLessThanOrEqualTo(String value) { 273 | addCriterion("geder <=", value, "geder"); 274 | return (Criteria) this; 275 | } 276 | 277 | public Criteria andGederLike(String value) { 278 | addCriterion("geder like", value, "geder"); 279 | return (Criteria) this; 280 | } 281 | 282 | public Criteria andGederNotLike(String value) { 283 | addCriterion("geder not like", value, "geder"); 284 | return (Criteria) this; 285 | } 286 | 287 | public Criteria andGederIn(List values) { 288 | addCriterion("geder in", values, "geder"); 289 | return (Criteria) this; 290 | } 291 | 292 | public Criteria andGederNotIn(List values) { 293 | addCriterion("geder not in", values, "geder"); 294 | return (Criteria) this; 295 | } 296 | 297 | public Criteria andGederBetween(String value1, String value2) { 298 | addCriterion("geder between", value1, value2, "geder"); 299 | return (Criteria) this; 300 | } 301 | 302 | public Criteria andGederNotBetween(String value1, String value2) { 303 | addCriterion("geder not between", value1, value2, "geder"); 304 | return (Criteria) this; 305 | } 306 | 307 | public Criteria andEmailIsNull() { 308 | addCriterion("email is null"); 309 | return (Criteria) this; 310 | } 311 | 312 | public Criteria andEmailIsNotNull() { 313 | addCriterion("email is not null"); 314 | return (Criteria) this; 315 | } 316 | 317 | public Criteria andEmailEqualTo(String value) { 318 | addCriterion("email =", value, "email"); 319 | return (Criteria) this; 320 | } 321 | 322 | public Criteria andEmailNotEqualTo(String value) { 323 | addCriterion("email <>", value, "email"); 324 | return (Criteria) this; 325 | } 326 | 327 | public Criteria andEmailGreaterThan(String value) { 328 | addCriterion("email >", value, "email"); 329 | return (Criteria) this; 330 | } 331 | 332 | public Criteria andEmailGreaterThanOrEqualTo(String value) { 333 | addCriterion("email >=", value, "email"); 334 | return (Criteria) this; 335 | } 336 | 337 | public Criteria andEmailLessThan(String value) { 338 | addCriterion("email <", value, "email"); 339 | return (Criteria) this; 340 | } 341 | 342 | public Criteria andEmailLessThanOrEqualTo(String value) { 343 | addCriterion("email <=", value, "email"); 344 | return (Criteria) this; 345 | } 346 | 347 | public Criteria andEmailLike(String value) { 348 | addCriterion("email like", value, "email"); 349 | return (Criteria) this; 350 | } 351 | 352 | public Criteria andEmailNotLike(String value) { 353 | addCriterion("email not like", value, "email"); 354 | return (Criteria) this; 355 | } 356 | 357 | public Criteria andEmailIn(List values) { 358 | addCriterion("email in", values, "email"); 359 | return (Criteria) this; 360 | } 361 | 362 | public Criteria andEmailNotIn(List values) { 363 | addCriterion("email not in", values, "email"); 364 | return (Criteria) this; 365 | } 366 | 367 | public Criteria andEmailBetween(String value1, String value2) { 368 | addCriterion("email between", value1, value2, "email"); 369 | return (Criteria) this; 370 | } 371 | 372 | public Criteria andEmailNotBetween(String value1, String value2) { 373 | addCriterion("email not between", value1, value2, "email"); 374 | return (Criteria) this; 375 | } 376 | 377 | public Criteria andDIdIsNull() { 378 | addCriterion("d_id is null"); 379 | return (Criteria) this; 380 | } 381 | 382 | public Criteria andDIdIsNotNull() { 383 | addCriterion("d_id is not null"); 384 | return (Criteria) this; 385 | } 386 | 387 | public Criteria andDIdEqualTo(Integer value) { 388 | addCriterion("d_id =", value, "dId"); 389 | return (Criteria) this; 390 | } 391 | 392 | public Criteria andDIdNotEqualTo(Integer value) { 393 | addCriterion("d_id <>", value, "dId"); 394 | return (Criteria) this; 395 | } 396 | 397 | public Criteria andDIdGreaterThan(Integer value) { 398 | addCriterion("d_id >", value, "dId"); 399 | return (Criteria) this; 400 | } 401 | 402 | public Criteria andDIdGreaterThanOrEqualTo(Integer value) { 403 | addCriterion("d_id >=", value, "dId"); 404 | return (Criteria) this; 405 | } 406 | 407 | public Criteria andDIdLessThan(Integer value) { 408 | addCriterion("d_id <", value, "dId"); 409 | return (Criteria) this; 410 | } 411 | 412 | public Criteria andDIdLessThanOrEqualTo(Integer value) { 413 | addCriterion("d_id <=", value, "dId"); 414 | return (Criteria) this; 415 | } 416 | 417 | public Criteria andDIdIn(List values) { 418 | addCriterion("d_id in", values, "dId"); 419 | return (Criteria) this; 420 | } 421 | 422 | public Criteria andDIdNotIn(List values) { 423 | addCriterion("d_id not in", values, "dId"); 424 | return (Criteria) this; 425 | } 426 | 427 | public Criteria andDIdBetween(Integer value1, Integer value2) { 428 | addCriterion("d_id between", value1, value2, "dId"); 429 | return (Criteria) this; 430 | } 431 | 432 | public Criteria andDIdNotBetween(Integer value1, Integer value2) { 433 | addCriterion("d_id not between", value1, value2, "dId"); 434 | return (Criteria) this; 435 | } 436 | } 437 | 438 | public static class Criteria extends GeneratedCriteria { 439 | 440 | protected Criteria() { 441 | super(); 442 | } 443 | } 444 | 445 | public static class Criterion { 446 | private String condition; 447 | 448 | private Object value; 449 | 450 | private Object secondValue; 451 | 452 | private boolean noValue; 453 | 454 | private boolean singleValue; 455 | 456 | private boolean betweenValue; 457 | 458 | private boolean listValue; 459 | 460 | private String typeHandler; 461 | 462 | public String getCondition() { 463 | return condition; 464 | } 465 | 466 | public Object getValue() { 467 | return value; 468 | } 469 | 470 | public Object getSecondValue() { 471 | return secondValue; 472 | } 473 | 474 | public boolean isNoValue() { 475 | return noValue; 476 | } 477 | 478 | public boolean isSingleValue() { 479 | return singleValue; 480 | } 481 | 482 | public boolean isBetweenValue() { 483 | return betweenValue; 484 | } 485 | 486 | public boolean isListValue() { 487 | return listValue; 488 | } 489 | 490 | public String getTypeHandler() { 491 | return typeHandler; 492 | } 493 | 494 | protected Criterion(String condition) { 495 | super(); 496 | this.condition = condition; 497 | this.typeHandler = null; 498 | this.noValue = true; 499 | } 500 | 501 | protected Criterion(String condition, Object value, String typeHandler) { 502 | super(); 503 | this.condition = condition; 504 | this.value = value; 505 | this.typeHandler = typeHandler; 506 | if (value instanceof List) { 507 | this.listValue = true; 508 | } else { 509 | this.singleValue = true; 510 | } 511 | } 512 | 513 | protected Criterion(String condition, Object value) { 514 | this(condition, value, null); 515 | } 516 | 517 | protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { 518 | super(); 519 | this.condition = condition; 520 | this.value = value; 521 | this.secondValue = secondValue; 522 | this.typeHandler = typeHandler; 523 | this.betweenValue = true; 524 | } 525 | 526 | protected Criterion(String condition, Object value, Object secondValue) { 527 | this(condition, value, secondValue, null); 528 | } 529 | } 530 | } -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.7 (http://getbootstrap.com) 3 | * Copyright 2011-2016 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} 6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */ -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} -------------------------------------------------------------------------------- /src/main/webapp/static/bootstrap-3.3.7-dist/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.7 (http://getbootstrap.com) 3 | * Copyright 2011-2016 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | .btn-default, 7 | .btn-primary, 8 | .btn-success, 9 | .btn-info, 10 | .btn-warning, 11 | .btn-danger { 12 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 13 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 14 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | } 16 | .btn-default:active, 17 | .btn-primary:active, 18 | .btn-success:active, 19 | .btn-info:active, 20 | .btn-warning:active, 21 | .btn-danger:active, 22 | .btn-default.active, 23 | .btn-primary.active, 24 | .btn-success.active, 25 | .btn-info.active, 26 | .btn-warning.active, 27 | .btn-danger.active { 28 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 29 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | } 31 | .btn-default.disabled, 32 | .btn-primary.disabled, 33 | .btn-success.disabled, 34 | .btn-info.disabled, 35 | .btn-warning.disabled, 36 | .btn-danger.disabled, 37 | .btn-default[disabled], 38 | .btn-primary[disabled], 39 | .btn-success[disabled], 40 | .btn-info[disabled], 41 | .btn-warning[disabled], 42 | .btn-danger[disabled], 43 | fieldset[disabled] .btn-default, 44 | fieldset[disabled] .btn-primary, 45 | fieldset[disabled] .btn-success, 46 | fieldset[disabled] .btn-info, 47 | fieldset[disabled] .btn-warning, 48 | fieldset[disabled] .btn-danger { 49 | -webkit-box-shadow: none; 50 | box-shadow: none; 51 | } 52 | .btn-default .badge, 53 | .btn-primary .badge, 54 | .btn-success .badge, 55 | .btn-info .badge, 56 | .btn-warning .badge, 57 | .btn-danger .badge { 58 | text-shadow: none; 59 | } 60 | .btn:active, 61 | .btn.active { 62 | background-image: none; 63 | } 64 | .btn-default { 65 | text-shadow: 0 1px 0 #fff; 66 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 67 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 68 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); 69 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 70 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 71 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 72 | background-repeat: repeat-x; 73 | border-color: #dbdbdb; 74 | border-color: #ccc; 75 | } 76 | .btn-default:hover, 77 | .btn-default:focus { 78 | background-color: #e0e0e0; 79 | background-position: 0 -15px; 80 | } 81 | .btn-default:active, 82 | .btn-default.active { 83 | background-color: #e0e0e0; 84 | border-color: #dbdbdb; 85 | } 86 | .btn-default.disabled, 87 | .btn-default[disabled], 88 | fieldset[disabled] .btn-default, 89 | .btn-default.disabled:hover, 90 | .btn-default[disabled]:hover, 91 | fieldset[disabled] .btn-default:hover, 92 | .btn-default.disabled:focus, 93 | .btn-default[disabled]:focus, 94 | fieldset[disabled] .btn-default:focus, 95 | .btn-default.disabled.focus, 96 | .btn-default[disabled].focus, 97 | fieldset[disabled] .btn-default.focus, 98 | .btn-default.disabled:active, 99 | .btn-default[disabled]:active, 100 | fieldset[disabled] .btn-default:active, 101 | .btn-default.disabled.active, 102 | .btn-default[disabled].active, 103 | fieldset[disabled] .btn-default.active { 104 | background-color: #e0e0e0; 105 | background-image: none; 106 | } 107 | .btn-primary { 108 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 109 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 110 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); 111 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 112 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 113 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 114 | background-repeat: repeat-x; 115 | border-color: #245580; 116 | } 117 | .btn-primary:hover, 118 | .btn-primary:focus { 119 | background-color: #265a88; 120 | background-position: 0 -15px; 121 | } 122 | .btn-primary:active, 123 | .btn-primary.active { 124 | background-color: #265a88; 125 | border-color: #245580; 126 | } 127 | .btn-primary.disabled, 128 | .btn-primary[disabled], 129 | fieldset[disabled] .btn-primary, 130 | .btn-primary.disabled:hover, 131 | .btn-primary[disabled]:hover, 132 | fieldset[disabled] .btn-primary:hover, 133 | .btn-primary.disabled:focus, 134 | .btn-primary[disabled]:focus, 135 | fieldset[disabled] .btn-primary:focus, 136 | .btn-primary.disabled.focus, 137 | .btn-primary[disabled].focus, 138 | fieldset[disabled] .btn-primary.focus, 139 | .btn-primary.disabled:active, 140 | .btn-primary[disabled]:active, 141 | fieldset[disabled] .btn-primary:active, 142 | .btn-primary.disabled.active, 143 | .btn-primary[disabled].active, 144 | fieldset[disabled] .btn-primary.active { 145 | background-color: #265a88; 146 | background-image: none; 147 | } 148 | .btn-success { 149 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 150 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 151 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); 152 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 153 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 154 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 155 | background-repeat: repeat-x; 156 | border-color: #3e8f3e; 157 | } 158 | .btn-success:hover, 159 | .btn-success:focus { 160 | background-color: #419641; 161 | background-position: 0 -15px; 162 | } 163 | .btn-success:active, 164 | .btn-success.active { 165 | background-color: #419641; 166 | border-color: #3e8f3e; 167 | } 168 | .btn-success.disabled, 169 | .btn-success[disabled], 170 | fieldset[disabled] .btn-success, 171 | .btn-success.disabled:hover, 172 | .btn-success[disabled]:hover, 173 | fieldset[disabled] .btn-success:hover, 174 | .btn-success.disabled:focus, 175 | .btn-success[disabled]:focus, 176 | fieldset[disabled] .btn-success:focus, 177 | .btn-success.disabled.focus, 178 | .btn-success[disabled].focus, 179 | fieldset[disabled] .btn-success.focus, 180 | .btn-success.disabled:active, 181 | .btn-success[disabled]:active, 182 | fieldset[disabled] .btn-success:active, 183 | .btn-success.disabled.active, 184 | .btn-success[disabled].active, 185 | fieldset[disabled] .btn-success.active { 186 | background-color: #419641; 187 | background-image: none; 188 | } 189 | .btn-info { 190 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 191 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 192 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); 193 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 194 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 195 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 196 | background-repeat: repeat-x; 197 | border-color: #28a4c9; 198 | } 199 | .btn-info:hover, 200 | .btn-info:focus { 201 | background-color: #2aabd2; 202 | background-position: 0 -15px; 203 | } 204 | .btn-info:active, 205 | .btn-info.active { 206 | background-color: #2aabd2; 207 | border-color: #28a4c9; 208 | } 209 | .btn-info.disabled, 210 | .btn-info[disabled], 211 | fieldset[disabled] .btn-info, 212 | .btn-info.disabled:hover, 213 | .btn-info[disabled]:hover, 214 | fieldset[disabled] .btn-info:hover, 215 | .btn-info.disabled:focus, 216 | .btn-info[disabled]:focus, 217 | fieldset[disabled] .btn-info:focus, 218 | .btn-info.disabled.focus, 219 | .btn-info[disabled].focus, 220 | fieldset[disabled] .btn-info.focus, 221 | .btn-info.disabled:active, 222 | .btn-info[disabled]:active, 223 | fieldset[disabled] .btn-info:active, 224 | .btn-info.disabled.active, 225 | .btn-info[disabled].active, 226 | fieldset[disabled] .btn-info.active { 227 | background-color: #2aabd2; 228 | background-image: none; 229 | } 230 | .btn-warning { 231 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 232 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 233 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); 234 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 235 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 236 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 237 | background-repeat: repeat-x; 238 | border-color: #e38d13; 239 | } 240 | .btn-warning:hover, 241 | .btn-warning:focus { 242 | background-color: #eb9316; 243 | background-position: 0 -15px; 244 | } 245 | .btn-warning:active, 246 | .btn-warning.active { 247 | background-color: #eb9316; 248 | border-color: #e38d13; 249 | } 250 | .btn-warning.disabled, 251 | .btn-warning[disabled], 252 | fieldset[disabled] .btn-warning, 253 | .btn-warning.disabled:hover, 254 | .btn-warning[disabled]:hover, 255 | fieldset[disabled] .btn-warning:hover, 256 | .btn-warning.disabled:focus, 257 | .btn-warning[disabled]:focus, 258 | fieldset[disabled] .btn-warning:focus, 259 | .btn-warning.disabled.focus, 260 | .btn-warning[disabled].focus, 261 | fieldset[disabled] .btn-warning.focus, 262 | .btn-warning.disabled:active, 263 | .btn-warning[disabled]:active, 264 | fieldset[disabled] .btn-warning:active, 265 | .btn-warning.disabled.active, 266 | .btn-warning[disabled].active, 267 | fieldset[disabled] .btn-warning.active { 268 | background-color: #eb9316; 269 | background-image: none; 270 | } 271 | .btn-danger { 272 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 273 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 274 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); 275 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 276 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 277 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 278 | background-repeat: repeat-x; 279 | border-color: #b92c28; 280 | } 281 | .btn-danger:hover, 282 | .btn-danger:focus { 283 | background-color: #c12e2a; 284 | background-position: 0 -15px; 285 | } 286 | .btn-danger:active, 287 | .btn-danger.active { 288 | background-color: #c12e2a; 289 | border-color: #b92c28; 290 | } 291 | .btn-danger.disabled, 292 | .btn-danger[disabled], 293 | fieldset[disabled] .btn-danger, 294 | .btn-danger.disabled:hover, 295 | .btn-danger[disabled]:hover, 296 | fieldset[disabled] .btn-danger:hover, 297 | .btn-danger.disabled:focus, 298 | .btn-danger[disabled]:focus, 299 | fieldset[disabled] .btn-danger:focus, 300 | .btn-danger.disabled.focus, 301 | .btn-danger[disabled].focus, 302 | fieldset[disabled] .btn-danger.focus, 303 | .btn-danger.disabled:active, 304 | .btn-danger[disabled]:active, 305 | fieldset[disabled] .btn-danger:active, 306 | .btn-danger.disabled.active, 307 | .btn-danger[disabled].active, 308 | fieldset[disabled] .btn-danger.active { 309 | background-color: #c12e2a; 310 | background-image: none; 311 | } 312 | .thumbnail, 313 | .img-thumbnail { 314 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 315 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 316 | } 317 | .dropdown-menu > li > a:hover, 318 | .dropdown-menu > li > a:focus { 319 | background-color: #e8e8e8; 320 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 321 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 322 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 323 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 324 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 325 | background-repeat: repeat-x; 326 | } 327 | .dropdown-menu > .active > a, 328 | .dropdown-menu > .active > a:hover, 329 | .dropdown-menu > .active > a:focus { 330 | background-color: #2e6da4; 331 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 332 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 333 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 334 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 336 | background-repeat: repeat-x; 337 | } 338 | .navbar-default { 339 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 340 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); 341 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); 342 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 343 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 344 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 345 | background-repeat: repeat-x; 346 | border-radius: 4px; 347 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 348 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 349 | } 350 | .navbar-default .navbar-nav > .open > a, 351 | .navbar-default .navbar-nav > .active > a { 352 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 353 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 354 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); 355 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); 356 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); 357 | background-repeat: repeat-x; 358 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 359 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 360 | } 361 | .navbar-brand, 362 | .navbar-nav > li > a { 363 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 364 | } 365 | .navbar-inverse { 366 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 367 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 368 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); 369 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 370 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 371 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 372 | background-repeat: repeat-x; 373 | border-radius: 4px; 374 | } 375 | .navbar-inverse .navbar-nav > .open > a, 376 | .navbar-inverse .navbar-nav > .active > a { 377 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 378 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 379 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); 380 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 382 | background-repeat: repeat-x; 383 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 384 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 385 | } 386 | .navbar-inverse .navbar-brand, 387 | .navbar-inverse .navbar-nav > li > a { 388 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 389 | } 390 | .navbar-static-top, 391 | .navbar-fixed-top, 392 | .navbar-fixed-bottom { 393 | border-radius: 0; 394 | } 395 | @media (max-width: 767px) { 396 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 397 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 398 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 399 | color: #fff; 400 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 401 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 402 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 403 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 405 | background-repeat: repeat-x; 406 | } 407 | } 408 | .alert { 409 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 410 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 411 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 412 | } 413 | .alert-success { 414 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 415 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 416 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); 417 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 418 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 419 | background-repeat: repeat-x; 420 | border-color: #b2dba1; 421 | } 422 | .alert-info { 423 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 424 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 425 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); 426 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 427 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 428 | background-repeat: repeat-x; 429 | border-color: #9acfea; 430 | } 431 | .alert-warning { 432 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 433 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 434 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); 435 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 436 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 437 | background-repeat: repeat-x; 438 | border-color: #f5e79e; 439 | } 440 | .alert-danger { 441 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 442 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 443 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); 444 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 445 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 446 | background-repeat: repeat-x; 447 | border-color: #dca7a7; 448 | } 449 | .progress { 450 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 451 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 452 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); 453 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 454 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 455 | background-repeat: repeat-x; 456 | } 457 | .progress-bar { 458 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 459 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 460 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); 461 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 462 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 463 | background-repeat: repeat-x; 464 | } 465 | .progress-bar-success { 466 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 467 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 468 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); 469 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 470 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 471 | background-repeat: repeat-x; 472 | } 473 | .progress-bar-info { 474 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 475 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 476 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); 477 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 478 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 479 | background-repeat: repeat-x; 480 | } 481 | .progress-bar-warning { 482 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 483 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 484 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); 485 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 486 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 487 | background-repeat: repeat-x; 488 | } 489 | .progress-bar-danger { 490 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 491 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 492 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); 493 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 494 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 495 | background-repeat: repeat-x; 496 | } 497 | .progress-bar-striped { 498 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 499 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 500 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 501 | } 502 | .list-group { 503 | border-radius: 4px; 504 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 505 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 506 | } 507 | .list-group-item.active, 508 | .list-group-item.active:hover, 509 | .list-group-item.active:focus { 510 | text-shadow: 0 -1px 0 #286090; 511 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 512 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 513 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); 514 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 515 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 516 | background-repeat: repeat-x; 517 | border-color: #2b669a; 518 | } 519 | .list-group-item.active .badge, 520 | .list-group-item.active:hover .badge, 521 | .list-group-item.active:focus .badge { 522 | text-shadow: none; 523 | } 524 | .panel { 525 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 526 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 527 | } 528 | .panel-default > .panel-heading { 529 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 530 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 531 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 532 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 533 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 534 | background-repeat: repeat-x; 535 | } 536 | .panel-primary > .panel-heading { 537 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 538 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 539 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 540 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 541 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 542 | background-repeat: repeat-x; 543 | } 544 | .panel-success > .panel-heading { 545 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 546 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 547 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); 548 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 549 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 550 | background-repeat: repeat-x; 551 | } 552 | .panel-info > .panel-heading { 553 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 554 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 555 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); 556 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 557 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 558 | background-repeat: repeat-x; 559 | } 560 | .panel-warning > .panel-heading { 561 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 562 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 563 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); 564 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 565 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 566 | background-repeat: repeat-x; 567 | } 568 | .panel-danger > .panel-heading { 569 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 570 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 571 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); 572 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 573 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 574 | background-repeat: repeat-x; 575 | } 576 | .well { 577 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 578 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 579 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); 580 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 581 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 582 | background-repeat: repeat-x; 583 | border-color: #dcdcdc; 584 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 585 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 586 | } 587 | /*# sourceMappingURL=bootstrap-theme.css.map */ 588 | --------------------------------------------------------------------------------