diff --git a/maxkey-core/src/main/java/org/maxkey/web/MaxKeyFreeMarkerConfigurer.java b/maxkey-core/src/main/java/org/maxkey/web/MaxKeyFreeMarkerConfigurer.java index eccee9223..6f32c8285 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/MaxKeyFreeMarkerConfigurer.java +++ b/maxkey-core/src/main/java/org/maxkey/web/MaxKeyFreeMarkerConfigurer.java @@ -5,8 +5,9 @@ import java.util.Map; import javax.annotation.PostConstruct; -import org.maxkey.web.tag.BaseTagDirective; import org.maxkey.web.tag.FreemarkerTag; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -18,22 +19,20 @@ import freemarker.template.TemplateException; @Component public class MaxKeyFreeMarkerConfigurer implements ApplicationContextAware { - + private static final Logger _logger = LoggerFactory.getLogger(MaxKeyFreeMarkerConfigurer.class); ApplicationContext applicationContext ; @Autowired Configuration configuration; - - @Autowired - BaseTagDirective baseTagDirective; + @PostConstruct // 在项目启动时执行方法 public void setSharedVariable() throws IOException, TemplateException { - // configuration.setSharedVariable("base", baseTagDirective); // 根据注解FreemarkerTag获取bean ,key is bean name ,value is bean object Map map = this.applicationContext.getBeansWithAnnotation(FreemarkerTag.class); for (String key : map.keySet()) { configuration.setSharedVariable(key, map.get(key)); + _logger.debug("FreeMarker Template "+key); } } diff --git a/maxkey-protocols/maxkey-protocol-authorize/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-authorize/bin/main/.gitignore new file mode 100644 index 000000000..59d60644b --- /dev/null +++ b/maxkey-protocols/maxkey-protocol-authorize/bin/main/.gitignore @@ -0,0 +1,2 @@ +/META-INF/ +/org/ diff --git a/maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore b/maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore new file mode 100644 index 000000000..59d60644b --- /dev/null +++ b/maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore @@ -0,0 +1,2 @@ +/META-INF/ +/org/ diff --git a/maxkey-web-manage/.classpath b/maxkey-web-manage/.classpath index 37ca75a79..cd5c0025d 100644 --- a/maxkey-web-manage/.classpath +++ b/maxkey-web-manage/.classpath @@ -1,18 +1,7 @@ - - - - - - - - - - - - - + + diff --git a/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs b/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs index 896a9a53a..15a88db17 100644 --- a/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs +++ b/maxkey-web-manage/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 -encoding/=UTF-8 \ No newline at end of file +encoding//src/main/resources/templates/views/login.ftl=UTF-8 +encoding/=UTF-8 diff --git a/maxkey-web-manage/.settings/org.eclipse.wst.common.component b/maxkey-web-manage/.settings/org.eclipse.wst.common.component index 009800614..5c3db0275 100644 --- a/maxkey-web-manage/.settings/org.eclipse.wst.common.component +++ b/maxkey-web-manage/.settings/org.eclipse.wst.common.component @@ -5,6 +5,8 @@ + + uses diff --git a/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyApplication.java b/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyMgtApplication.java similarity index 50% rename from maxkey-web-manage/src/main/java/org/maxkey/MaxKeyApplication.java rename to maxkey-web-manage/src/main/java/org/maxkey/MaxKeyMgtApplication.java index 97ccb3fe2..90e7563b3 100644 --- a/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyApplication.java +++ b/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyMgtApplication.java @@ -5,16 +5,23 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ImportResource; @SpringBootApplication -public class MaxKeyApplication extends SpringBootServletInitializer { +@ImportResource(locations={"classpath:spring/maxkey-mgt.xml"}) +@ComponentScan(basePackages = { + "org.maxkey.MaxKeyConfig" + } +) +public class MaxKeyMgtApplication extends SpringBootServletInitializer { public static void main(String[] args) { - SpringApplication.run(MaxKeyApplication.class, args); + SpringApplication.run(MaxKeyMgtApplication.class, args); } protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(MaxKeyApplication.class); + return application.sources(MaxKeyMgtApplication.class); } } diff --git a/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyConfig.java b/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyMgtConfig.java similarity index 63% rename from maxkey-web-manage/src/main/java/org/maxkey/MaxKeyConfig.java rename to maxkey-web-manage/src/main/java/org/maxkey/MaxKeyMgtConfig.java index cd1069a4d..b464e09dd 100644 --- a/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyConfig.java +++ b/maxkey-web-manage/src/main/java/org/maxkey/MaxKeyMgtConfig.java @@ -1,10 +1,10 @@ package org.maxkey; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; @Configuration -@ImportResource(locations={"classpath:spring/maxkey-mgt.xml"}) -public class MaxKeyConfig { +public class MaxKeyMgtConfig { } diff --git a/maxkey-web-manage/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java b/maxkey-web-manage/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java index c86352173..997fa7738 100644 --- a/maxkey-web-manage/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java +++ b/maxkey-web-manage/src/main/java/org/maxkey/web/interceptor/PermissionAdapter.java @@ -32,7 +32,7 @@ public class PermissionAdapter extends HandlerInterceptorAdapter { @Qualifier("applicationConfig") private ApplicationConfig applicationConfig; - static ConcurrentHashMapnavigationsMap=null; + static ConcurrentHashMapnavigationsMap=null; /* * 请求前处理 * (non-Javadoc) @@ -42,9 +42,9 @@ public class PermissionAdapter extends HandlerInterceptorAdapter { public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception { _logger.debug("PermissionAdapter preHandle"); //加载定义的功能菜单地址 - if(navigationsMap==null){ + /*if(navigationsMap==null){ List navigationsList=((NavigationsService)WebContext.getBean("navigationsService")).query(null); - navigationsMap=new ConcurrentHashMap(); + navigationsMap=new ConcurrentHashMap(); for(Navigations nav : navigationsList){ if(nav.getUrl()==null)continue; if(nav.getUrl().endsWith("/")){ @@ -58,7 +58,7 @@ public class PermissionAdapter extends HandlerInterceptorAdapter { UserInfo userInfo =WebContext.getUserInfo();//取得登录用户 - if(userInfo==null){//判断用户和角色,判断用户是否登录用户 + if(userInfo==null||WebContext.getRoles()==null){//判断用户和角色,判断用户是否登录用户 RequestDispatcher dispatcher = request.getRequestDispatcher("/login"); dispatcher.forward(request, response); return false; @@ -76,7 +76,20 @@ public class PermissionAdapter extends HandlerInterceptorAdapter { } boolean hasNavAccess=true; - + //菜单权限匹配 + if(navigationsMap.containsKey(accessURI)){//判断当前访问URL地址是否需要进行权限校验 + hasNavAccess=false; + for(Navigations nav : WebContext.getNavigations()){//获取当前登录用户拥有URL访问列表 + String haveURL=nav.getUrl(); + if(haveURL==null)continue; + if(!haveURL.endsWith("/")){haveURL="/"+haveURL+"/";} + if(haveURL.endsWith(accessURI)){ + hasNavAccess=true; + } + } + _logger.debug("Access URI : "+accessURI+" , hasNavAccess "+hasNavAccess); + if(hasNavAccess)return true; + } /* boolean preHandler = super.preHandle(request, response, handler); diff --git a/maxkey-web-manage/src/main/resources/application.properties b/maxkey-web-manage/src/main/resources/application.properties new file mode 100644 index 000000000..464d2bf39 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/application.properties @@ -0,0 +1,22 @@ +#server config +#spring.profiles.active=dev +#server port +server.port=9521 +#web app context path +server.servlet.context-path=/maxkey-mgt + +#for freemarker +spring.freemarker.template-loader-path=classpath:/templates/views +spring.freemarker.cache=false +spring.freemarker.charset=UTF-8 +spring.freemarker.check-template-location=true +spring.freemarker.content-type=text/html +spring.freemarker.expose-request-attributes=false +spring.freemarker.expose-session-attributes=false +spring.freemarker.request-context-attribute=request +spring.freemarker.suffix=.ftl + +#static resources +spring.mvc.static-path-pattern=/static/** + +spring.main.allow-bean-definition-overriding=true \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/config/applicationLogin.properties b/maxkey-web-manage/src/main/resources/config/applicationLogin.properties index 9c75d831b..4e7acb3dc 100644 --- a/maxkey-web-manage/src/main/resources/config/applicationLogin.properties +++ b/maxkey-web-manage/src/main/resources/config/applicationLogin.properties @@ -4,7 +4,7 @@ # domain name configuration config.domain.name=sso.maxkey.org config.server.name=http://${config.domain.name} -config.server.maxkey.uri=${config.server.name}/maxkey-mgt +config.server.maxkey.uri=${config.server.name}:9521/maxkey-mgt ############################################################################ # Login configuration diff --git a/maxkey-web-manage/src/main/resources/messages/message.properties b/maxkey-web-manage/src/main/resources/messages/message.properties index baeed6a0d..3c54a0253 100644 --- a/maxkey-web-manage/src/main/resources/messages/message.properties +++ b/maxkey-web-manage/src/main/resources/messages/message.properties @@ -1,4 +1,4 @@ -global.application=MaxKey\u5E94\u7528\u5B89\u5168\u7CFB\u7EDF +global.application=MaxKey\u5E94\u7528\u5B89\u5168\u7BA1\u7406\u7CFB\u7EDF global.change.language=\u8BED\u97F3\u9009\u62E9 global.change.language.en=\u82F1\u6587 global.change.language.zh=\u4E2D\u6587 @@ -13,7 +13,6 @@ global.logout.text.prefix=\u60A8\u5DF2\u7ECF\u6210\u529F\u9000\u51FA\u767B\u5F55 login.session.timeout.tip=\u767B\u5F55\u4F1A\u8BDD\u8D85\u65F6 login.session.timeout.prefix=\u60A8\u7684\u767B\u5F55\u4F1A\u8BDD\u5DF2\u7ECF\u8D85\u65F6\uFF0C\u8BF7 login.session.timeout.suffix=\u91CD\u65B0\u767B\u5F55 -login.text.login.header=\u8D26\u53F7\u767B\u5F55 common.window.title=\u7A97\u53E3 common.alert.title=\u63D0\u793A\u4FE1\u606F @@ -33,22 +32,6 @@ common.text.createdby=\u521B\u5EFA\u4EBA common.text.createddate=\u521B\u5EFA\u65F6\u95F4 common.text.modifiedby=\u4FEE\u6539\u4EBA common.text.modifieddate=\u4FEE\u6539\u65F6\u95F4 -common.text.status=\u72B6\u6001 -common.text.status.0=\u5F00\u59CB -common.text.status.1=\u6B63\u5E38 -common.text.status.2=\u505C\u6B62 -common.text.status.3=\u542F\u7528 -common.text.status.4=\u7981\u7528 -common.text.status.5=\u9501\u5B9A -common.text.status.6=\u89E3\u9501 -common.text.status.7=\u65E0\u6548 -common.text.status.8=\u8FC7\u671F -common.text.status.9=\u5220\u9664 -common.text.status.10=\u6709\u6548 -common.text.status.11=\u6D3B\u52A8 -common.text.status.12=\u4E0D\u6D3B\u52A8 -common.text.status.13=\u6279\u51C6 - login.text.login.twofactor.obtain.valid=\u91CD\u65B0\u83B7\u53D6 login.text.login.twofactor.obtain=\u83B7\u53D6\u52A8\u6001\u9A8C\u8BC1\u7801 @@ -56,7 +39,7 @@ login.text.login.twofactor.obtain.valid.unit=\u79D2 login.text.login.twofactor.validTime=\u5269\u4F59\u65F6\u95F4 login.text.login.twofactor.validTime.unit=\u79D2 login.text.login.twofactor=\u5B89\u5168\u8BA4\u8BC1 -login.text.login.normal=\u57FA\u672C\u8BA4\u8BC1 +login.text.login.normal=\u7528\u6237\u8BA4\u8BC1 login.text.username=\u7528\u6237\u540D login.text.password=\u5BC6    \u7801 login.text.captcha=\u9A8C\u8BC1\u7801 @@ -183,14 +166,13 @@ apps.category=\u7C7B\u578B button.text.action=\u8BBF\u95EE button.text.visit=\u8BBF\u95EE button.text.save=\u4FDD\u5B58 +button.text.add=\u65B0\u589E +button.text.edit=\u7F16\u8F91 +button.text.delete=\u5220\u9664 button.text.select=\u8BF7\u9009\u62E9 button.text.search=\u67E5\u8BE2 button.text.expandsearch=\u5C55\u5F00 button.text.collapsesearch=\u6536\u7F29 -button.text.changepassword=\u4FEE\u6539\u5BC6\u7801 -button.text.add=\u65B0\u589E -button.text.edit=\u4FEE\u6539 -button.text.delete=\u5220\u9664 log.loginhistory.id=\u7F16\u53F7 log.loginhistory.sessionId=\u4F1A\u8BDD @@ -223,16 +205,4 @@ log.operate.message=\u6D88\u606F log.operate.content=\u5185\u5BB9 log.operate.messageType=\u6D88\u606F\u7C7B\u578B log.operate.operateType=\u64CD\u4F5C\u7C7B\u578B -log.operate.username=\u64CD\u4F5C\u4EBA - -passwordpolicy.minlength=\u6700\u5C0F\u957F\u5EA6 -passwordpolicy.maxlength=\u6700\u5927\u957F\u5EA6 -passwordpolicy.lowercase=\u5C0F\u5199 -passwordpolicy.uppercase=\u5927\u5199 -passwordpolicy.digits=\u6570\u5B57 -passwordpolicy.specialchar=\u7279\u6B8A\u5B57\u7B26 -passwordpolicy.attempts=\u767B\u5F55\u9519\u8BEF\u6B21\u6570 -passwordpolicy.duration=\u9501\u5B9A\u65F6\u95F4 -passwordpolicy.expiration=\u8FC7\u671F\u5929\u6570 -passwordpolicy.username=\u5305\u542B\u7528\u6237\u540D -passwordpolicy.simplepasswords=\u7B80\u5355\u5BC6\u7801\u5217\u8868 \ No newline at end of file +log.operate.username=\u64CD\u4F5C\u4EBA \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-web.xml b/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-web.xml index 0bc587b30..482a69700 100644 --- a/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-web.xml +++ b/maxkey-web-manage/src/main/resources/spring/maxkey-mgt-web.xml @@ -22,13 +22,6 @@ - - - - - - - @@ -42,6 +35,11 @@ + + + + + @@ -126,9 +124,6 @@ - - - diff --git a/maxkey-web-manage/src/main/resources/static/css/base.css b/maxkey-web-manage/src/main/resources/static/css/base.css index 9f1076ea1..1c23d76dd 100644 --- a/maxkey-web-manage/src/main/resources/static/css/base.css +++ b/maxkey-web-manage/src/main/resources/static/css/base.css @@ -11,6 +11,212 @@ body{ font-family: "Arial", "Helvetica", "Verdana", "sans-serif"; } +.header { + display: block; + height: 65px; + width: 100%; + position: fixed; + padding: 0; + z-index: 1040; + background-color: #fff; + border-bottom: 1px solid #e9eaec; + margin-bottom: 0; + transition: all .2s ease; + -webkit-transition: all .2s ease; + -moz-transition: all .2s ease; + -o-transition: all .2s ease; + -ms-transition: all .2s ease; +} +.swlink { + text-indent: -9999px; + height: 0; + line-height: 0; + font-size: 0; + overflow: hidden; +} + +header .header-container .nav-left>li, .header .header-container .nav-right>li { + float: left; +} +.search-box { + margin-right: 20px; + position: relative; +} + +.header .header-container .nav-logo { + float: left; + padding-left: 40px; + padding-top: 8px; +} + +.header .header-container .nav-left { + float: left; +} +.header .header-container .nav-left, .header .header-container .nav-right { + position: relative; + list-style: none; + padding-left: 0; + margin-bottom: 0; +} + +.header .header-container .nav-right { + float: right; + margin-right: 30px; +} +.header .header-container .nav-left, .header .header-container .nav-right { + position: relative; + list-style: none; + padding-left: 0; + margin-bottom: 0; +} + +.header .header-container .nav-left>li>a i, .header .header-container .nav-right>li>a i { + font-size: 18px; + vertical-align: middle; + color: #fff; + border-radius: 50%; + border: 1px solid #f1f1f1; + padding: 8px; + color: #999; + transition: all .3s ease-in-out; + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + -ms-transition: all .3s ease-in-out; +} + +.sidenav-fold-toggler{ + +} +[class^=lni-], [class*=" lni-"] { + font-family: lineicons!important; + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.side-nav-dark .side-nav { + background-color: #212529; + color: #99abb4; +} +.side-nav { + width: 250px; + background-color: #fff; + z-index: 1000; + top: 65px; + bottom: 0; + position: fixed; + overflow-y: auto; + transition: all .2s ease; + -webkit-transition: all .2s ease; + -moz-transition: all .2s ease; + -o-transition: all .2s ease; + -ms-transition: all .2s ease; +} + +.side-nav-folded .side-nav { + width: 1px; + padding-right: 1px; + padding-left: 1px; +} + +@media only screen and (min-width:992px) { + .side-nav-folded .page-container { + padding-left: 0px + } +} + +@media only screen and (max-width:992px) { + .side-nav-folded .page-container { + padding-left: 0 + } +} + +.page-container { + min-height: 100vh; + padding-left: 250px; + transition: all .2s ease; + -webkit-transition: all .2s ease; + -moz-transition: all .2s ease; + -o-transition: all .2s ease; + -ms-transition: all .2s ease; +} + +.page-container .main-content { + padding: calc(50px + 35px) 15px 15px; + min-height: calc(100vh - 65px); + background: #e6e8ea; + width: 100%; + flex-grow: 1; +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + background-color: #f5f5f5; +} + +.breadcrumb-wrapper h4 { + color: #515365; + font-weight: 500; + margin-top: 6px; + font-size: 18px; +} + +.breadcrumb-wrapper .breadcrumb { + margin-bottom: 0; + padding: 0; + background: 0 0; +} + +.breadcrumb-wrapper { + margin-bottom: 20px; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.breadcrumb-wrapper .breadcrumb li { + display: inline-block; + font-size: 14px; + font-weight: 400; + margin-left: 3px; +} + +.breadcrumb-wrapper .breadcrumb li a { + text-decoration: none; + color: #8a8a8a; + cursor: pointer; +} +.breadcrumb-wrapper .breadcrumb .active { + color: #e22a6f; +} + +.content-footer .footer { + padding: 20px 0; + font-size: 14px; + border-top: 1px solid #e9eaec; +} + +.wrapper-page { + margin: 7.5% auto; + position: relative; +} + +.card-header .card-title { + margin-bottom: 0; + display: inline-block; +} + .form_title_bar{ width: 100%; height: 36px; @@ -57,13 +263,6 @@ body{ /*border-top: 1px solid #e5e5e5;*/ } -.container { - width: 990px; - margin-left: auto; - margin-right: auto; - padding: 0 10px -} - #mainFrame{ margin-top: 0px; margin-left: auto; @@ -236,3 +435,4 @@ body{ } + diff --git a/maxkey-web-manage/src/main/resources/static/images/cert.png b/maxkey-web-manage/src/main/resources/static/images/cert.png new file mode 100644 index 000000000..33575df3b Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/cert.png differ diff --git a/maxkey-web-manage/src/main/resources/static/images/exit.jpg b/maxkey-web-manage/src/main/resources/static/images/exit.jpg new file mode 100644 index 000000000..1c4516e8e Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/exit.jpg differ diff --git a/maxkey-web-manage/src/main/resources/static/images/exit1.jpg b/maxkey-web-manage/src/main/resources/static/images/exit1.jpg new file mode 100644 index 000000000..e45ca086f Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/exit1.jpg differ diff --git a/maxkey-web-manage/src/main/resources/static/images/exit2.jpg b/maxkey-web-manage/src/main/resources/static/images/exit2.jpg new file mode 100644 index 000000000..9e90ebc33 Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/exit2.jpg differ diff --git a/maxkey-web-manage/src/main/resources/static/images/exit4.png b/maxkey-web-manage/src/main/resources/static/images/exit4.png new file mode 100644 index 000000000..cebbe36f9 Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/exit4.png differ diff --git a/maxkey-web-manage/src/main/resources/static/images/grid.png b/maxkey-web-manage/src/main/resources/static/images/grid.png index a98bccd53..ed4c62d55 100644 Binary files a/maxkey-web-manage/src/main/resources/static/images/grid.png and b/maxkey-web-manage/src/main/resources/static/images/grid.png differ diff --git a/maxkey-web-manage/src/main/resources/static/images/grid_sel.png b/maxkey-web-manage/src/main/resources/static/images/grid_sel.png deleted file mode 100644 index b7848037c..000000000 Binary files a/maxkey-web-manage/src/main/resources/static/images/grid_sel.png and /dev/null differ diff --git a/maxkey-web-manage/src/main/resources/static/images/list.png b/maxkey-web-manage/src/main/resources/static/images/list.png deleted file mode 100644 index 35f8a3467..000000000 Binary files a/maxkey-web-manage/src/main/resources/static/images/list.png and /dev/null differ diff --git a/maxkey-web-manage/src/main/resources/static/images/list_sel.png b/maxkey-web-manage/src/main/resources/static/images/list_sel.png deleted file mode 100644 index f7deef3bf..000000000 Binary files a/maxkey-web-manage/src/main/resources/static/images/list_sel.png and /dev/null differ diff --git a/maxkey-web-manage/src/main/resources/static/images/menu-left.png b/maxkey-web-manage/src/main/resources/static/images/menu-left.png new file mode 100644 index 000000000..4ec7174e6 Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/menu-left.png differ diff --git a/maxkey-web-manage/src/main/resources/static/images/menu.png b/maxkey-web-manage/src/main/resources/static/images/menu.png new file mode 100644 index 000000000..0c87924bb Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/menu.png differ diff --git a/maxkey-web-manage/src/main/resources/static/images/progress_bar.gif b/maxkey-web-manage/src/main/resources/static/images/progress_bar.gif deleted file mode 100644 index dd60b123b..000000000 Binary files a/maxkey-web-manage/src/main/resources/static/images/progress_bar.gif and /dev/null differ diff --git a/maxkey-web-manage/src/main/resources/static/images/side-nav.png b/maxkey-web-manage/src/main/resources/static/images/side-nav.png new file mode 100644 index 000000000..6b0f7933b Binary files /dev/null and b/maxkey-web-manage/src/main/resources/static/images/side-nav.png differ diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/cjs/index.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/cjs/index.js new file mode 100644 index 000000000..7862198ff --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/cjs/index.js @@ -0,0 +1,335 @@ +/*! +* metismenu https://github.com/onokumus/metismenu#readme +* A jQuery menu plugin +* @version 3.0.4 +* @author Osman Nuri Okumus (https://github.com/onokumus) +* @license: MIT +*/ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var $ = _interopDefault(require('jquery')); + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +var Util = function ($) { + // eslint-disable-line no-shadow + var TRANSITION_END = 'transitionend'; + var Util = { + // eslint-disable-line no-shadow + TRANSITION_END: 'mmTransitionEnd', + triggerTransitionEnd: function triggerTransitionEnd(element) { + $(element).trigger(TRANSITION_END); + }, + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(TRANSITION_END); + } + }; + + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function handle(event) { + if ($(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } + + return undefined; + } + }; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + $(this).one(Util.TRANSITION_END, function () { + called = true; + }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; + } + + function setTransitionEndSupport() { + $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign + // eslint-disable-next-line no-param-reassign + + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + + setTransitionEndSupport(); + return Util; +}($); + +var NAME = 'metisMenu'; +var DATA_KEY = 'metisMenu'; +var EVENT_KEY = "." + DATA_KEY; +var DATA_API_KEY = '.data-api'; +var JQUERY_NO_CONFLICT = $.fn[NAME]; +var TRANSITION_DURATION = 350; +var Default = { + toggle: true, + preventDefault: true, + triggerElement: 'a', + parentTrigger: 'li', + subMenu: 'ul' +}; +var Event = { + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY +}; +var ClassName = { + METIS: 'metismenu', + ACTIVE: 'mm-active', + SHOW: 'mm-show', + COLLAPSE: 'mm-collapse', + COLLAPSING: 'mm-collapsing', + COLLAPSED: 'mm-collapsed' +}; + +var MetisMenu = +/*#__PURE__*/ +function () { + // eslint-disable-line no-shadow + function MetisMenu(element, config) { + this.element = element; + this.config = _extends({}, Default, config); + this.transitioning = null; + this.init(); + } + + var _proto = MetisMenu.prototype; + + _proto.init = function init() { + var self = this; + var conf = this.config; + var el = $(this.element); + el.addClass(ClassName.METIS); // add metismenu class to element + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).children(conf.triggerElement).attr('aria-expanded', 'true'); // add attribute aria-expanded=true the trigger element + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).parents(conf.parentTrigger).addClass(ClassName.ACTIVE); + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).parents(conf.parentTrigger).children(conf.triggerElement).attr('aria-expanded', 'true'); // add attribute aria-expanded=true the triggers of all parents + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).has(conf.subMenu).children(conf.subMenu).addClass(ClassName.COLLAPSE + " " + ClassName.SHOW); + el.find(conf.parentTrigger).not("." + ClassName.ACTIVE).has(conf.subMenu).children(conf.subMenu).addClass(ClassName.COLLAPSE); + el.find(conf.parentTrigger) // .has(conf.subMenu) + .children(conf.triggerElement).on(Event.CLICK_DATA_API, function (e) { + // eslint-disable-line func-names + var eTar = $(this); + + if (eTar.attr('aria-disabled') === 'true') { + return; + } + + if (conf.preventDefault && eTar.attr('href') === '#') { + e.preventDefault(); + } + + var paRent = eTar.parent(conf.parentTrigger); + var sibLi = paRent.siblings(conf.parentTrigger); + var sibTrigger = sibLi.children(conf.triggerElement); + + if (paRent.hasClass(ClassName.ACTIVE)) { + eTar.attr('aria-expanded', 'false'); + self.removeActive(paRent); + } else { + eTar.attr('aria-expanded', 'true'); + self.setActive(paRent); + + if (conf.toggle) { + self.removeActive(sibLi); + sibTrigger.attr('aria-expanded', 'false'); + } + } + + if (conf.onTransitionStart) { + conf.onTransitionStart(e); + } + }); + }; + + _proto.setActive = function setActive(li) { + $(li).addClass(ClassName.ACTIVE); + var ul = $(li).children(this.config.subMenu); + + if (ul.length > 0 && !ul.hasClass(ClassName.SHOW)) { + this.show(ul); + } + }; + + _proto.removeActive = function removeActive(li) { + $(li).removeClass(ClassName.ACTIVE); + var ul = $(li).children(this.config.subMenu + "." + ClassName.SHOW); + + if (ul.length > 0) { + this.hide(ul); + } + }; + + _proto.show = function show(element) { + var _this = this; + + if (this.transitioning || $(element).hasClass(ClassName.COLLAPSING)) { + return; + } + + var elem = $(element); + var startEvent = $.Event(Event.SHOW); + elem.trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + elem.parent(this.config.parentTrigger).addClass(ClassName.ACTIVE); + + if (this.config.toggle) { + var toggleElem = elem.parent(this.config.parentTrigger).siblings().children(this.config.subMenu + "." + ClassName.SHOW); + this.hide(toggleElem); + } + + elem.removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING).height(0); + this.setTransitioning(true); + + var complete = function complete() { + // check if disposed + if (!_this.config || !_this.element) { + return; + } + + elem.removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE + " " + ClassName.SHOW).height(''); + + _this.setTransitioning(false); + + elem.trigger(Event.SHOWN); + }; + + elem.height(element[0].scrollHeight).one(Util.TRANSITION_END, complete).mmEmulateTransitionEnd(TRANSITION_DURATION); + }; + + _proto.hide = function hide(element) { + var _this2 = this; + + if (this.transitioning || !$(element).hasClass(ClassName.SHOW)) { + return; + } + + var elem = $(element); + var startEvent = $.Event(Event.HIDE); + elem.trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + elem.parent(this.config.parentTrigger).removeClass(ClassName.ACTIVE); // eslint-disable-next-line no-unused-expressions + + elem.height(elem.height())[0].offsetHeight; + elem.addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + this.setTransitioning(true); + + var complete = function complete() { + // check if disposed + if (!_this2.config || !_this2.element) { + return; + } + + if (_this2.transitioning && _this2.config.onTransitionEnd) { + _this2.config.onTransitionEnd(); + } + + _this2.setTransitioning(false); + + elem.trigger(Event.HIDDEN); + elem.removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE); + }; + + if (elem.height() === 0 || elem.css('display') === 'none') { + complete(); + } else { + elem.height(0).one(Util.TRANSITION_END, complete).mmEmulateTransitionEnd(TRANSITION_DURATION); + } + }; + + _proto.setTransitioning = function setTransitioning(isTransitioning) { + this.transitioning = isTransitioning; + }; + + _proto.dispose = function dispose() { + $.removeData(this.element, DATA_KEY); + $(this.element).find(this.config.parentTrigger).has(this.config.subMenu).children(this.config.triggerElement).off('click'); + this.transitioning = null; + this.config = null; + this.element = null; + }; + + MetisMenu.jQueryInterface = function jQueryInterface(config) { + // eslint-disable-next-line func-names + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + + var conf = _extends({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); + + if (!data) { + data = new MetisMenu(this, conf); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + return MetisMenu; +}(); +/** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + +$.fn[NAME] = MetisMenu.jQueryInterface; // eslint-disable-line no-param-reassign + +$.fn[NAME].Constructor = MetisMenu; // eslint-disable-line no-param-reassign + +$.fn[NAME].noConflict = function () { + // eslint-disable-line no-param-reassign + $.fn[NAME] = JQUERY_NO_CONFLICT; // eslint-disable-line no-param-reassign + + return MetisMenu.jQueryInterface; +}; + +module.exports = MetisMenu; diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/app.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/app.css new file mode 100644 index 000000000..701ffdfe9 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/app.css @@ -0,0 +1,44 @@ +:root { + --jumbotron-padding-y: 3rem; +} + +.jumbotron { + padding-top: var(--jumbotron-padding-y); + padding-bottom: var(--jumbotron-padding-y); + margin-bottom: 0; + background-color: #fff; +} +@media (min-width: 768px) { + .jumbotron { + padding-top: calc(var(--jumbotron-padding-y) * 2); + padding-bottom: calc(var(--jumbotron-padding-y) * 2); + } +} + +.jumbotron p:last-child { + margin-bottom: 0; +} + +.jumbotron-heading { + font-weight: 300; +} + +.jumbotron .container { + max-width: 40rem; +} + +footer { + padding-top: 3rem; + padding-bottom: 3rem; +} + +footer p { + margin-bottom: .25rem; +} + +.box-shadow { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); } + +#rtlh3 small { + transform: rotateY(180deg); + display: inline-block; +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/demo.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/demo.css new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/demo.css @@ -0,0 +1 @@ + diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mini.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mini.css new file mode 100644 index 000000000..50042421f --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mini.css @@ -0,0 +1,55 @@ +.wrap { + margin: 0 auto; + width: 100%; + position: relative; +} +.sidebar { + position: absolute; + top: 0; + left: 0; + bottom: 0; + border-right: 1px solid #b5b5b5; +} +.nav-mini { + width: 50px; +} +.nav-mini ul { + padding: 0; + margin: 0; + list-style: none; + background: #fbfbfb; +} +.nav-mini li { + position: relative; +} +.nav-mini li, .nav-mini a { + display: block; +} +.nav-mini a { + padding: 10px 5px; + text-decoration: none; + color: #808080; +} +.nav-mini a .title { + display: none; +} +.nav-mini .metismenu .collapse, .nav-mini .metismenu .collapsing { + position: absolute; + top: 0; + left: 100%; + min-width: 160px; +} +.nav-mini .metismenu .collapse .collapse, .nav-mini .metismenu .collapse .collapsing { + left: 0; + top: auto; +} +.nav-mini .metismenu > li { + border-bottom: 1px solid #b5b5b5; +} +.nav-mini .metismenu > li > a { + text-align: center; +} +.content { + padding-left: 60px; + background: #fff; +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-faq.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-faq.css new file mode 100644 index 000000000..041009ac9 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-faq.css @@ -0,0 +1,11 @@ +.faq-link { + cursor: pointer; + padding: 15px; + background: #212529; + color: #adb5bd +} + +.faq-item.active>.faq-link { + background-color: #d9480f; + color: #f8f9fa; +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-folder.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-folder.css new file mode 100644 index 000000000..8e7f72527 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-folder.css @@ -0,0 +1,37 @@ +.metisFolder { + padding-left: 0; +} +.metisFolder, .metisFolder ul { + list-style: none; +} +.metisFolder li { + position: relative; +} +.metisFolder li a { + display: block; + padding-top: 5px; + padding-bottom: 5px; + color: #333; + text-decoration: none; + outline: 0 none; +} +.metisFolder ul:before { + position: absolute; + border-left: 1px dotted #333; + content: ""; + width: 30px; + top: 25px; + left: 5px; + bottom: 17px; +} +.metisFolder ul > li:before { + position: absolute; + border-top: 1px dotted #333; + content: ""; + width: 30px; + top: 13px; + left: -33px; +} +li.active > a > span.fa-folder-o:before { + content: "\f115" !important; +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-horizontal.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-horizontal.css new file mode 100644 index 000000000..3ba9d77eb --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-horizontal.css @@ -0,0 +1,80 @@ +.topbar-nav { + background: #212529; +} +.topbar-nav ul { + padding: 0; + margin: 0; + list-style: none; + background: #212529; +} +.topbar-nav .metismenu { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.topbar-nav .metismenu > li { + -webkit-box-flex: 1; + -ms-flex: 1 1 0%; + flex: 1 1 0%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + position: relative; +} + +.topbar-nav .metismenu a { + position: relative; + display: block; + padding: 15px; + color: #adb5bd; + outline-width: 0; + transition: all .3s ease-out; +} + + +.topbar-nav .metismenu a:hover, +.topbar-nav .metismenu a:focus, +.topbar-nav .metismenu a:active { + color: #f8f9fa; + text-decoration: none; + background: #0b7285; +} + +@media (min-width: 992px) { + .topbar-nav .metismenu { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .topbar-nav .metismenu > li { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } + .topbar-nav .metismenu > li > ul { + position: absolute; + top: 100%; + min-width: 100%; + z-index: 1001; + } + .topbar-nav.is-hoverable .metismenu > li > ul { + height: auto !important; + } + .topbar-nav.is-hoverable .metismenu > li:hover > ul { + display: block; + } + .topbar-nav.is-hoverable .metismenu > li:hover > a.has-arrow:after { + -webkit-transform: rotate(-135deg); + transform: rotate(-135deg); + } +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical-hover.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical-hover.css new file mode 100644 index 000000000..04f0771d2 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical-hover.css @@ -0,0 +1,73 @@ +.sidebar-nav { + background: #212529; +} +.sidebar-nav ul { + padding: 0; + margin: 0; + list-style: none; + background: #212529; +} + +.sidebar-nav .metismenu { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} + +.sidebar-nav .metismenu > li { + /*-webkit-box-flex: 1; + -ms-flex: 1 1 0%; + flex: 1 1 0%;*/ + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + position: relative; +} +.sidebar-nav .metismenu a { + position: relative; + display: block; + padding: 15px; + color: #adb5bd; + outline-width: 0; + transition: all .3s ease-out; +} + +.sidebar-nav .metismenu a:hover, +.sidebar-nav .metismenu a:focus, +.sidebar-nav .metismenu a:active { + color: #f8f9fa; + text-decoration: none; + background: #0b7285; +} + +@media (min-width: 992px) { + .sidebar-nav .metismenu li { + position: relative; + } + .sidebar-nav .metismenu > li > ul { + position: absolute; + left: 100%; + top: 0; + min-width: 200px; + z-index: 1001; + } + .sidebar-nav .metismenu > li:hover > ul { + height: auto !important; + } + .sidebar-nav .metismenu > li:hover > ul, + .sidebar-nav .metismenu > li:hover > ul.collapse { + display: block; + } + + .sidebar-nav .metismenu > li:hover > a.has-arrow:after { + transform: rotate(135deg); + } +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical.css new file mode 100644 index 000000000..5f5c057ea --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical.css @@ -0,0 +1,71 @@ +.sidebar-nav { + background: #212529; +} +.sidebar-nav ul { + padding: 0; + margin: 0; + list-style: none; + background: #343a40; +} + +.sidebar-nav .metismenu { + background: #212529; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} + +.sidebar-nav .metismenu li + li { + margin-top: 5px; +} + +.sidebar-nav .metismenu li:first-child { + margin-top: 5px; +} +.sidebar-nav .metismenu li:last-child { + margin-bottom: 5px; +} + + +.sidebar-nav .metismenu > li { + /*-webkit-box-flex: 1; + -ms-flex: 1 1 0%; + flex: 1 1 0%;*/ + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + position: relative; +} +.sidebar-nav .metismenu a { + position: relative; + display: block; + padding: 13px 15px; + color: #adb5bd; + outline-width: 0; + transition: all .3s ease-out; +} + +.sidebar-nav .metismenu ul a { + padding: 10px 15px 10px 30px; +} + +.sidebar-nav .metismenu ul ul a { + padding: 10px 15px 10px 45px; +} + +.sidebar-nav .metismenu a:hover, +.sidebar-nav .metismenu a:focus, +.sidebar-nav .metismenu a:active, +.sidebar-nav .metismenu .mm-active > a { + color: #f8f9fa; + text-decoration: none; + background: #0b7285; +} diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/index.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/index.js new file mode 100644 index 000000000..d32d93d91 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/index.js @@ -0,0 +1,3 @@ +$(function() { + $('table').addClass('table table-bordered table-striped'); +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-ajax.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-ajax.js new file mode 100644 index 000000000..16fee2034 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-ajax.js @@ -0,0 +1,54 @@ +$(function() { + + $('#menu').metisMenu(); + + $("#ajaxButton").one('click', function() { + var $this = $(this); + $.ajax({ + url: "demo-ajax.html", + success: function(result) { + + $('#menu').metisMenu('dispose'); + $("#menu").append(result); + + new Noty({ + text: 'ajax menu appended to menu', + layout: 'topRight', + type: 'success', + theme: 'relax', + progressBar: true, + timeout: 2000 + }).show(); + + $('#menu').metisMenu(); + $this.attr('disabled', 'disabled'); + } + }); + }); + + $('#menu2').metisMenu(); + + $("[data-url]").each(function(){ + $(this).one('click', function(event){ + event.preventDefault(); + var $this = $(this); + var url = $this.attr('data-url'); + console.log(url); + + $.ajax({ + url: url, + success: function(result) { + + $('#menu2').metisMenu('dispose'); + $this.parent('li').append(result); + + $('#menu2').metisMenu(); + + $this.click(); + } + }); + + }); + }); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-animate.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-animate.js new file mode 100644 index 000000000..093042120 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-animate.js @@ -0,0 +1,5 @@ +$(function () { + + $('#menu').metisMenu(); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-bs-card.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-bs-card.js new file mode 100644 index 000000000..7579ea5f0 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-bs-card.js @@ -0,0 +1,11 @@ +$(function() { + + $('.metismenu').metisMenu({ + toggle: false, + triggerElement: '.card-header', + parentTrigger: '.card', + subMenu: '.card-body' + }); + + }); + \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-dispose.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-dispose.js new file mode 100644 index 000000000..9c48525b2 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-dispose.js @@ -0,0 +1,47 @@ +$(function() { + + $('#menu').metisMenu(); + + $('#stopMm').on('click', function(event) { + $('#menu').metisMenu('dispose'); + new Noty({ + text: 'metisMenu stopped', + layout: 'topRight', + type: 'error', + theme: 'relax', + progressBar: true, + timeout: 2000 + }).show(); + }); + + $('#startMm').on('click', function(event) { + $('#menu').metisMenu(); + new Noty({ + text: 'metisMenu restarted', + layout: 'topRight', + type: 'success', + theme: 'relax', + progressBar: true, + timeout: 2000 + }).show(); + }); + + $('#menu1').metisMenu(); + $('#deleteElem').one('click', function(event) { + $(this).removeClass('btn-danger').addClass('btn-success').html('Menu 1 removed').attr('disabled', 'disabled'); + $('#menu1').metisMenu('dispose'); + + $('#menu1 #removable').remove(); + new Noty({ + text: 'Menu 1 removed', + layout: 'topRight', + type: 'information', + theme: 'relax', + progressBar: true, + timeout: 2000 + }).show(); + + $('#menu1').metisMenu(); + }); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event.js new file mode 100644 index 000000000..040bc1db5 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event.js @@ -0,0 +1,38 @@ +$(function() { + + $('#menu').metisMenu().on('show.metisMenu', function(event) { + new Noty({ + text: $(event.target).parent('li').children('a').html() + ' opening ...', + layout: 'topRight', + type: 'information', + theme: 'relax', + + timeout: 350 + }).show(); + }).on('shown.metisMenu', function(event) { + new Noty({ + text: $(event.target).parent('li').children('a').html() + ' opened', + layout: 'topRight', + type: 'success', + theme: 'relax', + timeout: 350 + }).show(); + }).on('hide.metisMenu', function(event) { + new Noty({ + text: $(event.target).parent('li').children('a').html() + ' collapsing ...', + layout: 'topRight', + type: 'warning', + theme: 'relax', + timeout: 350 + }).show(); + }).on('hidden.metisMenu', function(event) { + new Noty({ + text: $(event.target).parent('li').children('a').html() + ' collapsed', + layout: 'topRight', + type: 'error', + theme: 'relax', + timeout: 350 + }).show(); + }); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event2.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event2.js new file mode 100644 index 000000000..638b4605f --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event2.js @@ -0,0 +1,7 @@ +$(function() { + $('#menu') + .metisMenu() + .on('shown.metisMenu', function(event) { + Jump("#menu") + }); +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-faq.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-faq.js new file mode 100644 index 000000000..cfe45acc9 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-faq.js @@ -0,0 +1,10 @@ +$(function() { + + $('.faq-menu').metisMenu({ + toggle: false, + triggerElement: '.faq-link', + parentTrigger: '.faq-item', + subMenu: '.faq-answer' + }); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-folder.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-folder.js new file mode 100644 index 000000000..8dbf445bf --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-folder.js @@ -0,0 +1,5 @@ +$(function () { + $('.metisFolder').metisMenu({ + toggle: false + }); +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-horizontal.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-horizontal.js new file mode 100644 index 000000000..3af6a634d --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-horizontal.js @@ -0,0 +1,7 @@ +$(function() { + + $('#menu1').metisMenu(); + + $('#menu2').metisMenu(); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical-hover.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical-hover.js new file mode 100644 index 000000000..08da6f165 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical-hover.js @@ -0,0 +1,5 @@ +$(function() { + + $('#menu1').metisMenu(); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical.js new file mode 100644 index 000000000..2ad464676 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical.js @@ -0,0 +1,11 @@ +$(function() { + + $('#menu1').metisMenu(); + + $('#menu2').metisMenu({ + toggle: false + }); + + $('#menu3').metisMenu(); + +}); diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css new file mode 100644 index 000000000..75343cd30 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css @@ -0,0 +1,130 @@ +/*! +* metismenu https://github.com/onokumus/metismenu#readme +* A jQuery menu plugin +* @version 3.0.4 +* @author Osman Nuri Okumus (https://github.com/onokumus) +* @license: MIT +*/ +.metismenu .arrow { + float: right; + line-height: 1.42857; +} +*[dir="rtl"] .metismenu .arrow { + float: left; +} + +/* + * Require Bootstrap 3.x + * https://github.com/twbs/bootstrap +*/ + +.metismenu .glyphicon.arrow:before { + content: "\e079"; +} +.metismenu .mm-active > a > .glyphicon.arrow:before { + content: "\e114"; +} + +/* + * Require Font-Awesome + * http://fortawesome.github.io/Font-Awesome/ +*/ + +.metismenu .fa.arrow:before { + content: "\f104"; +} +.metismenu .mm-active > a > .fa.arrow:before { + content: "\f107"; +} + +/* + * Require Ionicons + * http://ionicons.com/ +*/ + +.metismenu .ion.arrow:before { + content: "\f3d2" +} +.metismenu .mm-active > a > .ion.arrow:before { + content: "\f3d0"; +} +.metismenu .plus-times { + float: right; +} +*[dir="rtl"] .metismenu .plus-times { + float: left; +} +.metismenu .fa.plus-times:before { + content: "\f067"; +} +.metismenu .mm-active > a > .fa.plus-times { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.metismenu .plus-minus { + float: right; +} +*[dir="rtl"] .metismenu .plus-minus { + float: left; +} +.metismenu .fa.plus-minus:before { + content: "\f067"; +} +.metismenu .mm-active > a > .fa.plus-minus:before { + content: "\f068"; +} +.metismenu .mm-collapse:not(.mm-show) { + display: none; +} + +.metismenu .mm-collapsing { + position: relative; + height: 0; + overflow: hidden; + transition-timing-function: ease; + transition-duration: .35s; + transition-property: height, visibility; +} + +.metismenu .has-arrow { + position: relative; +} + +.metismenu .has-arrow::after { + position: absolute; + content: ''; + width: .5em; + height: .5em; + border-width: 1px 0 0 1px; + border-style: solid; + border-color: currentColor; + border-color: initial; + right: 1em; + -webkit-transform: rotate(-45deg) translate(0, -50%); + transform: rotate(-45deg) translate(0, -50%); + -webkit-transform-origin: top; + transform-origin: top; + top: 50%; + transition: all .3s ease-out; +} + +*[dir="rtl"] .metismenu .has-arrow::after { + right: auto; + left: 1em; + -webkit-transform: rotate(135deg) translate(0, -50%); + transform: rotate(135deg) translate(0, -50%); +} + +.metismenu .mm-active > .has-arrow::after, +.metismenu .has-arrow[aria-expanded="true"]::after { + -webkit-transform: rotate(-135deg) translate(0, -50%); + transform: rotate(-135deg) translate(0, -50%); +} + +*[dir="rtl"] .metismenu .mm-active > .has-arrow::after, +*[dir="rtl"] .metismenu .has-arrow[aria-expanded="true"]::after { + -webkit-transform: rotate(225deg) translate(0, -50%); + transform: rotate(225deg) translate(0, -50%); +} + +/*# sourceMappingURL=metisMenu.css.map */ \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css.map b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css.map new file mode 100644 index 000000000..8079df83e --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["","../src/metisMenu.css"],"names":[],"mappings":"AAAA;;;;;;EAAA;ACAA;EACE,YAAY;EACZ,oBAAoB;AACtB;AACA;EACE,WAAW;AACb;;AAEA;;;CAGC;;AAED;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;;AAEA;;;CAGC;;AAED;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;;AAEA;;;CAGC;;AAED;EACE;AACF;AACA;EACE,gBAAgB;AAClB;AACA;EACE,YAAY;AACd;AACA;EACE,WAAW;AACb;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gCAAwB;UAAxB,wBAAwB;AAC1B;AACA;EACE,YAAY;AACd;AACA;EACE,WAAW;AACb;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;EAChB,gCAAgC;EAChC,yBAAyB;EACzB,uCAAuC;AACzC;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,WAAW;EACX,YAAY;EACZ,yBAAyB;EACzB,mBAAmB;EACnB,0BAAqB;EAArB,qBAAqB;EACrB,UAAU;EACV,oDAA4C;UAA5C,4CAA4C;EAC5C,6BAAqB;UAArB,qBAAqB;EACrB,QAAQ;EACR,4BAA4B;AAC9B;;AAEA;EACE,WAAW;EACX,SAAS;EACT,oDAA4C;UAA5C,4CAA4C;AAC9C;;AAEA;;EAEE,qDAA6C;UAA7C,6CAA6C;AAC/C;;AAEA;;EAEE,oDAA4C;UAA5C,4CAA4C;AAC9C","file":"metisMenu.css","sourcesContent":[null,".metismenu .arrow {\n float: right;\n line-height: 1.42857;\n}\n*[dir=\"rtl\"] .metismenu .arrow {\n float: left;\n}\n\n/*\n * Require Bootstrap 3.x\n * https://github.com/twbs/bootstrap\n*/\n\n.metismenu .glyphicon.arrow:before {\n content: \"\\e079\";\n}\n.metismenu .mm-active > a > .glyphicon.arrow:before {\n content: \"\\e114\";\n}\n\n/*\n * Require Font-Awesome\n * http://fortawesome.github.io/Font-Awesome/\n*/\n\n.metismenu .fa.arrow:before {\n content: \"\\f104\";\n}\n.metismenu .mm-active > a > .fa.arrow:before {\n content: \"\\f107\";\n}\n\n/*\n * Require Ionicons\n * http://ionicons.com/\n*/\n\n.metismenu .ion.arrow:before {\n content: \"\\f3d2\"\n}\n.metismenu .mm-active > a > .ion.arrow:before {\n content: \"\\f3d0\";\n}\n.metismenu .plus-times {\n float: right;\n}\n*[dir=\"rtl\"] .metismenu .plus-times {\n float: left;\n}\n.metismenu .fa.plus-times:before {\n content: \"\\f067\";\n}\n.metismenu .mm-active > a > .fa.plus-times {\n transform: rotate(45deg);\n}\n.metismenu .plus-minus {\n float: right;\n}\n*[dir=\"rtl\"] .metismenu .plus-minus {\n float: left;\n}\n.metismenu .fa.plus-minus:before {\n content: \"\\f067\";\n}\n.metismenu .mm-active > a > .fa.plus-minus:before {\n content: \"\\f068\";\n}\n.metismenu .mm-collapse:not(.mm-show) {\n display: none;\n}\n\n.metismenu .mm-collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition-timing-function: ease;\n transition-duration: .35s;\n transition-property: height, visibility;\n}\n\n.metismenu .has-arrow {\n position: relative;\n}\n\n.metismenu .has-arrow::after {\n position: absolute;\n content: '';\n width: .5em;\n height: .5em;\n border-width: 1px 0 0 1px;\n border-style: solid;\n border-color: initial;\n right: 1em;\n transform: rotate(-45deg) translate(0, -50%);\n transform-origin: top;\n top: 50%;\n transition: all .3s ease-out;\n}\n\n*[dir=\"rtl\"] .metismenu .has-arrow::after {\n right: auto;\n left: 1em;\n transform: rotate(135deg) translate(0, -50%);\n}\n\n.metismenu .mm-active > .has-arrow::after,\n.metismenu .has-arrow[aria-expanded=\"true\"]::after {\n transform: rotate(-135deg) translate(0, -50%);\n}\n\n*[dir=\"rtl\"] .metismenu .mm-active > .has-arrow::after,\n*[dir=\"rtl\"] .metismenu .has-arrow[aria-expanded=\"true\"]::after {\n transform: rotate(225deg) translate(0, -50%);\n}\n"]} \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js new file mode 100644 index 000000000..4dd03a97e --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js @@ -0,0 +1,340 @@ +/*! +* metismenu https://github.com/onokumus/metismenu#readme +* A jQuery menu plugin +* @version 3.0.4 +* @author Osman Nuri Okumus (https://github.com/onokumus) +* @license: MIT +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : + typeof define === 'function' && define.amd ? define(['jquery'], factory) : + (global = global || self, global.metisMenu = factory(global.jQuery)); +}(this, function ($) { 'use strict'; + + $ = $ && $.hasOwnProperty('default') ? $['default'] : $; + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + var Util = function ($) { + // eslint-disable-line no-shadow + var TRANSITION_END = 'transitionend'; + var Util = { + // eslint-disable-line no-shadow + TRANSITION_END: 'mmTransitionEnd', + triggerTransitionEnd: function triggerTransitionEnd(element) { + $(element).trigger(TRANSITION_END); + }, + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(TRANSITION_END); + } + }; + + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function handle(event) { + if ($(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } + + return undefined; + } + }; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + $(this).one(Util.TRANSITION_END, function () { + called = true; + }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; + } + + function setTransitionEndSupport() { + $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign + // eslint-disable-next-line no-param-reassign + + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + + setTransitionEndSupport(); + return Util; + }($); + + var NAME = 'metisMenu'; + var DATA_KEY = 'metisMenu'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 350; + var Default = { + toggle: true, + preventDefault: true, + triggerElement: 'a', + parentTrigger: 'li', + subMenu: 'ul' + }; + var Event = { + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + METIS: 'metismenu', + ACTIVE: 'mm-active', + SHOW: 'mm-show', + COLLAPSE: 'mm-collapse', + COLLAPSING: 'mm-collapsing', + COLLAPSED: 'mm-collapsed' + }; + + var MetisMenu = + /*#__PURE__*/ + function () { + // eslint-disable-line no-shadow + function MetisMenu(element, config) { + this.element = element; + this.config = _extends({}, Default, config); + this.transitioning = null; + this.init(); + } + + var _proto = MetisMenu.prototype; + + _proto.init = function init() { + var self = this; + var conf = this.config; + var el = $(this.element); + el.addClass(ClassName.METIS); // add metismenu class to element + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).children(conf.triggerElement).attr('aria-expanded', 'true'); // add attribute aria-expanded=true the trigger element + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).parents(conf.parentTrigger).addClass(ClassName.ACTIVE); + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).parents(conf.parentTrigger).children(conf.triggerElement).attr('aria-expanded', 'true'); // add attribute aria-expanded=true the triggers of all parents + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).has(conf.subMenu).children(conf.subMenu).addClass(ClassName.COLLAPSE + " " + ClassName.SHOW); + el.find(conf.parentTrigger).not("." + ClassName.ACTIVE).has(conf.subMenu).children(conf.subMenu).addClass(ClassName.COLLAPSE); + el.find(conf.parentTrigger) // .has(conf.subMenu) + .children(conf.triggerElement).on(Event.CLICK_DATA_API, function (e) { + // eslint-disable-line func-names + var eTar = $(this); + + if (eTar.attr('aria-disabled') === 'true') { + return; + } + + if (conf.preventDefault && eTar.attr('href') === '#') { + e.preventDefault(); + } + + var paRent = eTar.parent(conf.parentTrigger); + var sibLi = paRent.siblings(conf.parentTrigger); + var sibTrigger = sibLi.children(conf.triggerElement); + + if (paRent.hasClass(ClassName.ACTIVE)) { + eTar.attr('aria-expanded', 'false'); + self.removeActive(paRent); + } else { + eTar.attr('aria-expanded', 'true'); + self.setActive(paRent); + + if (conf.toggle) { + self.removeActive(sibLi); + sibTrigger.attr('aria-expanded', 'false'); + } + } + + if (conf.onTransitionStart) { + conf.onTransitionStart(e); + } + }); + }; + + _proto.setActive = function setActive(li) { + $(li).addClass(ClassName.ACTIVE); + var ul = $(li).children(this.config.subMenu); + + if (ul.length > 0 && !ul.hasClass(ClassName.SHOW)) { + this.show(ul); + } + }; + + _proto.removeActive = function removeActive(li) { + $(li).removeClass(ClassName.ACTIVE); + var ul = $(li).children(this.config.subMenu + "." + ClassName.SHOW); + + if (ul.length > 0) { + this.hide(ul); + } + }; + + _proto.show = function show(element) { + var _this = this; + + if (this.transitioning || $(element).hasClass(ClassName.COLLAPSING)) { + return; + } + + var elem = $(element); + var startEvent = $.Event(Event.SHOW); + elem.trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + elem.parent(this.config.parentTrigger).addClass(ClassName.ACTIVE); + + if (this.config.toggle) { + var toggleElem = elem.parent(this.config.parentTrigger).siblings().children(this.config.subMenu + "." + ClassName.SHOW); + this.hide(toggleElem); + } + + elem.removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING).height(0); + this.setTransitioning(true); + + var complete = function complete() { + // check if disposed + if (!_this.config || !_this.element) { + return; + } + + elem.removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE + " " + ClassName.SHOW).height(''); + + _this.setTransitioning(false); + + elem.trigger(Event.SHOWN); + }; + + elem.height(element[0].scrollHeight).one(Util.TRANSITION_END, complete).mmEmulateTransitionEnd(TRANSITION_DURATION); + }; + + _proto.hide = function hide(element) { + var _this2 = this; + + if (this.transitioning || !$(element).hasClass(ClassName.SHOW)) { + return; + } + + var elem = $(element); + var startEvent = $.Event(Event.HIDE); + elem.trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + elem.parent(this.config.parentTrigger).removeClass(ClassName.ACTIVE); // eslint-disable-next-line no-unused-expressions + + elem.height(elem.height())[0].offsetHeight; + elem.addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + this.setTransitioning(true); + + var complete = function complete() { + // check if disposed + if (!_this2.config || !_this2.element) { + return; + } + + if (_this2.transitioning && _this2.config.onTransitionEnd) { + _this2.config.onTransitionEnd(); + } + + _this2.setTransitioning(false); + + elem.trigger(Event.HIDDEN); + elem.removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE); + }; + + if (elem.height() === 0 || elem.css('display') === 'none') { + complete(); + } else { + elem.height(0).one(Util.TRANSITION_END, complete).mmEmulateTransitionEnd(TRANSITION_DURATION); + } + }; + + _proto.setTransitioning = function setTransitioning(isTransitioning) { + this.transitioning = isTransitioning; + }; + + _proto.dispose = function dispose() { + $.removeData(this.element, DATA_KEY); + $(this.element).find(this.config.parentTrigger).has(this.config.subMenu).children(this.config.triggerElement).off('click'); + this.transitioning = null; + this.config = null; + this.element = null; + }; + + MetisMenu.jQueryInterface = function jQueryInterface(config) { + // eslint-disable-next-line func-names + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + + var conf = _extends({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); + + if (!data) { + data = new MetisMenu(this, conf); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + return MetisMenu; + }(); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + + $.fn[NAME] = MetisMenu.jQueryInterface; // eslint-disable-line no-param-reassign + + $.fn[NAME].Constructor = MetisMenu; // eslint-disable-line no-param-reassign + + $.fn[NAME].noConflict = function () { + // eslint-disable-line no-param-reassign + $.fn[NAME] = JQUERY_NO_CONFLICT; // eslint-disable-line no-param-reassign + + return MetisMenu.jQueryInterface; + }; + + return MetisMenu; + +})); +//# sourceMappingURL=metisMenu.js.map diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js.map b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js.map new file mode 100644 index 000000000..1d159ab6e --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metisMenu.js","sources":["../src/util.js","../src/index.js"],"sourcesContent":["import $ from 'jquery';\n\nconst Util = (($) => { // eslint-disable-line no-shadow\n const TRANSITION_END = 'transitionend';\n\n const Util = { // eslint-disable-line no-shadow\n TRANSITION_END: 'mmTransitionEnd',\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n };\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event\n .handleObj\n .handler\n .apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n return undefined;\n },\n };\n }\n\n function transitionEndEmulator(duration) {\n let called = false;\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true;\n });\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this);\n }\n }, duration);\n\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign\n // eslint-disable-next-line no-param-reassign\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n\n setTransitionEndSupport();\n\n return Util;\n})($);\n\nexport default Util;\n","import $ from 'jquery';\nimport Util from './util';\n\nconst NAME = 'metisMenu';\nconst DATA_KEY = 'metisMenu';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst JQUERY_NO_CONFLICT = $.fn[NAME];\nconst TRANSITION_DURATION = 350;\n\nconst Default = {\n toggle: true,\n preventDefault: true,\n triggerElement: 'a',\n parentTrigger: 'li',\n subMenu: 'ul',\n};\n\nconst Event = {\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`,\n};\n\nconst ClassName = {\n METIS: 'metismenu',\n ACTIVE: 'mm-active',\n SHOW: 'mm-show',\n COLLAPSE: 'mm-collapse',\n COLLAPSING: 'mm-collapsing',\n COLLAPSED: 'mm-collapsed',\n};\n\nclass MetisMenu {\n // eslint-disable-line no-shadow\n constructor(element, config) {\n this.element = element;\n this.config = {\n ...Default,\n ...config,\n };\n this.transitioning = null;\n\n this.init();\n }\n\n init() {\n const self = this;\n const conf = this.config;\n const el = $(this.element);\n\n el.addClass(ClassName.METIS); // add metismenu class to element\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .children(conf.triggerElement)\n .attr('aria-expanded', 'true'); // add attribute aria-expanded=true the trigger element\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .parents(conf.parentTrigger)\n .addClass(ClassName.ACTIVE);\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .parents(conf.parentTrigger)\n .children(conf.triggerElement)\n .attr('aria-expanded', 'true'); // add attribute aria-expanded=true the triggers of all parents\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .has(conf.subMenu)\n .children(conf.subMenu)\n .addClass(`${ClassName.COLLAPSE} ${ClassName.SHOW}`);\n\n el\n .find(conf.parentTrigger)\n .not(`.${ClassName.ACTIVE}`)\n .has(conf.subMenu)\n .children(conf.subMenu)\n .addClass(ClassName.COLLAPSE);\n\n el\n .find(conf.parentTrigger)\n // .has(conf.subMenu)\n .children(conf.triggerElement)\n .on(Event.CLICK_DATA_API, function (e) { // eslint-disable-line func-names\n const eTar = $(this);\n\n if (eTar.attr('aria-disabled') === 'true') {\n return;\n }\n\n if (conf.preventDefault && eTar.attr('href') === '#') {\n e.preventDefault();\n }\n\n const paRent = eTar.parent(conf.parentTrigger);\n const sibLi = paRent.siblings(conf.parentTrigger);\n const sibTrigger = sibLi.children(conf.triggerElement);\n\n if (paRent.hasClass(ClassName.ACTIVE)) {\n eTar.attr('aria-expanded', 'false');\n self.removeActive(paRent);\n } else {\n eTar.attr('aria-expanded', 'true');\n self.setActive(paRent);\n if (conf.toggle) {\n self.removeActive(sibLi);\n sibTrigger.attr('aria-expanded', 'false');\n }\n }\n\n if (conf.onTransitionStart) {\n conf.onTransitionStart(e);\n }\n });\n }\n\n setActive(li) {\n $(li).addClass(ClassName.ACTIVE);\n const ul = $(li).children(this.config.subMenu);\n if (ul.length > 0 && !ul.hasClass(ClassName.SHOW)) {\n this.show(ul);\n }\n }\n\n removeActive(li) {\n $(li).removeClass(ClassName.ACTIVE);\n const ul = $(li).children(`${this.config.subMenu}.${ClassName.SHOW}`);\n if (ul.length > 0) {\n this.hide(ul);\n }\n }\n\n show(element) {\n if (this.transitioning || $(element).hasClass(ClassName.COLLAPSING)) {\n return;\n }\n const elem = $(element);\n\n const startEvent = $.Event(Event.SHOW);\n elem.trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n elem.parent(this.config.parentTrigger).addClass(ClassName.ACTIVE);\n\n if (this.config.toggle) {\n const toggleElem = elem.parent(this.config.parentTrigger).siblings().children(`${this.config.subMenu}.${ClassName.SHOW}`);\n this.hide(toggleElem);\n }\n\n elem\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n .height(0);\n\n this.setTransitioning(true);\n\n const complete = () => {\n // check if disposed\n if (!this.config || !this.element) {\n return;\n }\n elem\n .removeClass(ClassName.COLLAPSING)\n .addClass(`${ClassName.COLLAPSE} ${ClassName.SHOW}`)\n .height('');\n\n this.setTransitioning(false);\n\n elem.trigger(Event.SHOWN);\n };\n\n elem\n .height(element[0].scrollHeight)\n .one(Util.TRANSITION_END, complete)\n .mmEmulateTransitionEnd(TRANSITION_DURATION);\n }\n\n hide(element) {\n if (\n this.transitioning || !$(element).hasClass(ClassName.SHOW)\n ) {\n return;\n }\n\n const elem = $(element);\n\n const startEvent = $.Event(Event.HIDE);\n elem.trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n elem.parent(this.config.parentTrigger).removeClass(ClassName.ACTIVE);\n // eslint-disable-next-line no-unused-expressions\n elem.height(elem.height())[0].offsetHeight;\n\n elem\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW);\n\n this.setTransitioning(true);\n\n const complete = () => {\n // check if disposed\n if (!this.config || !this.element) {\n return;\n }\n if (this.transitioning && this.config.onTransitionEnd) {\n this.config.onTransitionEnd();\n }\n\n this.setTransitioning(false);\n elem.trigger(Event.HIDDEN);\n\n elem\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE);\n };\n\n if (elem.height() === 0 || elem.css('display') === 'none') {\n complete();\n } else {\n elem\n .height(0)\n .one(Util.TRANSITION_END, complete)\n .mmEmulateTransitionEnd(TRANSITION_DURATION);\n }\n }\n\n setTransitioning(isTransitioning) {\n this.transitioning = isTransitioning;\n }\n\n dispose() {\n $.removeData(this.element, DATA_KEY);\n\n $(this.element)\n .find(this.config.parentTrigger)\n .has(this.config.subMenu)\n .children(this.config.triggerElement)\n .off('click');\n\n this.transitioning = null;\n this.config = null;\n this.element = null;\n }\n\n static jQueryInterface(config) {\n // eslint-disable-next-line func-names\n return this.each(function () {\n const $this = $(this);\n let data = $this.data(DATA_KEY);\n const conf = {\n ...Default,\n ...$this.data(),\n ...(typeof config === 'object' && config ? config : {}),\n };\n\n if (!data) {\n data = new MetisMenu(this, conf);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = MetisMenu.jQueryInterface; // eslint-disable-line no-param-reassign\n$.fn[NAME].Constructor = MetisMenu; // eslint-disable-line no-param-reassign\n$.fn[NAME].noConflict = () => {\n // eslint-disable-line no-param-reassign\n $.fn[NAME] = JQUERY_NO_CONFLICT; // eslint-disable-line no-param-reassign\n return MetisMenu.jQueryInterface;\n};\n\nexport default MetisMenu;\n"],"names":["Util","$","TRANSITION_END","triggerTransitionEnd","element","trigger","supportsTransitionEnd","Boolean","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","setTimeout","setTransitionEndSupport","fn","mmEmulateTransitionEnd","special","NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","TRANSITION_DURATION","Default","toggle","preventDefault","triggerElement","parentTrigger","subMenu","Event","SHOW","SHOWN","HIDE","HIDDEN","CLICK_DATA_API","ClassName","METIS","ACTIVE","COLLAPSE","COLLAPSING","COLLAPSED","MetisMenu","config","transitioning","init","self","conf","el","addClass","find","children","attr","parents","has","not","on","e","eTar","paRent","parent","sibLi","siblings","sibTrigger","hasClass","removeActive","setActive","onTransitionStart","li","ul","length","show","removeClass","hide","elem","startEvent","isDefaultPrevented","toggleElem","height","setTransitioning","complete","scrollHeight","offsetHeight","onTransitionEnd","css","isTransitioning","dispose","removeData","off","jQueryInterface","each","$this","data","Error","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css new file mode 100644 index 000000000..d374f4f45 --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css @@ -0,0 +1,8 @@ +/*! +* metismenu https://github.com/onokumus/metismenu#readme +* A jQuery menu plugin +* @version 3.0.4 +* @author Osman Nuri Okumus (https://github.com/onokumus) +* @license: MIT +*/.metismenu .arrow{float:right;line-height:1.42857}[dir=rtl] .metismenu .arrow{float:left}.metismenu .glyphicon.arrow:before{content:"\e079"}.metismenu .mm-active>a>.glyphicon.arrow:before{content:"\e114"}.metismenu .fa.arrow:before{content:"\f104"}.metismenu .mm-active>a>.fa.arrow:before{content:"\f107"}.metismenu .ion.arrow:before{content:"\f3d2"}.metismenu .mm-active>a>.ion.arrow:before{content:"\f3d0"}.metismenu .plus-times{float:right}[dir=rtl] .metismenu .plus-times{float:left}.metismenu .fa.plus-times:before{content:"\f067"}.metismenu .mm-active>a>.fa.plus-times{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.metismenu .plus-minus{float:right}[dir=rtl] .metismenu .plus-minus{float:left}.metismenu .fa.plus-minus:before{content:"\f067"}.metismenu .mm-active>a>.fa.plus-minus:before{content:"\f068"}.metismenu .mm-collapse:not(.mm-show){display:none}.metismenu .mm-collapsing{position:relative;height:0;overflow:hidden;transition-timing-function:ease;transition-duration:.35s;transition-property:height,visibility}.metismenu .has-arrow{position:relative}.metismenu .has-arrow:after{position:absolute;content:"";width:.5em;height:.5em;border-style:solid;border-width:1px 0 0 1px;border-color:initial;right:1em;-webkit-transform:rotate(-45deg) translateY(-50%);transform:rotate(-45deg) translateY(-50%);-webkit-transform-origin:top;transform-origin:top;top:50%;transition:all .3s ease-out}[dir=rtl] .metismenu .has-arrow:after{right:auto;left:1em;-webkit-transform:rotate(135deg) translateY(-50%);transform:rotate(135deg) translateY(-50%)}.metismenu .has-arrow[aria-expanded=true]:after,.metismenu .mm-active>.has-arrow:after{-webkit-transform:rotate(-135deg) translateY(-50%);transform:rotate(-135deg) translateY(-50%)}[dir=rtl] .metismenu .has-arrow[aria-expanded=true]:after,[dir=rtl] .metismenu .mm-active>.has-arrow:after{-webkit-transform:rotate(225deg) translateY(-50%);transform:rotate(225deg) translateY(-50%)} +/*# sourceMappingURL=metisMenu.min.css.map */ \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css.map b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css.map new file mode 100644 index 000000000..3d0ea044e --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["","../src/metisMenu.css"],"names":[],"mappings":"AAAA;;;;;;EAAA,ACAA,kBACE,WAAY,CACZ,mBACF,CACA,4BACE,UACF,CAOA,mCACE,eACF,CACA,gDACE,eACF,CAOA,4BACE,eACF,CACA,yCACE,eACF,CAOA,6BACE,eACF,CACA,0CACE,eACF,CACA,uBACE,WACF,CACA,iCACE,UACF,CACA,iCACE,eACF,CACA,uCACE,+BAAwB,CAAxB,uBACF,CACA,uBACE,WACF,CACA,iCACE,UACF,CACA,iCACE,eACF,CACA,8CACE,eACF,CACA,sCACE,YACF,CAEA,0BACE,iBAAkB,CAClB,QAAS,CACT,eAAgB,CAChB,+BAAgC,CAChC,wBAAyB,CACzB,qCACF,CAEA,sBACE,iBACF,CAEA,4BACE,iBAAkB,CAClB,UAAW,CACX,UAAW,CACX,WAAY,CAGZ,kBAAqB,CAArB,wBAAqB,CAArB,oBAAqB,CACrB,SAAU,CACV,iDAA4C,CAA5C,yCAA4C,CAC5C,4BAAqB,CAArB,oBAAqB,CACrB,OAAQ,CACR,2BACF,CAEA,sCACE,UAAW,CACX,QAAS,CACT,iDAA4C,CAA5C,yCACF,CAEA,uFAEE,kDAA6C,CAA7C,0CACF,CAEA,2GAEE,iDAA4C,CAA5C,yCACF","file":"metisMenu.min.css","sourcesContent":[null,".metismenu .arrow {\n float: right;\n line-height: 1.42857;\n}\n*[dir=\"rtl\"] .metismenu .arrow {\n float: left;\n}\n\n/*\n * Require Bootstrap 3.x\n * https://github.com/twbs/bootstrap\n*/\n\n.metismenu .glyphicon.arrow:before {\n content: \"\\e079\";\n}\n.metismenu .mm-active > a > .glyphicon.arrow:before {\n content: \"\\e114\";\n}\n\n/*\n * Require Font-Awesome\n * http://fortawesome.github.io/Font-Awesome/\n*/\n\n.metismenu .fa.arrow:before {\n content: \"\\f104\";\n}\n.metismenu .mm-active > a > .fa.arrow:before {\n content: \"\\f107\";\n}\n\n/*\n * Require Ionicons\n * http://ionicons.com/\n*/\n\n.metismenu .ion.arrow:before {\n content: \"\\f3d2\"\n}\n.metismenu .mm-active > a > .ion.arrow:before {\n content: \"\\f3d0\";\n}\n.metismenu .plus-times {\n float: right;\n}\n*[dir=\"rtl\"] .metismenu .plus-times {\n float: left;\n}\n.metismenu .fa.plus-times:before {\n content: \"\\f067\";\n}\n.metismenu .mm-active > a > .fa.plus-times {\n transform: rotate(45deg);\n}\n.metismenu .plus-minus {\n float: right;\n}\n*[dir=\"rtl\"] .metismenu .plus-minus {\n float: left;\n}\n.metismenu .fa.plus-minus:before {\n content: \"\\f067\";\n}\n.metismenu .mm-active > a > .fa.plus-minus:before {\n content: \"\\f068\";\n}\n.metismenu .mm-collapse:not(.mm-show) {\n display: none;\n}\n\n.metismenu .mm-collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition-timing-function: ease;\n transition-duration: .35s;\n transition-property: height, visibility;\n}\n\n.metismenu .has-arrow {\n position: relative;\n}\n\n.metismenu .has-arrow::after {\n position: absolute;\n content: '';\n width: .5em;\n height: .5em;\n border-width: 1px 0 0 1px;\n border-style: solid;\n border-color: initial;\n right: 1em;\n transform: rotate(-45deg) translate(0, -50%);\n transform-origin: top;\n top: 50%;\n transition: all .3s ease-out;\n}\n\n*[dir=\"rtl\"] .metismenu .has-arrow::after {\n right: auto;\n left: 1em;\n transform: rotate(135deg) translate(0, -50%);\n}\n\n.metismenu .mm-active > .has-arrow::after,\n.metismenu .has-arrow[aria-expanded=\"true\"]::after {\n transform: rotate(-135deg) translate(0, -50%);\n}\n\n*[dir=\"rtl\"] .metismenu .mm-active > .has-arrow::after,\n*[dir=\"rtl\"] .metismenu .has-arrow[aria-expanded=\"true\"]::after {\n transform: rotate(225deg) translate(0, -50%);\n}\n"]} \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.js new file mode 100644 index 000000000..bfea773fb --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.js @@ -0,0 +1,9 @@ +/*! +* metismenu https://github.com/onokumus/metismenu#readme +* A jQuery menu plugin +* @version 3.0.4 +* @author Osman Nuri Okumus (https://github.com/onokumus) +* @license: MIT +*/ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],n):(e=e||self).metisMenu=n(e.jQuery)}(this,function(o){"use strict";function s(){return(s=Object.assign||function(e){for(var n=1;n { // eslint-disable-line no-shadow\n const TRANSITION_END = 'transitionend';\n\n const Util = { // eslint-disable-line no-shadow\n TRANSITION_END: 'mmTransitionEnd',\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n };\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event\n .handleObj\n .handler\n .apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n return undefined;\n },\n };\n }\n\n function transitionEndEmulator(duration) {\n let called = false;\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true;\n });\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this);\n }\n }, duration);\n\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign\n // eslint-disable-next-line no-param-reassign\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n\n setTransitionEndSupport();\n\n return Util;\n})($);\n\nexport default Util;\n","import $ from 'jquery';\nimport Util from './util';\n\nconst NAME = 'metisMenu';\nconst DATA_KEY = 'metisMenu';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst DATA_API_KEY = '.data-api';\nconst JQUERY_NO_CONFLICT = $.fn[NAME];\nconst TRANSITION_DURATION = 350;\n\nconst Default = {\n toggle: true,\n preventDefault: true,\n triggerElement: 'a',\n parentTrigger: 'li',\n subMenu: 'ul',\n};\n\nconst Event = {\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`,\n};\n\nconst ClassName = {\n METIS: 'metismenu',\n ACTIVE: 'mm-active',\n SHOW: 'mm-show',\n COLLAPSE: 'mm-collapse',\n COLLAPSING: 'mm-collapsing',\n COLLAPSED: 'mm-collapsed',\n};\n\nclass MetisMenu {\n // eslint-disable-line no-shadow\n constructor(element, config) {\n this.element = element;\n this.config = {\n ...Default,\n ...config,\n };\n this.transitioning = null;\n\n this.init();\n }\n\n init() {\n const self = this;\n const conf = this.config;\n const el = $(this.element);\n\n el.addClass(ClassName.METIS); // add metismenu class to element\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .children(conf.triggerElement)\n .attr('aria-expanded', 'true'); // add attribute aria-expanded=true the trigger element\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .parents(conf.parentTrigger)\n .addClass(ClassName.ACTIVE);\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .parents(conf.parentTrigger)\n .children(conf.triggerElement)\n .attr('aria-expanded', 'true'); // add attribute aria-expanded=true the triggers of all parents\n\n el.find(`${conf.parentTrigger}.${ClassName.ACTIVE}`)\n .has(conf.subMenu)\n .children(conf.subMenu)\n .addClass(`${ClassName.COLLAPSE} ${ClassName.SHOW}`);\n\n el\n .find(conf.parentTrigger)\n .not(`.${ClassName.ACTIVE}`)\n .has(conf.subMenu)\n .children(conf.subMenu)\n .addClass(ClassName.COLLAPSE);\n\n el\n .find(conf.parentTrigger)\n // .has(conf.subMenu)\n .children(conf.triggerElement)\n .on(Event.CLICK_DATA_API, function (e) { // eslint-disable-line func-names\n const eTar = $(this);\n\n if (eTar.attr('aria-disabled') === 'true') {\n return;\n }\n\n if (conf.preventDefault && eTar.attr('href') === '#') {\n e.preventDefault();\n }\n\n const paRent = eTar.parent(conf.parentTrigger);\n const sibLi = paRent.siblings(conf.parentTrigger);\n const sibTrigger = sibLi.children(conf.triggerElement);\n\n if (paRent.hasClass(ClassName.ACTIVE)) {\n eTar.attr('aria-expanded', 'false');\n self.removeActive(paRent);\n } else {\n eTar.attr('aria-expanded', 'true');\n self.setActive(paRent);\n if (conf.toggle) {\n self.removeActive(sibLi);\n sibTrigger.attr('aria-expanded', 'false');\n }\n }\n\n if (conf.onTransitionStart) {\n conf.onTransitionStart(e);\n }\n });\n }\n\n setActive(li) {\n $(li).addClass(ClassName.ACTIVE);\n const ul = $(li).children(this.config.subMenu);\n if (ul.length > 0 && !ul.hasClass(ClassName.SHOW)) {\n this.show(ul);\n }\n }\n\n removeActive(li) {\n $(li).removeClass(ClassName.ACTIVE);\n const ul = $(li).children(`${this.config.subMenu}.${ClassName.SHOW}`);\n if (ul.length > 0) {\n this.hide(ul);\n }\n }\n\n show(element) {\n if (this.transitioning || $(element).hasClass(ClassName.COLLAPSING)) {\n return;\n }\n const elem = $(element);\n\n const startEvent = $.Event(Event.SHOW);\n elem.trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n elem.parent(this.config.parentTrigger).addClass(ClassName.ACTIVE);\n\n if (this.config.toggle) {\n const toggleElem = elem.parent(this.config.parentTrigger).siblings().children(`${this.config.subMenu}.${ClassName.SHOW}`);\n this.hide(toggleElem);\n }\n\n elem\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n .height(0);\n\n this.setTransitioning(true);\n\n const complete = () => {\n // check if disposed\n if (!this.config || !this.element) {\n return;\n }\n elem\n .removeClass(ClassName.COLLAPSING)\n .addClass(`${ClassName.COLLAPSE} ${ClassName.SHOW}`)\n .height('');\n\n this.setTransitioning(false);\n\n elem.trigger(Event.SHOWN);\n };\n\n elem\n .height(element[0].scrollHeight)\n .one(Util.TRANSITION_END, complete)\n .mmEmulateTransitionEnd(TRANSITION_DURATION);\n }\n\n hide(element) {\n if (\n this.transitioning || !$(element).hasClass(ClassName.SHOW)\n ) {\n return;\n }\n\n const elem = $(element);\n\n const startEvent = $.Event(Event.HIDE);\n elem.trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n elem.parent(this.config.parentTrigger).removeClass(ClassName.ACTIVE);\n // eslint-disable-next-line no-unused-expressions\n elem.height(elem.height())[0].offsetHeight;\n\n elem\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW);\n\n this.setTransitioning(true);\n\n const complete = () => {\n // check if disposed\n if (!this.config || !this.element) {\n return;\n }\n if (this.transitioning && this.config.onTransitionEnd) {\n this.config.onTransitionEnd();\n }\n\n this.setTransitioning(false);\n elem.trigger(Event.HIDDEN);\n\n elem\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE);\n };\n\n if (elem.height() === 0 || elem.css('display') === 'none') {\n complete();\n } else {\n elem\n .height(0)\n .one(Util.TRANSITION_END, complete)\n .mmEmulateTransitionEnd(TRANSITION_DURATION);\n }\n }\n\n setTransitioning(isTransitioning) {\n this.transitioning = isTransitioning;\n }\n\n dispose() {\n $.removeData(this.element, DATA_KEY);\n\n $(this.element)\n .find(this.config.parentTrigger)\n .has(this.config.subMenu)\n .children(this.config.triggerElement)\n .off('click');\n\n this.transitioning = null;\n this.config = null;\n this.element = null;\n }\n\n static jQueryInterface(config) {\n // eslint-disable-next-line func-names\n return this.each(function () {\n const $this = $(this);\n let data = $this.data(DATA_KEY);\n const conf = {\n ...Default,\n ...$this.data(),\n ...(typeof config === 'object' && config ? config : {}),\n };\n\n if (!data) {\n data = new MetisMenu(this, conf);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = MetisMenu.jQueryInterface; // eslint-disable-line no-param-reassign\n$.fn[NAME].Constructor = MetisMenu; // eslint-disable-line no-param-reassign\n$.fn[NAME].noConflict = () => {\n // eslint-disable-line no-param-reassign\n $.fn[NAME] = JQUERY_NO_CONFLICT; // eslint-disable-line no-param-reassign\n return MetisMenu.jQueryInterface;\n};\n\nexport default MetisMenu;\n"]} \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/modules/index.js b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/modules/index.js new file mode 100644 index 000000000..87c871cba --- /dev/null +++ b/maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/modules/index.js @@ -0,0 +1,331 @@ +/*! +* metismenu https://github.com/onokumus/metismenu#readme +* A jQuery menu plugin +* @version 3.0.4 +* @author Osman Nuri Okumus (https://github.com/onokumus) +* @license: MIT +*/ +import $ from 'jquery'; + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +var Util = function ($) { + // eslint-disable-line no-shadow + var TRANSITION_END = 'transitionend'; + var Util = { + // eslint-disable-line no-shadow + TRANSITION_END: 'mmTransitionEnd', + triggerTransitionEnd: function triggerTransitionEnd(element) { + $(element).trigger(TRANSITION_END); + }, + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(TRANSITION_END); + } + }; + + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function handle(event) { + if ($(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } + + return undefined; + } + }; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + $(this).one(Util.TRANSITION_END, function () { + called = true; + }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; + } + + function setTransitionEndSupport() { + $.fn.mmEmulateTransitionEnd = transitionEndEmulator; // eslint-disable-line no-param-reassign + // eslint-disable-next-line no-param-reassign + + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + + setTransitionEndSupport(); + return Util; +}($); + +var NAME = 'metisMenu'; +var DATA_KEY = 'metisMenu'; +var EVENT_KEY = "." + DATA_KEY; +var DATA_API_KEY = '.data-api'; +var JQUERY_NO_CONFLICT = $.fn[NAME]; +var TRANSITION_DURATION = 350; +var Default = { + toggle: true, + preventDefault: true, + triggerElement: 'a', + parentTrigger: 'li', + subMenu: 'ul' +}; +var Event = { + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY +}; +var ClassName = { + METIS: 'metismenu', + ACTIVE: 'mm-active', + SHOW: 'mm-show', + COLLAPSE: 'mm-collapse', + COLLAPSING: 'mm-collapsing', + COLLAPSED: 'mm-collapsed' +}; + +var MetisMenu = +/*#__PURE__*/ +function () { + // eslint-disable-line no-shadow + function MetisMenu(element, config) { + this.element = element; + this.config = _extends({}, Default, config); + this.transitioning = null; + this.init(); + } + + var _proto = MetisMenu.prototype; + + _proto.init = function init() { + var self = this; + var conf = this.config; + var el = $(this.element); + el.addClass(ClassName.METIS); // add metismenu class to element + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).children(conf.triggerElement).attr('aria-expanded', 'true'); // add attribute aria-expanded=true the trigger element + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).parents(conf.parentTrigger).addClass(ClassName.ACTIVE); + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).parents(conf.parentTrigger).children(conf.triggerElement).attr('aria-expanded', 'true'); // add attribute aria-expanded=true the triggers of all parents + + el.find(conf.parentTrigger + "." + ClassName.ACTIVE).has(conf.subMenu).children(conf.subMenu).addClass(ClassName.COLLAPSE + " " + ClassName.SHOW); + el.find(conf.parentTrigger).not("." + ClassName.ACTIVE).has(conf.subMenu).children(conf.subMenu).addClass(ClassName.COLLAPSE); + el.find(conf.parentTrigger) // .has(conf.subMenu) + .children(conf.triggerElement).on(Event.CLICK_DATA_API, function (e) { + // eslint-disable-line func-names + var eTar = $(this); + + if (eTar.attr('aria-disabled') === 'true') { + return; + } + + if (conf.preventDefault && eTar.attr('href') === '#') { + e.preventDefault(); + } + + var paRent = eTar.parent(conf.parentTrigger); + var sibLi = paRent.siblings(conf.parentTrigger); + var sibTrigger = sibLi.children(conf.triggerElement); + + if (paRent.hasClass(ClassName.ACTIVE)) { + eTar.attr('aria-expanded', 'false'); + self.removeActive(paRent); + } else { + eTar.attr('aria-expanded', 'true'); + self.setActive(paRent); + + if (conf.toggle) { + self.removeActive(sibLi); + sibTrigger.attr('aria-expanded', 'false'); + } + } + + if (conf.onTransitionStart) { + conf.onTransitionStart(e); + } + }); + }; + + _proto.setActive = function setActive(li) { + $(li).addClass(ClassName.ACTIVE); + var ul = $(li).children(this.config.subMenu); + + if (ul.length > 0 && !ul.hasClass(ClassName.SHOW)) { + this.show(ul); + } + }; + + _proto.removeActive = function removeActive(li) { + $(li).removeClass(ClassName.ACTIVE); + var ul = $(li).children(this.config.subMenu + "." + ClassName.SHOW); + + if (ul.length > 0) { + this.hide(ul); + } + }; + + _proto.show = function show(element) { + var _this = this; + + if (this.transitioning || $(element).hasClass(ClassName.COLLAPSING)) { + return; + } + + var elem = $(element); + var startEvent = $.Event(Event.SHOW); + elem.trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + elem.parent(this.config.parentTrigger).addClass(ClassName.ACTIVE); + + if (this.config.toggle) { + var toggleElem = elem.parent(this.config.parentTrigger).siblings().children(this.config.subMenu + "." + ClassName.SHOW); + this.hide(toggleElem); + } + + elem.removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING).height(0); + this.setTransitioning(true); + + var complete = function complete() { + // check if disposed + if (!_this.config || !_this.element) { + return; + } + + elem.removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE + " " + ClassName.SHOW).height(''); + + _this.setTransitioning(false); + + elem.trigger(Event.SHOWN); + }; + + elem.height(element[0].scrollHeight).one(Util.TRANSITION_END, complete).mmEmulateTransitionEnd(TRANSITION_DURATION); + }; + + _proto.hide = function hide(element) { + var _this2 = this; + + if (this.transitioning || !$(element).hasClass(ClassName.SHOW)) { + return; + } + + var elem = $(element); + var startEvent = $.Event(Event.HIDE); + elem.trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + elem.parent(this.config.parentTrigger).removeClass(ClassName.ACTIVE); // eslint-disable-next-line no-unused-expressions + + elem.height(elem.height())[0].offsetHeight; + elem.addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + this.setTransitioning(true); + + var complete = function complete() { + // check if disposed + if (!_this2.config || !_this2.element) { + return; + } + + if (_this2.transitioning && _this2.config.onTransitionEnd) { + _this2.config.onTransitionEnd(); + } + + _this2.setTransitioning(false); + + elem.trigger(Event.HIDDEN); + elem.removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE); + }; + + if (elem.height() === 0 || elem.css('display') === 'none') { + complete(); + } else { + elem.height(0).one(Util.TRANSITION_END, complete).mmEmulateTransitionEnd(TRANSITION_DURATION); + } + }; + + _proto.setTransitioning = function setTransitioning(isTransitioning) { + this.transitioning = isTransitioning; + }; + + _proto.dispose = function dispose() { + $.removeData(this.element, DATA_KEY); + $(this.element).find(this.config.parentTrigger).has(this.config.subMenu).children(this.config.triggerElement).off('click'); + this.transitioning = null; + this.config = null; + this.element = null; + }; + + MetisMenu.jQueryInterface = function jQueryInterface(config) { + // eslint-disable-next-line func-names + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + + var conf = _extends({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); + + if (!data) { + data = new MetisMenu(this, conf); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + return MetisMenu; +}(); +/** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + +$.fn[NAME] = MetisMenu.jQueryInterface; // eslint-disable-line no-param-reassign + +$.fn[NAME].Constructor = MetisMenu; // eslint-disable-line no-param-reassign + +$.fn[NAME].noConflict = function () { + // eslint-disable-line no-param-reassign + $.fn[NAME] = JQUERY_NO_CONFLICT; // eslint-disable-line no-param-reassign + + return MetisMenu.jQueryInterface; +}; + +export default MetisMenu; diff --git a/maxkey-web-manage/src/main/resources/templates/views/apps/appsList.jsp b/maxkey-web-manage/src/main/resources/templates/views/apps/appsList.ftl similarity index 100% rename from maxkey-web-manage/src/main/resources/templates/views/apps/appsList.jsp rename to maxkey-web-manage/src/main/resources/templates/views/apps/appsList.ftl diff --git a/maxkey-web-manage/src/main/resources/templates/views/layout/common.cssjs.ftl b/maxkey-web-manage/src/main/resources/templates/views/layout/common.cssjs.ftl index 357fdd7a3..c93259efd 100644 --- a/maxkey-web-manage/src/main/resources/templates/views/layout/common.cssjs.ftl +++ b/maxkey-web-manage/src/main/resources/templates/views/layout/common.cssjs.ftl @@ -36,9 +36,18 @@ + <#-- metisMenu-v3.0.4 --> + + + <#-- common script start --> + \ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/templates/views/layout/top.ftl b/maxkey-web-manage/src/main/resources/templates/views/layout/top.ftl index 9450ac154..1909bcd6d 100644 --- a/maxkey-web-manage/src/main/resources/templates/views/layout/top.ftl +++ b/maxkey-web-manage/src/main/resources/templates/views/layout/top.ftl @@ -1,53 +1,39 @@ -
-
-
-
-
<@locale code="global.application"/>
- -
-
- - - - <#if Session["current_user"].gridList==0 > - - - <#else> - - - - - +
+
- -
- <@locale code="global.text.welcome"/>: - <#if Session["current_user"]?exists> - ${Session["current_user"].displayName} ${Session["current_user"].username} - -    - - - - - - - - - - -
  <@locale code="login.password.changepassword"/>  
-
-
- -
  <@locale code="global.text.manage"/>  
-
-
- -
  <@locale code="global.text.logout"/>  
-
-
-
+
+ +
\ No newline at end of file diff --git a/maxkey-web-manage/src/main/resources/templates/views/login.jsp b/maxkey-web-manage/src/main/resources/templates/views/login.ftl similarity index 57% rename from maxkey-web-manage/src/main/resources/templates/views/login.jsp rename to maxkey-web-manage/src/main/resources/templates/views/login.ftl index e383f718f..f2b9f9978 100644 --- a/maxkey-web-manage/src/main/resources/templates/views/login.jsp +++ b/maxkey-web-manage/src/main/resources/templates/views/login.ftl @@ -1,22 +1,20 @@ -<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="s" uri="http://sso.maxkey.org/tags" %> - - + <#include "layout/header.ftl"/> + <#include "layout/common.cssjs.ftl"/> +<#include "layout/nologintop.ftl"/>
@@ -24,43 +22,43 @@

- +

-
+
- "> + ">
- "> + ">
- " style="float: left; width: 70%;"> - " /> + " style="float: left; width: 70%;"> +
- : + <@locale code="global.change.language" />:
@@ -73,6 +71,7 @@
+ <#include "layout/footer.ftl"/>
diff --git a/maxkey-web-manage/src/main/resources/templates/views/main.jsp b/maxkey-web-manage/src/main/resources/templates/views/main.ftl similarity index 100% rename from maxkey-web-manage/src/main/resources/templates/views/main.jsp rename to maxkey-web-manage/src/main/resources/templates/views/main.ftl diff --git a/maxkey-web-manage/src/main/resources/templates/views/userinfo/usersList.jsp b/maxkey-web-manage/src/main/resources/templates/views/userinfo/usersList.ftl similarity index 55% rename from maxkey-web-manage/src/main/resources/templates/views/userinfo/usersList.jsp rename to maxkey-web-manage/src/main/resources/templates/views/userinfo/usersList.ftl index 11db3f508..3501180af 100644 --- a/maxkey-web-manage/src/main/resources/templates/views/userinfo/usersList.jsp +++ b/maxkey-web-manage/src/main/resources/templates/views/userinfo/usersList.ftl @@ -1,21 +1,18 @@ -<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="s" uri="http://sso.maxkey.org/tags" %> - - + <#include "../layout/header.ftl"/> + <#include "../layout/common.cssjs.ftl"/> @@ -24,11 +21,11 @@
@@ -58,34 +55,34 @@ @@ -98,35 +95,35 @@
- : + <@locale code="userinfo.username"/>: - "> - " expandValue="" collapseValue=""> + "> + " expandValue="<@locale code="button.text.expandsearch"/>" collapseValue="<@locale code="button.text.collapsesearch"/>">
- " - wurl="/users/forwardChangePassword" wwidth="600px" wheight="250px" /> + " + wurl="<@base/>/users/forwardChangePassword" wwidth="600px" wheight="250px" /> - " - wurl="/users/forwardSelectUserType" + " + wurl="<@base/>/users/forwardSelectUserType" wwidth="960" wheight="600" target="window"> - " - wurl="/users/forwardUpdate" + " + wurl="<@base/>/users/forwardUpdate" wwidth="960" wheight="600" target="window"> - " - wurl="/users/delete" /> + " + wurl="<@base/>/users/delete" />
- + - + - + - +
<@locale code="userinfo.displayName"/> <@locale code="userinfo.employeeNumber"/>
<@locale code="userinfo.department"/> - " title="department" wurl="/orgs/orgsSelect/deptId/department" wwidth="300" wheight="400" /> + " title="department" wurl="/orgs/orgsSelect/deptId/department" wwidth="300" wheight="400" /> <@locale code="userinfo.userType"/> - " title="UserType" wurl="/usertype//selectUserTypeList" wwidth="700" wheight="500" /> + " title="UserType" wurl="/usertype//selectUserTypeList" wwidth="700" wheight="500" />
- - - - - - - - - - - - + + + + + + + + + + +
<@locale code="log.loginhistory.id"/><@locale code="apps.icon"/><@locale code="userinfo.username"/><@locale code="userinfo.displayName"/><@locale code="userinfo.employeeNumber"/><@locale code="userinfo.organization"/><@locale code="userinfo.department"/><@locale code="userinfo.jobTitle"/><@locale code="userinfo.mobile"/><@locale code="userinfo.email"/><@locale code="userinfo.gender"/>
@@ -158,9 +155,9 @@
-
- -
+
+ <#include "../layout/footer.ftl"/> +
diff --git a/maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml b/maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml index 83ae9edea..74c15d374 100644 --- a/maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml +++ b/maxkey-web-maxkey/src/main/resources/spring/maxkey-web.xml @@ -18,13 +18,6 @@ http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> - - - - - - -