配置优化

master
killfen 7 years ago
parent da21280bb3
commit cd4672a3dd
  1. 2
      pom.xml
  2. 19
      src/main/resources/application.yml
  3. 2
      src/main/webapp/WEB-INF/manager/basic/index.ftl
  4. 4
      src/main/webapp/WEB-INF/manager/category/index.ftl
  5. 4
      src/main/webapp/WEB-INF/manager/column/index.ftl
  6. 3
      src/main/webapp/WEB-INF/manager/include/macro.ftl
  7. 4
      src/main/webapp/WEB-INF/manager/include/manager.ftl
  8. 2
      src/main/webapp/WEB-INF/manager/include/meta.ftl
  9. 8
      src/main/webapp/WEB-INF/manager/include/ui/checkboxlist.ftl
  10. 4
      src/main/webapp/WEB-INF/manager/include/ui/date.ftl
  11. 2
      src/main/webapp/WEB-INF/manager/include/ui/editor.ftl
  12. 8
      src/main/webapp/WEB-INF/manager/include/ui/file.ftl
  13. 1
      src/main/webapp/WEB-INF/manager/include/ui/index.ftl
  14. 6
      src/main/webapp/WEB-INF/manager/include/ui/input.ftl
  15. 4
      src/main/webapp/WEB-INF/manager/include/ui/page.ftl
  16. 2
      src/main/webapp/WEB-INF/manager/include/ui/radio-item.ftl
  17. 4
      src/main/webapp/WEB-INF/manager/include/ui/time.ftl
  18. 2
      src/main/webapp/WEB-INF/manager/include/ui/tree.ftl
  19. 4
      src/main/webapp/WEB-INF/manager/index.ftl
  20. 2
      src/main/webapp/WEB-INF/manager/login.ftl
  21. 4
      src/main/webapp/WEB-INF/manager/manager/manager.ftl
  22. 4
      src/main/webapp/WEB-INF/manager/role/role_list.ftl
  23. 90
      src/main/webapp/WEB-INF/web.xml

@ -6,7 +6,7 @@
<groupId>net.mingsoft</groupId> <groupId>net.mingsoft</groupId>
<artifactId>mcms</artifactId> <artifactId>mcms</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>mcms</name> <name>mcms1</name>
<packaging>war</packaging> <packaging>war</packaging>
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>

@ -17,21 +17,18 @@ spring:
multipart: multipart:
max-request-size: 100MB max-request-size: 100MB
freemarker: freemarker:
allow-request-override: false suffix: .ftl
allow-session-override: false
cache: false
charset: UTF-8 charset: UTF-8
check-template-location: true
content-type: text/html content-type: text/html
enabled: true allow-request-override: true
expose-request-attributes: false allow-session-override: true
expose-session-attributes: false expose-request-attributes: true
expose-session-attributes: true
expose-spring-macro-helpers: true expose-spring-macro-helpers: true
prefer-file-system-access: true prefer-file-system-access: true
suffix: .ftl template-loader-path: classpath:/WEB-INF/manager
template-loader-path: classpath:/WEB-INF/manager/
settings: settings:
template_update_delay: 0 template_update_delay: 1
default_encoding: UTF-8 default_encoding: UTF-8
classic_compatible: true classic_compatible: true
date_format: yyyy-MM-dd date_format: yyyy-MM-dd
@ -56,7 +53,7 @@ ms:
manager: manager:
path: /ms path: /ms
view: #已过期 view: #已过期
path: path: /WEB-INF/manager
session: session:
timeout: 1800000 #会话超时, 单位:毫秒, 20m=1200000ms, 30m=1800000ms, 60m=3600000ms timeout: 1800000 #会话超时, 单位:毫秒, 20m=1200000ms, 30m=1800000ms, 60m=3600000ms
validation.interval: 120000 #会话清理间隔时间, 单位:毫秒,2m=120000ms validation.interval: 120000 #会话清理间隔时间, 单位:毫秒,2m=120000ms

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<#include "${managerViewPath}/include/meta.ftl"/> <!--调用head内样式信息--> <#include "/include/meta.ftl"/> <!--调用head内样式信息-->
<script type="text/javascript" src="${base}/jquery/zTree_v3/jquery.ztree.all-3.5.min.js"></script> <script type="text/javascript" src="${base}/jquery/zTree_v3/jquery.ztree.all-3.5.min.js"></script>
<link rel="stylesheet" href="${base}/jquery/zTree_v3/zTreeStyle.css" type="text/css"> <link rel="stylesheet" href="${base}/jquery/zTree_v3/zTreeStyle.css" type="text/css">
</head> </head>

