From ba4514164eca167d28e81f5925dd9a6ce6a00e01 Mon Sep 17 00:00:00 2001 From: shimingxy Date: Sun, 8 Sep 2019 23:19:37 +0800 Subject: [PATCH] springboot init springboot init --- .../web/MaxKeyFreeMarkerConfigurer.java | 11 +- .../bin/main/.gitignore | 2 + .../maxkey-protocol-ltpa/bin/main/.gitignore | 2 + maxkey-web-manage/.classpath | 15 +- .../org.eclipse.core.resources.prefs | 3 +- .../org.eclipse.wst.common.component | 2 + ...ication.java => MaxKeyMgtApplication.java} | 13 +- ...MaxKeyConfig.java => MaxKeyMgtConfig.java} | 4 +- .../web/interceptor/PermissionAdapter.java | 23 +- .../src/main/resources/application.properties | 22 ++ .../config/applicationLogin.properties | 2 +- .../resources/messages/message.properties | 42 +-- .../main/resources/spring/maxkey-mgt-web.xml | 15 +- .../src/main/resources/static/css/base.css | 214 ++++++++++- .../src/main/resources/static/images/cert.png | Bin 0 -> 2261 bytes .../src/main/resources/static/images/exit.jpg | Bin 0 -> 10698 bytes .../main/resources/static/images/exit1.jpg | Bin 0 -> 2602 bytes .../main/resources/static/images/exit2.jpg | Bin 0 -> 13700 bytes .../main/resources/static/images/exit4.png | Bin 0 -> 4882 bytes .../src/main/resources/static/images/grid.png | Bin 406 -> 5446 bytes .../main/resources/static/images/grid_sel.png | Bin 404 -> 0 bytes .../src/main/resources/static/images/list.png | Bin 407 -> 0 bytes .../main/resources/static/images/list_sel.png | Bin 405 -> 0 bytes .../resources/static/images/menu-left.png | Bin 0 -> 2663 bytes .../src/main/resources/static/images/menu.png | Bin 0 -> 2249 bytes .../resources/static/images/progress_bar.gif | Bin 60242 -> 0 bytes .../main/resources/static/images/side-nav.png | Bin 0 -> 561 bytes .../jquery/metisMenu-v3.0.4/cjs/index.js | 335 +++++++++++++++++ .../jquery/metisMenu-v3.0.4/css/app.css | 44 +++ .../jquery/metisMenu-v3.0.4/css/demo.css | 1 + .../jquery/metisMenu-v3.0.4/css/mini.css | 55 +++ .../jquery/metisMenu-v3.0.4/css/mm-faq.css | 11 + .../jquery/metisMenu-v3.0.4/css/mm-folder.css | 37 ++ .../metisMenu-v3.0.4/css/mm-horizontal.css | 80 +++++ .../css/mm-vertical-hover.css | 73 ++++ .../metisMenu-v3.0.4/css/mm-vertical.css | 71 ++++ .../jquery/metisMenu-v3.0.4/js/index.js | 3 + .../jquery/metisMenu-v3.0.4/js/mm-ajax.js | 54 +++ .../jquery/metisMenu-v3.0.4/js/mm-animate.js | 5 + .../jquery/metisMenu-v3.0.4/js/mm-bs-card.js | 11 + .../jquery/metisMenu-v3.0.4/js/mm-dispose.js | 47 +++ .../jquery/metisMenu-v3.0.4/js/mm-event.js | 38 ++ .../jquery/metisMenu-v3.0.4/js/mm-event2.js | 7 + .../jquery/metisMenu-v3.0.4/js/mm-faq.js | 10 + .../jquery/metisMenu-v3.0.4/js/mm-folder.js | 5 + .../metisMenu-v3.0.4/js/mm-horizontal.js | 7 + .../metisMenu-v3.0.4/js/mm-vertical-hover.js | 5 + .../jquery/metisMenu-v3.0.4/js/mm-vertical.js | 11 + .../jquery/metisMenu-v3.0.4/metisMenu.css | 130 +++++++ .../jquery/metisMenu-v3.0.4/metisMenu.css.map | 1 + .../jquery/metisMenu-v3.0.4/metisMenu.js | 340 ++++++++++++++++++ .../jquery/metisMenu-v3.0.4/metisMenu.js.map | 1 + .../jquery/metisMenu-v3.0.4/metisMenu.min.css | 8 + .../metisMenu-v3.0.4/metisMenu.min.css.map | 1 + .../jquery/metisMenu-v3.0.4/metisMenu.min.js | 9 + .../metisMenu-v3.0.4/metisMenu.min.js.map | 1 + .../jquery/metisMenu-v3.0.4/modules/index.js | 331 +++++++++++++++++ .../views/apps/{appsList.jsp => appsList.ftl} | 0 .../templates/views/layout/common.cssjs.ftl | 9 + .../templates/views/layout/sidenav.ftl | 154 ++++++++ .../resources/templates/views/layout/top.ftl | 86 ++--- .../templates/views/{login.jsp => login.ftl} | 41 ++- .../templates/views/{main.jsp => main.ftl} | 0 .../userinfo/{usersList.jsp => usersList.ftl} | 81 ++--- .../src/main/resources/spring/maxkey-web.xml | 7 - 65 files changed, 2276 insertions(+), 204 deletions(-) create mode 100644 maxkey-protocols/maxkey-protocol-authorize/bin/main/.gitignore create mode 100644 maxkey-protocols/maxkey-protocol-ltpa/bin/main/.gitignore rename maxkey-web-manage/src/main/java/org/maxkey/{MaxKeyApplication.java => MaxKeyMgtApplication.java} (50%) rename maxkey-web-manage/src/main/java/org/maxkey/{MaxKeyConfig.java => MaxKeyMgtConfig.java} (63%) create mode 100644 maxkey-web-manage/src/main/resources/application.properties create mode 100644 maxkey-web-manage/src/main/resources/static/images/cert.png create mode 100644 maxkey-web-manage/src/main/resources/static/images/exit.jpg create mode 100644 maxkey-web-manage/src/main/resources/static/images/exit1.jpg create mode 100644 maxkey-web-manage/src/main/resources/static/images/exit2.jpg create mode 100644 maxkey-web-manage/src/main/resources/static/images/exit4.png delete mode 100644 maxkey-web-manage/src/main/resources/static/images/grid_sel.png delete mode 100644 maxkey-web-manage/src/main/resources/static/images/list.png delete mode 100644 maxkey-web-manage/src/main/resources/static/images/list_sel.png create mode 100644 maxkey-web-manage/src/main/resources/static/images/menu-left.png create mode 100644 maxkey-web-manage/src/main/resources/static/images/menu.png delete mode 100644 maxkey-web-manage/src/main/resources/static/images/progress_bar.gif create mode 100644 maxkey-web-manage/src/main/resources/static/images/side-nav.png create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/cjs/index.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/app.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/demo.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mini.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-faq.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-folder.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-horizontal.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical-hover.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/css/mm-vertical.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/index.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-ajax.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-animate.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-bs-card.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-dispose.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-event2.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-faq.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-folder.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-horizontal.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical-hover.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/js/mm-vertical.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.css.map create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.js.map create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.css.map create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.js create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/metisMenu.min.js.map create mode 100644 maxkey-web-manage/src/main/resources/static/jquery/metisMenu-v3.0.4/modules/index.js rename maxkey-web-manage/src/main/resources/templates/views/apps/{appsList.jsp => appsList.ftl} (100%) create mode 100644 maxkey-web-manage/src/main/resources/templates/views/layout/sidenav.ftl rename maxkey-web-manage/src/main/resources/templates/views/{login.jsp => login.ftl} (57%) rename maxkey-web-manage/src/main/resources/templates/views/{main.jsp => main.ftl} (100%) rename maxkey-web-manage/src/main/resources/templates/views/userinfo/{usersList.jsp => usersList.ftl} (55%) 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 0000000000000000000000000000000000000000..33575df3b680332a617597ada71c34907a6b67bd GIT binary patch literal 2261 zcmV;`2rBo9P)HR%s{=00007bVXQnL3MO!Z*l;suFOaP000bh zMObu1WpiV4X>fFDZ*Bk+2_Yi@000VfMObu0Z*X~XX=iA30IUzpIsgCw4s=CWbVG7w zVRUJ4ZXk4NZDjy8_YVmG000SeMObuGZ)S9NVRB^vU2y+80000BbVXQnL}_zlY+-3_ zWpV(wz_gD5000PdMObuKVRCM1Zf5|%8|H@q000McMObuGZ*_8GWdQa6gX;hQ00?wN zSad^gZEa<4bO83umcIZ100wkLSaeirbZlh+sP57y000M|Nkl(m!07ojv#7 z-=2GR&bfCKK=OYgeeR;WyPFMntVdPV1&v$2j|jsh1#s(i&YU@mlsER74zOmr0$G^nO&IN3bAcJJoGg`peTs{p%q?Ybc-fU2sb(`jpI=t-8hbeX_~hL8i_=490!1%4?W2C?f2iX z&%y!P(S#AQ*({k%rX$bHNl_GX`CPk?VHo`U*`E=Q$CnRwZsJ5DK|Y@+l}dFK8k(k& zN~P!BTeof-JkTYzotzXhK!9}xeC~EY@T}Z$pu&Ey0Bpw-f}Zd6UT8#CX+}h5ureYVY^M1 zN}N4&hH|+y?=kqT#~x+l#*No@#6qA!5b)-kZ!uMyy58^UNI@9T@;m}Rn3pac$KlKO ze2H?YL@wV$DwQIcO!AYbpXPgyKTfOF>I_y@Rr*)0qSzcffo(edm)JZBZc zFcCsfDitvdm2KPZ;jOp+dh@WOqoch2x3_N@R2LyT9fjUr2W7Tsi51Rcx)qY=kAbs_ z%9aOllQu9DGO^EO){bFszy0$J46MC1(x8R%mxJh|g9Lg5BiA?odsQQrafpqbrsxbX z*|qYT!*mR*D9TNx)OJ5WdG{YMItW0kG{(3m7%vv_+$j>8q<3X6al-^Dv5P}AB1xLD z^i^YZ414k7MUEc%*GSyT7{{5AH6C$bPStFBw2mi>YIk`Z%m-6K4Jd`3K5&hD@Oq^SF9oZ#rtRue?;ly z3w$&n`J8*o~g;#X0sTqSX>JL39hSwC;q2@JzP)3kQMvuv<_;4@L2z*u`Xs=bP-{91|=;{<_!mF-+sD;7O0tBcEh zn=pOBo^L;jkb;+A{>}2jiclbgpqb1d;?_J+MNx=GV;F{x5RzuIK@bE;DXCT~=(a0Ps=pS*#gA{W;{9vs(E!%)dEqkj-n`7Ru{3@%pNQVd_2$N!iAxE z#m=&LRtQ0>)uKLKr`2j99eng=#!Ja+eoq_%RAO6UW?O$c{mOB@HZ~>sH8oH+A2d#PI z2{F4*NLsj3#cEb?q6X7R3s4Bdkji9*bUIBu9>@26&Yk;+3=FK{`R9K@xm=w2H|sjNTn`Em8#zmAnTOvwr=0 z4j(?k3orbVAP9g@#jNl9^MZLPR47c~`#z=_!Sk8~K|r}&!nPe6{ddslU(Z}ht=H=e z&7ODF-DyDK+_}LvD1Zk1bV&(kWm##SdFIEgUcDM!H)u4b0q{JJv9SWCX`-qczVCD8 z$`wwZI^A}bWm&}I3AS#%o71PyGB#EKmN6-8+O&y{8#m#)(}ZDwWpz=lR?svJzvXfK z*ztBefBLvH9#3Fd7Nug5-o9QQdE}eC|NaL^DL;wXrIu-$+;!I$Mn^}H5}teRS@QWD zl}d$H%VYS`<#{{jxf31B>f+^Be#?my@6o@ikMW5jg~Bp>w$*BJ?AY=4=MO$O$-@ut zCY#OSc^;~&@$u!+cIr(e5}2k*tybg2iT9{ht9)3k&Kq-CGuWIA!(i*yyAeY0&O3)W zbm%oyRcGzm0URgG$x|mebm(`~>(j(yF?xF!xd&T}gb=*``kQ1j84etH5#RTjoSbCu z-XC!4)G1zi=^$YkGCVTE&Ycf2K0dzSSn|Ks6h&!YuUT`OeD&2=|~FJ=Na~H00000NkvXXu0mjf;%zHT literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1c4516e8e3e04a682ab4935b422c7619efb2d60e GIT binary patch literal 10698 zcmZu%cQBma*I#R~tF96@2&)qWA<yig<|q$LCZ03^yva$5Hq{hxsG@Bi&mX1(_c zZmy)I4gh$v-P;2JfQ!3(y$Jxg@&f?>OaTC~L;!%s;j>AH!hKu(x2lSAfV=;`jK;j! zdke%-$>1XZKt%bU-~f_SVE_P^l(L+Rj{DS(k4Neo-K5ix{k5t)W4euelc*m^eYrSY zxgayD8#yz}(IFYE(?g9fnof?_mLLM+@PLJpuNgP3w|$F) zhV)&Ked;bJU_*yfD!{?%|C%!08y5#3RmY#m%IU^TS5p4Y^CPA;GdY>b6n2HA%y{#H_>kp6VKry*-&^Pp_zecISkOE%!-g@QtHBanTMk?Yu?{V zf-6LYpA8yvg%Oa#-G@CfFQo8>t9l=A{T(pUmIVHJ3w z2N0tVpU z=>FGBBDNM!P!E|v8JkbCtY3yZo(l^>y$Rv78A5m892gorz#92GS~kqFqN=c3vd}lX zNbt~-?_QmtmJ&imNde*7r!Gapvw?fCl~D-H;)g06$pvt`Fu}3tpQ7122pF|HJAs-0 zho|;R{YFcgKxT_@p@`B_`4Bym#r$Q^R&m?m*h&_sX1 z{o2#^BBDjva)DKAL3E@shyoGfX-(_L5-~Fm?Q|PFx-{)oVvvdbX28r`ox+gQm7zd%WmeJ<+InH0Z47tTTA#h-!E-qb_XW z+VY&Hs>Us?2Dxs4yM~~!9DslKXT_M+?l>l+U|f$#T;ty?E&qhF0<6XP2|h>rw0G}{ zg9@!RY+3f7jU$Unafr?{I@>kgnt`Y*nWyKlGycX2V8TGEx1lilbAh3sz4{`~yd=SM zXsDpkVFen10U%o*(q1M?3b_+y+ucVGXB=pYbTxTq&c_S|*$=T1MEdR4@5DV#Pl;oOaxLafB5=O`OeS101LGa?{dGvoHG4LSQEnH( zm)&l}JaLLW9b9+_UrD#-bh%Qy!WUEps4!terWzZo!6WBXnWOeGqNJnA{LI{I?c;A! zKAk!x;-3@Q2?Q5h12);1-zs3fw=1mIhKJ>__!w2Jha{zA|rSV?|89hip8zo9~3RLN~@{Rb)1Z#v?xsqcN{$NW5 zNE?}=rjo(KUZl*GTL2JhUPk|K&MT97&-fqB7K`1TN!^#nlyHZ=G`S_@J=$&qde%vU zDfXGF+yt(9T>(sGicghx{>kN5(0nF>b}A5gc4DQ-sqndQzDYwqnsQ$kpM>zF5b;tY zS1=xfHY`eZb0p$PuJiIe@|NS79AjczBdtx~pek9L}ne}1ztz1Gs&Oj2(-CkIWz*EM^E5zm?4GR3)hm7nR zIu3ow>~@Q%k@c)>m}}d8&AQ=u5O=VyzD$B12}TF@*n*G{1S|-}h>7pd^u2kCp{Ydk zhczXjYLXF}aM3%JwG&>0;@VZZ(REzlW#W_t?UtkK++5|3pw8RV2L-$-4DiB2m71Z77>z2BQfT!fJ!oz%h29l~YvsYJqWGmSbtoni^{_*U49Z(hr^ zNSTjPG^#zxw_QkQ>E_WfO8$j*uO+-W-kbI-N|QDg+YfJD57DOHO%5z~rPoqS*R*UB z7Tes0w3$Y|8)|goP9D&YoCx!9R3i#aOUrnSOVyF?y_$1Jpf0W+Iqs&~Rgy2gV1x?- z#^#xVF#-_{mxuOkLgR48m7!&Fq0}0x8Mnckw&yEBS|9A_$BHi~&{RMk3Yi@|nlHyu z-2HySHYq7X4%6M;?SVmsxezLR?ljr6^y=3BmHSCE0sEXBgJmgztrw{=dd5w9&cS6G zu+hDAA>DX@R<|-Gr@ZA^NpmG-D0c=Y6dADjIQcIht{Igi-yWjM4H0UX=aINWuUcDZ7g@i)r|9AR23>Q2AkMZNtSN^>TbQ&Op!K9w4&O_ zjMH?IAsD!_9|v+0C*7JIH`GxU=atH}Pj!gY9FUxK={`u3tao58ytFMYxNtSdeC7Wh zsHPJR&WsK)f7hGqpqxRCK}^uc)RKho+Q`2hkRjfc0vD=%>f`Iw0g0r60D!E=N(>u; z3?!LmW5Cg4QZuVFrg6rMUkN)B`)MtQ57sr)2fld!Be5I+Iez{Pd0N6;?={}>cW{9q zGz$U7Vav#L>SJCBQW&hT;6sFp^LQn5!H@2G>S?rV>LsAqEI%*t>jQq;SG;m{d^p_k zcxF^DJXg|KQjBk`tXBW+=^=@9Iw8bZIFDfTj@2DL>``U?3CEw{rIEpto)?b2ZV>dp z=@H0|-NVF~28wYPx5he3EtUJtayfsL7+|;VUn-iUhD#JIgM0h!GtE6oQg9g1To1{D zk2me9bn(BUkoR{H0lI4bqOQt7ZAoPl#F~!Sopn(z>FlPRHV6{3#LEwSk+c%Gz(ev@ z!bF7@k~O-lmF@kOF9(M$OcD#J?_;9L^bAW>L7VC6$=EunoAJxUX__Yxnf5TeZnoi# zdDpUk;DLwe6uX>3VNV5q_xAM1bF{|39s8HLimMTbgCT(hv^wbnCo*9@ZwuKG5w#|X>==vHlrIzj|9@xxT#qqv4|e`AM=+-- zndLXqk@T)H4^0xpr2D5zIxeut`5ip3%(ay6u_Je92ZYOoJ!8~t3X0VN^9}iQ$o|A0fN(o_+`D}`@mMW!xV4f%jL|>|>+-nb*Dixz||6!$$eyVY9&ymovwACCTuV>s%Swp~O%yYp1MgFKwOt|c$v^T!P}ojr@nf8p z#1t@AbkNTu(^Qluq;iZ!TqwZqsi2sBkye?a!r*a&AC|J&Px|LnopPz<%{RYb-90hJ zBs=PQOyUpfr6B)v>pb&C-Sm`WF<#iO)w7vkl=q6cNHl$Gt^jKyA()N-DZYYd5Hw}P z-CdIqX+}z7Yz$Ketrd5y8sTn;CC-zzrq!gW+~9Fy(bM$AV;%g1b0o^7;xDz;KST8k zsQ&ef5!g2Q@ae<#wWP*x#@I5nn7RDPx$;H>AKMX;&|G(HbgwA)1`E8oEEad{xtjY_ zvdCKH2%#&XPPQ?CDhySZ68Y!Z$mGy-xUi~!m%JpP4Sj@fdSgh?^c=q&h8JA+O6 zY|it+wE5OB)Ys4w9l~kspXvv>_(-lF?baf>ks3aKcDO+Bn*9`9ADZYkXHkZQB)|)? zdrFF#oJTPoYS-34!Own0|6>f=+4pW$mvrivx$*tpcq2YYM=QA+D_%8S6kKoxK&qf# z*Akq!nR%a=ctIU(ka=cVM%|iujw%++tU+G*b>oOG#3q zr=M?+Dov>5%o)J}x-j4n{JyPb;=CR?@Lh$zTf3fyU{pJb$EE3%)@}r&0uIRbc6bwj zaE@B+OOcp26!(*Qa#3xFctmhj+maDys?9^$!x`j7F(~WHDJ8rMP+44YcBuZ`&f9j% zZ$)DPZF!Mr%1*(Jf!YI~u$*WBkV@IXBYCbGMR?xkyQ1}QpYZr4?uV3=OK*MOn}i-4 z_5W~OwimAlJ-aH8e&LfSIwX|sw%4|0a>EfP7=AWu(!elO=Se*MoODfHrj}FAcO;bR zItE>Y15n~(qF+x_5n0;wm{Uhvw+J|M&;+qVAm>Qm2;zu{CsRVJr@rigq6x-96QNs; z52B#w9SJ2}+Vf46CyUTm0zmsP&03^?g$DSF(GyVWyZcxew1ZQ5M6;0QcgH0%$wLZ( z>s@a@rN{&ow36rh-s~d{FfG4V|9bWrK1`Fzh%!snI5$I8z6h{;Y#4Lv%Oo;t1qv@Y z|5NR{~x69YT$7gI{{Ew@yo43j9hojCQqi zArj5;&&{Ax_}fhoawtW^v=CIQ<;ZaQnQxD_rQ8s+%)?~`DCAst(^j<|W(DAQpRt&F zME=!u`&Q2V@UO!X+1YHkK5N)2AvUO;X(8+c4{*jFZP<&_r`R_S4#}9uD|x&Z?|5W`JlUa!7X~mtEV8cVF?F{x8@yLihb~{h=bYr3E^VO7PnI#(wV3d{70t7=G3cTbwKfJ zJpGNc@6$kB_v21J8E61?CzJ!tYg8|Jda+7X1v?W3jjp$E-Cgo^yKM7a7(}Wjn9W_r zE+(=EvCg=8Ct0v9QXqy#S$YSnrd9eiL_uYONnemZm0L)BrYt>*UVp+9Ru?jHWJ)YO zcCsJvy^}iLp2J2D1iw;IsP`)($tvtVIeFV})|^LTZAJ37_%x06`{xU_Q%A z$nBj|x(Pdb4V2Iu=j9yp z>S)o^FDiI`r9k|b9Yv}HS1)YZoHE9R;Z>IEzt8M^j}u_q8|ae4{J!y974xU|NLXN! zlIfkFq}JgPZ33^NUH==$E}0){6)U$QIP3ILeTrit_c1R2=n%H2-40&DGR6XG+7)pT z+BUbMq(EN#!L5I)J;9Fjc9*Mufi|>l7&zLzYf@FWCOhO$7jfUEi;MJ)c$}D+-pK_t zU7T#VJf@FNPSdScxti`aKG0mB{1cQ|) zuAFsI8k!_9y?snef3_K$iecgSa}rnq6)b1>?Lw?XN260Ef#9Hb8zh=Em_%4e z!eH)Gyt^61YsDO=s#x!y-K(605R0_g2fsoC7UgrQP3us0fk`U<D8VXoo3=BEI zn9j91xkH!UHJB+2=6ZZ=E}5dGze#mza{ckQhlBnPsyHo?L|Pn7oMV^}Li8ZYxouc+ zrriU3{Q(KJvgW-w+!d}0_(+NcctQeS78Jf+Cu=6)5cfb8Pyw6oPK^Mp$(&pT+y+3U zo!LMwa$9>m-5K5C?_4EbU1bb;S(#!T2k@H3G4XJ$(JBrFt%OCY&#LP$l!S0`y-(N{oOo>Uqq@pCL@U?ZS zdCBOHE{tPo;wt!GTF~B@%WzVWh0`V0Zg0#X5Y}Q!5d5KoiEm1-+g&{a-VClB>4dx# z{_(#T7S{UQ*QQY!SJ+7XhonqP*2FmeX}msgd|fKks19}=8izXo%BcJ5OuP(!Sxdnw zBEV+uqVX<9_EirNfvnQ@M9}-vI-n;H>DpOf3j46E>|oBXFr^72z*M^+o0CuC=Xu>4 zPb&B~b3AVHhR<37g~@s3OkW}JY&9L0VfGx5aKz_Qy&GSEvk=ceiwT-BA9P%q;KO@Y zAUM72q;@G>b0oBt+{26sr`;0T_2O7O@$%jT0a&y11kAod5LA_lwDBf28ep7{BASOM ztu^(2WWk1p58QcvU7zxUg7sK=>$^0-RtN6C$LThOFw1DJ9`Ymn+%WI(JeT(%3v#rp zt}HH?DSC7F@x^7QMXwAO9)YPcf+?Qs*N?*|Y{-wQWUUsQd(9?> zj?yxzi;9}Ro-*?JCYS0u_8w|$FZ=f=Kc|!2yRz31M_lRGtPzybevx^H)0ZhGft-Xc z!2Ab)VxhpW`R1fc30Hhi4)i_#Ik!c190~PfZrWO^g!#)(PCg$|+NK1Ce`tWr2=Q}* z2sNW^C=h`Ai>2@Nm*F9$Z*-lF38v4?<~!GCpV-keywW4rq5yLCe6)P5YXsy^C$nL_ z#OK^O@!S)T0n?BCIwkO1*{sr*@)qsCUWxB!4<2G+qgS&>Zj_s{2bZ7YCcNFzO+Rs& zSN$XrVfPdgDS*l4H*u0sLOQ=@z5J1IOO-(n+z|U|<)RP4_v6FlyYIa9l|H?>6v(b8 z_2?NlnLBn(J)cvJR$?9GC3U#a+Pr@FoAq_S2<7|RD}0Stp4?MPkqhyP3_(jH-w_-;8vszaBnVj;fjvtdlQ(c|n zjq8aP_v>Fpk3rBGoND`x%F37I>U7`TZSS8RL1ibmjPP1iXQ~>98_i2Qm*#>VkN$2Uz!2a{CA{AHT&x7;16mSH0Fvq`j)`04A8K-{I|upK65b2 zZ9t7vvx7Ed&)?nBl+ENQG{e77{e^`vG!FHXwx@`P?IzwAMKw#A!J5^cB&X~_Ln*y7 zD>UJVf{SR1DC;&QQkFVL@+UQW(vE+5t7RY{iS^Ah)NIu4sT;_Jap_~68G*|>V13YM18Y<=L4$cy1d-r$T+^6HKEZaK%kzoBqT zwaqh982jaCWmpi7BdJ#0UO)@px+5{Jr47jKN$|vHHj(AryKpjzQ&wuD>$x9?vpPMmYT+eO%_3VhIH!s7U* z+5P*71K%63M%M`f8_ zh_1iA7o# zfAi5U7nwW@20k|xADphU*bUXq23WY9VDpwAR|F=|=r4F{8gdY>0;- zaCM*PlE_mB<5Kh2(y+Peb^OA@2fp$&uSLR&$t1xhJW+yot0qNJt}58W6Y`(EegoWyjxa_m57xKfP1LNXL>qeODU0?vmmP#jZdMr_y!9otWa&*(c< z@6&}S>!nn``W$API$HOoFMjO~w>Op`T$xdALcHLv(pMA#svJ%4CaaH=X$QXg2}n?y znvVB>>(}fQ3shG}W!Kj`Wb5wZ0RR{TQSiY(pLzKY?y&V)XKrtXK!GugJ1od zH4Y#FG{jkTbIhT%Jsp1JFpKW2+$uaWWEiZrrSbLL8Jjo>ey?%wFqO>>$GtFF74+xU zOWmR-2AdC^I&MTbJqFC3-H+nGtI?|PCx-N=`>~)>!w7;p*?B2s2EM4D|7N3E?htn% zIQ#L<1B*Sl{^T1{|D*|emF`7d{OnoCnwK*7!)>k?GfvPCDIY5s!cmEvLfffMI)}gk zT11*@qcIXp`>NDKWNhS!ocr0~uFbSn$6l~`lKZ8t@Y{jdPs=+dHKa!aqNRn+1`$4d zcE22&UAf(EcB@0qU4CMa8Tq?vjGGEK&z}`b9(?Fn52TtJ?H$@8*_;dY@-N8R-OWLc(s`J!)nlmQb>s2Ss8 z%SBB-axg&a?Ywrg?3LilZx_E}9ow#?LoU`+!>2k_bFZ)cqi!Z{g5Q^IHv0ty@?Agt z^OT$nlz|^u^7?BKimECy+2hE;R={f-B#udz8RtAbsipQ(b|(dlSrVv+muS>Wf-nW3dvYEu6K z+8XnAwY-=|w8+A08il72?zDiPy!`UmLhFnNGq|lp*>TZY#8qj|Q=6H&YqL2&FXp{W zHqE&tY|%=F)=Z<_skJ@<;k{yCy-v9ltjBKr4-l}xwrljj-V3Qp`|L|Ef#F#^CJ}|R zX%+w&Cxfm?ei!Nm0-IfSS~7Om&Xg`dU~B<|~ZXpJ_PO z99M=w%=I1DChx52I#cDkZd3C57|%@rt)gwk#dOqPuS!TfIf+|~D$ea6#>z?_e^P}! zgCeF29O^Cd&HV<;cjzXCDv9U*K%;QEel_xLy{u)Q7zBJsHnsa_e|w;j)8fN`sd3tx z5_$FJdam@ep-D7uqWR9IZNhFM#p4yyF-l2wOSYJ!xcTw$Fk!1lNA&`C5DMrXaiq$X ziEXnoKrvGpHCtNU-9}I?aSM(;P3*hRGYAi6bD!BtkJR11Gh26#M(TJAM7>oDr^<#d ze8FoKJ=Qqy)bMFfz-Z4ISKk>j(UbapcMB}dT~lclUH^i0t_nB_`%%b^;1eMFR~`BIG#C)b96rLS*~?C;o3ER@+W(t5pu>;8fO<9J;@Ae47%jBTz?K+k&r9@9> zELC|C_r3z4C7&0QwN*OyMF0GQiO``nbl4!$`n@2VJJ;&{4C_lQ`)35l5c{8YZ88P- zuGAd3Gr;K{YcDBlZ|PfnOvF8QO7+=4M#ii75NhGS-{M^O9ZmD27~3v=*tJysruiVJ z&2IeL+|BM$e=7NN_g&K4ksw1!BfryU>Lc~X&uKG1Hx(_F65rVe|L~JI84}hsYeU*44 z$gp9#uEd387AZfwp=~vs=uu8|AFBgR;IO_@P<)xU5cLyKK#g#h!M&A+xa%H)3%?~as933v_pc{ z<@*R?yiCfsMDmkX`BTd&io?x5xp}2zv0w^HGFs|oZz-FPC+61JhfIi=eIo9R#}@+~ z);tfxAWt>hKN?2IrDo zY#_}aza;!%5Y?F{BmQs!Kp z=oOE5-p&!#3nSzI3*mv9@j!ATR45T^f`;x8I>jRIjGyd_*}Q;=m*5CdhL`)RiRe(9 zS@*|H=QUIm5hn!bZ|cZ$2e^PLM5Eiie2S5~=D@Cj2IpliUZ*d^p8LIPquEl$zbp$+ z)-ElFhA^wtlrZNjn6$W8TKs_SyCb>f^JB*jo%=uaHIE;44O3tTa*|`rC5xEzU%elE z_mIyD%;#1|Z}v)zLZ{GNe^;_2>iDM_yC<${0ar)jDY9Vr>eb~`SO&8bdfENx?JHui iXjD@B|5KWH2iSgfz(-4&ta@Kw2~d`QAy7#x8_$;e6_?yUmAAP58ug}`7?sMI@NdJjO+Fr{^7 zPH<(sT%G$$dF# zXBXm*-Fx(`TJ8`}$wK<_rwJ8RdTX_-X9(_{1cCc1|$Auqga0 zTHyi#kUy}b`yXKc!G)G`fuT?c6tThu0-ux$f`-D@nZcEuJQ0DB$~xvrNR=(L8#PZ* zx)xqM)q_#JGHQC3qwD!AXy3{HJFw*ci|jA3zq#H3auATTcn~yz2Np#J#fdV1YGaO@ zYLkiOOQT3a+4XlL25X487glXqD6FdO-KW;v_g;9@deAFRe|B@5iOi7u#g5xWC#^NP zG{jgZP@VsGoIm6JIIT_68qt5-2);2VA|YIHl%$!z(0w6QdsV#zUqV@8(s4D%bY=4;AvO zPK?nNqZH7T607ISGmkP`3+6u+*a=f2xqhj2H78SvTU!Jcm>H{vqNT4BexpeeAU(Z| z`u5neiU2e&0n{_?F<}xQU_t^Ee`LtB<5F2ES%^1Oj)*$mh;5m3{0v zS@1y#FyMq2_~(wQGfoHxB1fL%zajO->Df)1mY@w}X@<`X&$=IHd^;imN(z_}?D+M( zIx&%%Bkh1@L39ry^R#2nJ$cP``rLsQZ`rq3LX!7>I^cVr6;Fu8^r?0pW|s5usa2;v zZg`ZxOO%!GC0@Avam{LKfF~`$nB?ac80T=kC87YOVe?aO(vu>E#nFItO#+AR`XFZ+ zzMMQ8lSxXWYNzr9j08qjO71V6F1i<;!$l=6ry4m;*oyF-(Rw{urqar8_Fi@>lF$Fq z@HQUjPs)>dGy7;nD2v7)@2aG34KN>L<_SwQU3tSkd(_t*Job3Uui|88FdI0|gxz)9 z%@S=dO>dNcOz|>DI{K$f&2sv4XC*-E)%IFpO39AjRV-OXg+5*>5?~ACrU4{b*j(;E zNkVRlIKwXM^mnN=r@(^sdG8c^G`w<3QzNs-%_ST4V zt$c9(O@MJd!FZsGo>f63!1~R)vrenxEAvH$%org%ra{}m3=2L|6?DF4;99e|%K(zZ zj)(9_qZK^+b8TGNLEV7z{$pb-<|%eOh_~Zs52(L|f?hL?K2d|1gC{y{NHZt`OC_W6 z{@O$48ES4-du;JyYz{z=_Jwy&aCFq&rL1u9({hm9c)!Qbp^3h zcQO8xxMU#hD;C!mgJp5v%fC7;#K(si!`f@C6&##P6j(`xdp-9RXz`C`aIZRTrc*M7 z&mVUvIg6#GAr;IwI3}lI?R+`)&5DDXzj-ZSLsQ*8k42B)?k_9@TyKZxJv7dZzD0Ug z`+i8aaXKDY)K8iwe;f+&zUudyfwRlhYs@XxwRwXYQT)XeFEf#__Vl(!enwA2gHOZD zz=#eM-ZJ%Dcc#U-oew%6j>pYAw=S=*4}gSGvW*9Kl8&c52(i1HaHV6Egy0Rgu(^e* zty(qHckk(ti%+Q{&PaeH?afyNjGLjWJh!U=EApm1D)x;@cYe@k@?jYI{6c1BoT*^# z>kJjpY(RR``kO+$4;lMvSUI@pf#+-|v!q9qIZU$`lYe(3Z|iGvDt}fnNx2nybZPYA zt@+*km`IW`w>w$HyfhPiL#_YL*UdiQLm2lAVf2(^H!gXM?E5+{w)E^C8(-ancPa+b zzCv@7k41*qIh}ys-I*${b#pI$QW2*%2~1auHwn8Y z)baPW84jJkjQ03^A*-uVb7;$)S0nlAms`~#M{9R}8W3-|HC;hq7^Q24cK!aZ$`ZZ8 zKt~03*tmw;4eo*co2=YYUlh0#?F~&RK?90&>=R5ip%ZrvW!u$V8TGeypT%+(FF2^$ zW_4gP;y7oUu%$u|_ix(tV|TUG*C!mhB&wMajN8co=`GqSb-c4@w6Bv>FD}h>5#$)} zz9~GWREZ3VoVKg%0{ufUhpjGsCqkR52rX}>?2P!>4->TZXp5zdyzQ+s@o-b>#I@O? zrQF2o&NP6_6}pYY_}h-VxQLhA?%;KV)mb}xEaO!p%fs^W3aaD`?zmLbt Kh^$CaGWc(?K((I$ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9e90ebc333e03df398e0532355d1929d8f65dfe2 GIT binary patch literal 13700 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 S*69J?&RY4OMOtX@+y4Srw`~&u literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cebbe36f91da3206968afd9c68193fa88f30052b GIT binary patch literal 4882 zcmd6rd012Dw#GMs7B->+K@1ehdMMVd5|zOT zqlAs8RZ$V8;83ZxIdQ;B8#(I1`Lv0xu|iv;a$8ZacddQzb8qi?p7Xzdq-#B@U+yV`2@i-z^mKE39jgdEgcJQPO=%I83gfp-LThr@4@!~ zN$PwNL1@DWqKYDjA-Giam>|k{1o0%7AOw1X7_BsP&5H+twQ_b!55+VFCp%a-5t9)aV8 z4Q_$MszU4YZ0(Lg?6_H}-5x*ITfN$;ubj`hIu95M!9)3SV@R=#c> zbo!5R(T3)fi<|Aq>%P~z3_PpsckqpTc4WwAU-mkz@}~Cv_I=wg_yp2I$ImuTNsM2A zwZKJ2X;`Da^EA8IohI#_Xz;L-nY?U%@J057;>*fe)ttG#$1L02#rx~`GN3~z1MX~d zM1jl-$~?OL>^dYZ>qbK3VR&j-`SFw@I= z4J($kEwGX~p@uy=&eL$qI$FaTP1?$=WPG6E3|y*GmV!6ibhb&u@(46!SxFb$2rIdj zZT`zews)A}m5vjh&ad+jFR54hbLjRlmiWyYQzG>|9!&0L705#VH4e>-vxLu#&s%BA zs@0edP@Um+iX>$fR&u9@S#XgZ7GxN#=FCat_j`)B z*sMtmHN}m#Q?8UM!Afo*v#ajqV&K`{^!*n*rPWe%6I~8IHNsJFn=2yTHgDpQM*s0;v&hCV| z->kRVQiRv2owFV(ry|lK) zZ6hOoktVIXt4*p^CJy_)JGPCZ&i_I!Sm=Cr+yJ$Vzuw<%HzW-4=0feqmv~rp{03}* zcEjkQC?N`>-%>u5PF=4~1prD16*>5Cji3W?b%_ z2f~=-SP*i3n=oU$8Z$0mpMiqtIV_AvUq(4egm*_j7R%0yo(&6oxM~+zXZ3}^PHbyq zfMtUSoWF{|`wJ29orFMECIZh7BTz6u6o79JCPIQH2!g;5~Z&jEMR0eCEk4{u|lMj`?C4^1NQRlSOVO?2?@!fn?K%tGNvD+;rZqcHiS z7%1`7AVd7xmwIr0@d!8Khb|7fvi+f9htiL*m)q9mAmldU?W}5B4oh@6{gF>|(*0A* z9eBI;*lWZF!e_$7H=^subaWkQMOSwzx?o8tC}yJ2BtjuJrT~P>_Bg=Zw_iP^ zWQBA>iEoNw*Sgf;TXL@!KX)txckZ%jAR3RZmBE%r`&|L|2ZCKtvQNbW{@5cW0zD*J zLt7vbZyU&qRxd^2f)0iES|AZ`GzbOdS`hTv>mh>I8HDokjU7I#Zw*~pa&`QhOT+tZ zc3U5N#}-)pk^ZfHj<_92?I79MPS`-1Rftn;PYq%f{PHi{ErC$Y&)6-z?cOW5cu>E0`WBn6z*dHbv;;T zT~9_+3f_QRuLro$NHs2WR_{U(9P#ApyGZNe|L(9tqp-|Bd9iFu3otyMxNZdbj_PEK= z{mJND)Z|w{>oxC3bax(fFC6EHmAyBaVY!3DX(+R5Tmk?$qh|ncSiS{-xz|DvXpqA* zB=lor^J5R;6Y-O%0f6*IOxP8j2fzgRRRqij5ZEQh1Rpjgcpkz8TVp&}4JAWhQXYQ~ z>KXSo;7;4JLQs(IMWJ>h3O)@O(H(&iwM#L=w-Xn^U&%a!-!nJ)gcNTy-i=A@;8>g zEt;PD9yiFk;g6k~XU6eXZW~AV^*^^(pLkeq@BHJ~pjTDoxtHTxG^}FvTPqxvi=X~+ zv`fRful%_`)k-QaslI>cC9aa?ykecxuyU0BduCe6r&k)9bGC4d)3ZNrolFxaq@~XS zX=3}=({^ZBJ@-`EadxMM)4x|5tYmoqm6~mr*h{YeeVTDAr`<5czbTM5&NpixK~xX_ zd0q*4ECVf2jrWyjowK(%chx}}iW*O*Ge`Zj-ON#+J;@J``e6%#@u)xNz#=^A>yy62 z0fM*wE)EB|$_Nuo9!BF*2Apw<0UcK{;QKdbA~7bF%UIo~GaiQ*-dI&|OM>F#B`26c zWWjW10vR#r&xlhJ8S%;lMq~#w z%#vQ<%1lDvGN5ZC1A0v@LU2O;+xHFsI%%P3RrV1Ez z#4a}2`}hFEy=uKtLGbS|># zFbBDtyI>9qFbwKAZW;W0?&2|eZ-W1Hr?*8YZAbes>Vv>tOK(LSl*wvs0TW z6|`C7V!I7zRPN%#seD@?Jy)kRC&&MlWibGdXNu$4sZS`?a+rf$Z1-Uf zayP%!aSU_#w*qKokR=BOzcfk}0TYnB8Kybk5JQotxT-0k`s?o2VJGUcM>;;fb5P^T zF%GYL2#1Gp_v_$zRs151Hj#^8kNk0k)w#dh2Rx4gW3jY6U3mP*T2ay9dPvNTUs zA(z0OluFfHNq%XByhQeY7bT@!tf1mXMn>Z+HkLnSGIV?5b;oWWNYS literal 0 HcmV?d00001 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 a98bccd5392376267046559fce7aef734f1343bc..ed4c62d55343d335243be68a183cb6c465498908 100644 GIT binary patch literal 5446 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 literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^>LAR)1|)kH2buyY&H|6fVg?4jBOuH;Rhv&5D9B#o z>FdgVkB5<8Osr~;lmb}DHKN3^v?L?Hh+*ZrGaf)8o)VytOKNd)QD#9&W_})nFsGt2 zP@D@S?wnsxS(KTcQNpl>|BMw-ln*Rgl$r=qs!)=do62DNou3mZ!wHfJ&QB{TPb^Ah zh%NXJQqB!FJhM1CClRQ$h++GIE&V`Y4v=toVo_dZUOK}8>1XXgF?NXl(xT*4hOhsd zU&E9+=jZ08=9MsfJ2P!RP>coeQ_n@v1$T+w3HtDUoU{pY)3*k=TVS+eFQ1Jd-Kcl;=+U-k90q&u(u m>e^zl7cy+kOMEkZVMVV`)i7ei6gUb!R+)LOdlvA(zzRc{F$nOKm)t}Zp|9R@xU-!517aUgo o+2F($^v>~=!zo)2NhEmpn6rpWr{9^`K&u!$UHx3vIVCg!0F0oCVE_OC 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 35f8a3467a8967acd23a12e8625933ac1f37971f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^>LAR)1|)kH2buyY&H|6fVg?4jBOuH;Rhv&5D9B#o z>FdgVkB5<8LVHhm^?tCBYeb1-X-P(Y5yQ%LXFPyHJS9LOm(=3qqRfJl%=|nCVNOM5 zpg0#u+&RCXvM4h>ql94%{~0TwC?8m~C^ZqJRG}m@H-L1 z5L@scq?{XUcxG{OP9jig5ySQaTl#^*93bKF#G<^+ymW>G($Cs~V(bw8rA5i93}62@ zzlJGu&d<$F%`0K}c4ivL2W%i^A(=F}lBbJfNJQ(~YX>mdKI;Vst0K}Jwf&c&j 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 f7deef3bf2e5e557f4886415ac451ae8f14e2aec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^8bGYh!3HF2S8(kBQk(@Ik;M!Qd`Cc-ajG_-G*FPe z#M9T6{T>e^zl4FA(WYRqkZVMVV`)i7ei6gUb!R+)LOdlvA(zzRE{-7)t#7X#Ar2P;8UQYckrIiJ3{#=to0Q zQCx~3Y9)doB8U_#R7G2jrQ(NC5d^iaMXU=3^-o37H$kupLW#c_xSV-+pL2Pa*;D7P zolrEZ2mmHH9rgwQ^-Ut7v09?JOKF1yw1FyD6+m~#_;21Z7VCH@|zq)=h-0N#}KUH~#syFUkICalJL^tPPUFu|Esjcxt zvS`6E(+5rJvgtuo4W^C^K=b=zUH<{qR07xYFbWEW(ibzzxO03GueT0IY%1aH^C(yX zT^a4AQy0HHai4hAT>`0nB^vufdTD!!W?mjfLqTu4Lt*gRV^xmhP{KYA-1#=>hNj_k z&v8hlSsNr~+6s1`V-s3ifg=y2px{5)fAJ_8f9_6f_-bvtFfC}6_|lZV@Am7cTAyD} zIqc*id{rb2et$MG_nExda;H})1xgyuUW@!@%3&QRzdTe{O6BLBQ#w~P?(QVhm@n6? zll@*9Gi(?W03$_P^%SkAtRBk57-`0AUPM(e6y@E7uKp3gi+-*-{_lXvnj>lwuuQ2S ziOq7%8^(YlQW&*}thWVmyf=V}aO@T&1&I;)MHV>~tt+e5mm|ape%xvZ%6v;-Ph9!O z$u=xS0}LzjJQifo)nWmMN$Y-{FRpX4qDvG711IXJTeln}pjfHz2}XDy!`MYOq69Ha z9jPJ#efq~0^p{Vz0fup4E)bNV%xGS@bGCu_%ovg9m(NLnW-YgvDD(FIwlr~>G9u3^ZW|ejvBFw?w)fCx zV)TtLu5NHbGuMI{giuiAF^a`vVNsNkfMXITXU_)gmEs&rI1#XnSihj>_`q)^DDMb>|u91BeR%7(OhGr<%9*ek*11zEXE7z@4)x-#tbun>c5k8{lv*K;$^U zSE`D<0|+qy@Am`X^8guvOFgy4)DY*bs&oKcKb>u%Qc}R#tWeI!D6Rd`7=0wFE_X%Z zgdu6k>KyOIO??2yA1+5}!=cfSBUft6Yt!M$xAOF?3%M&^q(?e3k~`wtN;X`}CFAU} z#=h{wVf*Tvqg>V$hHdv|_DmkpjM2ER&M_n0ShMaN36!)yFf=D5@|lam!tKF8@o-3s zkH*~_Gth;Y?-%V44$bs^JOjJNCyJ-Sqk9dvqf>%rh;Ck-`+u_g&)78O<$5}|FVpj# zKE?ZS%cP|5PyayQ(DUi!h;iSJ-V|tJi%f&#k^Eyzx|c0~Y*`c*bPw>PG_6%a{^yy* zldDpDy05lvq@&GID|V^8M7>%b01kPe<-{(QM$VsCL{c+kf;II$*~8 literal 0 HcmV?d00001 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 dd60b123b496c8ed615ef4cbb5880c653e542f2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60242 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 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 0000000000000000000000000000000000000000..6b0f7933b2f5cc6a1ca4fff17c58a7b4d737bc5d GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{b+9I14-?iy0XBj({-ZRBb+KpdfpR zr>`sfV>SssGl3g-p1OmDTq8;xOG`5Hix^g}JL3Tq;wb?Nxug~+7iAWdWaj5F2y-eb z1I4*O;?DU6l|`B986^yB_|I4YMft#@MX8A(r3xjPxv31M-}yO#GMpfp;QX|b^2DN4 zhS-AtAm!X(!!wJMa}t3{ix{>a*wPOa<^TzYCl=*p=A|iB1I5@t%0eEP{Eij-JhAL-PD`#l(nZmLUMzl*|X!<)Qldm#LnD)?@^-q?%6Su zR5(pE{^v57HWsM|ykj{v*I}oyMmf{dbqqXWE_u2XcZ z{oi%8Xzt6eSITDPFTB+=ujEyI;+G=Z!sWbEN?z&z6J7na?N7_KRiZrXwi0b01>czp znQ*-OP^SLrYl`_Ri7&|pR$nFe&Z$CjoZo^wwv3)D{I<&!Rm=m11B0ilpUXO@geCw! CV%NL? literal 0 HcmV?d00001 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"> - - - - - - -