@ -10,7 +10,7 @@
<div id="toolbar"> <div id="toolbar">
<@ms.panelNav> <@ms.panelNav>
<@ms.buttonGroup> <@ms.buttonGroup>
<#include "${managerViewPath}/${model?default('')}/category/shiro-button.ftl"/> <#include "/${model?default('')}/category/shiro-button.ftl"/>
</@ms.buttonGroup> </@ms.buttonGroup>
</@ms.panelNav> </@ms.panelNav>
</div> </div>
@ -56,7 +56,7 @@
field: 'categoryTitle', field: 'categoryTitle',
title: '${modelTitle}标题', title: '${modelTitle}标题',
formatter:function(value,row,index) { formatter:function(value,row,index) {
<#include "${managerViewPath}/${model?default('')}/category/shiro-update.ftl"/> <#include "/${model?default('')}/category/shiro-update.ftl"/>
} }
}, { }, {
field: 'categoryDescription', field: 'categoryDescription',

@ -9,7 +9,7 @@
<div id="toolbar"> <div id="toolbar">
<@ms.panelNav> <@ms.panelNav>
<@ms.buttonGroup> <@ms.buttonGroup>
<#include "${managerViewPath}/${model?default('')}/column/shiro-button.ftl"/> <#include "/${model?default('')}/column/shiro-button.ftl"/>
</@ms.buttonGroup> </@ms.buttonGroup>
</@ms.panelNav> </@ms.panelNav>
</div> </div>
@ -53,7 +53,7 @@
title: '标题', title: '标题',
align: 'left', align: 'left',
formatter:function(value,row,index) { formatter:function(value,row,index) {
<#include "${managerViewPath}/${model?default('')}/column/shiro-update.ftl"/> <#include "/${model?default('')}/column/shiro-update.ftl"/>
} }
},{ },{
field: 'columnType', field: 'columnType',

@ -1,4 +1,5 @@
<#include "/include/ui/index.ftl"/> <#include "/include/ui/index.ftl"/>
<#include "/include/manager.ftl"/>
<#global autoCURD=""/> <#global autoCURD=""/>
<#macro autoCURD> <#macro autoCURD>
<#local url=baseUrl?split("?")?first?split("/")?last/> <#local url=baseUrl?split("?")?first?split("/")?last/>
@ -8,7 +9,7 @@
<#global autoCURD="update"> <#global autoCURD="update">
</#if> </#if>
</#macro> </#macro>
<@autoCURD/> <@ms.autoCURD/>
<#--权限控制--> <#--权限控制-->
<#--link:必须 type:add/del/edit/query class:样式 id,value:显示文字--> <#--link:必须 type:add/del/edit/query class:样式 id,value:显示文字-->

@ -4,8 +4,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<#include "${managerViewPath}/include/macro.ftl"/> <#include "/include/macro.ftl"/>
<#include "${managerViewPath}/include/meta.ftl"/> <#include "/include/meta.ftl"/>
</head> </head>
<body> <body>
<div class="ms-content"> <div class="ms-content">

@ -71,7 +71,7 @@
<#include "${managerViewPath}/include/macro.ftl"/> <#include "/include/macro.ftl"/>
<script> <script>
var basePath = "${basePath}"; var basePath = "${basePath}";
var base = "${base}"; var base = "${base}";

@ -12,7 +12,7 @@
help="" help=""
> >
<div class="form-group ms-form-group"> <div class="form-group ms-form-group">
<#include "control.ftl"/><#rt/> <#include "/include/ui/control.ftl"/><#rt/>
<div class="col-sm-10" <#if width!=""> style="${width}px"</#if><#rt/>> <div class="col-sm-10" <#if width!=""> style="${width}px"</#if><#rt/>>
<#if list?is_sequence> <#if list?is_sequence>
<#if listKey!="" && listValue!=""> <#if listKey!="" && listValue!="">
@ -21,7 +21,7 @@
<#local rvalue=item[listValue]> <#local rvalue=item[listValue]>
<#local index=item_index> <#local index=item_index>
<#local hasNext=item_has_next> <#local hasNext=item_has_next>
<#include "checkboxlist-item.ftl"><#t/> <#include "/include/ui/checkboxlist-item.ftl"><#t/>
</#list> </#list>
<#else> <#else>
<#list list as item> <#list list as item>
@ -29,7 +29,7 @@
<#local rvalue=item> <#local rvalue=item>
<#local index=item_index> <#local index=item_index>
<#local hasNext=item_has_next> <#local hasNext=item_has_next>
<#include "checkboxlist-item.ftl"><#t/> <#include "/include/ui/checkboxlist-item.ftl"><#t/>
</#list> </#list>
</#if> </#if>
<#else> <#else>
@ -38,7 +38,7 @@
<#local rvalue=list[key]/> <#local rvalue=list[key]/>
<#local index=key_index> <#local index=key_index>
<#local hasNext=key_has_next> <#local hasNext=key_has_next>
<#include "checkboxlist-item.ftl"><#t/> <#include "/include/ui/checkboxlist-item.ftl"><#t/>
</#list> </#list>
</#if> </#if>
</div> </div>

@ -9,7 +9,7 @@
helpDirection="" helpDirection=""
> >
<div class="form-group ms-form-group"> <div class="form-group ms-form-group">
<#include "control.ftl"/><#rt/> <#include "/include/ui/control.ftl"/><#rt/>
<div class="control-group col-sm-9 ms-from-group-input has-feedback" style="min-width:200px;<#if width!=""> width:${width}px"</#if>"<#rt/>> <div class="control-group col-sm-9 ms-from-group-input has-feedback" style="min-width:200px;<#if width!=""> width:${width}px"</#if>"<#rt/>>
<div class="controls"> <div class="controls">
<div class="input-prepend input-group"> <div class="input-prepend input-group">
@ -19,7 +19,7 @@
<#if maxlength!=""> maxlength="${maxlength}"</#if><#rt/> <#if maxlength!=""> maxlength="${maxlength}"</#if><#rt/>
<#if readonly!=""> readonly="${readonly}"</#if><#rt/> <#if readonly!=""> readonly="${readonly}"</#if><#rt/>
<#if value?? && value?string!=""> value="${value?html}"</#if><#rt/> <#if value?? && value?string!=""> value="${value?html}"</#if><#rt/>
<#include "common-attributes.ftl"/><#rt/> <#include "/include/ui/common-attributes.ftl"/><#rt/>
/><#rt/> /><#rt/>
</div> </div>
</div> </div>

@ -4,7 +4,7 @@
<#--content:初始化内容--> <#--content:初始化内容-->
<#macro editor name label="" content="" validation="" width="100%" height="480" labelStyle="" appId="" help="" helpDirection="" colSm=""> <#macro editor name label="" content="" validation="" width="100%" height="480" labelStyle="" appId="" help="" helpDirection="" colSm="">
<div class="form-group ms-form-group"> <div class="form-group ms-form-group">
<#include "control.ftl"/><#rt/> <#include "/include/ui/control.ftl"/><#rt/>
<div class="ms-form-control ms-from-group-input col-sm-9 has-feedback"> <div class="ms-form-control ms-from-group-input col-sm-9 has-feedback">
<script type="text/plain" id="editor_${name}" name="${name}" style="width:${width}px;height:${height}px">${content?default('')}</script> <script type="text/plain" id="editor_${name}" name="${name}" style="width:${width}px;height:${height}px">${content?default('')}</script>
<script type="text/javascript"> <script type="text/javascript">

@ -7,13 +7,13 @@
id="" name="" class="" style="" size="" title="" disabled="" tabindex="" accesskey="" labelStyle="" id="" name="" class="" style="" size="" title="" disabled="" tabindex="" accesskey="" labelStyle=""
onclick="" ondblclick="" onmousedown="" onmouseup="" onmouseover="" onmousemove="" onmouseout="" onfocus="" onblur="" onkeypress="" onkeydown="" onkeyup="" onselect="" onchange="" onclick="" ondblclick="" onmousedown="" onmouseup="" onmouseover="" onmousemove="" onmouseout="" onfocus="" onblur="" onkeypress="" onkeydown="" onkeyup="" onselect="" onchange=""
> >
<#include "control.ftl"/><#rt/> <#include "/include/ui/control.ftl"/><#rt/>
<input type="file"<#rt/> <input type="file"<#rt/>
<#if id!=""> id="${id}"</#if><#rt/> <#if id!=""> id="${id}"</#if><#rt/>
<#if accept!=""> accept="${accept}"</#if><#rt/> <#if accept!=""> accept="${accept}"</#if><#rt/>
<#if value!=""> value="${value}"</#if><#rt/> <#if value!=""> value="${value}"</#if><#rt/>
<#include "common-attributes.ftl"/><#rt/> <#include "/include/ui/common-attributes.ftl"/><#rt/>
<#include "scripting-events.ftl"/><#rt/> <#include "/include/ui/scripting-events.ftl"/><#rt/>
/> />
<#include "control-close.ftl"/><#rt/> <#include "/include/ui/control-close.ftl"/><#rt/>
</#macro> </#macro>

@ -9,7 +9,6 @@
<#include "/include/ui/editor.ftl"/> <#include "/include/ui/editor.ftl"/>
<#include "/include/ui/time.ftl"/> <#include "/include/ui/time.ftl"/>
<#include "/include/ui/tree.ftl"/> <#include "/include/ui/tree.ftl"/>
<#include "/include/manager.ftl"/>
<#include "/include/ui/page.ftl"/> <#include "/include/ui/page.ftl"/>
<#include "/include/ui/table.ftl"/> <#include "/include/ui/table.ftl"/>
<#include "/include/ui/modal.ftl"/> <#include "/include/ui/modal.ftl"/>

@ -92,7 +92,7 @@
<#local rvalue=item[listValue]> <#local rvalue=item[listValue]>
<#local index=item_index> <#local index=item_index>
<#local hasNext=item_has_next> <#local hasNext=item_has_next>
<#include "radio-item.ftl"><#t/> <#include "/include/ui/radio-item.ftl"><#t/>
</#list> </#list>
<#else> <#else>
<#list list as item> <#list list as item>
@ -100,7 +100,7 @@
<#local rvalue=item> <#local rvalue=item>
<#local index=item_index> <#local index=item_index>
<#local hasNext=item_has_next> <#local hasNext=item_has_next>
<#include "radio-item.ftl"><#t/> <#include "/include/ui/radio-item.ftl"><#t/>
</#list> </#list>
</#if> </#if>
<#else> <#else>
@ -109,7 +109,7 @@
<#local rvalue=list[key]/> <#local rvalue=list[key]/>
<#local index=key_index> <#local index=key_index>
<#local hasNext=key_has_next> <#local hasNext=key_has_next>
<#include "radio-item.ftl"><#t/> <#include "/include/ui/radio-item.ftl"><#t/>
</#list> </#list>
</#if> </#if>
</div> </div>

@ -3,8 +3,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<#include "${managerViewPath}/include/macro.ftl"/> <#include "/include/macro.ftl"/>
<#include "${managerViewPath}/include/meta.ftl"/> <#include "/include/meta.ftl"/>
</head> </head>
<body> <body>
<div class="ms-content"> <div class="ms-content">

@ -3,5 +3,5 @@
<#if onclick?? && onclick!=""> onclick="${onclick}"</#if><#rt/> <#if onclick?? && onclick!=""> onclick="${onclick}"</#if><#rt/>
<#if disabled?? && disabled> disabled="disabled" </#if><#rt/> <#if disabled?? && disabled> disabled="disabled" </#if><#rt/>
<#if (rkey?string=="" && (!value?? || value?string=="")) || (value?? && value?string!="" && value?string==rkey?string)> checked="checked"</#if><#rt/> <#if (rkey?string=="" && (!value?? || value?string=="")) || (value?? && value?string!="" && value?string==rkey?string)> checked="checked"</#if><#rt/>
<#include "common-attributes.ftl"/><#rt/> <#include "/include/ui/common-attributes.ftl"/><#rt/>
/> ${rvalue} </label> <#if hasNext> </#if> /> ${rvalue} </label> <#if hasNext> </#if>

@ -8,7 +8,7 @@
helpDirection="" helpDirection=""
> >
<div class="form-group ms-form-group"> <div class="form-group ms-form-group">
<#include "control.ftl"/><#rt/> <#include "/include/ui/control.ftl"/><#rt/>
<div class="control-group col-sm-9 ms-from-group-input" style="min-widht:200px;<#if width!="">width:${width}px</#if>"<#rt/>> <div class="control-group col-sm-9 ms-from-group-input" style="min-widht:200px;<#if width!="">width:${width}px</#if>"<#rt/>>
<div class="controls"> <div class="controls">
<div class="input-prepend input-group date" <#if id!=""> id="${id}"<#elseif name!="">id="${name}"</#if><#rt/> <div class="input-prepend input-group date" <#if id!=""> id="${id}"<#elseif name!="">id="${name}"</#if><#rt/>
@ -18,7 +18,7 @@
<#if maxlength!=""> maxlength="${maxlength}"</#if><#rt/> <#if maxlength!=""> maxlength="${maxlength}"</#if><#rt/>
<#if readonly!=""> readonly="${readonly}"</#if><#rt/> <#if readonly!=""> readonly="${readonly}"</#if><#rt/>
<#if value?? && value?string!=""> value="${value?html}"</#if><#rt/> <#if value?? && value?string!=""> value="${value?html}"</#if><#rt/>
<#include "common-attributes.ftl"/><#rt/>/> <#include "/include/ui/common-attributes.ftl"/><#rt/>/>
</div> </div>
</div> </div>
</div> </div>

@ -267,7 +267,7 @@
<#elseif type=="default"> <#--默认调用方式在4.5.5将废弃--> <#elseif type=="default"> <#--默认调用方式在4.5.5将废弃-->
<!-- 初始化样式开始 --> <!-- 初始化样式开始 -->
<div class="form-group ms-form-group "> <div class="form-group ms-form-group ">
<#include "control.ftl"/><#rt/> <#include "/include/ui/control.ftl"/><#rt/>
<div class="ms-form-control <#if label!="">col-sm-9</#if>"> <div class="ms-form-control <#if label!="">col-sm-9</#if>">
<ul class="ztree" id="treeDome${treeId}"> <ul class="ztree" id="treeDome${treeId}">
</ul> </ul>

@ -3,8 +3,8 @@
<head> <head>
<title><#if app?has_content>${app.basicTitle}<#else>MS</#if>管理系统</title> <title><#if app?has_content>${app.basicTitle}<#else>MS</#if>管理系统</title>
<link rel="bookmark" href="favicon.ico"/> <link rel="bookmark" href="favicon.ico"/>
<#include "${managerViewPath}/include/macro.ftl"/> <#include "/include/macro.ftl"/>
<#include "${managerViewPath}/include/meta.ftl"/> <#include "/include/meta.ftl"/>
<script src="http://cdn.mingsoft.net/model/4.6.0/ms.mstore.client.min.js"></script> <script src="http://cdn.mingsoft.net/model/4.6.0/ms.mstore.client.min.js"></script>
</head> </head>
<script type="text/javascript"> <script type="text/javascript">

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<#include "${managerViewPath}/include/meta.ftl"/> <#include "/include/meta.ftl"/>
<title><#if app?has_content>${app.appName}<#else>MS</#if>管理系统${managerViewPath}</title> <title><#if app?has_content>${app.appName}<#else>MS</#if>管理系统${managerViewPath}</title>
<link rel="shortcut icon" href="${static}/global/images/ms.ico"/> <link rel="shortcut icon" href="${static}/global/images/ms.ico"/>
<link rel="bookmark" href="${static}/global/images/ms.icoo"/> <link rel="bookmark" href="${static}/global/images/ms.icoo"/>

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<#include "${managerViewPath}/include/macro.ftl"/> <#include "/include/macro.ftl"/>
<#include "${managerViewPath}/include/meta.ftl"/> <#include "/include/meta.ftl"/>
</head> </head>
<body> <body>
<@ms.content> <@ms.content>

@ -1,8 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<#include "${managerViewPath}/include/meta.ftl"/> <#include "/include/meta.ftl"/>
<#include "${managerViewPath}/include/macro.ftl"/> <#include "/include/macro.ftl"/>
<style> <style>
</style> </style>

@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>mybatis</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml,classpath:spring-mybatis.xml,classpath:spring-shiro.xml</param-value>
</context-param>
<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<description>spring监听器</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- spring mvc servlet -->
<servlet>
<description>spring mvc servlet</description>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>spring mvc 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Apache Shiro -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>login.do</welcome-file>
</welcome-file-list>
<!-- 配置session超时时间,单位分钟 -->
<error-page>
<error-code>404</error-code>
<location>/error/404.do</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.do</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/error/405.do</location>
</error-page>
<error-page>
<error-code>504</error-code>
<location>/error/504.do</location>
</error-page>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>
Loading…
Cancel
Save