Showing preview only (1,804K chars total). Download the full file or copy to clipboard to get everything.
Repository: zhitom/zkweb
Branch: master
Commit: bec4debb84b0
Files: 377
Total size: 56.1 MB
Directory structure:
gitextract_lledtbfp/
├── .gitignore
├── README.md
├── pom-jar.xml
├── pom-tomcat.xml
├── pom.xml
├── src/
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── yasenagat/
│ │ │ └── zkweb/
│ │ │ ├── ZkWebSpringBootApplication.java
│ │ │ ├── model/
│ │ │ │ ├── Tree.java
│ │ │ │ ├── TreeNode.java
│ │ │ │ └── TreeRoot.java
│ │ │ ├── util/
│ │ │ │ ├── ConfigUtil.java
│ │ │ │ ├── H2Util.java
│ │ │ │ ├── ZkCache.java
│ │ │ │ ├── ZkCfgFactory.java
│ │ │ │ ├── ZkCfgManager.java
│ │ │ │ ├── ZkCfgManagerImpl.java
│ │ │ │ ├── ZkManager.java
│ │ │ │ ├── ZkManagerImpl.java
│ │ │ │ ├── ZkSpringBootConfiguration.java
│ │ │ │ └── ZkWebMvcConfigurer.java
│ │ │ └── web/
│ │ │ ├── ZkCacheServlet.java
│ │ │ ├── ZkCfgController.java
│ │ │ └── ZkController.java
│ │ ├── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── additional-spring-configuration-metadata.json
│ │ │ ├── application-local.yml
│ │ │ ├── application-zkweb.yaml
│ │ │ ├── logback-spring.xml
│ │ │ ├── logback-zkweb-1.0.9.xml
│ │ │ ├── logback-zkweb-v1.2.3.xml
│ │ │ ├── spring.bak/
│ │ │ │ ├── appServlet/
│ │ │ │ │ ├── controllers.bak.xml
│ │ │ │ │ └── servlet-context.bak.xml
│ │ │ │ └── root-context.bak.xml
│ │ │ ├── static/
│ │ │ │ ├── easyui/
│ │ │ │ │ ├── easyloader.js
│ │ │ │ │ ├── locale/
│ │ │ │ │ │ ├── easyui-lang-af.js
│ │ │ │ │ │ ├── easyui-lang-am.js
│ │ │ │ │ │ ├── easyui-lang-ar.js
│ │ │ │ │ │ ├── easyui-lang-bg.js
│ │ │ │ │ │ ├── easyui-lang-ca.js
│ │ │ │ │ │ ├── easyui-lang-cs.js
│ │ │ │ │ │ ├── easyui-lang-cz.js
│ │ │ │ │ │ ├── easyui-lang-da.js
│ │ │ │ │ │ ├── easyui-lang-de.js
│ │ │ │ │ │ ├── easyui-lang-el.js
│ │ │ │ │ │ ├── easyui-lang-en.js
│ │ │ │ │ │ ├── easyui-lang-es.js
│ │ │ │ │ │ ├── easyui-lang-fa.js
│ │ │ │ │ │ ├── easyui-lang-fr.js
│ │ │ │ │ │ ├── easyui-lang-it.js
│ │ │ │ │ │ ├── easyui-lang-jp.js
│ │ │ │ │ │ ├── easyui-lang-ko.js
│ │ │ │ │ │ ├── easyui-lang-nl.js
│ │ │ │ │ │ ├── easyui-lang-pl.js
│ │ │ │ │ │ ├── easyui-lang-pt_BR.js
│ │ │ │ │ │ ├── easyui-lang-ru.js
│ │ │ │ │ │ ├── easyui-lang-sv_SE.js
│ │ │ │ │ │ ├── easyui-lang-tr.js
│ │ │ │ │ │ ├── easyui-lang-ua.js
│ │ │ │ │ │ ├── easyui-lang-zh_CN.js
│ │ │ │ │ │ └── easyui-lang-zh_TW.js
│ │ │ │ │ ├── plugins/
│ │ │ │ │ │ ├── jquery.accordion.js
│ │ │ │ │ │ ├── jquery.calendar.js
│ │ │ │ │ │ ├── jquery.combo.js
│ │ │ │ │ │ ├── jquery.combobox.js
│ │ │ │ │ │ ├── jquery.combogrid.js
│ │ │ │ │ │ ├── jquery.combotree.js
│ │ │ │ │ │ ├── jquery.combotreegrid.js
│ │ │ │ │ │ ├── jquery.datagrid.js
│ │ │ │ │ │ ├── jquery.datalist.js
│ │ │ │ │ │ ├── jquery.datebox.js
│ │ │ │ │ │ ├── jquery.datetimebox.js
│ │ │ │ │ │ ├── jquery.datetimespinner.js
│ │ │ │ │ │ ├── jquery.dialog.js
│ │ │ │ │ │ ├── jquery.draggable.js
│ │ │ │ │ │ ├── jquery.droppable.js
│ │ │ │ │ │ ├── jquery.filebox.js
│ │ │ │ │ │ ├── jquery.form.js
│ │ │ │ │ │ ├── jquery.layout.js
│ │ │ │ │ │ ├── jquery.linkbutton.js
│ │ │ │ │ │ ├── jquery.maskedbox.js
│ │ │ │ │ │ ├── jquery.menu.js
│ │ │ │ │ │ ├── jquery.menubutton.js
│ │ │ │ │ │ ├── jquery.messager.js
│ │ │ │ │ │ ├── jquery.mobile.js
│ │ │ │ │ │ ├── jquery.numberbox.js
│ │ │ │ │ │ ├── jquery.numberspinner.js
│ │ │ │ │ │ ├── jquery.pagination.js
│ │ │ │ │ │ ├── jquery.panel.js
│ │ │ │ │ │ ├── jquery.parser.js
│ │ │ │ │ │ ├── jquery.passwordbox.js
│ │ │ │ │ │ ├── jquery.progressbar.js
│ │ │ │ │ │ ├── jquery.propertygrid.js
│ │ │ │ │ │ ├── jquery.resizable.js
│ │ │ │ │ │ ├── jquery.searchbox.js
│ │ │ │ │ │ ├── jquery.slider.js
│ │ │ │ │ │ ├── jquery.spinner.js
│ │ │ │ │ │ ├── jquery.splitbutton.js
│ │ │ │ │ │ ├── jquery.switchbutton.js
│ │ │ │ │ │ ├── jquery.tabs.js
│ │ │ │ │ │ ├── jquery.tagbox.js
│ │ │ │ │ │ ├── jquery.textbox.js
│ │ │ │ │ │ ├── jquery.timespinner.js
│ │ │ │ │ │ ├── jquery.tooltip.js
│ │ │ │ │ │ ├── jquery.tree.js
│ │ │ │ │ │ ├── jquery.treegrid.js
│ │ │ │ │ │ ├── jquery.validatebox.js
│ │ │ │ │ │ └── jquery.window.js
│ │ │ │ │ └── themes/
│ │ │ │ │ ├── angular.css
│ │ │ │ │ ├── black/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── bootstrap/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── color.css
│ │ │ │ │ ├── default/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── gray/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── icon.css
│ │ │ │ │ ├── material/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── material-teal/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── metro/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ └── mobile.css
│ │ │ │ ├── jquery.i18n.properties.js
│ │ │ │ ├── locale/
│ │ │ │ │ ├── strings.properties
│ │ │ │ │ └── strings_zh.properties
│ │ │ │ ├── web.language.js
│ │ │ │ ├── zkweb-language.js
│ │ │ │ └── zkweb.js
│ │ │ ├── templates/
│ │ │ │ ├── head.html
│ │ │ │ ├── home.html
│ │ │ │ └── info.html
│ │ │ └── zk-bak.properties
│ │ └── webapp-bak/
│ │ └── WEB-INF/
│ │ └── web-bak.xml
│ └── test/
│ └── java/
│ └── T.java
└── target/
├── Dockerfile
├── zkWeb-v1.2.1.jar
└── zkWeb-v1.2.1.war
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Compiled class file
*.class
target/*
!target/zkWeb-*.jar
!target/zkWeb-*.war
!target/Dockerfile
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
!target/*.jar
!target/*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/.classpath
/.project
/.settings/.jsdtscope
/.settings/org.eclipse.core.resources.prefs
/.settings/org.eclipse.jdt.core.prefs
/.settings/org.eclipse.m2e.core.prefs
/.settings/org.eclipse.wst.common.component
/.settings/org.eclipse.wst.common.project.facet.core.xml
/.settings/org.eclipse.wst.jsdt.ui.superType.container
/.settings/org.eclipse.wst.jsdt.ui.superType.name
/.settings/org.eclipse.wst.validation.prefs
/.factorypath
/.settings/org.eclipse.jdt.apt.core.prefs
/.settings/org.eclipse.jst.j2ee.ejb.annotations.xdoclet.prefs
/.settings/org.springframework.ide.eclipse.beans.core.prefs
/.settings/org.springframework.ide.eclipse.core.prefs
/.springBeans
/.apt_generated_tests/
================================================
FILE: README.md
================================================
## zkWeb-en
zkWeb is zookeeper web to manager and monitor zookeeper cluster with builtin H2 database.This is based on TaoBao God(yasenagat)'s zkWeb code,and have a big upgrade and modification,It can run as two methods:
1. put <war-file> to tomcat and execute it!
2. java -jar <jar-file> to execute it!
### old zkWeb code address
yasenagat-zkweb svn: [http://code.taobao.org/svn/zkweb/](http://code.taobao.org/svn/zkweb/ "yasenagat-zkweb")
### Major Modification
- Upgrade depend jars include spring\zookeeper ...
- Upgrade easyui to EasyUI for jQuery 1.5.5.4、jQuery v1.12.4
- Optimize page layout,such as: multi-tabs switch,one zk to one tab;add filter within cfg pages.
- Support High version of Tomcat,and tested ok with tomcat 9
- Add zookeeper cluster's state-monitor function,and use four-word cmd to get state infomation
- Add zookeeper loop-check connect state
- Front-end web add i18n Internationalization plugin,Support english and zh_CN,and server-end data don't added this.
- Upgrade to use spring boot 2
- Add favicon.ico
- jsp -> Thymeleaf
## zkWeb-zh_CN
zookeeper web管理和监控界面,使用内置的H2数据库,此版本基于淘宝大神yasenagat的zkWeb源码基础之上进行了大幅升级和修改,有两种运行方式:
1. 直接将war包放入tomcat即可运行!
2. 直接运行: java -jar <jar-file>
### 旧zkWeb源码地址
yasenagat-zkweb svn: [http://code.taobao.org/svn/zkweb/](http://code.taobao.org/svn/zkweb/ "yasenagat-zkweb")
### 重大修改点
- 升级依赖的第三方库,包括spring、zookeeper等
- 升级easyui到EasyUI for jQuery 1.5.5.4、jQuery v1.12.4
- 优化页面布局,如:支持多TAB切换,一个zk连接一个TAB标签;在配置界面增加过滤器;
- 支持tomcat高版本,目前在tomcat9测试通过
- 增加zk集群状态的监控功能,使用了四字命令获取监控信息
- 增加zk集群自动检测连接状态功能
- 前端web增加i18n国际化插件,支持界面英文展示,注:服务端数据未支持国际化。
- 使用spring boot 2升级改造,可以不依赖tomcat
- 增加了浏览器图标favicon.ico
- jsp -> Thymeleaf
### screen snapshot
connected: [https://user-images.githubusercontent.com/2204457/41921088-a39f7856-7994-11e8-8620-90cd81dc33ce.png](https://user-images.githubusercontent.com/2204457/41921088-a39f7856-7994-11e8-8620-90cd81dc33ce.png "connected")
disconnected: [https://user-images.githubusercontent.com/2204457/41921099-a9d53620-7994-11e8-868c-1da341334184.png](https://user-images.githubusercontent.com/2204457/41921099-a9d53620-7994-11e8-868c-1da341334184.png "disconnected")
## spring boot修改备注
- 打jar包,webapp/resources无法访问,需修改代码addResourceHandlers:
- `registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/",
"classpath:/META-INF/resources/webapp/resources/");`
- 打war包,webapp/resources被默认打包到根目录下导致无法访问,需要打包到WEB-INF/classes/resources
- 改造为使用Thymeleaf模版后,目前已经将webapp目录移除了
- pom-jar.xml for jar,pom-tomcat.xml for tomcat
## docker一键启动命令
```
docker run -p 8099:8099 --name zkweb -d peterpoker/zkweb:v1.2.1
```
## docker 打包
参考src下的Dockerfile文件中的使用说明
## TODO
- 使用curator代替原生zk
================================================
FILE: pom-jar.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yasenagat.zkweb</groupId>
<artifactId>zkWeb</artifactId>
<packaging>jar</packaging>
<version>v1.2.1</version>
<name>zkWeb</name>
<url>https://github.com/zhitom/zkweb</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java-version>1.8</java-version>
<org.springframework-version>5.0.5.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.1</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
<jackson.version>2.9.6</jackson.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- <plugin> -->
<!-- <artifactId>maven-war-plugin</artifactId> -->
<!-- <version>3.2.2</version> -->
<!-- <configuration> -->
<!-- </configuration> -->
<!-- </plugin> -->
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!--打包Dockerfile-->
<resource>
<!-- 设定主资源目录 -->
<directory>${basedir}/src/main/docker</directory>
<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,只处理如下配置中包含的资源类型 -->
<includes>
<include>*</include>
</includes>
<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,指定处理后的资源文件输出目录,默认是${build.outputDirectory}指定的目录 -->
<targetPath>${project.build.directory}</targetPath>
<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,是否对主资源目录开启资源过滤 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starters</artifactId>
<version>2.0.2.RELEASE</version> <type>pom</type> </dependency> -->
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-data-jpa</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework</groupId> -->
<!-- <artifactId>spring-webflux</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.data</groupId> -->
<!-- <artifactId>spring-data-couchbase</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.hateoas</groupId> -->
<!-- <artifactId>spring-hateoas</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.apache.tomcat</groupId> -->
<!-- <artifactId>tomcat-annotations-api</artifactId> -->
<!-- </dependency> -->
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<!-- <scope>runtime</scope> -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jr</groupId>
<artifactId>jackson-jr-all</artifactId>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency> -->
<!-- Zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<!-- <scope>runtime</scope> -->
<!-- <version>1.4.197</version> -->
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: pom-tomcat.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yasenagat.zkweb</groupId>
<artifactId>zkWeb</artifactId>
<packaging>war</packaging>
<version>v1.2.1</version>
<name>zkWeb</name>
<url>https://github.com/zhitom/zkweb</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java-version>1.8</java-version>
<org.springframework-version>5.0.5.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.1</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
<jackson.version>2.9.6</jackson.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<!-- <configuration> -->
<!-- 从target打成war包时的过滤,基准目录是target/zkWeb-v1.1 下面已经过滤了,这里无需再次过滤 -->
<!-- <packagingExcludes>resources/**</packagingExcludes> -->
<!-- 从target打成war包时的过滤 ,基准目录是${basedir}/src/main/webapp -->
<!-- <warSourceExcludes>resources/**</warSourceExcludes> -->
<!-- <webResources> -->
<!-- <resource> -->
<!-- <directory>src/main/resources/config/${package.environment}</directory> -->
<!-- <targetPath>WEB-INF/classes/config</targetPath> -->
<!-- <filtering>true</filtering> -->
<!-- </resource> -->
<!-- <resource> -->
<!-- <directory>${basedir}/src/main/webapp/resources</directory> -->
<!-- 注意此次必须要放在此目录下才能被访问到jsp -->
<!-- <targetPath>WEB-INF/classes/resources/</targetPath> -->
<!-- <includes> -->
<!-- <include>**/**</include> -->
<!-- </includes> -->
<!-- </resource> -->
<!-- </webResources> -->
<!-- </configuration> -->
</plugin>
</plugins>
</build>
<dependencies>
<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starters</artifactId>
<version>2.0.2.RELEASE</version> <type>pom</type> </dependency> -->
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-data-jpa</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework</groupId> -->
<!-- <artifactId>spring-webflux</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.data</groupId> -->
<!-- <artifactId>spring-data-couchbase</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.hateoas</groupId> -->
<!-- <artifactId>spring-hateoas</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.apache.tomcat</groupId> -->
<!-- <artifactId>tomcat-annotations-api</artifactId> -->
<!-- </dependency> -->
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<!-- <scope>runtime</scope> -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jr</groupId>
<artifactId>jackson-jr-all</artifactId>
</dependency>
<!-- servlet -->
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency> -->
<!-- JSP依赖 -->
<!-- <dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency> -->
<!-- Zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<!-- <scope>runtime</scope> -->
<!-- <version>1.4.197</version> -->
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yasenagat.zkweb</groupId>
<artifactId>zkWeb</artifactId>
<packaging>jar</packaging>
<version>v1.2.1</version>
<name>zkWeb</name>
<url>https://github.com/zhitom/zkweb</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java-version>1.8</java-version>
<org.springframework-version>5.0.5.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.1</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
<jackson.version>2.9.6</jackson.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- <plugin> -->
<!-- <artifactId>maven-war-plugin</artifactId> -->
<!-- <version>3.2.2</version> -->
<!-- <configuration> -->
<!-- </configuration> -->
<!-- </plugin> -->
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!--打包Dockerfile-->
<resource>
<!-- 设定主资源目录 -->
<directory>${basedir}/src/main/docker</directory>
<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,只处理如下配置中包含的资源类型 -->
<includes>
<include>*</include>
</includes>
<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,指定处理后的资源文件输出目录,默认是${build.outputDirectory}指定的目录 -->
<targetPath>${project.build.directory}</targetPath>
<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,是否对主资源目录开启资源过滤 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starters</artifactId>
<version>2.0.2.RELEASE</version> <type>pom</type> </dependency> -->
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-data-jpa</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework</groupId> -->
<!-- <artifactId>spring-webflux</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.data</groupId> -->
<!-- <artifactId>spring-data-couchbase</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.hateoas</groupId> -->
<!-- <artifactId>spring-hateoas</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.apache.tomcat</groupId> -->
<!-- <artifactId>tomcat-annotations-api</artifactId> -->
<!-- </dependency> -->
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<!-- <scope>runtime</scope> -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jr</groupId>
<artifactId>jackson-jr-all</artifactId>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency> -->
<!-- Zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<!-- <scope>runtime</scope> -->
<!-- <version>1.4.197</version> -->
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: src/main/docker/Dockerfile
================================================
#############################################################################
# zkweb
#
# 容器构建镜像
# 1. 使用命令将dockerfile和maven打包好的jar包放在target目录下:
# $ mvn clean package -f pom-jar.xml
#
# 2. 在target目录下运行命令构建镜像:
# $ docker build -t zkweb:v1.2.1 .
#
# 容器启动
# 1. 命令: docker run -p 8099:8099 --name zkweb -d zkweb:v1.2.1
#
#
#############################################################################
# java镜像
FROM daocloud.io/java:8
# 将本地文件夹挂载到当前容器
# 创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录。
VOLUME ["/tmp"]
# 解决容器时间和宿主主机时间不一致问题
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 拷贝文件到容器
COPY zkWeb-v1.2.1.jar /opt/app.jar
# 打开服务端口
EXPOSE 8099 8099
# 配置环境变量 todo jvm优化参数可以设置这里
#ENV JAVA_OPTS='-Xmx4096m -Xms4096m ' APP_OPTS=''
# 配置容器启动后执行的命令
ENTRYPOINT java $JAVA_OPTS -server -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN -Djava.security.egd=file:/dev/./urandom -jar /opt/app.jar $APP_OPTS
================================================
FILE: src/main/java/com/yasenagat/zkweb/ZkWebSpringBootApplication.java
================================================
package com.yasenagat.zkweb;
/**
*
*/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
/**
* @author Shandy
*
*/
//@SpringBootApplication(exclude = {WebFluxAutoConfiguration.class,ReactorCoreAutoConfiguration.class})
@SpringBootApplication
@ComponentScan
@ServletComponentScan
//SpringBootServletInitializer for war打包方式
public class ZkWebSpringBootApplication extends SpringBootServletInitializer{
private final static Logger logger = LoggerFactory.getLogger(ZkWebSpringBootApplication.class);
public final static String applicationYamlFileName="application-zkweb.yaml";
// @Bean(name = "sessionProperties")
// @Qualifier(value = "sessionProperties")
// public SessionProperties sessionProperties(){
// return new SessionProperties(null);
// }
// @Override
// protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
// return application.sources(SpringBootApplication.class);
// }
//for war打包方式
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
String file=ZkWebSpringBootApplication.class.getClassLoader().getResource(applicationYamlFileName).getFile();
logger.info("applicationYamlFileName({})={}",applicationYamlFileName,file);
application.properties("spring.config.location=classpath:/"+applicationYamlFileName);
return application.sources(ZkWebSpringBootApplication.class);
}
public static void main(String[] args) {
//System.setProperty("spring.config.location", "classpath*:/application-zkweb.yaml");
//SpringApplication.run(ZkWebSpringBootApplication.class, args);
String file=ZkWebSpringBootApplication.class.getClassLoader().getResource(applicationYamlFileName).getFile();
logger.info("applicationYamlFileName({})={}",applicationYamlFileName,file);
new SpringApplicationBuilder(ZkWebSpringBootApplication.class).
properties("spring.config.location=classpath:/"+applicationYamlFileName).run(args);
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/model/Tree.java
================================================
package com.yasenagat.zkweb.model;
import java.util.List;
import java.util.Map;
public class Tree {
private int id;
private String text;
//state: node state, 'open' or 'closed', default is 'open'. When set to 'closed', the node have children nodes and will load them from remote site
private String state;
public static final String STATE_OPENNED = "open";
public static final String STATE_CLOSED = "closed";
private List<Tree> childern;
//checked: Indicate whether the node is checked selected.
private Boolean checked;
//attributes: custom attributes can be added to a node
private Map<String, Object> attributes;
public Tree() {
// TODO Auto-generated constructor stub
}
public Tree(int id, String text, String state, List<Tree> childern,
Map<String, Object> attributes) {
super();
this.id = id;
this.text = text;
this.state = state;
this.childern = childern;
this.attributes = attributes;
}
public Tree(int id, String text, String state, List<Tree> childern) {
super();
this.id = id;
this.text = text;
this.state = state;
this.childern = childern;
}
public Tree(int id, String text, String state, List<Tree> childern,
boolean checked, Map<String, Object> attributes) {
super();
this.id = id;
this.text = text;
this.state = state;
this.childern = childern;
this.checked = checked;
this.attributes = attributes;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public List<Tree> getChildern() {
return childern;
}
public void setChildern(List<Tree> childern) {
this.childern = childern;
}
public Boolean getChecked() {
return checked;
}
public void setChecked(Boolean checked) {
this.checked = checked;
}
public Map<String, Object> getAttributes() {
return attributes;
}
public void setAttributes(Map<String, Object> attributes) {
this.attributes = attributes;
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/model/TreeNode.java
================================================
package com.yasenagat.zkweb.model;
public class TreeNode {
private int id;
private String name;
private int pid = -1;
private int folder = 1;
private boolean expanded;
private boolean isLeaf;
private String type;
private String url;
private int size;
private String path;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public int getFolder() {
return folder;
}
public void setFolder(int folder) {
this.folder = folder;
}
public boolean isExpanded() {
return expanded;
}
public void setExpanded(boolean expanded) {
this.expanded = expanded;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public boolean getIsLeaf() {
return isLeaf;
}
public void setLeaf(boolean isLeaf) {
this.isLeaf = isLeaf;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/model/TreeRoot.java
================================================
package com.yasenagat.zkweb.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TreeRoot extends ArrayList<Tree>{
private static final long serialVersionUID = -8094096973144418349L;
Map<String, Object> atr = new HashMap<String, Object>();
private Tree root = new Tree(0,"/",Tree.STATE_CLOSED,null,atr);
public TreeRoot() {
atr.put("path", "/");
this.add(root);
}
public void setChildern(List<Tree> childern){
this.root.setChildern(childern);
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ConfigUtil.java
================================================
package com.yasenagat.zkweb.util;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigUtil {
private static Properties p = new Properties();
static {
try {
p.load(findOtherPathInputStream("zk.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static Properties getP() {
return p;
}
public static void setP(Properties p) {
ConfigUtil.p = p;
}
public static String getConfigMessage(String key) {
if (key != null && key.trim().length() > 0) {
return p.getProperty(key);
}
return null;
}
private static InputStream findOtherPathInputStream(String propFile) {
InputStream inputStream = ConfigUtil.class.getClassLoader()
.getResourceAsStream(propFile);
if (inputStream != null)
return inputStream;
java.io.File f = null;
String curDir = System.getProperty("user.dir");
f = new java.io.File(curDir, propFile);
if (f.exists())
try {
return new java.io.FileInputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String classpath = System.getProperty("java.class.path");
String[] cps = classpath.split(System.getProperty("path.separator"));
for (int i = 0; i < cps.length; i++) {
f = new java.io.File(cps[i], propFile);
if (f.exists())
break;
f = null;
}
if (f != null)
try {
return new java.io.FileInputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/H2Util.java
================================================
package com.yasenagat.zkweb.util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.dbutils.ResultSetHandler;
import org.springframework.beans.factory.annotation.Autowired;
public class H2Util {
//private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
@Autowired
private static DataSource dataSource;
public static DataSource getDataSource(){
return dataSource;
}
public static void destroyDataSource() {
// if(dataSource!=null)
// dataSource.close();
}
public static ResultSetHandler<Object[]> objectHandler = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};
public static ResultSetHandler<Map<String, Object>> mapHandler = new ResultSetHandler<Map<String,Object>>() {
public Map<String, Object> handle(ResultSet rs) throws SQLException {
Map<String, Object> map = new HashMap<String, Object>();
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
for(int i = 0 ; i < cols ;i++){
map.put(meta.getColumnName(i+1), rs.getObject(i+1));
}
return map;
}
};
public static ResultSetHandler<Integer> intHandler = new ResultSetHandler<Integer>() {
public Integer handle(ResultSet rs) throws SQLException {
return rs.getInt(1);
}
};
public static ResultSetHandler<List<Map<String, Object>>> ListHandler = new ResultSetHandler<List<Map<String, Object>>>() {
public List<Map<String, Object>> handle(ResultSet rs)
throws SQLException {
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
ResultSetMetaData meta = rs.getMetaData();
Map<String, Object> map = null;
int cols = meta.getColumnCount();
while(rs.next()){
map = new HashMap<String, Object>();
for(int i = 0 ; i < cols ;i++){
map.put(meta.getColumnName(i+1), rs.getObject(i+1));
}
list.add(map);
}
return list;
}
};
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCache.java
================================================
package com.yasenagat.zkweb.util;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ZkCache {
private static final Logger log = LoggerFactory.getLogger(ZkCache.class);
private static Map<String, ZkManager> _cache = new ConcurrentHashMap<String, ZkManager>();
public static ZkManager put(String key,ZkManager zk){
return _cache.put(key, zk);
}
public static ZkManager get(String key){
return _cache.get(key);
}
public static ZkManager remove(String key){
return _cache.remove(key);
}
public static int size(){
return _cache.size();
}
public static Map<String, ZkManager> get_cache() {
return _cache;
}
public static void set_cache(Map<String, ZkManager> _cache) {
ZkCache._cache = _cache;
}
public static void init(ZkCfgManager cfgManager){
List<Map<String, Object>> list = cfgManager.query();
log.info("zk info size={}",list.size());
ZkManager zkManager;
for(Map<String , Object> m : list){
zkManager=ZkCache.get(m.get("ID").toString());
if(zkManager==null) {
log.info("zk info: id={},connectstr={},timeout={}",m.get("ID"),m.get("CONNECTSTR"),m.get("SESSIONTIMEOUT"));
ZkCache.put(m.get("ID").toString(), ZkManagerImpl.createZk().connect(m.get("CONNECTSTR").toString(), Integer.parseInt(m.get("SESSIONTIMEOUT").toString())));
}else {
log.info("zk(exists) info: id={},connectstr={},timeout={}",m.get("ID"),m.get("CONNECTSTR"),m.get("SESSIONTIMEOUT"));
zkManager.reconnect();
}
}
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCfgFactory.java
================================================
package com.yasenagat.zkweb.util;
public class ZkCfgFactory {
private static ZkCfgManager _instance = new ZkCfgManagerImpl();
public static ZkCfgManager createZkCfgManager(){
return _instance;
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCfgManager.java
================================================
package com.yasenagat.zkweb.util;
import java.util.List;
import java.util.Map;
public interface ZkCfgManager {
public boolean add(String desc,String connectStr,String sessionTimeOut);
public boolean add(String id,String desc,String connectStr,String sessionTimeOut);
public List<Map<String, Object>> query(int page, int rows, String whereSql);
public boolean update(String id,String desc,String connectStr,String sessionTimeOut);
public boolean delete(String id);
public Map<String, Object> findById(String id);
public int count();
static String initSql = "CREATE TABLE IF NOT EXISTS ZK(ID VARCHAR PRIMARY KEY, DESC VARCHAR, CONNECTSTR VARCHAR, SESSIONTIMEOUT VARCHAR)";
//static String initSql = "drop table ZK";
public void destroyPool();
public List<Map<String, Object>> query();
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCfgManagerImpl.java
================================================
package com.yasenagat.zkweb.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ZkCfgManagerImpl implements InitializingBean,ZkCfgManager {
private static Logger log = LoggerFactory.getLogger(ZkCfgManagerImpl.class);
// jdbc:h2:tcp://localhost/~/test
@Autowired
private DataSource dataSource;
//private JdbcConnectionPool cpool = JdbcConnectionPool.create("jdbc:h2:~/zkweb","sa","sa");
// private static JdbcConnectionPool cp = JdbcConnectionPool.create("jdbc:h2:tcp://127.0.0.1/~/zkweb","sa","sa");
private static Connection conn = null;
static QueryRunner run = new QueryRunner(H2Util.getDataSource());
public ZkCfgManagerImpl() {
//cpool.setMaxConnections(20);
//cpool.setLoginTimeout(1000 * 50);
//init();
};
private Connection getConnection() throws SQLException{
if(null == conn){
conn = dataSource.getConnection();
}
return conn;
}
private void closeConn(){
if(null != conn){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
public void destroyPool() {
H2Util.destroyDataSource();
closeConn();
// if(cpool!=null) {
// cpool.dispose();
// }
}
private boolean init() {
if(isTableOk()) {
return true;
}
log.error("create table ({})...",ZkCfgManager.initSql);
PreparedStatement ps = null;
try {
ps = getConnection().prepareStatement(ZkCfgManager.initSql);
int ret=ps.executeUpdate();
if(ret>=0) {
log.error("create table OK !ret={}",ret);
List<Map<String, Object>> result=query("");
if(result==null) {
log.error("table select check Error!");
}else {
log.error("table select check OK!");
}
return true;
}
log.error("create table error !ret={}",ret);
return false;
} catch (Exception e) {
e.printStackTrace();
log.info("init zkCfg error : {}" , e.getMessage());
log.error(e.getMessage(),e);
} finally {
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return false;
}
public boolean add(String desc, String connectStr, String sessionTimeOut) {
PreparedStatement ps = null;
try {
ps = getConnection().prepareStatement("INSERT INTO ZK VALUES(?,?,?,?)");
ps.setString(1, UUID.randomUUID().toString().replaceAll("-", ""));
ps.setString(2, desc);
ps.setString(3, connectStr);
ps.setString(4, sessionTimeOut);
return ps.executeUpdate()>0;
} catch (SQLException e) {
e.printStackTrace();
log.error("add zkCfg error : {}",e.getMessage());
log.error(e.getMessage(),e);
} finally {
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return false;
}
public List<Map<String, Object>> query() {
List<Map<String, Object>> result=query("where not(desc like 'ignore_%')");
if(result==null)
return new ArrayList<Map<String,Object>>();
return result;
}
public List<Map<String, Object>> queryAll() {
List<Map<String, Object>> result=query("");
if(result==null)
return new ArrayList<Map<String,Object>>();
return result;
}
private List<Map<String, Object>> query(String whereSql) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = getConnection().prepareStatement("SELECT * FROM ZK "+whereSql);
rs = ps.executeQuery();
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
ResultSetMetaData meta = rs.getMetaData();
Map<String, Object> map = null;
int cols = meta.getColumnCount();
while(rs.next()){
map = new HashMap<String, Object>();
for(int i = 0 ; i < cols ;i++){
map.put(meta.getColumnName(i+1), rs.getObject(i+1));
}
list.add(map);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
} finally {
if(null != rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return null;
}
public boolean update(String id, String desc, String connectStr,
String sessionTimeOut) {
PreparedStatement ps = null;
try {
ps = getConnection().prepareStatement("UPDATE ZK SET DESC=?,CONNECTSTR=?,SESSIONTIMEOUT=? WHERE ID=?;");
ps.setString(1, desc);
ps.setString(2, connectStr);
ps.setString(3, sessionTimeOut);
ps.setString(4, id);
return ps.executeUpdate()>0;
} catch (Exception e) {
e.printStackTrace();
log.error("update id={} zkCfg error : {}",new Object[]{id,e.getMessage()});
log.error(e.getMessage(),e);
} finally {
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return false;
}
public boolean delete(String id) {
PreparedStatement ps = null;
try {
ps = getConnection().prepareStatement("DELETE ZK WHERE ID=?");
ps.setString(1, id);
return ps.executeUpdate()>0;
} catch (Exception e) {
e.printStackTrace();
log.error("delete id={} zkCfg error : {}",new Object[]{id,e.getMessage()});
log.error(e.getMessage(),e);
} finally {
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return false;
}
public Map<String, Object> findById(String id) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = getConnection().prepareStatement("SELECT * FROM ZK WHERE ID = ?");
ps.setString(1, id);
rs = ps.executeQuery();
Map<String, Object> map = new HashMap<String, Object>();
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
if(rs.next()){
for(int i = 0 ; i < cols ;i++){
map.put(meta.getColumnName(i+1).toLowerCase(), rs.getObject(i+1));
}
}
return map;
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
} finally {
if(null != rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return null;
}
public List<Map<String, Object>> query(int page, int rows,String whereSql) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
log.debug("whereSq={}",whereSql);
if(whereSql==null||whereSql.isEmpty()) {
ps = getConnection().prepareStatement("SELECT * FROM ZK limit ?,?");
}else {
ps = getConnection().prepareStatement("SELECT * FROM ZK where "+whereSql+" limit ?,? ");
}
ps.setInt(1, (page-1) * rows);
ps.setInt(2, rows);
rs = ps.executeQuery();
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
// ResultSetMetaData meta = rs.getMetaData();
Map<String, Object> map = null;
// int cols = meta.getColumnCount();
while(rs.next()){
map = new HashMap<String, Object>();
for(int i = 0 ; i < rs.getMetaData().getColumnCount() ;i++){
map.put(rs.getMetaData().getColumnName(i+1), rs.getObject(i+1));
}
list.add(map);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
} finally {
if(null != rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return new ArrayList<Map<String,Object>>();
}
public boolean add(String id, String desc, String connectStr,
String sessionTimeOut) {
PreparedStatement ps = null;
try {
ps = getConnection().prepareStatement("INSERT INTO ZK VALUES(?,?,?,?);");
ps.setString(1, id);
ps.setString(2, desc);
ps.setString(3, connectStr);
ps.setString(4, sessionTimeOut);
return ps.executeUpdate()>0;
} catch (SQLException e) {
e.printStackTrace();
log.error("add zkCfg error : {}",e.getMessage());
log.error(e.getMessage(),e);
} finally {
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return false;
}
public int count() {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = getConnection().prepareStatement("SELECT count(id) FROM ZK");
rs = ps.executeQuery();
if(rs.next()){
return rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
log.error("count zkCfg error : {}",e.getMessage());
log.error(e.getMessage(),e);
} finally {
if(null != rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
}
return 0;
}
private boolean isTableOk() {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = getConnection().prepareStatement("SELECT ID,DESC,CONNECTSTR,SESSIONTIMEOUT FROM ZK where 1=0");
rs = ps.executeQuery();
// if(rs.next()){
// return rs.getInt(1);
// }
return true;
} catch (SQLException e) {
//e.printStackTrace();
log.error("isTableOk Failed,{}",e.getMessage());
try(PreparedStatement psps = getConnection().prepareStatement("drop table ZK")){
psps.execute();
} catch (SQLException e1) {
//e1.printStackTrace();
}
return false;
} finally {
if(null != rs){
try {
rs.close();
} catch (SQLException e) {
//e.printStackTrace();
}
}
if(null != ps){
try {
ps.close();
} catch (SQLException e) {
//e.printStackTrace();
}
}
}
}
//@PostConstruct
@Override
public void afterPropertiesSet() throws Exception {
init();
ZkCache.init(ZkCfgFactory.createZkCfgManager());
log.info(" afterPropertiesSet init {} zk instance" , ZkCache.size());
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkManager.java
================================================
package com.yasenagat.zkweb.util;
import java.util.List;
import java.util.Map;
public interface ZkManager {
//public ZkManagerImpl connect(Properties p);
public ZkManagerImpl connect(String host, int timeout);
public boolean disconnect();
public void reconnect();
public List<String> getChildren(String path);
public String getData(String path);
public String getData(String path, boolean isPrintLog);
public Map<String, String> getNodeMeta(String nodePath);
public List<Map<String, String>> getACLs(String nodePath);
public boolean createNode(String path, String nodeName, String data);
public boolean deleteNode(String nodePath);
public boolean setData(String nodePath, String data);
public long getNodeId(String nodePath);
public enum P {
host, sessionTimeOut
}
public enum Meta {
// ACL_Version,
// Creation_Time,
// Children_Version,
// Creation_ID,
// Data_Length,
// Ephemeral_Owner,
// Last_Modified_Time,
// Modified_ID,
// Number_of_Children,
// Node_ID,
// Data_Version
czxid, mzxid, ctime, mtime, version, cversion, aversion, ephemeralOwner, dataLength, numChildren, pzxid
}
public enum Acl {
scheme, id, perms
}
public static class PropertyPanel{
private String name;
private String value;
private String group;
private String editor="text";
public String getName() {
return name;
}
public String getValue() {
return value;
}
public String getGroup() {
return group;
}
public String getEditor() {
return editor;
}
public void setInfo(String name,String value,String group) {
this.name = name;
this.value = value;
this.group = group;
}
public void setEditor(String editor) {
this.editor = editor;
}
}
public List<PropertyPanel> getJMXInfo(boolean simpleFlag);
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkManagerImpl.java
================================================
package com.yasenagat.zkweb.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooDefs.Perms;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Stat;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.yasenagat.zkweb.util.ZkManagerImpl.ZkConnectInfo.ZkHostPort;
public class ZkManagerImpl implements Watcher,ZkManager {
private ZooKeeper zk=null;
private ServerStatusByCMD serverStatusByCMD;
private ZkConnectInfo zkConnectInfo=new ZkConnectInfo();
private final String ROOT = "/";
private static final org.slf4j.Logger log = LoggerFactory.getLogger(ZkManagerImpl.class);
// private static final ZkManagerImpl _instance = new ZkManagerImpl();
public ZkManagerImpl(){
new ZkJMXInfo(zkConnectInfo);
serverStatusByCMD=new ServerStatusByCMD(zkConnectInfo);
}
public static ZkManagerImpl createZk(){
return new ZkManagerImpl();
}
public static class ZkConnectInfo{
private String connectStr;
private int timeout;
public static class ZkHostPort{
private String host;
private int port;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
public String getConnectStr() {
return connectStr;
}
public void setConnectStr(String connectStr) {
this.connectStr = connectStr;
}
public List<ZkHostPort> getConnectInfo(){
List<ZkHostPort> retList=new ArrayList<>();
for(String hostIp:connectStr.split(",")) {
ZkHostPort zkHostPort=new ZkHostPort();
String[] hostIpArray=hostIp.split(":");
zkHostPort.setHost(hostIpArray[0]);
if(hostIpArray.length==1) {
zkHostPort.setPort(2181);
}else {
zkHostPort.setPort(Integer.parseInt(hostIpArray[1]));
}
retList.add(zkHostPort);
}
return retList;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
}
private interface ZkState{
List<PropertyPanel> state() throws IOException, MalformedObjectNameException,
InstanceNotFoundException, IntrospectionException, ReflectionException;
List<PropertyPanel> simpleState() throws IOException, MalformedObjectNameException,
InstanceNotFoundException, IntrospectionException, ReflectionException;
};
public static class ServerStatusByCMD implements ZkState{
private ZkConnectInfo zkConnectInfo;
private static final ImmutableMap<String, ImmutableList<String>> cmdKeys=new ImmutableMap.Builder<String, ImmutableList<String>>()
.put(
"srvr",ImmutableList.of(
"Zookeeper version","Latency min/avg/max","Received","Sent",
"Connections","Outstanding","Zxid","Mode","Node"))
.put("conf",ImmutableList.of()).put("cons",ImmutableList.of())
.put("envi",ImmutableList.of()).put("ruok",ImmutableList.of())
.put("wchs",ImmutableList.of()).put("wchc",ImmutableList.of())
.put("wchp",ImmutableList.of()).put("mntr",ImmutableList.of()).build();
private static final ImmutableMap<String, String> cmdFindStr=new ImmutableMap.Builder<String, String>()
.put("srvr",": ")
.put("conf","=").put("cons","(")
.put("envi","=").put("ruok","")
.put("wchs","").put("wchc","")
.put("wchp","").put("mntr"," ").build();
public ServerStatusByCMD(ZkConnectInfo zkConnectInfo) {
this.zkConnectInfo=zkConnectInfo;
}
private List<PropertyPanel> executeOneCmdByWch(Socket sock,String cmd,String group) throws IOException{
BufferedReader reader = null;
List<PropertyPanel> retList=new ArrayList<>();
try {
reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
String lines="";
PropertyPanel propertyPanel=new PropertyPanel();
while ((line = reader.readLine()) != null) {
List<String> keys=cmdKeys.get(cmd);
if(keys==null) {
continue;
}
lines=lines+line;
}
propertyPanel=new PropertyPanel();
propertyPanel.setInfo(cmd, lines.trim(),group);
retList.add(propertyPanel);
return retList;
}finally {
if (reader != null) {
reader.close();
}
}
}
private List<PropertyPanel> executeOneCmd(Socket sock,String cmd,String group) throws IOException{
BufferedReader reader = null;
List<PropertyPanel> retList=new ArrayList<>();
try {
reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
PropertyPanel propertyPanel=new PropertyPanel();
while ((line = reader.readLine()) != null) {
List<String> keys=cmdKeys.get(cmd);
if(keys==null) {
continue;
}
for(int i=0;i<keys.size();i++) {
if(cmd.equals("ruok")) {
propertyPanel=new PropertyPanel();
propertyPanel.setInfo(keys.get(i), line.trim(),group);
retList.add(propertyPanel);
continue;
}
if(cmd.equals("conf")||cmd.equals("cons")||cmd.equals("envi")||cmd.equals("mntr")) {
propertyPanel=new PropertyPanel();
String[] strArray=line.split(cmdFindStr.get(cmd));
if(cmd.equals("cons")) {
String vString=line.replaceFirst(strArray[0]+cmdFindStr.get(cmd), "").trim();
vString=vString.substring(0,vString.length()-1);
if(vString.isEmpty()) {
continue;
}
propertyPanel.setInfo(strArray[0], vString ,group);
}else {
String vString=line.replaceFirst(strArray[0]+cmdFindStr.get(cmd), "").trim();
if(vString.isEmpty()) {
continue;
}
propertyPanel.setInfo(strArray[0],vString,group);
}
retList.add(propertyPanel);
continue;
}
if (line.indexOf(keys.get(i)+cmdFindStr.get(cmd)) != -1) {
propertyPanel=new PropertyPanel();
String vString=line.replaceFirst(keys.get(i)+cmdFindStr.get(cmd), "").trim();
if(vString.isEmpty()) {
continue;
}
propertyPanel.setInfo(keys.get(i), vString,group);
retList.add(propertyPanel);
}
}
}
return retList;
}finally {
if (reader != null) {
reader.close();
}
}
}
private List<PropertyPanel> executeOneCmdSimple(Socket sock,String cmd,String group) throws IOException{
BufferedReader reader = null;
List<PropertyPanel> retList=new ArrayList<>();
try {
reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String line;
PropertyPanel propertyPanel=new PropertyPanel();
while ((line = reader.readLine()) != null) {
List<String> keys=cmdKeys.get(cmd);
if(keys==null) {
continue;
}
for(int i=0;i<keys.size();i++) {
if (line.indexOf(keys.get(i)+cmdFindStr.get(cmd)) != -1) {
if(keys.get(i).equals("Mode")) {
propertyPanel=new PropertyPanel();
String vString=line.replaceFirst(keys.get(i)+cmdFindStr.get(cmd), "").trim();
if(vString.isEmpty()) {
continue;
}
propertyPanel.setInfo(keys.get(i), vString,group);
retList.add(propertyPanel);
return retList;
}
}
}
}
return retList;
}finally {
if (reader != null) {
reader.close();
}
}
}
public List<PropertyPanel> state() throws IOException, MalformedObjectNameException,
InstanceNotFoundException, IntrospectionException, ReflectionException{
return innerState(false);
}
public List<PropertyPanel> simpleState() throws MalformedObjectNameException, InstanceNotFoundException, IntrospectionException, ReflectionException, IOException {
return innerState(true);
}
public List<PropertyPanel> innerState(boolean simpleFlag) throws IOException, MalformedObjectNameException,
InstanceNotFoundException, IntrospectionException, ReflectionException{
String host;
int port;
List<PropertyPanel> retList=new ArrayList<>();
String group;
for (ZkHostPort zkHostPort : zkConnectInfo.getConnectInfo()) {
host = zkHostPort.getHost();
port = zkHostPort.getPort();
Socket sock = null;
// cmd="srvr";
for (String cmd : cmdKeys.keySet()) {
try {
sock = new Socket(host, port);
OutputStream outstream = sock.getOutputStream();
// 通过Zookeeper的四字命令获取服务器的状态
outstream.write(cmd.getBytes());
outstream.flush();
group = host + "." + port + "." + cmd;
log.info("group=" + group);
if (simpleFlag) {
retList.addAll(executeOneCmdSimple(sock, cmd, group));
break;
} else {
if (cmd.equals("wchs") || cmd.equals("wchc") || cmd.equals("wchp")) {
retList.addAll(executeOneCmdByWch(sock, cmd, group));
} else {
retList.addAll(executeOneCmd(sock, cmd, group));
}
}
} catch (Exception e) {
sock = null;
//e.printStackTrace();
log.info("",e);
log.error("zk open error for state(four cmd): echo {} |nc {} {}",cmd,host, port,e);
break;
} finally {
if (sock != null) {
// sock.shutdownOutput();
sock.close();
}
}
}
}
return retList;
}
}
public static class ZkJMXInfo {
private JMXConnector connectorJMX;
public ZkJMXInfo(ZkConnectInfo zkConnectInfo) {
}
/**
* @param args
* @throws IOException
* @throws MalformedObjectNameException
* @throws InstanceNotFoundException
* @throws ReflectionException
* @throws IntrospectionException
*/
public List<Object> state() throws IOException, MalformedObjectNameException,
InstanceNotFoundException, IntrospectionException, ReflectionException{
return innerState(false);
}
public List<Object> simpleState() throws MalformedObjectNameException, InstanceNotFoundException, IntrospectionException, ReflectionException, IOException {
return innerState(true);
}
public List<Object> innerState(boolean simpleFlag) throws IOException, MalformedObjectNameException,
InstanceNotFoundException, IntrospectionException, ReflectionException {
List<Object> retList=new ArrayList<>();
PropertyPanel propertyPanel=new PropertyPanel();
propertyPanel.setInfo("jmx","unsupported" ,"jmx");
retList.add(propertyPanel);
return retList;
/*
OperatingSystemMXBean osbean = ManagementFactory.getOperatingSystemMXBean();
///TODO
System.out.println("体系结构:" + osbean.getArch());//操作系统体系结构
System.out.println("处理器核数:" + osbean.getAvailableProcessors());///核数
System.out.println("名字:" + osbean.getName());//名字
System.out.println(osbean.getVersion());//操作系统版本
ThreadMXBean threadBean=ManagementFactory.getThreadMXBean();
System.out.println("活动线程:" + threadBean.getThreadCount());//总线程数
ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
CompilationMXBean compilationMXBean = ManagementFactory.getCompilationMXBean();
System.out.println("===========");
// 通过 MBeanServer间接地访问 MXBean 接口
MBeanServerConnection mbsc = createMBeanServer("192.168.1.100", "9991", "controlRole", "123456");
// 操作系统
ObjectName os = new ObjectName("java.lang:type=OperatingSystem");
System.out.println("体系结构:" + getAttribute(mbsc, os, "Arch"));//体系结构
System.out.println("处理器核数:" + getAttribute(mbsc, os, "AvailableProcessors"));//核数
System.out.println("总物理内存:" + getAttribute(mbsc, os, "TotalPhysicalMemorySize"));//总物理内存
System.out.println("空闲物理内存:" + getAttribute(mbsc, os, "FreePhysicalMemorySize"));//空闲物理内存
System.out.println("总交换空间:" + getAttribute(mbsc, os, "TotalSwapSpaceSize"));//总交换空间
System.out.println("空闲交换空间:" + getAttribute(mbsc, os, "FreeSwapSpaceSize"));//空闲交换空间
System.out.println("操作系统:" + getAttribute(mbsc, os, "Name")+ getAttribute(mbsc, os, "Version"));//操作系统
System.out.println("提交的虚拟内存:" + getAttribute(mbsc, os, "CommittedVirtualMemorySize"));//提交的虚拟内存
System.out.println("系统cpu使用率:" + getAttribute(mbsc, os, "SystemCpuLoad"));//系统cpu使用率
System.out.println("进程cpu使用率:" + getAttribute(mbsc, os, "ProcessCpuLoad"));//进程cpu使用率
System.out.println("============");//
// 线程
ObjectName Threading = new ObjectName("java.lang:type=Threading");
System.out.println("活动线程:" + getAttribute(mbsc, Threading, "ThreadCount"));// 活动线程
System.out.println("守护程序线程:" + getAttribute(mbsc, Threading, "DaemonThreadCount"));// 守护程序线程
System.out.println("峰值:" + getAttribute(mbsc, Threading, "PeakThreadCount"));// 峰值
System.out.println("启动的线程总数:" + getAttribute(mbsc, Threading, "TotalStartedThreadCount"));// 启动的线程总数
ThreadMXBean threadBean2 = ManagementFactory.newPlatformMXBeanProxy
(mbsc, ManagementFactory.THREAD_MXBEAN_NAME, ThreadMXBean.class);
System.out.println("活动线程:" + threadBean2.getThreadCount());// 活动线程
ThreadMXBean threadBean3 = ManagementFactory.getThreadMXBean();
System.out.println("本地活动线程:" + threadBean3.getThreadCount());// 本地活动线程
System.out.println("============");//
ObjectName Compilation = new ObjectName("java.lang:type=Compilation");
System.out.println("总编译时间 毫秒:" + getAttribute(mbsc, Compilation, "TotalCompilationTime"));// 总编译时间 毫秒
System.out.println("============");//
ObjectName ClassLoading = new ObjectName("java.lang:type=ClassLoading");
System.out.println("已加载类总数:" + getAttribute(mbsc, ClassLoading, "TotalLoadedClassCount"));// 已加载类总数
System.out.println("已加装当前类:" + getAttribute(mbsc, ClassLoading, "LoadedClassCount"));// 已加装当前类
System.out.println("已卸载类总数:" + getAttribute(mbsc, ClassLoading, "UnloadedClassCount"));// 已卸载类总数
System.out.println("==========================================================");//
// http://zookeeper.apache.org/doc/r3.4.6/zookeeperJMX.html
// org.apache.ZooKeeperService:name0=ReplicatedServer_id1,name1=replica.1,name2=Follower
ObjectName replica = new ObjectName("org.apache.ZooKeeperService:name0=ReplicatedServer_id1,name1=replica.1");
System.out.println("replica.1运行状态:" + getAttribute(mbsc, replica, "State"));// 运行状态
mbsc = createMBeanServer("192.168.1.100", "9992", "controlRole", "123456");
System.out.println("==============节点树对象===========");
ObjectName dataTreePattern = new ObjectName("org.apache.ZooKeeperService:name0=ReplicatedServer_id?,name1=replica.?,name2=*,name3=InMemoryDataTree");
Set<ObjectName> dataTreeSets = mbsc.queryNames(dataTreePattern, null);
Iterator<ObjectName> dataTreeIterator = dataTreeSets.iterator();
// 只有一个
while (dataTreeIterator.hasNext()) {
ObjectName dataTreeObjectName = dataTreeIterator.next();
DataTreeMXBean dataTree = JMX.newMBeanProxy(mbsc, dataTreeObjectName, DataTreeMXBean.class);
System.out.println("节点总数:" + dataTree.getNodeCount());// 节点总数
System.out.println("Watch总数:" + dataTree.getWatchCount());// Watch总数
System.out.println("临时节点总数:" + dataTree.countEphemerals());// Watch总数
System.out.println("节点名及字符总数:" + dataTree.approximateDataSize());// 节点全路径和值的总字符数
Map<String, String> dataTreeMap = dataTreeObjectName.getKeyPropertyList();
String replicaId = dataTreeMap.get("name1").replace("replica.", "");
String role = dataTreeMap.get("name2");// Follower,Leader,Observer,Standalone
String canonicalName = dataTreeObjectName.getCanonicalName();
int roleEndIndex = canonicalName.indexOf(",name3");
ObjectName roleObjectName = new ObjectName(canonicalName.substring(0, roleEndIndex));
System.out.println("==============zk服务状态===========");
ZooKeeperServerMXBean ZooKeeperServer = JMX.newMBeanProxy(mbsc, roleObjectName, ZooKeeperServerMXBean.class);
System.out.println(role + " 的IP和端口:" + ZooKeeperServer.getClientPort());// IP和端口
System.out.println(role + " 活着的连接数:" + ZooKeeperServer.getNumAliveConnections());// 连接数
System.out.println(role + " 未完成请求数:" + ZooKeeperServer.getOutstandingRequests());// 未完成的请求数
System.out.println(role + " 接收的包:" + ZooKeeperServer.getPacketsReceived());// 收到的包
System.out.println(role + " 发送的包:" + ZooKeeperServer.getPacketsSent());// 发送的包
System.out.println(role + " 平均延迟(毫秒):" + ZooKeeperServer.getAvgRequestLatency());
System.out.println(role + " 最大延迟(毫秒):" + ZooKeeperServer.getMaxRequestLatency());
System.out.println(role + " 每个客户端IP允许的最大连接数:" + ZooKeeperServer.getMaxClientCnxnsPerHost());
System.out.println(role + " 最大Session超时(毫秒):" + ZooKeeperServer.getMaxSessionTimeout());
System.out.println(role + " 心跳时间(毫秒):" + ZooKeeperServer.getTickTime());
System.out.println(role + " 版本:" + ZooKeeperServer.getVersion());// 版本
// 三个重置操作
// ZooKeeperServer.resetLatency(); //重置min/avg/max latency statistics
// ZooKeeperServer.resetMaxLatency(); //重置最大延迟统计
// ZooKeeperServer.resetStatistics(); // 重置包和延迟所有统计
System.out.println("==============所有客户端的连接信息===========");
ObjectName connectionPattern = new ObjectName("org.apache.ZooKeeperService:name0=ReplicatedServer_id?,name1=replica.?,name2=*,name3=Connections,*");
Set<ObjectName> connectionSets = mbsc.queryNames(connectionPattern, null);
List<ObjectName> connectionList = new ArrayList<ObjectName>(connectionSets.size());
connectionList.addAll(connectionSets);
Collections.sort(connectionList);
for (ObjectName connectionON : connectionList) {
System.out.println("=========================");
ConnectionMXBean connectionBean = JMX.newMBeanProxy(mbsc, connectionON, ConnectionMXBean.class);
System.out.println(" IP+Port:" + connectionBean.getSourceIP());//
System.out.println(" SessionId:" + connectionBean.getSessionId());//
System.out.println(" PacketsReceived:" + connectionBean.getPacketsReceived());// 收到的包
System.out.println(" PacketsSent:" + connectionBean.getPacketsSent());// 发送的包
System.out.println(" MinLatency:" + connectionBean.getMinLatency());//
System.out.println(" AvgLatency:" + connectionBean.getAvgLatency());//
System.out.println(" MaxLatency:" + connectionBean.getMaxLatency());//
System.out.println(" StartedTime:" + connectionBean.getStartedTime());//
System.out.println(" EphemeralNodes:" + connectionBean.getEphemeralNodes().length);//
System.out.println(" EphemeralNodes:" + Arrays.asList(connectionBean.getEphemeralNodes()));//
System.out.println(" OutstandingRequests:" + connectionBean.getOutstandingRequests());//
//connectionBean.resetCounters();
//connectionBean.terminateConnection();
//connectionBean.terminateSession();
}
}
// close connection
if (connectorJMX != null) {
connectorJMX.close();
}
return retList; */
}
/**
* 建立连接
*
* @param ip
* @param jmxport
* @return
*/
public MBeanServerConnection createMBeanServer(String ip, String jmxport, String userName, String password) {
try {
String jmxURL = "service:jmx:rmi:///jndi/rmi://" + ip + ":"
+ jmxport + "/jmxrmi";
// jmxurl
JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
Map<String, String[]> map = new HashMap<String, String[]>();
String[] credentials = new String[] { userName, password };
map.put("jmx.remote.credentials", credentials);
connectorJMX = JMXConnectorFactory.connect(serviceURL, map);
MBeanServerConnection mbsc = connectorJMX.getMBeanServerConnection();
return mbsc;
} catch (IOException ioe) {
log.info("",ioe);
log.error(ip + ":" + jmxport + " 连接建立失败");
}
return null;
}
/**
* 使用MBeanServer获取对象名为[objName]的MBean的[objAttr]属性值
* <p>
* 静态代码: return MBeanServer.getAttribute(ObjectName name, String attribute)
*
* @param mbeanServer
* - MBeanServer实例
* @param objName
* - MBean的对象名
* @param objAttr
* - MBean的某个属性名
* @return 属性值
*/
@SuppressWarnings("unused")
private String getAttribute(MBeanServerConnection mbeanServer,
ObjectName objName, String objAttr) {
if (mbeanServer == null || objName == null || objAttr == null)
throw new IllegalArgumentException();
try {
return String.valueOf(mbeanServer.getAttribute(objName, objAttr));
} catch (Exception e) {
return null;
}
}
}
// public boolean connect(Properties p) {
//
// try {
// return this.connect(p.getProperty(P.host.toString()), (Integer
// .valueOf(p.getProperty(P.sessionTimeOut.toString()))));
// } catch (Exception e) {
// log.info("",e);
// return false;
// }
// };
//
// private boolean connect(String host, int timeout) {
// try {
// if (null == zk) {
// zk = new ZooKeeper(host, timeout, this);
// }
// } catch (Exception e) {
// log.info("",e);
// return false;
// }
// return true;
// }
// public ZkManagerImpl connect() {
//
// try {
// Properties p = ConfigUtil.getP();
// return this.connect(p.getProperty(P.host.toString()), (Integer
// .valueOf(p.getProperty(P.sessionTimeOut.toString()))));
// } catch (Exception e) {
// log.info("",e);
// return this;
// }
// };
//
// public ZkManagerImpl connect(Properties p) {
//
// try {
// return this.connect(p.getProperty(P.host.toString()), (Integer
// .valueOf(p.getProperty(P.sessionTimeOut.toString()))));
// } catch (Exception e) {
// log.info("",e);
// return this;
// }
// };
@Override
public List<PropertyPanel> getJMXInfo(boolean simpleFlag) {
try {
if(simpleFlag)
return serverStatusByCMD.simpleState();
//return jmxInfo.state();
return serverStatusByCMD.state();
} catch (MalformedObjectNameException | InstanceNotFoundException | IntrospectionException | ReflectionException
| IOException e) {
log.info("",e);
}
return Collections.emptyList();
}
public ZkManagerImpl connect(String host, int timeout) {
try {
zkConnectInfo.setConnectStr(host);
zkConnectInfo.setTimeout(timeout);
if (null == zk) {
zk = new ZooKeeper(host, timeout, this);
}
} catch (Exception e) {
log.info("",e);
}
return this;
}
public boolean disconnect() {
if (zk != null) {
try {
zk.close();
zk = null;
return true;
} catch (InterruptedException e) {
log.info("",e);
return false;
}
} else {
log.error("zk is not init");
}
return false;
};
public List<String> getChildren(String path){
try {
return zk.getChildren(path == null ? ROOT : path, false);
} catch (Exception e) {
log.info("",e);
reconnect();
}
return new ArrayList<String>();
}
public String getData(String path) {
return getData(path,true);
}
public String getData(String path,boolean isPrintLog) {
try {
Stat s = zk.exists(path, false);
if (s != null) {
byte b[] = zk.getData(path, false, s);
if(null == b){
return "";
}
String pathContent=new String(zk.getData(path, false, s));
if(isPrintLog)log.info("data[{}] : {}",path,pathContent);
return pathContent;
}
} catch (Exception e) {
log.info("",e);
reconnect();
}
return null;
}
public Map<String, String> getNodeMeta(String nodePath) {
Map<String, String> nodeMeta = new LinkedHashMap<String, String>();
try {
if (nodePath.length() == 0) {
nodePath = ROOT;
}
Stat s = zk.exists(nodePath, false);
if (s != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStr;
nodeMeta.put(Meta.aversion.toString(),
String.valueOf(s.getAversion()));
timeStr = sdf.format(new Date(s.getCtime()));
nodeMeta.put(Meta.ctime.toString(),
timeStr+" ["+String.valueOf(s.getCtime())+"]");
nodeMeta.put(Meta.cversion.toString(),
String.valueOf(s.getCversion()));
nodeMeta.put(Meta.czxid.toString(),
String.valueOf(s.getCzxid()));
nodeMeta.put(Meta.dataLength.toString(),
String.valueOf(s.getDataLength()));
nodeMeta.put(Meta.ephemeralOwner.toString(),
String.valueOf(s.getEphemeralOwner()));
timeStr = sdf.format(new Date(s.getMtime()));
nodeMeta.put(Meta.mtime.toString(),
timeStr+" ["+String.valueOf(s.getMtime())+"]");
nodeMeta.put(Meta.mzxid.toString(),
String.valueOf(s.getMzxid()));
nodeMeta.put(Meta.numChildren.toString(),
String.valueOf(s.getNumChildren()));
nodeMeta.put(Meta.pzxid.toString(),
String.valueOf(s.getPzxid()));
nodeMeta.put(Meta.version.toString(),
String.valueOf(s.getVersion()));
}
} catch (Exception e) {
e.printStackTrace();
log.error("",e);
reconnect();
}
return nodeMeta;
}
public List<Map<String, String>> getACLs(String nodePath) {
List<Map<String, String>> returnACLs = new ArrayList<Map<String, String>>();
try {
if (nodePath.length() == 0) {
nodePath = ROOT;
}
Stat s = zk.exists(nodePath, false);
if (s != null) {
List<ACL> acls = zk.getACL(nodePath, s);
for (ACL acl : acls) {
Map<String, String> aclMap = new LinkedHashMap<String, String>();
aclMap.put(Acl.scheme.toString(), acl.getId().getScheme());
aclMap.put(Acl.id.toString(), acl.getId().getId());
StringBuilder sb = new StringBuilder();
int perms = acl.getPerms();
boolean addedPerm = false;
if ((perms & Perms.READ) == Perms.READ) {
sb.append("Read");
addedPerm = true;
}
if (addedPerm) {
sb.append(", ");
}
if ((perms & Perms.WRITE) == Perms.WRITE) {
sb.append("Write");
addedPerm = true;
}
if (addedPerm) {
sb.append(", ");
}
if ((perms & Perms.CREATE) == Perms.CREATE) {
sb.append("Create");
addedPerm = true;
}
if (addedPerm) {
sb.append(", ");
}
if ((perms & Perms.DELETE) == Perms.DELETE) {
sb.append("Delete");
addedPerm = true;
}
if (addedPerm) {
sb.append(", ");
}
if ((perms & Perms.ADMIN) == Perms.ADMIN) {
sb.append("Admin");
addedPerm = true;
}
aclMap.put(Acl.perms.toString(), sb.toString());
returnACLs.add(aclMap);
}
}
} catch (Exception e) {
log.info("",e);
//log.error("",e);
reconnect();
}
return returnACLs;
}
public boolean createNode(String path, String nodeName,String data) {
try {
String p;
if(ROOT.equals(path)){
p = path + nodeName;
}else {
p = path + "/" + nodeName;
}
Stat s = zk.exists(p, false);
if (s == null)
{
zk.create(p, data.getBytes(),
Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
return true;
} catch (Exception e) {
log.info("",e);
reconnect();
}
return false;
}
public boolean deleteNode(String nodePath) {
try {
Stat s = zk.exists(nodePath, false);
if (s != null) {
List<String> children = zk.getChildren(nodePath, false);
for (String child : children) {
String node = nodePath + "/" + child;
deleteNode(node);
}
zk.delete(nodePath, -1);
}
return true;
} catch (Exception e) {
log.info("",e);
reconnect();
}
return false;
}
public boolean setData(String nodePath, String data) {
try {
zk.setData(nodePath, data.getBytes("utf-8"), -1);
return true;
} catch (Exception e) {
log.info("",e);
reconnect();
}
return false;
}
public void process(WatchedEvent arg0) {
// do nothing
}
public long getNodeId(String nodePath) {
try {
Stat s = zk.exists(nodePath, false);
if(s != null){
return s.getPzxid();
}
} catch (Exception e) {
log.info("",e);
reconnect();
}
return 0l;
}
@Override
public void reconnect(){
if(zk != null) {
try {
zk.close();
}catch (Exception e) {
}
try {
zk=new ZooKeeper(this.zkConnectInfo.getConnectStr(), this.zkConnectInfo.getTimeout(),this);
}catch (Exception e) {
log.info("",e);
zk=null;
}
}
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkSpringBootConfiguration.java
================================================
package com.yasenagat.zkweb.util;
import java.beans.PropertyVetoException;
import java.util.Locale;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import com.mchange.v2.c3p0.ComboPooledDataSource;
@Configuration
public class ZkSpringBootConfiguration {
@Autowired
private Environment env;
@Bean(name = "dataSource")
@Qualifier(value = "dataSource")
@Primary
//@ConfigurationProperties(prefix = "c3p0")
public DataSource getDataSource(){
//DruidDataSource dataSource = new DruidDataSource();
ComboPooledDataSource dataSource= org.springframework.boot.jdbc.DataSourceBuilder.create().type(ComboPooledDataSource.class).build();
dataSource.setJdbcUrl(env.getProperty("spring.datasource.url"));
dataSource.setUser(env.getProperty("spring.datasource.username"));
dataSource.setPassword(env.getProperty("spring.datasource.password"));
try {
dataSource.setDriverClass(env.getProperty("spring.datasource.driver-class-name"));
} catch (PropertyVetoException e) {
e.printStackTrace();
return null;
}
dataSource.setInitialPoolSize(Integer.parseInt(env.getProperty("spring.datasource.initial-pool-size")));
dataSource.setMinPoolSize(Integer.parseInt(env.getProperty("spring.datasource.min-pool-size")));
dataSource.setMaxPoolSize(Integer.parseInt(env.getProperty("spring.datasource.max-pool-size")));
dataSource.setAcquireIncrement(Integer.parseInt(env.getProperty("spring.datasource.acquire-increment")));
dataSource.setIdleConnectionTestPeriod(Integer.parseInt(env.getProperty("spring.datasource.idle-connection-test-period")));
dataSource.setMaxIdleTime(Integer.parseInt(env.getProperty("spring.datasource.max-idle-time")));
dataSource.setMaxStatements(Integer.parseInt(env.getProperty("spring.datasource.max-statements")));
dataSource.setAcquireRetryAttempts(Integer.parseInt(env.getProperty("spring.datasource.acquire-retry-attempts")));
dataSource.setBreakAfterAcquireFailure(Boolean.parseBoolean(env.getProperty("spring.datasource.break-after-acquire-failure")));
return dataSource;
}
@Bean
public SessionLocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
// 默认语言
slr.setDefaultLocale(Locale.CHINA);
return slr;
}
// @Bean
// public LocaleChangeInterceptor localeChangeInterceptor() {
// LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// // 参数名
// lci.setParamName("lang");
// return lci;
// }
// @Bean
// public MessageSource messageSource() {
// //logger.info("MessageSource");
// ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
// messageSource.setBasename("config.messages.messages");
//
// return messageSource;
// }
@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
RequestMappingHandlerAdapter requestMappingHandlerAdapter=new RequestMappingHandlerAdapter();
//spring boot 已经自带
// StringHttpMessageConverter stringHttpMessageConverter=new StringHttpMessageConverter();
// stringHttpMessageConverter.setSupportedMediaTypes(Lists.newArrayList(new MediaType("text/html;charset=UTF-8"),
// new MediaType("text/plain;charset=UTF-8")));
// MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter=new MappingJackson2HttpMessageConverter();
// mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Lists.newArrayList(new MediaType("application/json;charset=UTF-8")));
// requestMappingHandlerAdapter.setMessageConverters(Lists.newArrayList(stringHttpMessageConverter,
// mappingJackson2HttpMessageConverter));
return requestMappingHandlerAdapter;
}
//相当于 spring.mvc.servlet.load-on-startup=1
//@Bean
//public static BeanFactoryPostProcessor beanFactoryPostProcessor() {
// return new BeanFactoryPostProcessor() {
//
// @Override
// public void postProcessBeanFactory(
// ConfigurableListableBeanFactory beanFactory) throws BeansException {
// BeanDefinition bean = beanFactory.getBeanDefinition(
// DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
//
// bean.getPropertyValues().add("loadOnStartup", 1);
// }
// };
//}
//用@WebServlet(urlPatterns = "/cache/*")\@ServletComponentScan代替了
//@Bean(name = "cacheServlet")
//public ServletRegistrationBean<ZkCacheServlet> ZkCacheServlet(){
// return new ServletRegistrationBean<ZkCacheServlet>(new ZkCacheServlet(),"/cache/*");
//}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/util/ZkWebMvcConfigurer.java
================================================
package com.yasenagat.zkweb.util;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
@Configuration
public class ZkWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/");//,"classpath:/resources/webapp/WEB-INF/views/");
//registry.addResourceHandler("/**");
//registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/static/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
// 拦截/freemarker后路径
//registry.addInterceptor(new JoeInterceptor()).addPathPatterns("/freemarker/**");
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
//registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/zk","/zkcfg");
}
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 参数名
lci.setParamName("lang");
return lci;
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/web/ZkCacheServlet.java
================================================
package com.yasenagat.zkweb.web;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.yasenagat.zkweb.util.ZkCache;
import com.yasenagat.zkweb.util.ZkCfgFactory;
import com.yasenagat.zkweb.util.ZkManager;
import com.yasenagat.zkweb.util.ZkManagerImpl;
@WebServlet(name = "cacheServlet",urlPatterns = "/cache/*")
public class ZkCacheServlet extends HttpServlet {
private static final Logger log = LoggerFactory.getLogger(ZkCacheServlet.class);
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public ZkCacheServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ZkManager zkManager;
for(Map<String , Object> m : ZkCfgFactory.createZkCfgManager().query()){
zkManager=ZkCache.get(m.get("ID").toString());
if(zkManager==null) {
log.info("zk info: id={},connectstr={},timeout={}",m.get("ID"),m.get("CONNECTSTR"),m.get("SESSIONTIMEOUT"));
ZkCache.put(m.get("ID").toString(), ZkManagerImpl.createZk().connect(m.get("CONNECTSTR").toString(), Integer.parseInt(m.get("SESSIONTIMEOUT").toString())));
}else {
log.info("zk(exists) info: id={},connectstr={},timeout={}",m.get("ID"),m.get("CONNECTSTR"),m.get("SESSIONTIMEOUT"));
zkManager.reconnect();
}
}
//for(String key : ZkCache.get_cache().keySet()){
// log.info("key : {} , zk : {}",key,ZkCache.get(key));
//}
}
@Override
public void init() throws ServletException {
super.init();
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/web/ZkCfgController.java
================================================
package com.yasenagat.zkweb.web;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yasenagat.zkweb.util.ZkCache;
import com.yasenagat.zkweb.util.ZkCfgFactory;
import com.yasenagat.zkweb.util.ZkCfgManager;
import com.yasenagat.zkweb.util.ZkManager;
import com.yasenagat.zkweb.util.ZkManagerImpl;
@Controller
@RequestMapping("/zkcfg")
public class ZkCfgController{
private static final Logger log = LoggerFactory.getLogger(ZkCfgController.class);
static ZkCfgManager zkCfgManager = ZkCfgFactory.createZkCfgManager();
@RequestMapping(value="/queryZkCfg")
public @ResponseBody Map<String, Object> queryZkCfg(
@RequestParam(required=false) int page,
@RequestParam(required=false) int rows,@RequestParam(required=false) String whereSql){
try {
//log.info(new Date()+"");
Map<String, Object> _map = new HashMap<String, Object>();
_map.put("rows", zkCfgManager.query(page,rows,URLDecoder.decode(whereSql,"utf-8")));
_map.put("total", zkCfgManager.count());
return _map;
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
return null;
}
@RequestMapping(value="/addZkCfg",produces="text/html;charset=UTF-8")
public @ResponseBody String addZkCfg(
@RequestParam(required=false) String desc,
@RequestParam(required=false) String connectstr,
@RequestParam(required=false) String sessiontimeout){
try {
//String id = UUID.randomUUID().toString().replaceAll("-", "");
String id = UUID.randomUUID().toString();
ZkManager zkManager;
if(ZkCfgFactory.createZkCfgManager().add(id,desc, connectstr, sessiontimeout)){
zkManager=ZkCache.get(id);
if(zkManager==null) {
log.info("zk info: id={},connectstr={},timeout={}",id,connectstr, sessiontimeout);
ZkCache.put(id, ZkManagerImpl.createZk().connect(connectstr,Integer.parseInt(sessiontimeout)));
}else {
log.info("zk(exists) info: id={},connectstr={},timeout={}",id,connectstr, sessiontimeout);
zkManager.reconnect();
}
};
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(),e);
return "添加失败";
}
return "添加成功";
}
@RequestMapping(value="/queryZkCfgById")
public @ResponseBody Map<String, Object> queryZkCfg(
@RequestParam(required=false) String id){
try {
return ZkCfgFactory.createZkCfgManager().findById(id);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(),e);
}
return null;
}
@RequestMapping(value="/updateZkCfg",produces="text/html;charset=UTF-8")
public @ResponseBody String updateZkCfg(
@RequestParam(required=true) String id,
@RequestParam(required=false) String desc,
@RequestParam(required=false) String connectstr,
@RequestParam(required=false) String sessiontimeout){
try {
ZkManager zkManager;
if(ZkCfgFactory.createZkCfgManager().update(id,desc, connectstr, sessiontimeout)){
zkManager=ZkCache.get(id);
if(zkManager==null) {
log.info("zk info: id={},connectstr={},timeout={}",id,connectstr, sessiontimeout);
ZkCache.put(id, ZkManagerImpl.createZk().connect(connectstr,Integer.parseInt(sessiontimeout)));
}else {
log.info("zk(exists) info: id={},connectstr={},timeout={}",id,connectstr, sessiontimeout);
zkManager.reconnect();
}
};
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(),e);
return "保存失败";
}
return "保存成功";
}
@RequestMapping(value="/delZkCfg",produces="text/html;charset=UTF-8")
public @ResponseBody String delZkCfg(
@RequestParam(required=true) String id){
try {
ZkCfgFactory.createZkCfgManager().delete(id);
ZkCache.remove(id);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(),e);
return "删除失败";
}
return "删除成功";
}
}
================================================
FILE: src/main/java/com/yasenagat/zkweb/web/ZkController.java
================================================
package com.yasenagat.zkweb.web;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.jr.ob.JSON;
import com.yasenagat.zkweb.model.Tree;
import com.yasenagat.zkweb.model.TreeRoot;
import com.yasenagat.zkweb.util.ZkCache;
import com.yasenagat.zkweb.util.ZkCfgFactory;
import com.yasenagat.zkweb.util.ZkManager.PropertyPanel;
@Controller
@RequestMapping("/zk")
public class ZkController implements DisposableBean{
private static final Logger log = LoggerFactory.getLogger(ZkController.class);
@RequestMapping(value="/queryZnodeInfo",produces="text/html;charset=UTF-8")
public String queryzNodeInfo(
@RequestParam(required=false) String path,
Model model,
@RequestParam(required=true) String cacheId
){
try {
path = URLDecoder.decode(path,"utf-8");
log.info("queryzNodeInfo1111 : " + path);
if(path != null){
model.addAttribute("zkpath", path);
model.addAttribute("path",path);
model.addAttribute("cacheId", cacheId);
String data=ZkCache.get(cacheId).getData(path);
if(data==null) {
model.addAttribute("data", "");
model.addAttribute("acls", Collections.emptyList());
return "info";
}
model.addAttribute("data", ZkCache.get(cacheId).getData(path).trim());
model.mergeAttributes(ZkCache.get(cacheId).getNodeMeta(path));
model.addAttribute("acls", ZkCache.get(cacheId).getACLs(path));
}
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("zkpath", path);
model.addAttribute("path",path);
model.addAttribute("cacheId", cacheId);
model.addAttribute("data", "");
model.addAttribute("acls", Collections.emptyList());
}
log.info("model : " + model);
return "info";
}
@RequestMapping(value="/queryZKOk")
public @ResponseBody String queryZKOk(Model model,@RequestParam(required=true) String cacheId){
String exmsg="<font color='red'>Disconnected Or Exception</font>";
try {
if(ZkCache.get(cacheId)!=null&&ZkCache.get(cacheId).getData("/",false)!=null) {
//log.info("cacheId[{}] : {}",cacheId,"Connected");
return "<font color='blue'>Connected</font>";
}
else {
log.info("cacheId[{}] : {}",cacheId,"Disconnected Or Exception");
return exmsg;
}
} catch (Exception e) {
//e.printStackTrace();
log.info("",e);
log.warn("cacheId[{}] : {}",cacheId,"Disconnected Or Exception");
}
return exmsg;
}
@RequestMapping(value="/queryZKJMXInfo", produces="application/json;charset=UTF-8")
public @ResponseBody List<PropertyPanel> queryZKJMXInfo(
@RequestParam(required=true) String simpleFlag,
@RequestParam(required=true) String cacheId,HttpServletResponse response
){
try {
// model.mergeAttributes(ZkCache.get(cacheId).getJMXInfo());
// //model.addAttribute("acls", ZkCache.get(cacheId).getACLs(path));
// //model.addAttribute("path",path);
// model.addAttribute("cacheId", cacheId);
List<PropertyPanel> result=ZkCache.get(cacheId).getJMXInfo(Integer.parseInt(simpleFlag)==0?false:true);
log.info("queryZKJMXInfo simpleFlag={},cacheId={},result : {}",simpleFlag,cacheId,JSON.std.asString(result));
response.addHeader("Access-Control-Allow-Origin", "*");
return result;
} catch (Exception e) {
log.info("",e);
}
return Collections.emptyList();
}
@RequestMapping(value="/queryZnode")
public @ResponseBody List<Tree> query(
@RequestParam(required=false) String id,
@RequestParam(required=false) String path,
@RequestParam(required=true) String cacheId
){
log.info("id : {}",id);
log.info("path : {}",path);
log.info("cacheId : {}",cacheId);
TreeRoot root = new TreeRoot();
if(path == null){
}else if("/".equals(path)){
root.remove(0);
List<String> pathList = ZkCache.get(cacheId).getChildren(null);
log.info("list {}",pathList);
int i=10000;
for(String p : pathList){
Map<String, Object> atr = new HashMap<String, Object>();
atr.put("path", "/"+p);
Tree tree = new Tree(i,p,Tree.STATE_CLOSED,null,atr);
root.add(tree);
i++;
}
}else {
root.remove(0);
try {
path = URLDecoder.decode(path,"utf-8");
} catch (UnsupportedEncodingException e) {
log.error("",e);
}
List<String> pathList = ZkCache.get(cacheId).getChildren(path);
int i=path.split("/").length*10000;
for(String p : pathList){
Map<String, Object> atr = new HashMap<String, Object>();
atr.put("path", path+"/"+p);
Tree tree = new Tree(i,p,Tree.STATE_CLOSED,null,atr);
root.add(tree);
i++;
}
}
return root;
}
@RequestMapping(value="/saveData",produces="text/html;charset=UTF-8")
public @ResponseBody String saveData(
@RequestParam() String path,
@RequestParam() String data,
@RequestParam(required=true) String cacheId
){
try {
log.info("data:{}",data);
return ZkCache.get(cacheId).setData(path, data)==true ? "保存成功" : "保存失败";
} catch (Exception e) {
//log.info("Error : {}",e.getMessage());
log.warn("",e);
return "保存失败! Error : " +e.getMessage();
}
}
@RequestMapping(value="/createNode",produces="text/html;charset=UTF-8")
public @ResponseBody String createNode(
@RequestParam() String path,
@RequestParam() String nodeName,
@RequestParam(required=true) String cacheId
){
try {
log.info("path:{}",path);
log.info("nodeName:{}",nodeName);
return ZkCache.get(cacheId).createNode(path, nodeName, "")==true ? "保存成功" : "保存失败";
} catch (Exception e) {
//log.info("Error : {}",e.getMessage());
log.warn("",e);
return "保存失败! Error : " +e.getMessage();
}
}
@RequestMapping(value="/deleteNode",produces="text/html;charset=UTF-8")
public @ResponseBody String deleteNode(
@RequestParam() String path,
@RequestParam(required=true) String cacheId
){
try {
log.info("path:{}",path);
return ZkCache.get(cacheId).deleteNode(path)==true ? "删除成功" : "删除失败";
} catch (Exception e) {
//log.info("Error : {}",e.getMessage());
log.warn("",e);
return "删除失败! Error : " +e.getMessage();
}
}
@Override
public void destroy() throws Exception {
log.info("destroyZkCfgManager()...");
ZkCfgFactory.createZkCfgManager().destroyPool();
}
}
================================================
FILE: src/main/resources/META-INF/additional-spring-configuration-metadata.json
================================================
{"properties": [
{
"name": "spring.datasource.initial-pool-size",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.initial-pool-size'"
},
{
"name": "spring.datasource.min-pool-size",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.min-pool-size'"
},
{
"name": "spring.datasource.max-pool-size",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.max-pool-size'"
},
{
"name": "spring.datasource.max-pool-size",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.max-pool-size'"
},
{
"name": "spring.datasource.acquire-increment",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.acquire-increment'"
},
{
"name": "spring.datasource.idle-connection-test-period",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.idle-connection-test-period'"
},
{
"name": "spring.datasource.max-idle-time",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.max-idle-time'"
},
{
"name": "spring.datasource.max-statements",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.max-statements'"
},
{
"name": "spring.datasource.acquire-retry-attempts",
"type": "java.lang.Integer",
"description": "A description for 'spring.datasource.acquire-retry-attempts'"
},
{
"name": "spring.datasource.break-after-acquire-failure",
"type": "java.lang.Boolean",
"description": "A description for 'spring.datasource.break-after-acquire-failure'"
}
]}
================================================
FILE: src/main/resources/application-local.yml
================================================
================================================
FILE: src/main/resources/application-zkweb.yaml
================================================
#如果部署到tomcat,logbak必须是logback-spring.xml名称
logging:
config: classpath:logback-spring.xml
spring:
h2:
console:
enabled: 'true'
path: /console
settings:
trace: false
web-allow-others: 'true'
jta:
enabled: false
hateoas:
use-hal-as-default-json-media-type: 'false'
http:
encoding:
force: true
thymeleaf:
# THYMELEAF (ThymeleafAutoConfiguration)
#开启模板缓存(默认值:true)
cache: false
#Check that the template exists before rendering it.
check-template: true
#检查模板位置是否正确(默认值:true)
check-template-location: true
#Content-Type的值(默认值:text/html)
servlet:
content-type: text/html
#开启MVC Thymeleaf视图解析(默认值:true)
enabled: true
#模板编码
encoding: UTF-8
#要被排除在解析之外的视图名称列表,用逗号分隔
excluded-view-names:
#要运用于模板之上的模板模式。另见StandardTemplate-ModeHandlers(默认值:HTML5)
mode: HTML
#在构建URL时添加到视图名称前的前缀(默认值:classpath:/templates/)
prefix: classpath:/templates/
#在构建URL时添加到视图名称后的后缀(默认值:.html)
suffix: .html
#Thymeleaf模板解析器在解析器链中的顺序。默认情况下,它排第一位。顺序从1开始,只有在定义了额外的TemplateResolver Bean时才需要设置这个属性。
#template-resolver-order:
#可解析的视图名称列表,用逗号分隔
#view-names:
datasource:
platform: h2
type: com.mchange.v2.c3p0.ComboPooledDataSource
url: jdbc:h2:file:~/.h2/zkweb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE;FILE_LOCK=SOCKET
username: sa
password: sa
driver-class-name: org.h2.Driver
initial-pool-size: 10
min-pool-size: 5
max-pool-size: 20
acquire-increment: 3
idle-connection-test-period: 60
max-idle-time: 60
max-statements: 100
acquire-retry-attempts: 30
break-after-acquire-failure: false
resources:
cache:
period: 0
# static-locations:
# - classpath:/META-INF/resources/
# - classpath:/resources/
# - classpath:/static/
# - classpath:/public/
profiles:
active: local
mvc:
servlet:
load-on-startup: 1
#view:
# prefix: /WEB-INF/views/
# suffix: .jsp
session:
store-type: NONE
cache:
type: NONE
#freemarker
# freemarker:
# allow-request-override: false
# cache: true
# check-template-location: true
# charset: UTF-8
# content-type: text/html
# expose-request-attributes: false
# expose-session-attributes: false
# expose-spring-macro-helpers: false
server:
port: 8099
servlet:
session:
timeout: 60
contextPath: /
tomcat:
uri-encoding: UTF-8
max-threads: 80
================================================
FILE: src/main/resources/logback-spring.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
级别包括:TRACE、DEBUG(默认)、INFO、WARN 和 ERROR
scan:
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
<contextName>myAppName</contextName>
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<property name="APP_Name" value="myAppName" />
-->
<property name="path.log" value="./log" />
<!-- <appender name="FILE" class="ch.qos.logback.core.FileAppender"> -->
<!-- <Encoding>UTF-8</Encoding> -->
<!-- <File>logger-default.log</File> -->
<!-- <Append>true</Append> -->
<!-- <layout class="ch.qos.logback.classic.PatternLayout"> -->
<!-- <Pattern>[%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %file:%line] %logger{36} -> %msg%n</Pattern> -->
<!-- </layout> -->
<!-- </appender> -->
<!-- MaxHistory是对于%d而言的文件个数 -->
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <Encoding>UTF-8</Encoding> -->
<!-- <File>${path.log}/default.log</File> -->
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${path.log}/default-%d{yyyy-MM-dd-HH}-%i.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
<MaxFileSize>10MB</MaxFileSize>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %file:%line] %logger{36} --> %msg%n</pattern>
</encoder>
</appender>
<!-- encoder 默认配置为PatternLayoutEncoder -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender" >
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %file:%line] %logger{36} --> %msg%n</pattern>
</encoder>
</appender>
<!-- logback为java中的包 -->
<logger name="Logback">
<level value="WARN" /><!-- "TRACE", "DEBUG" -->
</logger>
<!--类的全路径:过滤下面的信息 -->
<logger name="ch.qos.logback" level="WARN" additivity="true" />
<logger name="ch.qos.logback.classic.LoggerContext" level="INFO" additivity="true" />
<logger name="org.apache.zookeeper.server.ZooKeeperServer" level="WARN" additivity="true" />
<logger name="org.apache.zookeeper.ZooKeeper" level="WARN" additivity="true" />
<logger name="org.apache.zookeeper.ClientCnxn" level="WARN" additivity="true" />
<logger name="org.apache.curator" level="WARN" additivity="true" />
<logger name="org.apache.curator" level="WARN" additivity="true" />
<logger name="org.apache.kafka.common.consumer.internals.Fetcher" level="WARN" additivity="true" />
<logger name="org.apache.ibatis" level="WARN" additivity="true" />
<logger name="com.yasenagat.zkweb" level="INFO" additivity="true" />
<!-- sql debug info,和mybatis-config.xml的logPrefix配合使用-->
<logger name="mybatis" level="WARN" additivity="true" />
<logger name="com.yasenagat.zkweb.web.ZkController" level="WARN" additivity="true" />
<logger name="com.yasenagat.zkweb.util.ZkManagerImpl" level="WARN" additivity="true" />
<!--trace,debug,info,warn,error-->
<root level="info">
<appender-ref ref="ROLLING_FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
================================================
FILE: src/main/resources/logback-zkweb-1.0.9.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!-- <File name="testLog" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File> -->
<RollingFile name="RollingFileInfo" fileName="$LOG_DATA/web/tomcat/zkweb-info.log"
filePattern="zkweb-info-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="$LOG_DATA/web/tomcat/zkweb-warn.log"
filePattern="zkweb-warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<RollingFile name="RollingFileError" fileName="$LOG_DATA/web/tomcat/zkweb-error.log"
filePattern="zkweb-error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<logger name="org.apache.zookeeper" level="ERROR"/>
<root level="all">
<!--<appender-ref ref="Console"/>-->
<appender-ref ref="RollingFileInfo"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
================================================
FILE: src/main/resources/logback-zkweb-v1.2.3.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
级别包括:TRACE、DEBUG(默认)、INFO、WARN 和 ERROR
scan:
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
<contextName>myAppName</contextName>
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<property name="APP_Name" value="myAppName" />
-->
<property name="path.log" value="./log" />
<!-- <appender name="FILE" class="ch.qos.logback.core.FileAppender"> -->
<!-- <Encoding>UTF-8</Encoding> -->
<!-- <File>logger-default.log</File> -->
<!-- <Append>true</Append> -->
<!-- <layout class="ch.qos.logback.classic.PatternLayout"> -->
<!-- <Pattern>[%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %file:%line] %logger{36} -> %msg%n</Pattern> -->
<!-- </layout> -->
<!-- </appender> -->
<!-- MaxHistory是对于%d而言的文件个数 -->
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <Encoding>UTF-8</Encoding> -->
<!-- <File>${path.log}/default.log</File> -->
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${path.log}/default-%d{yyyy-MM-dd-HH}-%i.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
<MaxFileSize>10MB</MaxFileSize>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %file:%line] %logger{36} --> %msg%n</pattern>
</encoder>
</appender>
<!-- encoder 默认配置为PatternLayoutEncoder -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender" >
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %file:%line] %logger{36} --> %msg%n</pattern>
</encoder>
</appender>
<!-- logback为java中的包 -->
<logger name="Logback">
<level value="WARN" /><!-- "TRACE", "DEBUG" -->
</logger>
<!--类的全路径:过滤下面的信息 -->
<logger name="ch.qos.logback" level="WARN" additivity="true" />
<logger name="ch.qos.logback.classic.LoggerContext" level="INFO" additivity="true" />
<logger name="org.apache.zookeeper.server.ZooKeeperServer" level="WARN" additivity="true" />
<logger name="org.apache.zookeeper.ZooKeeper" level="WARN" additivity="true" />
<logger name="org.apache.zookeeper.ClientCnxn" level="WARN" additivity="true" />
<logger name="org.apache.curator" level="WARN" additivity="true" />
<logger name="org.apache.curator" level="WARN" additivity="true" />
<logger name="org.apache.kafka.common.consumer.internals.Fetcher" level="WARN" additivity="true" />
<logger name="org.apache.ibatis" level="WARN" additivity="true" />
<logger name="com.yasenagat.zkweb" level="INFO" additivity="true" />
<!-- sql debug info,和mybatis-config.xml的logPrefix配合使用-->
<logger name="mybatis" level="WARN" additivity="true" />
<!--trace,debug,info,warn,error-->
<root level="info">
<appender-ref ref="ROLLING_FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
================================================
FILE: src/main/resources/spring.bak/appServlet/controllers.bak.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- Maps '/' requests to the 'home' view -->
<mvc:view-controller path="/" view-name="home"/>
<context:component-scan base-package="com.yasenagat.zkweb" />
</beans>
================================================
FILE: src/main/resources/spring.bak/appServlet/servlet-context.bak.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd-->
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:bean class="org.springframework.http.converter.StringHttpMessageConverter">
<beans:property name="supportedMediaTypes">
<beans:list>
<beans:value>text/html;charset=UTF-8</beans:value>
<beans:value>text/plain;charset=UTF-8</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<beans:bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<beans:property name="supportedMediaTypes">
<beans:list>
<beans:value>application/json;charset=UTF-8</beans:value>
</beans:list>
</beans:property>
</beans:bean>
</beans:list>
</beans:property>
</beans:bean>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<mvc:interceptors>
<beans:bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- Saves a locale change using a session-->
<beans:bean id="sessionLocaleResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven > <!-- conversion-service="conversionService" -->
<!--
自己定义参数的注解
@RequestAttribute("foo") String foo
按照自定义的注解,对参数进行解析
-->
<!-- <argument-resolvers>
<beans:bean class="org.springframework.samples.mvc.data.custom.CustomArgumentResolver"/>
</argument-resolvers>
<async-support default-timeout="3000">
<callable-interceptors>
<beans:bean class="org.springframework.samples.mvc.async.TimeoutCallableProcessingInterceptor" />
</callable-interceptors>
</async-support> -->
</annotation-driven>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- Only needed because we install custom converters to support the examples in the org.springframewok.samples.mvc.convert package -->
<!-- 自定义接受参数,进行格式转换 ;
例如,发送参数123-45-678 ,接受后直接转换为12345678
-->
<!-- <beans:bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<beans:property name="formatters">
<beans:bean class="org.springframework.samples.mvc.convert.MaskFormatAnnotationFormatterFactory" />
</beans:property>
</beans:bean> -->
<!-- Only needed because we require fileupload in the org.springframework.samples.mvc.fileupload package -->
<!-- <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
-->
<!-- Imports user-defined @Controller beans that process client requests -->
<beans:import resource="controllers.xml" />
<task:annotation-driven />
</beans:beans>
================================================
FILE: src/main/resources/spring.bak/root-context.bak.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
</beans>
================================================
FILE: src/main/resources/static/easyui/easyloader.js
================================================
/**
* EasyUI for jQuery 1.5.5.4
*
* Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
*
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
* To use it on other terms please contact us: info@jeasyui.com
*
*/
(function(){
var _1={draggable:{js:"jquery.draggable.js"},droppable:{js:"jquery.droppable.js"},resizable:{js:"jquery.resizable.js"},linkbutton:{js:"jquery.linkbutton.js",css:"linkbutton.css"},progressbar:{js:"jquery.progressbar.js",css:"progressbar.css"},tooltip:{js:"jquery.tooltip.js",css:"tooltip.css"},pagination:{js:"jquery.pagination.js",css:"pagination.css",dependencies:["linkbutton"]},datagrid:{js:"jquery.datagrid.js",css:"datagrid.css",dependencies:["panel","resizable","linkbutton","pagination"]},treegrid:{js:"jquery.treegrid.js",css:"tree.css",dependencies:["datagrid"]},propertygrid:{js:"jquery.propertygrid.js",css:"propertygrid.css",dependencies:["datagrid"]},datalist:{js:"jquery.datalist.js",css:"datalist.css",dependencies:["datagrid"]},panel:{js:"jquery.panel.js",css:"panel.css"},window:{js:"jquery.window.js",css:"window.css",dependencies:["resizable","draggable","panel"]},dialog:{js:"jquery.dialog.js",css:"dialog.css",dependencies:["linkbutton","window"]},messager:{js:"jquery.messager.js",css:"messager.css",dependencies:["linkbutton","dialog","progressbar"]},layout:{js:"jquery.layout.js",css:"layout.css",dependencies:["resizable","panel"]},form:{js:"jquery.form.js"},menu:{js:"jquery.menu.js",css:"menu.css"},tabs:{js:"jquery.tabs.js",css:"tabs.css",dependencies:["panel","linkbutton"]},menubutton:{js:"jquery.menubutton.js",css:"menubutton.css",dependencies:["linkbutton","menu"]},splitbutton:{js:"jquery.splitbutton.js",css:"splitbutton.css",dependencies:["menubutton"]},switchbutton:{js:"jquery.switchbutton.js",css:"switchbutton.css"},accordion:{js:"jquery.accordion.js",css:"accordion.css",dependencies:["panel"]},calendar:{js:"jquery.calendar.js",css:"calendar.css"},textbox:{js:"jquery.textbox.js",css:"textbox.css",dependencies:["validatebox","linkbutton"]},passwordbox:{js:"jquery.passwordbox.js",css:"passwordbox.css",dependencies:["textbox"]},filebox:{js:"jquery.filebox.js",css:"filebox.css",dependencies:["textbox"]},combo:{js:"jquery.combo.js",css:"combo.css",dependencies:["panel","textbox"]},combobox:{js:"jquery.combobox.js",css:"combobox.css",dependencies:["combo"]},combotree:{js:"jquery.combotree.js",dependencies:["combo","tree"]},combogrid:{js:"jquery.combogrid.js",dependencies:["combo","datagrid"]},combotreegrid:{js:"jquery.combotreegrid.js",dependencies:["combo","treegrid"]},tagbox:{js:"jquery.tagbox.js",dependencies:["combobox"]},validatebox:{js:"jquery.validatebox.js",css:"validatebox.css",dependencies:["tooltip"]},numberbox:{js:"jquery.numberbox.js",dependencies:["textbox"]},searchbox:{js:"jquery.searchbox.js",css:"searchbox.css",dependencies:["menubutton","textbox"]},spinner:{js:"jquery.spinner.js",css:"spinner.css",dependencies:["textbox"]},numberspinner:{js:"jquery.numberspinner.js",dependencies:["spinner","numberbox"]},timespinner:{js:"jquery.timespinner.js",dependencies:["spinner"]},tree:{js:"jquery.tree.js",css:"tree.css",dependencies:["draggable","droppable"]},datebox:{js:"jquery.datebox.js",css:"datebox.css",dependencies:["calendar","combo"]},datetimebox:{js:"jquery.datetimebox.js",dependencies:["datebox","timespinner"]},slider:{js:"jquery.slider.js",dependencies:["draggable"]},parser:{js:"jquery.parser.js"},mobile:{js:"jquery.mobile.js"}};
var _2={"af":"easyui-lang-af.js","ar":"easyui-lang-ar.js","bg":"easyui-lang-bg.js","ca":"easyui-lang-ca.js","cs":"easyui-lang-cs.js","cz":"easyui-lang-cz.js","da":"easyui-lang-da.js","de":"easyui-lang-de.js","el":"easyui-lang-el.js","en":"easyui-lang-en.js","es":"easyui-lang-es.js","fr":"easyui-lang-fr.js","it":"easyui-lang-it.js","jp":"easyui-lang-jp.js","nl":"easyui-lang-nl.js","pl":"easyui-lang-pl.js","pt_BR":"easyui-lang-pt_BR.js","ru":"easyui-lang-ru.js","sv_SE":"easyui-lang-sv_SE.js","tr":"easyui-lang-tr.js","zh_CN":"easyui-lang-zh_CN.js","zh_TW":"easyui-lang-zh_TW.js"};
var _3={};
function _4(_5,_6){
var _7=false;
var _8=document.createElement("script");
_8.type="text/javascript";
_8.language="javascript";
_8.src=_5;
_8.onload=_8.onreadystatechange=function(){
if(!_7&&(!_8.readyState||_8.readyState=="loaded"||_8.readyState=="complete")){
_7=true;
_8.onload=_8.onreadystatechange=null;
if(_6){
_6.call(_8);
}
}
};
document.getElementsByTagName("head")[0].appendChild(_8);
};
function _9(_a,_b){
_4(_a,function(){
document.getElementsByTagName("head")[0].removeChild(this);
if(_b){
_b();
}
});
};
function _c(_d,_e){
var _f=document.createElement("link");
_f.rel="stylesheet";
_f.type="text/css";
_f.media="screen";
_f.href=_d;
document.getElementsByTagName("head")[0].appendChild(_f);
if(_e){
_e.call(_f);
}
};
function _10(_11,_12){
_3[_11]="loading";
var _13=_1[_11];
var _14="loading";
var _15=(easyloader.css&&_13["css"])?"loading":"loaded";
if(easyloader.css&&_13["css"]){
if(/^http/i.test(_13["css"])){
var url=_13["css"];
}else{
var url=easyloader.base+"themes/"+easyloader.theme+"/"+_13["css"];
}
_c(url,function(){
_15="loaded";
if(_14=="loaded"&&_15=="loaded"){
_16();
}
});
}
if(/^http/i.test(_13["js"])){
var url=_13["js"];
}else{
var url=easyloader.base+"plugins/"+_13["js"];
}
_4(url,function(){
_14="loaded";
if(_14=="loaded"&&_15=="loaded"){
_16();
}
});
function _16(){
_3[_11]="loaded";
easyloader.onProgress(_11);
if(_12){
_12();
}
};
};
function _17(_18,_19){
var mm=[];
var _1a=false;
if(typeof _18=="string"){
add(_18);
}else{
for(var i=0;i<_18.length;i++){
add(_18[i]);
}
}
function add(_1b){
if(!_1[_1b]){
return;
}
var d=_1[_1b]["dependencies"];
if(d){
for(var i=0;i<d.length;i++){
add(d[i]);
}
}
mm.push(_1b);
};
function _1c(){
if(_19){
_19();
}
easyloader.onLoad(_18);
};
var _1d=0;
function _1e(){
if(mm.length){
var m=mm[0];
if(!_3[m]){
_1a=true;
_10(m,function(){
mm.shift();
_1e();
});
}else{
if(_3[m]=="loaded"){
mm.shift();
_1e();
}else{
if(_1d<easyloader.timeout){
_1d+=10;
setTimeout(arguments.callee,10);
}
}
}
}else{
if(easyloader.locale&&_1a==true&&_2[easyloader.locale]){
var url=easyloader.base+"locale/"+_2[easyloader.locale];
_9(url,function(){
_1c();
});
}else{
_1c();
}
}
};
_1e();
};
easyloader={modules:_1,locales:_2,base:".",theme:"default",css:true,locale:null,timeout:2000,load:function(_1f,_20){
if(/\.css$/i.test(_1f)){
if(/^http/i.test(_1f)){
_c(_1f,_20);
}else{
_c(easyloader.base+_1f,_20);
}
}else{
if(/\.js$/i.test(_1f)){
if(/^http/i.test(_1f)){
_4(_1f,_20);
}else{
_4(easyloader.base+_1f,_20);
}
}else{
_17(_1f,_20);
}
}
},onProgress:function(_21){
},onLoad:function(_22){
}};
var _23=document.getElementsByTagName("script");
for(var i=0;i<_23.length;i++){
var src=_23[i].src;
if(!src){
continue;
}
var m=src.match(/easyloader\.js(\W|$)/i);
if(m){
easyloader.base=src.substring(0,m.index);
}
}
window.using=easyloader.load;
if(window.jQuery){
jQuery(function(){
easyloader.load("parser",function(){
jQuery.parser.parse();
});
});
}
})();
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-af.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Bladsy';
$.fn.pagination.defaults.afterPageText = 'Van {pages}';
$.fn.pagination.defaults.displayMsg = 'Wys (from) tot (to) van (total) items';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Verwerking, wag asseblief ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Die styl';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Die veld is verpligtend.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = "Gee 'n geldige e-pos adres.";
$.fn.validatebox.defaults.rules.url.message = "Gee 'n geldige URL nie.";
$.fn.validatebox.defaults.rules.length.message = "Voer 'n waarde tussen {0} en {1}.";
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Vandag';
$.fn.datebox.defaults.closeText = 'Sluit';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-am.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Էջ';
$.fn.pagination.defaults.afterPageText = 'ից {pages}';
$.fn.pagination.defaults.displayMsg = 'Դիտել {from}-ից {to}-ը {total} գրառումից';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Մշակվում է, խնդրում ենք սպասել ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Այո';
$.messager.defaults.cancel = 'Փակել';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Այս դաշտը պարտադիր է.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Խնդրում ենք մուտքագրել գործող e-mail հասցե.';
$.fn.validatebox.defaults.rules.url.message = 'Խնդրում ենք մուտքագրել գործող URL.';
$.fn.validatebox.defaults.rules.length.message = 'Խնդրում ենք մուտքագրել արժեք {0} {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Խնդրում ենք ուղղել այս դաշտը.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.firstDay = 1;
$.fn.calendar.defaults.weeks = ['Կ.','Ե.','Ե.','Չ.','Հ.','Ու.','Շ.'];
$.fn.calendar.defaults.months = ['Հունվար', 'Փետրվար', 'Մարտ', 'Ապրիլ', 'Մայիս', 'Հունիս', 'Հուլիս', 'Օգոստոս', 'Սեպտեմբեր', 'Հոկտեմբեր', 'Նոյեմբեր', 'Դեկտեմբեր'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Այսօր';
$.fn.datebox.defaults.closeText = 'Փակել';
$.fn.datebox.defaults.okText = 'Այո';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-ar.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'صفحة';
$.fn.pagination.defaults.afterPageText = 'من {pages}';
$.fn.pagination.defaults.displayMsg = 'عرض {from} إلى {to} من {total} عنصر';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'معالجة, الرجاء الإنتظار ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'موافق';
$.messager.defaults.cancel = 'إلغاء';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'هذا الحقل مطلوب.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'الرجاء إدخال بريد إلكتروني صحيح.';
$.fn.validatebox.defaults.rules.url.message = 'الرجاء إدخال رابط صحيح.';
$.fn.validatebox.defaults.rules.length.message = 'الرجاء إدخال قيمة بين {0} و {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'الرجاء التأكد من الحقل.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'اليوم';
$.fn.datebox.defaults.closeText = 'إغلاق';
$.fn.datebox.defaults.okText = 'موافق';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-bg.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Страница';
$.fn.pagination.defaults.afterPageText = 'от {pages}';
$.fn.pagination.defaults.displayMsg = 'Показани {from} за {to} от {total} продукти';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Обработка, моля изчакайте ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Добре';
$.messager.defaults.cancel = 'Задрасквам';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Това поле е задължително.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Моля, въведете валиден имейл адрес.';
$.fn.validatebox.defaults.rules.url.message = 'Моля въведете валиден URL.';
$.fn.validatebox.defaults.rules.length.message = 'Моля, въведете стойност между {0} и {1}.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Днес';
$.fn.datebox.defaults.closeText = 'Близо';
$.fn.datebox.defaults.okText = 'Добре';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-ca.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Pàgina';
$.fn.pagination.defaults.afterPageText = 'de {pages}';
$.fn.pagination.defaults.displayMsg = "Veient {from} a {to} de {total} d'articles";
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Elaboració, si us plau esperi ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Cancel';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Aquest camp és obligatori.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Introduïu una adreça de correu electrònic vàlida.';
$.fn.validatebox.defaults.rules.url.message = 'Si us plau, introduïu un URL vàlida.';
$.fn.validatebox.defaults.rules.length.message = 'Si us plau, introduïu un valor entre {0} i {1}.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Avui';
$.fn.datebox.defaults.closeText = 'Tancar';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-cs.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Strana';
$.fn.pagination.defaults.afterPageText = 'z {pages}';
$.fn.pagination.defaults.displayMsg = 'Zobrazuji {from} do {to} z {total} položky';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Zpracování, čekejte prosím ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Zrušit';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Zadejte prosím platnou e-mailovou adresu.';
$.fn.validatebox.defaults.rules.url.message = 'Zadejte prosím platnou adresu URL.';
$.fn.validatebox.defaults.rules.length.message = 'Prosím, zadejte hodnotu mezi {0} a {1}.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Dnes';
$.fn.datebox.defaults.closeText = 'Zavřít';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-cz.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Strana';
$.fn.pagination.defaults.afterPageText = 'z {pages}';
$.fn.pagination.defaults.displayMsg = 'Zobrazuji záznam {from} až {to} z {total}.';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Pracuji, čekejte prosím…';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Zrušit';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Zadejte, prosím, platnou e-mailovou adresu.';
$.fn.validatebox.defaults.rules.url.message = 'Zadejte, prosím, platnou adresu URL.';
$.fn.validatebox.defaults.rules.length.message = 'Zadejte, prosím, hodnotu mezi {0} a {1}.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['N','P','Ú','S','Č','P','S']; //neděle pondělí úterý středa čtvrtek pátek sobota
$.fn.calendar.defaults.months = ['led', 'únr', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro']; //leden únor březen duben květen červen červenec srpen září říjen listopad prosinec
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Dnes';
$.fn.datebox.defaults.closeText = 'Zavřít';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-da.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Page';
$.fn.pagination.defaults.afterPageText = 'af {pages}';
$.fn.pagination.defaults.displayMsg = 'Viser {from} til {to} af {total} poster';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Behandling, vent venligst ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Annuller';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Dette felt er påkrævet.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Angiv en gyldig e-mail-adresse.';
$.fn.validatebox.defaults.rules.url.message = 'Angiv en gyldig webadresse.';
$.fn.validatebox.defaults.rules.length.message = 'Angiv en værdi mellem {0} og {1}.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'I dag';
$.fn.datebox.defaults.closeText = 'Luk';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-de.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Seite';
$.fn.pagination.defaults.afterPageText = 'von {pages}';
$.fn.pagination.defaults.displayMsg = '{from} bis {to} von {total} Datensätzen';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Verarbeitung läuft, bitte warten ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'OK';
$.messager.defaults.cancel = 'Abbruch';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Dieses Feld wird benötigt.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
$.fn.validatebox.defaults.rules.url.message = 'Bitte geben Sie eine gültige URL ein.';
$.fn.validatebox.defaults.rules.length.message = 'Bitte geben Sie einen Wert zwischen {0} und {1} ein.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.firstDay = 1;
$.fn.calendar.defaults.weeks = ['S','M','D','M','D','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Heute';
$.fn.datebox.defaults.closeText = 'Schließen';
$.fn.datebox.defaults.okText = 'OK';
$.fn.datebox.defaults.formatter = function(date){
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
return (d<10?('0'+d):d)+'.'+(m<10?('0'+m):m)+'.'+y;
};
$.fn.datebox.defaults.parser = function(s){
if (!s) return new Date();
var ss = s.split('.');
var m = parseInt(ss[1],10);
var d = parseInt(ss[0],10);
var y = parseInt(ss[2],10);
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
return new Date(y,m-1,d);
} else {
return new Date();
}
};
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-el.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Σελίδα';
$.fn.pagination.defaults.afterPageText = 'από {pages}';
$.fn.pagination.defaults.displayMsg = 'Εμφάνιση {from} εώς {to} από {total} αντικείμενα';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Γίνεται Επεξεργασία, Παρακαλώ Περιμένετε ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Εντάξει';
$.messager.defaults.cancel = 'Άκυρο';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Το πεδίο είναι υποχρεωτικό.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Παρακαλώ εισάγετε σωστή Ηλ.Διεύθυνση.';
$.fn.validatebox.defaults.rules.url.message = 'Παρακαλώ εισάγετε σωστό σύνδεσμο.';
$.fn.validatebox.defaults.rules.length.message = 'Παρακαλώ εισάγετε τιμή μεταξύ {0} και {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Παρακαλώ διορθώστε αυτό το πεδίο.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'];
$.fn.calendar.defaults.months = ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαϊ', 'Ιου', 'Ιου', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Σήμερα';
$.fn.datebox.defaults.closeText = 'Κλείσιμο';
$.fn.datebox.defaults.okText = 'Εντάξει';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-en.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Page';
$.fn.pagination.defaults.afterPageText = 'of {pages}';
$.fn.pagination.defaults.displayMsg = 'Displaying {from} to {to} of {total} items';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Processing, please wait ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Cancel';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'This field is required.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Please enter a valid email address.';
$.fn.validatebox.defaults.rules.url.message = 'Please enter a valid URL.';
$.fn.validatebox.defaults.rules.length.message = 'Please enter a value between {0} and {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Please fix this field.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Today';
$.fn.datebox.defaults.closeText = 'Close';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-es.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Página';
$.fn.pagination.defaults.afterPageText = 'de {pages}';
$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} elementos';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Procesando, por favor espere ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Aceptar';
$.messager.defaults.cancel = 'Cancelar';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Este campo es obligatorio.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Por favor ingrese una dirección de correo válida.';
$.fn.validatebox.defaults.rules.url.message = 'Por favor ingrese una URL válida.';
$.fn.validatebox.defaults.rules.length.message = 'Por favor ingrese un valor entre {0} y {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Por favor corrija este campo.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['Do','Lu','Ma','Mi','Ju','Vi','Sá'];
$.fn.calendar.defaults.months = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Hoy';
$.fn.datebox.defaults.closeText = 'Cerrar';
$.fn.datebox.defaults.okText = 'Aceptar';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-fa.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'صفحه';
$.fn.pagination.defaults.afterPageText = 'از {pages}';
$.fn.pagination.defaults.displayMsg = 'نمایش {from} تا {to} از {total} مورد';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'درحال پردازش، لطفا صبر کنید...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'قبول';
$.messager.defaults.cancel = 'انصراف';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'این فیلد اجباری می باشد.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'لطفا آدرس ایمیل را صحیح وارد کنید.';
$.fn.validatebox.defaults.rules.url.message = 'لطفا آدرس سایت را صحیح وارد کنید.';
$.fn.validatebox.defaults.rules.length.message = 'لطفا مقداری بین {0} و {1} وارد کنید.';
$.fn.validatebox.defaults.rules.remote.message = 'لطفا مقدار این فیلد را تصحیح کنید.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'امروز';
$.fn.datebox.defaults.closeText = 'بستن';
$.fn.datebox.defaults.okText = 'قبول';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-fr.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Page';
$.fn.pagination.defaults.afterPageText = 'de {pages}';
$.fn.pagination.defaults.displayMsg = 'Affichage de {from} et {to} au {total} des articles';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = "Traitement, s'il vous plaît patienter ...";
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Annuler';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Ce champ est obligatoire.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = "S'il vous plaît entrer une adresse email valide.";
$.fn.validatebox.defaults.rules.url.message = "S'il vous plaît entrer une URL valide.";
$.fn.validatebox.defaults.rules.length.message = "S'il vous plaît entrez une valeur comprise entre {0} et {1}.";
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Aôu", "Sep", "Oct", "Nov", "Déc"];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = "Aujourd'hui";
$.fn.datebox.defaults.closeText = 'Fermer';
$.fn.datebox.defaults.okText = 'Ok';
$.fn.datebox.defaults.formatter = function(date){
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
return (d<10?('0'+d):d)+'/'+(m<10?('0'+m):m)+'/'+y;
};
$.fn.datebox.defaults.parser = function(s){
if (!s) return new Date();
var ss = s.split('/');
var d = parseInt(ss[0],10);
var m = parseInt(ss[1],10);
var y = parseInt(ss[2],10);
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
return new Date(y,m-1,d);
} else {
return new Date();
}
};
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-it.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Pagina';
$.fn.pagination.defaults.afterPageText = 'di {pages}';
$.fn.pagination.defaults.displayMsg = 'Visualizzazione {from} a {to} di {total} elementi';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'In lavorazione, attendere ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Annulla';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Questo campo è richiesto.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Inserisci un indirizzo email valido.';
$.fn.validatebox.defaults.rules.url.message = 'Inserisci un URL valido.';
$.fn.validatebox.defaults.rules.length.message = 'Inserisci un valore tra {0} e {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Correggere questo campo.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.firstDay = 1;
$.fn.calendar.defaults.weeks = ['D','L','M','M','G','V','S'];
$.fn.calendar.defaults.months = ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Oggi';
$.fn.datebox.defaults.closeText = 'Chiudi';
$.fn.datebox.defaults.okText = 'Ok';
$.fn.datebox.defaults.formatter = function(date){
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
return (d<10?('0'+d):d)+'/'+(m<10?('0'+m):m)+'/'+y;
};
$.fn.datebox.defaults.parser = function(s){
if (!s) return new Date();
var ss = s.split('/');
var d = parseInt(ss[0],10);
var m = parseInt(ss[1],10);
var y = parseInt(ss[2],10);
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
return new Date(y,m-1,d);
} else {
return new Date();
}
};
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-jp.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'ページ';
$.fn.pagination.defaults.afterPageText = '{pages} 中';
$.fn.pagination.defaults.displayMsg = '全 {total} アイテム中 {from} から {to} を表示中';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = '処理中です。少々お待ちください...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'OK';
$.messager.defaults.cancel = 'キャンセル';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = '入力は必須です。';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = '正しいメールアドレスを入力してください。';
$.fn.validatebox.defaults.rules.url.message = '正しいURLを入力してください。';
$.fn.validatebox.defaults.rules.length.message = '{0} から {1} の範囲の正しい値を入力してください。';
$.fn.validatebox.defaults.rules.remote.message = 'このフィールドを修正してください。';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['日','月','火','水','木','金','土'];
$.fn.calendar.defaults.months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = '今日';
$.fn.datebox.defaults.closeText = '閉じる';
$.fn.datebox.defaults.okText = 'OK';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-ko.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = '페이지';
$.fn.pagination.defaults.afterPageText = '{pages} 중';
$.fn.pagination.defaults.displayMsg = '전체 {total} 항목 중 {from}부터 {to}번째';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = '처리 중입니다. 잠시만 기다려 주세요...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = '확인';
$.messager.defaults.cancel = '취소';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = '필수 항목입니다.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = '올바른 메일 주소를 입력해 주세요.';
$.fn.validatebox.defaults.rules.url.message = '올바른 URL를 입력해 주세요.';
$.fn.validatebox.defaults.rules.length.message = '{0}에서 {1} 사이의 값을 입력해 주세요.';
$.fn.validatebox.defaults.rules.remote.message = '이 필드를 수정해 주세요.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['일','월','화','수','목','금','토'];
$.fn.calendar.defaults.months = ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = '오늘';
$.fn.datebox.defaults.closeText = '닫기';
$.fn.datebox.defaults.okText = '확인';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-nl.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Pagina';
$.fn.pagination.defaults.afterPageText = 'van {pages}';
$.fn.pagination.defaults.displayMsg = 'Tonen van {from} tot {to} van de {total} items';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Verwerking, even geduld ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Annuleren';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Dit veld is verplicht.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Geef een geldig e-mailadres.';
$.fn.validatebox.defaults.rules.url.message = 'Vul een geldige URL.';
$.fn.validatebox.defaults.rules.length.message = 'Voer een waarde tussen {0} en {1}.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Vandaag';
$.fn.datebox.defaults.closeText = 'Dicht';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-pl.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Strona';
$.fn.pagination.defaults.afterPageText = 'z {pages}';
$.fn.pagination.defaults.displayMsg = 'Wyświetlono elementy od {from} do {to} z {total}';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Przetwarzanie, proszę czekać ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Cancel';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'To pole jest wymagane.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Wprowadź poprawny adres email.';
$.fn.validatebox.defaults.rules.url.message = 'Wprowadź poprawny adres URL.';
$.fn.validatebox.defaults.rules.length.message = 'Wprowadź wartość z zakresu od {0} do {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Proszę poprawić to pole.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['N','P','W','Ś','C','P','S'];
$.fn.calendar.defaults.months = ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Dzisiaj';
$.fn.datebox.defaults.closeText = 'Zamknij';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-pt_BR.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Página';
$.fn.pagination.defaults.afterPageText = 'de {pages}';
$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} itens';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Processando, aguarde ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Cancelar';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Esse campo é requerido.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Insira um endereço de email válido.';
$.fn.validatebox.defaults.rules.url.message = 'Insira uma URL válida.';
$.fn.validatebox.defaults.rules.length.message = 'Insira uma valor entre {0} e {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Corrija esse campo.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['D','S','T','Q','Q','S','S'];
$.fn.calendar.defaults.months = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Hoje';
$.fn.datebox.defaults.closeText = 'Fechar';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-ru.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Страница';
$.fn.pagination.defaults.afterPageText = 'из {pages}';
$.fn.pagination.defaults.displayMsg = 'Просмотр {from} до {to} из {total} записей';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Обрабатывается, пожалуйста ждите ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ок';
$.messager.defaults.cancel = 'Закрыть';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Это поле необходимо.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Пожалуйста введите корректный e-mail адрес.';
$.fn.validatebox.defaults.rules.url.message = 'Пожалуйста введите корректный URL.';
$.fn.validatebox.defaults.rules.length.message = 'Пожалуйста введите зачение между {0} и {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Пожалуйста исправте это поле.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.firstDay = 1;
$.fn.calendar.defaults.weeks = ['В','П','В','С','Ч','П','С'];
$.fn.calendar.defaults.months = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Сегодня';
$.fn.datebox.defaults.closeText = 'Закрыть';
$.fn.datebox.defaults.okText = 'Ок';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-sv_SE.js
================================================
if ($.fn.pagination) {
$.fn.pagination.defaults.beforePageText = 'Sida';
$.fn.pagination.defaults.afterPageText = 'av {pages}';
$.fn.pagination.defaults.displayMsg = 'Visar {from} till {to} av {total} poster';
}
if ($.fn.datagrid) {
$.fn.datagrid.defaults.loadMsg = 'Bearbetar, vänligen vänta ...';
}
if ($.fn.treegrid && $.fn.datagrid) {
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager) {
$.messager.defaults.ok = 'Ok';
$.messager.defaults.cancel = 'Avbryt';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Detta fält är obligatoriskt.';
}
});
if ($.fn.validatebox) {
$.fn.validatebox.defaults.rules.email.message = 'Vänligen ange en korrekt e-post adress.';
$.fn.validatebox.defaults.rules.url.message = 'Vänligen ange en korrekt URL.';
$.fn.validatebox.defaults.rules.length.message = 'Vänligen ange ett nummer mellan {0} och {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Vänligen åtgärda detta fält.';
}
if ($.fn.calendar) {
$.fn.calendar.defaults.weeks = ['Sön', 'Mån', 'Tis', 'Ons', 'Tors', 'Fre', 'Lör'];
$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'];
}
if ($.fn.datebox) {
$.fn.datebox.defaults.currentText = 'I dag';
$.fn.datebox.defaults.closeText = 'Stäng';
$.fn.datebox.defaults.okText = 'Ok';
}
if ($.fn.datetimebox && $.fn.datebox) {
$.extend($.fn.datetimebox.defaults, {
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-tr.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Sayfa';
$.fn.pagination.defaults.afterPageText = ' / {pages}';
$.fn.pagination.defaults.displayMsg = '{from} ile {to} arası gösteriliyor, toplam {total} kayıt';
}
if ($.fn.datagrid){
$.fn.panel.defaults.loadingMessage = "Yükleniyor...";
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadingMessage = "Yükleniyor...";
$.fn.datagrid.defaults.loadMsg = 'İşleminiz Yapılıyor, lütfen bekleyin ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Tamam';
$.messager.defaults.cancel = 'İptal';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Bu alan zorunludur.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Lütfen geçerli bir email adresi giriniz.';
$.fn.validatebox.defaults.rules.url.message = 'Lütfen geçerli bir URL giriniz.';
$.fn.validatebox.defaults.rules.length.message = 'Lütfen {0} ile {1} arasında bir değer giriniz.';
$.fn.validatebox.defaults.rules.remote.message = 'Lütfen bu alanı düzeltiniz.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'];
$.fn.calendar.defaults.months = ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Bugün';
$.fn.datebox.defaults.closeText = 'Kapat';
$.fn.datebox.defaults.okText = 'Tamam';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
$.fn.datebox.defaults.formatter=function(date){
var y=date.getFullYear();
var m=date.getMonth()+1;
var d=date.getDate();
if(m<10){m="0"+m;}
if(d<10){d="0"+d;}
return d+"."+m+"."+y;
};
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-ua.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = 'Сторінка';
$.fn.pagination.defaults.afterPageText = 'з {pages}';
$.fn.pagination.defaults.displayMsg = 'Перегляд {from} до {to} з {total} записів';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = 'Обробляється, зачекайте будь даска ...';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = 'Ок';
$.messager.defaults.cancel = 'Закрити';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = 'Це поле необхідно.';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = 'Будь ласка, введіть коректну e-mail адресу.';
$.fn.validatebox.defaults.rules.url.message = 'Будь ласка, введіть коректний URL.';
$.fn.validatebox.defaults.rules.length.message = 'Будь ласка введіть значення між {0} і {1}.';
$.fn.validatebox.defaults.rules.remote.message = 'Будь ласка виправте це поле.';
}
if ($.fn.calendar){
$.fn.calendar.defaults.firstDay = 1;
$.fn.calendar.defaults.weeks = ['В','П','В','С','Ч','П','С'];
$.fn.calendar.defaults.months = ['Січ', 'Лют', 'Бер', 'Квіт', 'Трав', 'Черв', 'Лип', 'Серп', 'Вер', 'Жовт', 'Лист', 'Груд'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = 'Сьогодні';
$.fn.datebox.defaults.closeText = 'Закрити';
$.fn.datebox.defaults.okText = 'Ок';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-zh_CN.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = '第';
$.fn.pagination.defaults.afterPageText = '共{pages}页';
$.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = '正在处理,请稍待。。。';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = '确定';
$.messager.defaults.cancel = '取消';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = '该输入项为必输项';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址';
$.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址';
$.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间';
$.fn.validatebox.defaults.rules.remote.message = '请修正该字段';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];
$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = '今天';
$.fn.datebox.defaults.closeText = '关闭';
$.fn.datebox.defaults.okText = '确定';
$.fn.datebox.defaults.formatter = function(date){
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d);
};
$.fn.datebox.defaults.parser = function(s){
if (!s) return new Date();
var ss = s.split('-');
var y = parseInt(ss[0],10);
var m = parseInt(ss[1],10);
var d = parseInt(ss[2],10);
if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
return new Date(y,m-1,d);
} else {
return new Date();
}
};
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
if ($.fn.datetimespinner){
$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]
}
================================================
FILE: src/main/resources/static/easyui/locale/easyui-lang-zh_TW.js
================================================
if ($.fn.pagination){
$.fn.pagination.defaults.beforePageText = '第';
$.fn.pagination.defaults.afterPageText = '共{pages}頁';
$.fn.pagination.defaults.displayMsg = '顯示{from}到{to},共{total}記錄';
}
if ($.fn.datagrid){
$.fn.datagrid.defaults.loadMsg = '正在處理,請稍待。。。';
}
if ($.fn.treegrid && $.fn.datagrid){
$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;
}
if ($.messager){
$.messager.defaults.ok = '確定';
$.messager.defaults.cancel = '取消';
}
$.map(['validatebox','textbox','passwordbox','filebox','searchbox',
'combo','combobox','combogrid','combotree',
'datebox','datetimebox','numberbox',
'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
if ($.fn[plugin]){
$.fn[plugin].defaults.missingMessage = '該輸入項為必輸項';
}
});
if ($.fn.validatebox){
$.fn.validatebox.defaults.rules.email.message = '請輸入有效的電子郵件地址';
$.fn.validatebox.defaults.rules.url.message = '請輸入有效的URL地址';
$.fn.validatebox.defaults.rules.length.message = '輸入內容長度必須介於{0}和{1}之間';
$.fn.validatebox.defaults.rules.remote.message = '請修正此欄位';
}
if ($.fn.calendar){
$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];
$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
}
if ($.fn.datebox){
$.fn.datebox.defaults.currentText = '今天';
$.fn.datebox.defaults.closeText = '關閉';
$.fn.datebox.defaults.okText = '確定';
}
if ($.fn.datetimebox && $.fn.datebox){
$.extend($.fn.datetimebox.defaults,{
currentText: $.fn.datebox.defaults.currentText,
closeText: $.fn.datebox.defaults.closeText,
okText: $.fn.datebox.defaults.okText
});
}
if ($.fn.datetimespinner){
$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]
}
================================================
FILE: src/main/resources/static/easyui/plugins/jquery.accordion.js
================================================
/**
* EasyUI for jQuery 1.5.5.4
*
* Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
*
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
* To use it on other terms please contact us: info@jeasyui.com
*
*/
(function($){
function _1(_2,_3){
var _4=$.data(_2,"accordion");
var _5=_4.options;
var _6=_4.panels;
var cc=$(_2);
var _7=(_5.halign=="left"||_5.halign=="right");
cc.children(".panel-last").removeClass("panel-last");
cc.children(".panel:last").addClass("panel-last");
if(_3){
$.extend(_5,{width:_3.width,height:_3.height});
}
cc._size(_5);
var _8=0;
var _9="auto";
var _a=cc.find(">.panel>.accordion-header");
if(_a.length){
if(_7){
$(_6[0]).panel("resize",{width:cc.width(),height:cc.height()});
_8=$(_a[0])._outerWidth();
}else{
_8=$(_a[0]).css("height","")._outerHeight();
}
}
if(!isNaN(parseInt(_5.height))){
if(_7){
_9=cc.width()-_8*_a.length;
}else{
_9=cc.height()-_8*_a.length;
}
}
_b(true,_9-_b(false));
function _b(_c,_d){
var _e=0;
for(var i=0;i<_6.length;i++){
var p=_6[i];
if(_7){
var h=p.panel("header")._outerWidth(_8);
}else{
var h=p.panel("header")._outerHeight(_8);
}
if(p.panel("options").collapsible==_c){
var _f=isNaN(_d)?undefined:(_d+_8*h.length);
if(_7){
p.panel("resize",{height:cc.height(),width:(_c?_f:undefined)});
_e+=p.panel("panel")._outerWidth()-_8*h.length;
}else{
p.panel("resize",{width:cc.width(),height:(_c?_f:undefined)});
_e+=p.panel("panel").outerHeight()-_8*h.length;
}
}
}
return _e;
};
};
function _10(_11,_12,_13,all){
var _14=$.data(_11,"accordion").panels;
var pp=[];
for(var i=0;i<_14.length;i++){
var p=_14[i];
if(_12){
if(p.panel("options")[_12]==_13){
pp.push(p);
}
}else{
if(p[0]==$(_13)[0]){
return i;
}
}
}
if(_12){
return all?pp:(pp.length?pp[0]:null);
}else{
return -1;
}
};
function _15(_16){
return _10(_16,"collapsed",false,true);
};
function _17(_18){
var pp=_15(_18);
return pp.length?pp[0]:null;
};
function _19(_1a,_1b){
return _10(_1a,null,_1b);
};
function _1c(_1d,_1e){
var _1f=$.data(_1d,"accordion").panels;
if(typeof _1e=="number"){
if(_1e<0||_1e>=_1f.length){
return null;
}else{
return _1f[_1e];
}
}
return _10(_1d,"title",_1e);
};
function _20(_21){
var _22=$.data(_21,"accordion").options;
var cc=$(_21);
if(_22.border){
cc.removeClass("accordion-noborder");
}else{
cc.addClass("accordion-noborder");
}
};
function _23(_24){
var _25=$.data(_24,"accordion");
var cc=$(_24);
cc.addClass("accordion");
_25.panels=[];
cc.children("div").each(function(){
var _26=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)});
var pp=$(this);
_25.panels.push(pp);
_28(_24,pp,_26);
});
cc.bind("_resize",function(e,_27){
if($(this).hasClass("easyui-fluid")||_27){
_1(_24);
}
return false;
});
};
function _28(_29,pp,_2a){
var _2b=$.data(_29,"accordion").options;
pp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:"accordion-header",bodyCls:"accordion-body",halign:_2b.halign},_2a,{onBeforeExpand:function(){
if(_2a.onBeforeExpand){
if(_2a.onBeforeExpand.call(this)==false){
return false;
}
}
if(!_2b.multiple){
var all=$.grep(_15(_29),function(p){
return p.panel("options").collapsible;
});
for(var i=0;i<all.length;i++){
_34(_29,_19(_29,all[i]));
}
}
var _2c=$(this).panel("header");
_2c.addClass("accordion-header-selected");
_2c.find(".accordion-collapse").removeClass("accordion-expand");
},onExpand:function(){
$(_29).find(">.panel-last>.accordion-header").removeClass("accordion-header-border");
if(_2a.onExpand){
_2a.onExpand.call(this);
}
_2b.onSelect.call(_29,$(this).panel("options").title,_19(_29,this));
},onBeforeCollapse:function(){
if(_2a.onBeforeCollapse){
if(_2a.onBeforeCollapse.call(this)==false){
return false;
}
}
$(_29).find(">.panel-last>.accordion-header").addClass("accordion-header-border");
var _2d=$(this).panel("header");
_2d.removeClass("accordion-header-selected");
_2d.find(".accordion-collapse").addClass("accordion-expand");
},onCollapse:function(){
if(isNaN(parseInt(_2b.height))){
$(_29).find(">.panel-last>.accordion-header").removeClass("accordion-header-border");
}
if(_2a.onCollapse){
_2a.onCollapse.call(this);
}
_2b.onUnselect.call(_29,$(this).panel("options").title,_19(_29,this));
}}));
var _2e=pp.panel("header");
var _2f=_2e.children("div.panel-tool");
_2f.children("a.panel-tool-collapse").hide();
var t=$("<a href=\"javascript:;\"></a>").addClass("accordion-collapse accordion-expand").appendTo(_2f);
t.bind("click",function(){
_30(pp);
return false;
});
pp.panel("options").collapsible?t.show():t.hide();
if(_2b.halign=="left"||_2b.halign=="right"){
t.hide();
}
_2e.click(function(){
_30(pp);
return false;
});
function _30(p){
var _31=p.panel("options");
if(_31.collapsible){
var _32=_19(_29,p);
if(_31.collapsed){
_33(_29,_32);
}else{
_34(_29,_32);
}
}
};
};
function _33(_35,_36){
var p=_1c(_35,_36);
if(!p){
return;
}
_37(_35);
var _38=$.data(_35,"accordion").options;
p.panel("expand",_38.animate);
};
function _34(_39,_3a){
var p=_1c(_39,_3a);
if(!p){
return;
}
_37(_39);
var _3b=$.data(_39,"accordion").options;
p.panel("collapse",_3b.animate);
};
function _3c(_3d){
var _3e=$.data(_3d,"accordion").options;
$(_3d).find(">.panel-last>.accordion-header").addClass("accordion-header-border");
var p=_10(_3d,"selected",true);
if(p){
_3f(_19(_3d,p));
}else{
_3f(_3e.selected);
}
function _3f(_40){
var _41=_3e.animate;
_3e.animate=false;
_33(_3d,_40);
_3e.animate=_41;
};
};
function _37(_42){
var _43=$.data(_42,"accordion").panels;
for(var i=0;i<_43.length;i++){
_43[i].stop(true,true);
}
};
function add(_44,_45){
var _46=$.data(_44,"accordion");
var _47=_46.options;
var _48=_46.panels;
if(_45.selected==undefined){
_45.selected=true;
}
_37(_44);
var pp=$("<div></div>").appendTo(_44);
_48.push(pp);
_28(_44,pp,_45);
_1(_44);
_47.onAdd.call(_44,_45.title,_48.length-1);
if(_45.selected){
_33(_44,_48.length-1);
}
};
function _49(_4a,_4b){
var _4c=$.data(_4a,"accordion");
var _4d=_4c.options;
var _4e=_4c.panels;
_37(_4a);
var _4f=_1c(_4a,_4b);
var _50=_4f.panel("options").title;
var _51=_19(_4a,_4f);
if(!_4f){
return;
}
if(_4d.onBeforeRemove.call(_4a,_50,_51)==false){
return;
}
_4e.splice(_51,1);
_4f.panel("destroy");
if(_4e.length){
_1(_4a);
var _52=_17(_4a);
if(!_52){
_33(_4a,0);
}
}
_4d.onRemove.call(_4a,_50,_51);
};
$.fn.accordion=function(_53,_54){
if(typeof _53=="string"){
return $.fn.accordion.methods[_53](this,_54);
}
_53=_53||{};
return this.each(function(){
var _55=$.data(this,"accordion");
if(_55){
$.extend(_55.options,_53);
}else{
$.data(this,"accordion",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_53),accordion:$(this).addClass("accordion"),panels:[]});
_23(this);
}
_20(this);
_1(this);
_3c(this);
});
};
$.fn.accordion.methods={options:function(jq){
return $.data(jq[0],"accordion").options;
},panels:function(jq){
return $.data(jq[0],"accordion").panels;
},resize:function(jq,_56){
return jq.each(function(){
_1(this,_56);
});
},getSelections:function(jq){
return _15(jq[0]);
},getSelected:function(jq){
return _17(jq[0]);
},getPanel:function(jq,_57){
return _1c(jq[0],_57);
},getPanelIndex:function(jq,_58){
return _19(jq[0],_58);
},select:function(jq,_59){
return jq.each(function(){
_33(this,_59);
});
},unselect:function(jq,_5a){
return jq.each(function(){
_34(this,_5a);
});
},add:function(jq,_5b){
return jq.each(function(){
add(this,_5b);
});
},remove:function(jq,_5c){
return jq.each(function(){
_49(this,_5c);
});
}};
$.fn.accordion.parseOptions=function(_5d){
var t=$(_5d);
return $.extend({},$.parser.parseOptions(_5d,["width","height","halign",{fit:"boolean",border:"boolean",animate:"boolean",multiple:"boolean",selected:"number"}]));
};
$.fn.accordion.defaults={width:"auto",height:"auto",fit:false,border:true,animate:true,multiple:false,selected:0,halign:"top",onSelect:function(_5e,_5f){
},onUnselect:function(_60,_61){
},onAdd:function(_62,_63){
},onBeforeRemove:function(_64,_65){
},onRemove:function(_66,_67){
}};
})(jQuery);
================================================
FILE: src/main/resources/static/easyui/plugins/jquery.calendar.js
================================================
/**
* EasyUI for jQuery 1.5.5.4
*
* Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
*
* Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
* To use it on other terms please contact us: info@jeasyui.com
*
*/
(function($){
function _1(_2,_3){
var _4=$.data(_2,"calendar").options;
var t=$(_2);
if(_3){
$.extend(_4,{width:_3.width,height:_3.height});
}
t._size(_4,t.parent());
t.find(".calendar-body")._outerHeight(t.height()-t.find(".calendar-header")._outerHeight());
if(t.find(".calendar-menu").is(":visible")){
_5(_2);
}
};
function _6(_7){
$(_7).addClass("calendar").html("<div class=\"calendar-header\">"+"<div class=\"calendar-nav calendar-prevmonth\"></div>"+"<div class=\"calendar-nav calendar-nextmonth\"></div>"+"<div class=\"calendar-nav calendar-prevyear\"></div>"+"<div class=\"calendar-nav calendar-nextyear\"></div>"+"<div class=\"calendar-title\">"+"<span class=\"calendar-text\"></span>"+"</div>"+"</div>"+"<div class=\"calendar-body\">"+"<div class=\"calendar-menu\">"+"<div class=\"calendar-menu-year-inner\">"+"<span class=\"calendar-nav calendar-menu-prev\"></span>"+"<span><input class=\"calendar-menu-year\" type=\"text\"></input></span>"+"<span class=\"calendar-nav calendar-menu-next\"></span>"+"</div>"+"<div class=\"calendar-menu-month-inner\">"+"</div>"+"</div>"+"</div>");
$(_7).bind("_resize",function(e,_8){
if($(this).hasClass("easyui-fluid")||_8){
_1(_7);
}
return false;
});
};
function _9(_a){
var _b=$.data(_a,"calendar").options;
var _c=$(_a).find(".calendar-menu");
_c.find(".calendar-menu-year").unbind(".calendar").bind("keypress.calendar",function(e){
if(e.keyCode==13){
_d(true);
}
});
$(_a).unbind(".calendar").bind("mouseover.calendar",function(e){
var t=_e(e.target);
if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){
t.addClass("calendar-nav-hover");
}
}).bind("mouseout.calendar",function(e){
var t=_e(e.target);
if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){
t.removeClass("calendar-nav-hover");
}
}).bind("click.calendar",function(e){
var t=_e(e.target);
if(t.hasClass("calendar-menu-next")||t.hasClass("calendar-nextyear")){
_f(1);
}else{
if(t.hasClass("calendar-menu-prev")||t.hasClass("calendar-prevyear")){
_f(-1);
}else{
if(t.hasClass("calendar-menu-month")){
_c.find(".calendar-selected").removeClass("calendar-selected");
t.addClass("calendar-selected");
_d(true);
}else{
if(t.hasClass("calendar-prevmonth")){
_10(-1);
}else{
if(t.hasClass("calendar-nextmonth")){
_10(1);
}else{
if(t.hasClass("calendar-text")){
if(_c.is(":visible")){
_c.hide();
}else{
_5(_a);
}
}else{
if(t.hasClass("calendar-day")){
if(t.hasClass("calendar-disabled")){
return;
}
var _11=_b.current;
t.closest("div.calendar-body").find(".calendar-selected").removeClass("calendar-selected");
t.addClass("calendar-selected");
var _12=t.attr("abbr").split(",");
var y=parseInt(_12[0]);
var m=parseInt(_12[1]);
var d=parseInt(_12[2]);
_b.current=new Date(y,m-1,d);
_b.onSelect.call(_a,_b.current);
if(!_11||_11.getTime()!=_b.current.getTime()){
_b.onChange.call(_a,_b.current,_11);
}
if(_b.year!=y||_b.month!=m){
_b.year=y;
_b.mon
gitextract_lledtbfp/
├── .gitignore
├── README.md
├── pom-jar.xml
├── pom-tomcat.xml
├── pom.xml
├── src/
│ ├── main/
│ │ ├── docker/
│ │ │ └── Dockerfile
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── yasenagat/
│ │ │ └── zkweb/
│ │ │ ├── ZkWebSpringBootApplication.java
│ │ │ ├── model/
│ │ │ │ ├── Tree.java
│ │ │ │ ├── TreeNode.java
│ │ │ │ └── TreeRoot.java
│ │ │ ├── util/
│ │ │ │ ├── ConfigUtil.java
│ │ │ │ ├── H2Util.java
│ │ │ │ ├── ZkCache.java
│ │ │ │ ├── ZkCfgFactory.java
│ │ │ │ ├── ZkCfgManager.java
│ │ │ │ ├── ZkCfgManagerImpl.java
│ │ │ │ ├── ZkManager.java
│ │ │ │ ├── ZkManagerImpl.java
│ │ │ │ ├── ZkSpringBootConfiguration.java
│ │ │ │ └── ZkWebMvcConfigurer.java
│ │ │ └── web/
│ │ │ ├── ZkCacheServlet.java
│ │ │ ├── ZkCfgController.java
│ │ │ └── ZkController.java
│ │ ├── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── additional-spring-configuration-metadata.json
│ │ │ ├── application-local.yml
│ │ │ ├── application-zkweb.yaml
│ │ │ ├── logback-spring.xml
│ │ │ ├── logback-zkweb-1.0.9.xml
│ │ │ ├── logback-zkweb-v1.2.3.xml
│ │ │ ├── spring.bak/
│ │ │ │ ├── appServlet/
│ │ │ │ │ ├── controllers.bak.xml
│ │ │ │ │ └── servlet-context.bak.xml
│ │ │ │ └── root-context.bak.xml
│ │ │ ├── static/
│ │ │ │ ├── easyui/
│ │ │ │ │ ├── easyloader.js
│ │ │ │ │ ├── locale/
│ │ │ │ │ │ ├── easyui-lang-af.js
│ │ │ │ │ │ ├── easyui-lang-am.js
│ │ │ │ │ │ ├── easyui-lang-ar.js
│ │ │ │ │ │ ├── easyui-lang-bg.js
│ │ │ │ │ │ ├── easyui-lang-ca.js
│ │ │ │ │ │ ├── easyui-lang-cs.js
│ │ │ │ │ │ ├── easyui-lang-cz.js
│ │ │ │ │ │ ├── easyui-lang-da.js
│ │ │ │ │ │ ├── easyui-lang-de.js
│ │ │ │ │ │ ├── easyui-lang-el.js
│ │ │ │ │ │ ├── easyui-lang-en.js
│ │ │ │ │ │ ├── easyui-lang-es.js
│ │ │ │ │ │ ├── easyui-lang-fa.js
│ │ │ │ │ │ ├── easyui-lang-fr.js
│ │ │ │ │ │ ├── easyui-lang-it.js
│ │ │ │ │ │ ├── easyui-lang-jp.js
│ │ │ │ │ │ ├── easyui-lang-ko.js
│ │ │ │ │ │ ├── easyui-lang-nl.js
│ │ │ │ │ │ ├── easyui-lang-pl.js
│ │ │ │ │ │ ├── easyui-lang-pt_BR.js
│ │ │ │ │ │ ├── easyui-lang-ru.js
│ │ │ │ │ │ ├── easyui-lang-sv_SE.js
│ │ │ │ │ │ ├── easyui-lang-tr.js
│ │ │ │ │ │ ├── easyui-lang-ua.js
│ │ │ │ │ │ ├── easyui-lang-zh_CN.js
│ │ │ │ │ │ └── easyui-lang-zh_TW.js
│ │ │ │ │ ├── plugins/
│ │ │ │ │ │ ├── jquery.accordion.js
│ │ │ │ │ │ ├── jquery.calendar.js
│ │ │ │ │ │ ├── jquery.combo.js
│ │ │ │ │ │ ├── jquery.combobox.js
│ │ │ │ │ │ ├── jquery.combogrid.js
│ │ │ │ │ │ ├── jquery.combotree.js
│ │ │ │ │ │ ├── jquery.combotreegrid.js
│ │ │ │ │ │ ├── jquery.datagrid.js
│ │ │ │ │ │ ├── jquery.datalist.js
│ │ │ │ │ │ ├── jquery.datebox.js
│ │ │ │ │ │ ├── jquery.datetimebox.js
│ │ │ │ │ │ ├── jquery.datetimespinner.js
│ │ │ │ │ │ ├── jquery.dialog.js
│ │ │ │ │ │ ├── jquery.draggable.js
│ │ │ │ │ │ ├── jquery.droppable.js
│ │ │ │ │ │ ├── jquery.filebox.js
│ │ │ │ │ │ ├── jquery.form.js
│ │ │ │ │ │ ├── jquery.layout.js
│ │ │ │ │ │ ├── jquery.linkbutton.js
│ │ │ │ │ │ ├── jquery.maskedbox.js
│ │ │ │ │ │ ├── jquery.menu.js
│ │ │ │ │ │ ├── jquery.menubutton.js
│ │ │ │ │ │ ├── jquery.messager.js
│ │ │ │ │ │ ├── jquery.mobile.js
│ │ │ │ │ │ ├── jquery.numberbox.js
│ │ │ │ │ │ ├── jquery.numberspinner.js
│ │ │ │ │ │ ├── jquery.pagination.js
│ │ │ │ │ │ ├── jquery.panel.js
│ │ │ │ │ │ ├── jquery.parser.js
│ │ │ │ │ │ ├── jquery.passwordbox.js
│ │ │ │ │ │ ├── jquery.progressbar.js
│ │ │ │ │ │ ├── jquery.propertygrid.js
│ │ │ │ │ │ ├── jquery.resizable.js
│ │ │ │ │ │ ├── jquery.searchbox.js
│ │ │ │ │ │ ├── jquery.slider.js
│ │ │ │ │ │ ├── jquery.spinner.js
│ │ │ │ │ │ ├── jquery.splitbutton.js
│ │ │ │ │ │ ├── jquery.switchbutton.js
│ │ │ │ │ │ ├── jquery.tabs.js
│ │ │ │ │ │ ├── jquery.tagbox.js
│ │ │ │ │ │ ├── jquery.textbox.js
│ │ │ │ │ │ ├── jquery.timespinner.js
│ │ │ │ │ │ ├── jquery.tooltip.js
│ │ │ │ │ │ ├── jquery.tree.js
│ │ │ │ │ │ ├── jquery.treegrid.js
│ │ │ │ │ │ ├── jquery.validatebox.js
│ │ │ │ │ │ └── jquery.window.js
│ │ │ │ │ └── themes/
│ │ │ │ │ ├── angular.css
│ │ │ │ │ ├── black/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── bootstrap/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── color.css
│ │ │ │ │ ├── default/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── gray/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── icon.css
│ │ │ │ │ ├── material/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── material-teal/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ ├── metro/
│ │ │ │ │ │ ├── accordion.css
│ │ │ │ │ │ ├── calendar.css
│ │ │ │ │ │ ├── checkbox.css
│ │ │ │ │ │ ├── combo.css
│ │ │ │ │ │ ├── combobox.css
│ │ │ │ │ │ ├── datagrid.css
│ │ │ │ │ │ ├── datalist.css
│ │ │ │ │ │ ├── datebox.css
│ │ │ │ │ │ ├── dialog.css
│ │ │ │ │ │ ├── easyui.css
│ │ │ │ │ │ ├── filebox.css
│ │ │ │ │ │ ├── layout.css
│ │ │ │ │ │ ├── linkbutton.css
│ │ │ │ │ │ ├── menu.css
│ │ │ │ │ │ ├── menubutton.css
│ │ │ │ │ │ ├── messager.css
│ │ │ │ │ │ ├── numberbox.css
│ │ │ │ │ │ ├── pagination.css
│ │ │ │ │ │ ├── panel.css
│ │ │ │ │ │ ├── passwordbox.css
│ │ │ │ │ │ ├── progressbar.css
│ │ │ │ │ │ ├── propertygrid.css
│ │ │ │ │ │ ├── radiobutton.css
│ │ │ │ │ │ ├── searchbox.css
│ │ │ │ │ │ ├── sidemenu.css
│ │ │ │ │ │ ├── slider.css
│ │ │ │ │ │ ├── spinner.css
│ │ │ │ │ │ ├── splitbutton.css
│ │ │ │ │ │ ├── switchbutton.css
│ │ │ │ │ │ ├── tabs.css
│ │ │ │ │ │ ├── tagbox.css
│ │ │ │ │ │ ├── textbox.css
│ │ │ │ │ │ ├── tooltip.css
│ │ │ │ │ │ ├── tree.css
│ │ │ │ │ │ ├── validatebox.css
│ │ │ │ │ │ └── window.css
│ │ │ │ │ └── mobile.css
│ │ │ │ ├── jquery.i18n.properties.js
│ │ │ │ ├── locale/
│ │ │ │ │ ├── strings.properties
│ │ │ │ │ └── strings_zh.properties
│ │ │ │ ├── web.language.js
│ │ │ │ ├── zkweb-language.js
│ │ │ │ └── zkweb.js
│ │ │ ├── templates/
│ │ │ │ ├── head.html
│ │ │ │ ├── home.html
│ │ │ │ └── info.html
│ │ │ └── zk-bak.properties
│ │ └── webapp-bak/
│ │ └── WEB-INF/
│ │ └── web-bak.xml
│ └── test/
│ └── java/
│ └── T.java
└── target/
├── Dockerfile
├── zkWeb-v1.2.1.jar
└── zkWeb-v1.2.1.war
SYMBOL INDEX (680 symbols across 68 files)
FILE: src/main/java/com/yasenagat/zkweb/ZkWebSpringBootApplication.java
class ZkWebSpringBootApplication (line 19) | @SpringBootApplication
method configure (line 36) | @Override
method main (line 43) | public static void main(String[] args) {
FILE: src/main/java/com/yasenagat/zkweb/model/Tree.java
class Tree (line 6) | public class Tree {
method Tree (line 21) | public Tree() {
method Tree (line 26) | public Tree(int id, String text, String state, List<Tree> childern,
method Tree (line 37) | public Tree(int id, String text, String state, List<Tree> childern) {
method Tree (line 46) | public Tree(int id, String text, String state, List<Tree> childern,
method getId (line 58) | public int getId() {
method setId (line 61) | public void setId(int id) {
method getText (line 64) | public String getText() {
method setText (line 67) | public void setText(String text) {
method getState (line 70) | public String getState() {
method setState (line 73) | public void setState(String state) {
method getChildern (line 76) | public List<Tree> getChildern() {
method setChildern (line 79) | public void setChildern(List<Tree> childern) {
method getChecked (line 82) | public Boolean getChecked() {
method setChecked (line 85) | public void setChecked(Boolean checked) {
method getAttributes (line 88) | public Map<String, Object> getAttributes() {
method setAttributes (line 91) | public void setAttributes(Map<String, Object> attributes) {
FILE: src/main/java/com/yasenagat/zkweb/model/TreeNode.java
class TreeNode (line 4) | public class TreeNode {
method getId (line 16) | public int getId() {
method setId (line 19) | public void setId(int id) {
method getName (line 22) | public String getName() {
method setName (line 25) | public void setName(String name) {
method getPid (line 28) | public int getPid() {
method setPid (line 31) | public void setPid(int pid) {
method getFolder (line 34) | public int getFolder() {
method setFolder (line 37) | public void setFolder(int folder) {
method isExpanded (line 40) | public boolean isExpanded() {
method setExpanded (line 43) | public void setExpanded(boolean expanded) {
method getType (line 46) | public String getType() {
method setType (line 49) | public void setType(String type) {
method getUrl (line 52) | public String getUrl() {
method setUrl (line 55) | public void setUrl(String url) {
method getSize (line 58) | public int getSize() {
method setSize (line 61) | public void setSize(int size) {
method getIsLeaf (line 64) | public boolean getIsLeaf() {
method setLeaf (line 67) | public void setLeaf(boolean isLeaf) {
method getPath (line 70) | public String getPath() {
method setPath (line 73) | public void setPath(String path) {
FILE: src/main/java/com/yasenagat/zkweb/model/TreeRoot.java
class TreeRoot (line 8) | public class TreeRoot extends ArrayList<Tree>{
method TreeRoot (line 12) | public TreeRoot() {
method setChildern (line 17) | public void setChildern(List<Tree> childern){
FILE: src/main/java/com/yasenagat/zkweb/util/ConfigUtil.java
class ConfigUtil (line 8) | public class ConfigUtil {
method getP (line 22) | public static Properties getP() {
method setP (line 26) | public static void setP(Properties p) {
method getConfigMessage (line 30) | public static String getConfigMessage(String key) {
method findOtherPathInputStream (line 38) | private static InputStream findOtherPathInputStream(String propFile) {
FILE: src/main/java/com/yasenagat/zkweb/util/H2Util.java
class H2Util (line 16) | public class H2Util {
method getDataSource (line 21) | public static DataSource getDataSource(){
method destroyDataSource (line 25) | public static void destroyDataSource() {
method handle (line 30) | public Object[] handle(ResultSet rs) throws SQLException {
method handle (line 46) | public Map<String, Object> handle(ResultSet rs) throws SQLException {
method handle (line 59) | public Integer handle(ResultSet rs) throws SQLException {
method handle (line 69) | public List<Map<String, Object>> handle(ResultSet rs)
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCache.java
class ZkCache (line 10) | public class ZkCache {
method put (line 14) | public static ZkManager put(String key,ZkManager zk){
method get (line 18) | public static ZkManager get(String key){
method remove (line 22) | public static ZkManager remove(String key){
method size (line 26) | public static int size(){
method get_cache (line 30) | public static Map<String, ZkManager> get_cache() {
method set_cache (line 34) | public static void set_cache(Map<String, ZkManager> _cache) {
method init (line 38) | public static void init(ZkCfgManager cfgManager){
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCfgFactory.java
class ZkCfgFactory (line 3) | public class ZkCfgFactory {
method createZkCfgManager (line 7) | public static ZkCfgManager createZkCfgManager(){
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCfgManager.java
type ZkCfgManager (line 6) | public interface ZkCfgManager {
method add (line 8) | public boolean add(String desc,String connectStr,String sessionTimeOut);
method add (line 9) | public boolean add(String id,String desc,String connectStr,String sess...
method query (line 10) | public List<Map<String, Object>> query(int page, int rows, String wher...
method update (line 11) | public boolean update(String id,String desc,String connectStr,String s...
method delete (line 12) | public boolean delete(String id);
method findById (line 13) | public Map<String, Object> findById(String id);
method count (line 14) | public int count();
method destroyPool (line 17) | public void destroyPool();
method query (line 18) | public List<Map<String, Object>> query();
FILE: src/main/java/com/yasenagat/zkweb/util/ZkCfgManagerImpl.java
class ZkCfgManagerImpl (line 23) | @Component
method ZkCfgManagerImpl (line 35) | public ZkCfgManagerImpl() {
method getConnection (line 40) | private Connection getConnection() throws SQLException{
method closeConn (line 47) | private void closeConn(){
method destroyPool (line 57) | public void destroyPool() {
method init (line 66) | private boolean init() {
method add (line 104) | public boolean add(String desc, String connectStr, String sessionTimeO...
method query (line 130) | public List<Map<String, Object>> query() {
method queryAll (line 136) | public List<Map<String, Object>> queryAll() {
method query (line 142) | private List<Map<String, Object>> query(String whereSql) {
method update (line 188) | public boolean update(String id, String desc, String connectStr,
method delete (line 216) | public boolean delete(String id) {
method findById (line 240) | public Map<String, Object> findById(String id) {
method query (line 281) | public List<Map<String, Object>> query(int page, int rows,String where...
method add (line 333) | public boolean add(String id, String desc, String connectStr,
method count (line 360) | public int count() {
method isTableOk (line 394) | private boolean isTableOk() {
method afterPropertiesSet (line 432) | @Override
FILE: src/main/java/com/yasenagat/zkweb/util/ZkManager.java
type ZkManager (line 6) | public interface ZkManager {
method connect (line 10) | public ZkManagerImpl connect(String host, int timeout);
method disconnect (line 12) | public boolean disconnect();
method reconnect (line 14) | public void reconnect();
method getChildren (line 16) | public List<String> getChildren(String path);
method getData (line 18) | public String getData(String path);
method getData (line 19) | public String getData(String path, boolean isPrintLog);
method getNodeMeta (line 21) | public Map<String, String> getNodeMeta(String nodePath);
method getACLs (line 23) | public List<Map<String, String>> getACLs(String nodePath);
method createNode (line 25) | public boolean createNode(String path, String nodeName, String data);
method deleteNode (line 27) | public boolean deleteNode(String nodePath);
method setData (line 29) | public boolean setData(String nodePath, String data);
method getNodeId (line 31) | public long getNodeId(String nodePath);
type P (line 33) | public enum P {
type Meta (line 38) | public enum Meta {
type Acl (line 54) | public enum Acl {
class PropertyPanel (line 58) | public static class PropertyPanel{
method getName (line 63) | public String getName() {
method getValue (line 66) | public String getValue() {
method getGroup (line 69) | public String getGroup() {
method getEditor (line 72) | public String getEditor() {
method setInfo (line 75) | public void setInfo(String name,String value,String group) {
method setEditor (line 80) | public void setEditor(String editor) {
method getJMXInfo (line 84) | public List<PropertyPanel> getJMXInfo(boolean simpleFlag);
FILE: src/main/java/com/yasenagat/zkweb/util/ZkManagerImpl.java
class ZkManagerImpl (line 40) | public class ZkManagerImpl implements Watcher,ZkManager {
method ZkManagerImpl (line 48) | public ZkManagerImpl(){
method createZk (line 53) | public static ZkManagerImpl createZk(){
class ZkConnectInfo (line 57) | public static class ZkConnectInfo{
class ZkHostPort (line 60) | public static class ZkHostPort{
method getHost (line 63) | public String getHost() {
method setHost (line 66) | public void setHost(String host) {
method getPort (line 69) | public int getPort() {
method setPort (line 72) | public void setPort(int port) {
method getConnectStr (line 76) | public String getConnectStr() {
method setConnectStr (line 79) | public void setConnectStr(String connectStr) {
method getConnectInfo (line 82) | public List<ZkHostPort> getConnectInfo(){
method getTimeout (line 97) | public int getTimeout() {
method setTimeout (line 100) | public void setTimeout(int timeout) {
type ZkState (line 104) | private interface ZkState{
method state (line 105) | List<PropertyPanel> state() throws IOException, MalformedObjectNameE...
method simpleState (line 107) | List<PropertyPanel> simpleState() throws IOException, MalformedObjec...
class ServerStatusByCMD (line 111) | public static class ServerStatusByCMD implements ZkState{
method ServerStatusByCMD (line 129) | public ServerStatusByCMD(ZkConnectInfo zkConnectInfo) {
method executeOneCmdByWch (line 132) | private List<PropertyPanel> executeOneCmdByWch(Socket sock,String cm...
method executeOneCmd (line 159) | private List<PropertyPanel> executeOneCmd(Socket sock,String cmd,Str...
method executeOneCmdSimple (line 218) | private List<PropertyPanel> executeOneCmdSimple(Socket sock,String c...
method state (line 254) | public List<PropertyPanel> state() throws IOException, MalformedObj...
method simpleState (line 258) | public List<PropertyPanel> simpleState() throws MalformedObjectNameE...
method innerState (line 261) | public List<PropertyPanel> innerState(boolean simpleFlag) throws IO...
class ZkJMXInfo (line 310) | public static class ZkJMXInfo {
method ZkJMXInfo (line 312) | public ZkJMXInfo(ZkConnectInfo zkConnectInfo) {
method state (line 323) | public List<Object> state() throws IOException, MalformedObjectName...
method simpleState (line 327) | public List<Object> simpleState() throws MalformedObjectNameExceptio...
method innerState (line 330) | public List<Object> innerState(boolean simpleFlag) throws IOExceptio...
method createMBeanServer (line 480) | public MBeanServerConnection createMBeanServer(String ip, String jmx...
method getAttribute (line 514) | @SuppressWarnings("unused")
method getJMXInfo (line 571) | @Override
method connect (line 585) | public ZkManagerImpl connect(String host, int timeout) {
method disconnect (line 598) | public boolean disconnect() {
method getChildren (line 614) | public List<String> getChildren(String path){
method getData (line 625) | public String getData(String path) {
method getData (line 628) | public String getData(String path,boolean isPrintLog) {
method getNodeMeta (line 647) | public Map<String, String> getNodeMeta(String nodePath) {
method getACLs (line 690) | public List<Map<String, String>> getACLs(String nodePath) {
method createNode (line 750) | public boolean createNode(String path, String nodeName,String data) {
method deleteNode (line 772) | public boolean deleteNode(String nodePath) {
method setData (line 791) | public boolean setData(String nodePath, String data) {
method process (line 802) | public void process(WatchedEvent arg0) {
method getNodeId (line 806) | public long getNodeId(String nodePath) {
method reconnect (line 821) | @Override
FILE: src/main/java/com/yasenagat/zkweb/util/ZkSpringBootConfiguration.java
class ZkSpringBootConfiguration (line 20) | @Configuration
method getDataSource (line 25) | @Bean(name = "dataSource")
method localeResolver (line 53) | @Bean
method requestMappingHandlerAdapter (line 78) | @Bean
FILE: src/main/java/com/yasenagat/zkweb/util/ZkWebMvcConfigurer.java
class ZkWebMvcConfigurer (line 10) | @Configuration
method addViewControllers (line 12) | @Override
method addResourceHandlers (line 17) | @Override
method addInterceptors (line 24) | @Override
method localeChangeInterceptor (line 33) | public LocaleChangeInterceptor localeChangeInterceptor() {
FILE: src/main/java/com/yasenagat/zkweb/web/ZkCacheServlet.java
class ZkCacheServlet (line 18) | @WebServlet(name = "cacheServlet",urlPatterns = "/cache/*")
method ZkCacheServlet (line 28) | public ZkCacheServlet() {
method doGet (line 35) | protected void doGet(HttpServletRequest request, HttpServletResponse r...
method doPost (line 42) | protected void doPost(HttpServletRequest request, HttpServletResponse ...
method init (line 60) | @Override
FILE: src/main/java/com/yasenagat/zkweb/web/ZkCfgController.java
class ZkCfgController (line 21) | @Controller
method queryZkCfg (line 29) | @RequestMapping(value="/queryZkCfg")
method addZkCfg (line 47) | @RequestMapping(value="/addZkCfg",produces="text/html;charset=UTF-8")
method queryZkCfg (line 77) | @RequestMapping(value="/queryZkCfgById")
method updateZkCfg (line 90) | @RequestMapping(value="/updateZkCfg",produces="text/html;charset=UTF-8")
method delZkCfg (line 118) | @RequestMapping(value="/delZkCfg",produces="text/html;charset=UTF-8")
FILE: src/main/java/com/yasenagat/zkweb/web/ZkController.java
class ZkController (line 28) | @Controller
method queryzNodeInfo (line 34) | @RequestMapping(value="/queryZnodeInfo",produces="text/html;charset=UT...
method queryZKOk (line 70) | @RequestMapping(value="/queryZKOk")
method queryZKJMXInfo (line 90) | @RequestMapping(value="/queryZKJMXInfo", produces="application/json;ch...
method query (line 112) | @RequestMapping(value="/queryZnode")
method saveData (line 161) | @RequestMapping(value="/saveData",produces="text/html;charset=UTF-8")
method createNode (line 179) | @RequestMapping(value="/createNode",produces="text/html;charset=UTF-8")
method deleteNode (line 198) | @RequestMapping(value="/deleteNode",produces="text/html;charset=UTF-8")
method destroy (line 216) | @Override
FILE: src/main/resources/static/easyui/easyloader.js
function _4 (line 14) | function _4(_5,_6){
function _9 (line 31) | function _9(_a,_b){
function _c (line 39) | function _c(_d,_e){
function _10 (line 50) | function _10(_11,_12){
function _17 (line 87) | function _17(_18,_19){
FILE: src/main/resources/static/easyui/plugins/jquery.accordion.js
function _1 (line 11) | function _1(_2,_3){
function _10 (line 65) | function _10(_11,_12,_13,all){
function _15 (line 86) | function _15(_16){
function _17 (line 89) | function _17(_18){
function _19 (line 93) | function _19(_1a,_1b){
function _1c (line 96) | function _1c(_1d,_1e){
function _20 (line 107) | function _20(_21){
function _23 (line 116) | function _23(_24){
function _28 (line 134) | function _28(_29,pp,_2a){
function _33 (line 206) | function _33(_35,_36){
function _34 (line 215) | function _34(_39,_3a){
function _3c (line 224) | function _3c(_3d){
function _37 (line 240) | function _37(_42){
function add (line 246) | function add(_44,_45){
function _49 (line 263) | function _49(_4a,_4b){
FILE: src/main/resources/static/easyui/plugins/jquery.calendar.js
function _1 (line 11) | function _1(_2,_3){
function _6 (line 23) | function _6(_7){
function _9 (line 32) | function _9(_a){
function _5 (line 147) | function _5(_1a){
function _20 (line 172) | function _20(_21,_22,_23){
function _19 (line 231) | function _19(_2f){
FILE: src/main/resources/static/easyui/plugins/jquery.combo.js
function _2 (line 21) | function _2(_3){
function _c (line 58) | function _c(_d){
function _10 (line 70) | function _10(_11){
function _1 (line 85) | function _1(_15){
function _16 (line 93) | function _16(e){
function _1b (line 109) | function _1b(e){
function _1f (line 153) | function _1f(e){
function _22 (line 160) | function _22(_23){
function _14 (line 203) | function _14(_2c){
function _2e (line 207) | function _2e(_2f,_30){
function _33 (line 215) | function _33(_34){
function _39 (line 229) | function _39(_3a,_3b){
function _45 (line 277) | function _45(_46){
function _48 (line 281) | function _48(_49,_4a){
function _4b (line 284) | function _4b(_4c){
FILE: src/main/resources/static/easyui/plugins/jquery.combobox.js
function _1 (line 11) | function _1(_2,_3){
function _5 (line 15) | function _5(_6,_7){
function _b (line 32) | function _b(_c,_d){
function _13 (line 68) | function _13(_14,_15,_16){
function _1a (line 80) | function _1a(_1b,_1c){
function _19 (line 89) | function _19(_20,_21,_22){
function _2a (line 156) | function _2a(_2b,_2c,_2d){
function _30 (line 174) | function _30(_31,url,_32,_33){
function _36 (line 189) | function _36(_37,q){
function _41 (line 241) | function _41(_42){
function _47 (line 271) | function _47(_48){
function _4b (line 282) | function _4b(e){
function _4d (line 290) | function _4d(e){
function _4e (line 294) | function _4e(e){
function _53 (line 325) | function _53(e){
function _71 (line 469) | function _71(el,_72){
FILE: src/main/resources/static/easyui/plugins/jquery.combogrid.js
function _1 (line 11) | function _1(_2){
function nav (line 86) | function nav(_23,dir){
function _22 (line 117) | function _22(_29,_2a,_2b){
function _3d (line 175) | function _3d(_3e,q){
function _48 (line 227) | function _48(_49){
FILE: src/main/resources/static/easyui/plugins/jquery.combotree.js
function _1 (line 11) | function _1(_2){
function _e (line 51) | function _e(_f){
function _15 (line 69) | function _15(_16,_17,_18){
function _29 (line 133) | function _29(_2a,q){
function _2e (line 140) | function _2e(_2f){
FILE: src/main/resources/static/easyui/plugins/jquery.combotreegrid.js
function _1 (line 11) | function _1(_2){
function _11 (line 55) | function _11(_12){
function _16 (line 73) | function _16(_17,_18){
function _23 (line 138) | function _23(_24,q){
function _2a (line 196) | function _2a(_2b){
FILE: src/main/resources/static/easyui/plugins/jquery.datagrid.js
function _2 (line 12) | function _2(a,o){
function _3 (line 15) | function _3(a,o,id){
function _4 (line 18) | function _4(a,o,r){
function _5 (line 21) | function _5(_6,aa){
function _7 (line 24) | function _7(_8){
function _1a (line 91) | function _1a(_1b,_1c){
function _20 (line 105) | function _20(_21){
function _34 (line 145) | function _34(_35,_36,_37){
function _45 (line 206) | function _45(_46,_47){
function _4d (line 222) | function _4d(_4e,_4f){
function _58 (line 260) | function _58(_59){
function _75 (line 433) | function _75(_76){
function _82 (line 520) | function _82(_83){
function _86 (line 533) | function _86(e){
function _8d (line 558) | function _8d(e){
function _93 (line 577) | function _93(e){
function _96 (line 583) | function _96(_97){
function _9e (line 602) | function _9e(e){
function _a9 (line 666) | function _a9(e){
function _ae (line 682) | function _ae(e){
function _85 (line 699) | function _85(t){
function _98 (line 702) | function _98(t,_b3){
function _9b (line 710) | function _9b(tr){
function _8c (line 717) | function _8c(_b4,_b5){
function _c1 (line 777) | function _c1(_c2,_c3,_c4){
function _cc (line 800) | function _cc(_cd){
function _e0 (line 894) | function _e0(_e1,_e2){
function _ef (line 953) | function _ef(_f0,_f1){
function _f5 (line 978) | function _f5(_f8,tds){
function _f6 (line 996) | function _f6(_fb){
function _74 (line 1009) | function _74(_fe,_ff){
function _c7 (line 1031) | function _c7(_101,_102){
function _73 (line 1070) | function _73(_10b,_10c){
function _c0 (line 1074) | function _c0(_10d,data){
function _114 (line 1137) | function _114(_115){
function _11c (line 1172) | function _11c(_11d,row){
function _11f (line 1187) | function _11f(_120){
function _122 (line 1201) | function _122(_123){
function _125 (line 1214) | function _125(_126,_127){
function _9c (line 1240) | function _9c(_12d,_12e){
function _a5 (line 1247) | function _a5(_130,_131,_132,_133){
function _a6 (line 1273) | function _a6(_136,_137,_138){
function _13a (line 1293) | function _13a(_13b,_13c){
function _135 (line 1309) | function _135(_140,_141){
function _a2 (line 1325) | function _a2(_145,_146,_147){
function _a3 (line 1354) | function _a3(_149,_14a,_14b){
function _89 (line 1377) | function _89(_14e,_14f){
function _8a (line 1395) | function _8a(_151,_152){
function _154 (line 1413) | function _154(_155,_156){
function _15a (line 1434) | function _15a(_15b,_15c,_15d){
function _167 (line 1483) | function _167(_168,_169){
function _16b (line 1496) | function _16b(_16c,_16d){
function _157 (line 1505) | function _157(_16f,_170){
function _166 (line 1536) | function _166(_177,_178){
function _159 (line 1553) | function _159(_179,_17a){
function _17c (line 1564) | function _17c(_17d,_17e){
function _182 (line 1589) | function _182(_183,_184){
function _188 (line 1610) | function _188(_189,_18a){
function _18c (line 1618) | function _18c(_18d,row){
function _18f (line 1626) | function _18f(_190,_191){
function _195 (line 1647) | function _195(_196){
function _199 (line 1660) | function _199(_19a){
function _19b (line 1674) | function _19b(_19c){
function _bf (line 1712) | function _bf(_1a9,_1aa,cb){
function _1ad (line 1744) | function _1ad(_1ae,_1af){
function _1b6 (line 1817) | function _1b6(_1b7){
function _22e (line 2333) | function _22e(_230){
function _231 (line 2337) | function _231(_232){
function _239 (line 2365) | function _239(_23a){
function _23d (line 2383) | function _23d(_23e){
function _245 (line 2411) | function _245(_246){
FILE: src/main/resources/static/easyui/plugins/jquery.datalist.js
function _1 (line 11) | function _1(_2){
function _1c (line 69) | function _1c(_1e){
FILE: src/main/resources/static/easyui/plugins/jquery.datebox.js
function _1 (line 11) | function _1(_2){
function _16 (line 94) | function _16(_17,q){
function _19 (line 97) | function _19(_1a){
function _18 (line 106) | function _18(_1e,_1f,_20){
FILE: src/main/resources/static/easyui/plugins/jquery.datetimebox.js
function _1 (line 11) | function _1(_2){
function _8 (line 31) | function _8(_9){
function _b (line 37) | function _b(_c,q){
function _e (line 40) | function _e(_f){
function _d (line 46) | function _d(_12,_13,_14){
function _2f (line 153) | function _2f(_30){
FILE: src/main/resources/static/easyui/plugins/jquery.datetimespinner.js
function _1 (line 11) | function _1(_2){
FILE: src/main/resources/static/easyui/plugins/jquery.dialog.js
function _1 (line 11) | function _1(_2){
function _b (line 72) | function _b(_c,_d){
FILE: src/main/resources/static/easyui/plugins/jquery.draggable.js
function _1 (line 11) | function _1(e){
function _8 (line 54) | function _8(e){
function _c (line 64) | function _c(e){
function _12 (line 102) | function _12(e){
function _16 (line 133) | function _16(e){
function _17 (line 203) | function _17(){
function _26 (line 267) | function _26(e){
FILE: src/main/resources/static/easyui/plugins/jquery.droppable.js
function _1 (line 11) | function _1(_2){
FILE: src/main/resources/static/easyui/plugins/jquery.filebox.js
function _2 (line 12) | function _2(_3){
function _7 (line 30) | function _7(_9){
FILE: src/main/resources/static/easyui/plugins/jquery.form.js
function _1 (line 11) | function _1(_2,_3){
function _8 (line 55) | function _8(_a,_b){
function _9 (line 136) | function _9(_18,_19){
function _20 (line 159) | function _20(_21,_22){
function _32 (line 238) | function _32(_33){
function _3a (line 283) | function _3a(_3b){
function _40 (line 296) | function _40(_41){
function _44 (line 323) | function _44(_45,_46){
function _48 (line 332) | function _48(_49){
function _43 (line 342) | function _43(_4b,_4c){
FILE: src/main/resources/static/easyui/plugins/jquery.layout.js
function _2 (line 12) | function _2(_3,_4){
function _12 (line 70) | function _12(_13){
function _19 (line 95) | function _19(_1a,_1b,el){
function _34 (line 213) | function _34(_35,_36){
function _39 (line 226) | function _39(_3a,_3b,_3c){
function _4f (line 353) | function _4f(_50,_51){
function _a (line 392) | function _a(pp){
function _58 (line 402) | function _58(_59){
function _60 (line 421) | function _60(_61,_62,_63){
FILE: src/main/resources/static/easyui/plugins/jquery.linkbutton.js
function _1 (line 11) | function _1(_2,_3){
function _b (line 37) | function _b(_c){
function _f (line 84) | function _f(_11,_12){
function _10 (line 105) | function _10(_14,_15){
FILE: src/main/resources/static/easyui/plugins/jquery.maskedbox.js
function _1 (line 11) | function _1(_2){
function _5 (line 17) | function _5(_6,_7){
function _9 (line 29) | function _9(_a,_b){
function _d (line 52) | function _d(_e,c){
function _16 (line 70) | function _16(_17,_18){
function _14 (line 94) | function _14(_1f,pos){
function _12 (line 107) | function _12(_22,pos){
function _1c (line 118) | function _1c(_24,pos){
function _26 (line 129) | function _26(e){
FILE: src/main/resources/static/easyui/plugins/jquery.menu.js
function _2 (line 21) | function _2(_3){
function _b (line 53) | function _b(_c,_d){
function _f (line 70) | function _f(_12,div,_13){
function _10 (line 102) | function _10(_17,_18){
function _11 (line 148) | function _11(_20,_21){
function _25 (line 156) | function _25(e){
function _28 (line 164) | function _28(e){
function _2c (line 173) | function _2c(e){
function _30 (line 194) | function _30(e){
function _33 (line 210) | function _33(e){
function _2b (line 229) | function _2b(_38,_39){
function _3b (line 243) | function _3b(_3c,_3d){
function _1 (line 301) | function _1(_44){
function _46 (line 319) | function _46(_47,_48){
function _16 (line 344) | function _16(_4e,_4f,_50){
function _52 (line 358) | function _52(_53,_54){
function _58 (line 373) | function _58(_59,_5a){
function _5d (line 389) | function _5d(_5e,_5f,_60){
function _62 (line 398) | function _62(_63){
FILE: src/main/resources/static/easyui/plugins/jquery.menubutton.js
function _1 (line 11) | function _1(_2){
function _f (line 43) | function _f(_10){
function _14 (line 69) | function _14(_15){
FILE: src/main/resources/static/easyui/plugins/jquery.messager.js
function _1 (line 11) | function _1(){
function _7 (line 42) | function _7(){
function _8 (line 45) | function _8(_9){
function _d (line 86) | function _d(_e){
function _6 (line 100) | function _6(dlg,_10){
FILE: src/main/resources/static/easyui/plugins/jquery.numberbox.js
function _1 (line 11) | function _1(_2){
function _7 (line 23) | function _7(_8,_9){
FILE: src/main/resources/static/easyui/plugins/jquery.numberspinner.js
function _1 (line 11) | function _1(_2){
function _4 (line 17) | function _4(_5,_6){
FILE: src/main/resources/static/easyui/plugins/jquery.pagination.js
function _1 (line 11) | function _1(_2){
function _10 (line 135) | function _10(_11,_12){
function _14 (line 140) | function _14(_15,_16){
function _1d (line 213) | function _1d(_1e,_1f){
FILE: src/main/resources/static/easyui/plugins/jquery.panel.js
function _1 (line 21) | function _1(_2){
function _3 (line 24) | function _3(_4,_5){
function _15 (line 84) | function _15(_16,_17){
function _1b (line 102) | function _1b(_1c){
function _1f (line 114) | function _1f(_20){
function _2f (line 228) | function _2f(_30,_31){
function _37 (line 259) | function _37(_38){
function _39 (line 278) | function _39(_3a){
function _3b (line 281) | function _3b(_3c,_3d){
function _44 (line 338) | function _44(_45,_46){
function _4a (line 375) | function _4a(_4b,_4c){
function _43 (line 388) | function _43(_50,_51){
function _57 (line 424) | function _57(_58,_59){
function _42 (line 462) | function _42(_5e){
function _62 (line 481) | function _62(_63){
function _66 (line 490) | function _66(_67){
function _6b (line 506) | function _6b(_6c,_6d){
function _7c (line 608) | function _7c(_7d,_7e){
FILE: src/main/resources/static/easyui/plugins/jquery.parser.js
function _20 (line 238) | function _20(_23,_24,fit){
function _22 (line 269) | function _22(_26,_27,_28,_29){
function _21 (line 292) | function _21(_2b,_2c,_2d){
function _32 (line 330) | function _32(e){
function _34 (line 352) | function _34(e){
function _35 (line 364) | function _35(e){
function _33 (line 373) | function _33(e,_36,_37){
FILE: src/main/resources/static/easyui/plugins/jquery.passwordbox.js
function _1 (line 11) | function _1(_2){
function _7 (line 24) | function _7(_8,_9,_a){
function _6 (line 55) | function _6(_e,_f){
function _13 (line 65) | function _13(e){
function _18 (line 91) | function _18(e){
FILE: src/main/resources/static/easyui/plugins/jquery.progressbar.js
function _1 (line 11) | function _1(_2){
function _4 (line 22) | function _4(_5,_6){
FILE: src/main/resources/static/easyui/plugins/jquery.propertygrid.js
function _3 (line 20) | function _3(_4){
function _2 (line 56) | function _2(_f){
function _27 (line 157) | function _27(css,cls){
function _3c (line 219) | function _3c(_40){
function _39 (line 228) | function _39(){
function _6d (line 381) | function _6d(_6e,_6f){
FILE: src/main/resources/static/easyui/plugins/jquery.resizable.js
function _1 (line 11) | function _1(e){
function _6 (line 37) | function _6(e){
function _8 (line 48) | function _8(e){
function _9 (line 53) | function _9(e){
function _a (line 60) | function _a(e){
function _b (line 69) | function _b(e){
function _18 (line 136) | function _18(css){
FILE: src/main/resources/static/easyui/plugins/jquery.searchbox.js
function _1 (line 11) | function _1(_2){
FILE: src/main/resources/static/easyui/plugins/jquery.slider.js
function _1 (line 11) | function _1(_2){
function _6 (line 28) | function _6(_7,_8){
function _d (line 51) | function _d(_e){
function _17 (line 81) | function _17(_18){
function _27 (line 167) | function _27(_28,_29){
function _c (line 217) | function _c(_35){
function _33 (line 225) | function _33(_37,_38){
function _25 (line 239) | function _25(_3d,pos){
FILE: src/main/resources/static/easyui/plugins/jquery.spinner.js
function _1 (line 11) | function _1(_2){
function _13 (line 90) | function _13(_14,_15){
FILE: src/main/resources/static/easyui/plugins/jquery.splitbutton.js
function _1 (line 11) | function _1(_2){
FILE: src/main/resources/static/easyui/plugins/jquery.switchbutton.js
function _1 (line 11) | function _1(_2){
function _6 (line 28) | function _6(_7,_8){
function _10 (line 56) | function _10(_11){
function _f (line 78) | function _f(_18,_19,_1a){
function _21 (line 96) | function _21(_22,_23){
function _17 (line 111) | function _17(_28,_29){
function _2c (line 117) | function _2c(_2d){
FILE: src/main/resources/static/easyui/plugins/jquery.tabs.js
function _1 (line 11) | function _1(c){
function _2 (line 18) | function _2(_3){
function _f (line 66) | function _f(_10){
function _15 (line 89) | function _15(_16,_17){
function _23 (line 158) | function _23(_24){
function _2a (line 168) | function _2a(_2b){
function _30 (line 194) | function _30(_31){
function _38 (line 245) | function _38(_39){
function _3e (line 289) | function _3e(_3f,_40,pp){
function _4e (line 377) | function _4e(_4f,_50){
function _54 (line 389) | function _54(_55,_56){
function _5d (line 466) | function _5d(_5e,_5f){
function _65 (line 499) | function _65(_6a,_6b,_6c){
function _4d (line 529) | function _4d(_6f,tab){
function _26 (line 538) | function _26(_71){
function _73 (line 548) | function _73(_74){
function _53 (line 560) | function _53(_78,_79){
function _7b (line 569) | function _7b(_7c,_7d){
function _7a (line 576) | function _7a(_7e){
function _64 (line 581) | function _64(_7f,_80){
function _81 (line 584) | function _81(_82,_83){
function _85 (line 589) | function _85(_86,_87){
function _9c (line 693) | function _9c(){
FILE: src/main/resources/static/easyui/plugins/jquery.tagbox.js
function _1 (line 11) | function _1(_2){
function _12 (line 57) | function _12(_13,_14){
function _1c (line 71) | function _1c(_1d){
function _23 (line 108) | function _23(_24){
function _2c (line 127) | function _2c(_2d){
function _33 (line 149) | function _33(_34,_35){
FILE: src/main/resources/static/easyui/plugins/jquery.textbox.js
function _2 (line 12) | function _2(_3){
function _6 (line 22) | function _6(_7){
function _f (line 78) | function _f(_10){
function _12 (line 86) | function _12(_13,_14){
function _c (line 169) | function _c(_22){
function _28 (line 200) | function _28(_29){
function _d (line 275) | function _d(_36,_37){
function _e (line 295) | function _e(_3b,_3c){
FILE: src/main/resources/static/easyui/plugins/jquery.timespinner.js
function _1 (line 11) | function _1(_2){
function _5 (line 17) | function _5(e){
function _a (line 29) | function _a(_b,_c){
function _f (line 41) | function _f(_10,_11){
function _14 (line 47) | function _14(_15,_16){
function _25 (line 121) | function _25(_26){
function _29 (line 138) | function _29(s){
FILE: src/main/resources/static/easyui/plugins/jquery.tooltip.js
function _1 (line 11) | function _1(_2){
function _3 (line 14) | function _3(_4){
function _6 (line 28) | function _6(_7){
function _9 (line 39) | function _9(_a){
function _15 (line 113) | function _15(_16,e){
function _1c (line 135) | function _1c(_1d,e){
function _19 (line 145) | function _19(_1f,_20){
function _23 (line 158) | function _23(_24){
FILE: src/main/resources/static/easyui/plugins/jquery.tree.js
function _1 (line 11) | function _1(_2){
function _4 (line 16) | function _4(_5){
function _d (line 84) | function _d(_e){
function _11 (line 91) | function _11(_12){
function _34 (line 237) | function _34(_35,_36,_37,_38){
function _3c (line 287) | function _3c(_3f,_40,_41){
function _3e (line 314) | function _3e(_47,_48,_49){
function _3d (line 328) | function _3d(_4b,_4c){
function _46 (line 335) | function _46(row){
function _4f (line 366) | function _4f(_50,_51){
function _56 (line 402) | function _56(_57,ul,_58,_59,_5a){
function _61 (line 436) | function _61(_62,ul,_63){
function _6f (line 482) | function _6f(_70,ul,_71,_72){
function _79 (line 512) | function _79(_7a,_7b,_7c){
function _80 (line 570) | function _80(_81,_82){
function _85 (line 597) | function _85(_86,_87){
function _88 (line 608) | function _88(_89,_8a){
function _8d (line 617) | function _8d(_8e,_8f){
function _91 (line 628) | function _91(_92,_93){
function _96 (line 648) | function _96(_97,_98){
function _9a (line 657) | function _9a(_9b,_9c){
function _a1 (line 686) | function _a1(_a2,_a3){
function _a7 (line 718) | function _a7(_a8,_a9){
function _60 (line 745) | function _60(_ae,_af){
function _b3 (line 759) | function _b3(_b4,_b5){
function _b7 (line 772) | function _b7(_b8){
function _8c (line 779) | function _8c(_bb,_bc){
function _4d (line 788) | function _4d(_c0,_c1){
function _c2 (line 792) | function _c2(_c3,_c4){
function _c6 (line 805) | function _c6(_c7){
function _c9 (line 809) | function _c9(_ca,_cb){
function _c (line 818) | function _c(_ce,_cf){
function _d0 (line 821) | function _d0(_d1,id){
function _5f (line 824) | function _5f(_d2,_d3,_d4){
function _ba (line 835) | function _ba(_d8){
function _d9 (line 839) | function _d9(_da,_db){
function _9f (line 849) | function _9f(_de,_df){
function _e0 (line 852) | function _e0(_e1,_e2){
function _e7 (line 887) | function _e7(_e8,_e9){
function _ed (line 898) | function _ed(_ee,_ef){
function _f2 (line 906) | function _f2(_f3,q){
function _11b (line 1090) | function _11b(aa,tree){
function _124 (line 1116) | function _124(_125,_126){
FILE: src/main/resources/static/easyui/plugins/jquery.treegrid.js
function _1 (line 11) | function _1(_2){
function _16 (line 57) | function _16(_17,_18){
function _1f (line 79) | function _1f(_20){
function _22 (line 89) | function _22(_23){
function _24 (line 99) | function _24(e){
function _27 (line 137) | function _27(t){
function _29 (line 140) | function _29(_30,_31,_32,_33){
function _3a (line 192) | function _3a(_3b,row,_3c){
function _38 (line 214) | function _38(_40,row,_41){
function _39 (line 221) | function _39(_43,row){
function _47 (line 229) | function _47(row){
function _49 (line 260) | function _49(_4a,_4b){
function _4e (line 296) | function _4e(_4f,_50){
function _56 (line 308) | function _56(_57,_58,_59,_5a,_5b){
function _15 (line 361) | function _15(_63,_64,_65,_66,_67){
function _6e (line 404) | function _6e(_6f){
function _71 (line 408) | function _71(_72){
function _46 (line 411) | function _46(_73,_74){
function _1b (line 419) | function _1b(_75,_76){
function _7b (line 431) | function _7b(_7c,_7d){
function _37 (line 437) | function _37(_80,_81){
function _86 (line 449) | function _86(_87,_88){
function _8a (line 481) | function _8a(_8b,_8c){
function _28 (line 532) | function _28(_91,_92){
function _94 (line 542) | function _94(_95,_96){
function _99 (line 552) | function _99(_9a,_9b){
function _9e (line 562) | function _9e(_9f,_a0){
function _a2 (line 575) | function _a2(_a3,_a4){
function _a9 (line 595) | function _a9(_aa,_ab){
function _b5 (line 628) | function _b5(_b6,_b7){
function _bb (line 642) | function _bb(_bc){
function _ee (line 937) | function _ee(_ef,_f0,_f1){
function _10d (line 1114) | function _10d(_10e){
function del (line 1150) | function del(id){
function _118 (line 1185) | function _118(_119,_11a){
function _11e (line 1216) | function _11e(rows){
function _124 (line 1258) | function _124(_126,rows){
FILE: src/main/resources/static/easyui/plugins/jquery.validatebox.js
function _1 (line 11) | function _1(_2){
function _3 (line 14) | function _3(_4){
function _6 (line 27) | function _6(_7){
function _a (line 37) | function _a(e){
function _f (line 69) | function _f(e){
function _13 (line 89) | function _13(e){
function _16 (line 94) | function _16(e){
function _19 (line 101) | function _19(_1a,_1b,_1c){
function _1f (line 113) | function _1f(_20){
function _30 (line 187) | function _30(_31,_32){
function _34 (line 198) | function _34(_35,_36){
FILE: src/main/resources/static/easyui/plugins/jquery.window.js
function _1 (line 11) | function _1(_2,_3){
function _5 (line 26) | function _5(_6,_7){
function _b (line 40) | function _b(_c,_d){
function _11 (line 54) | function _11(_12){
function _19 (line 137) | function _19(_1a,top,_1b,_1c){
function _21 (line 171) | function _21(_22){
FILE: src/main/resources/static/jquery.i18n.properties.js
function callbackIfComplete (line 295) | function callbackIfComplete(settings) {
function loadAndParseFiles (line 312) | function loadAndParseFiles(fileNames, settings) {
function loadAndParseFile (line 327) | function loadAndParseFile(filename, settings, nextFile) {
function parseData (line 366) | function parseData(data, settings) {
function checkKeyNamespace (line 454) | function checkKeyNamespace(key) {
function unescapeUnicode (line 495) | function unescapeUnicode(str) {
FILE: src/main/resources/static/zkweb-language.js
function loadScript (line 137) | function loadScript(language){
function setLayoutTitle (line 144) | function setLayoutTitle(title){
function setWindowTitle (line 158) | function setWindowTitle(attrNameList){
function setTabsTitle (line 175) | function setTabsTitle(attrNameList){
function setHtmlText (line 206) | function setHtmlText(attrNameList,attrTrueName){
function setAttrText (line 225) | function setAttrText(attrNameList,attrTrueName,valueName){
function localeMessager (line 242) | function localeMessager(type,titleKey,titleDefault,msgKey,msgDefault,tex...
function loadProperties (line 279) | function loadProperties(language) {
FILE: src/main/resources/static/zkweb.js
function setFilter (line 30) | function setFilter(node){
function initDataGrid (line 40) | function initDataGrid(){
function refreshConnectState (line 87) | function refreshConnectState(row){
function ZkStateShowTypeChange (line 99) | function ZkStateShowTypeChange(node){
function ZkStateRefresh (line 112) | function ZkStateRefresh(node){
function initTree (line 144) | function initTree(rowIndex,row){
function initOneTree (line 168) | function initOneTree(rowIndex,row){
function remove (line 284) | function remove(){
function collapseAll (line 345) | function collapseAll(){
function collapseAllRecur (line 350) | function collapseAllRecur(node){
function collapse (line 360) | function collapse(){
function refreshtree (line 365) | function refreshtree(){
function expandAll (line 373) | function expandAll(){
function expandAllRecur (line 381) | function expandAllRecur(node){
function expand (line 411) | function expand(){
function addzkNode (line 416) | function addzkNode(){
function saveCfg (line 450) | function saveCfg(){
function updateCfg (line 471) | function updateCfg(){
function openUpdateWin (line 493) | function openUpdateWin(){
function openDelWin (line 506) | function openDelWin(){
FILE: src/test/java/T.java
class T (line 19) | public class T {
method t (line 21) | @Test
method testH2 (line 70) | @Test
method testZkCfg (line 156) | @Test
method testOther (line 183) | @Test
Condensed preview — 377 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,857K chars).
[
{
"path": ".gitignore",
"chars": 1057,
"preview": "# Compiled class file\n*.class\ntarget/*\n!target/zkWeb-*.jar\n!target/zkWeb-*.war\n!target/Dockerfile\n\n# Log file\n*.log\n\n# B"
},
{
"path": "README.md",
"chars": 2713,
"preview": "## zkWeb-en\n\nzkWeb is zookeeper web to manager and monitor zookeeper cluster with builtin H2 database.This is based on T"
},
{
"path": "pom-jar.xml",
"chars": 6342,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "pom-tomcat.xml",
"chars": 6968,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "pom.xml",
"chars": 6342,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "src/main/docker/Dockerfile",
"chars": 1010,
"preview": "#############################################################################\n# zkweb\n#\n# 容器构建镜像\n# 1. 使用命令将dockerfile和m"
},
{
"path": "src/main/java/com/yasenagat/zkweb/ZkWebSpringBootApplication.java",
"chars": 2388,
"preview": "package com.yasenagat.zkweb;\r\n/**\r\n * \r\n */\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\nimport org.spr"
},
{
"path": "src/main/java/com/yasenagat/zkweb/model/Tree.java",
"chars": 2222,
"preview": "package com.yasenagat.zkweb.model;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\npublic class Tree {\r\n\r\n\tprivate i"
},
{
"path": "src/main/java/com/yasenagat/zkweb/model/TreeNode.java",
"chars": 1404,
"preview": "package com.yasenagat.zkweb.model;\r\n\r\n\r\npublic class TreeNode {\r\n\r\n\tprivate int id;\r\n\tprivate String name;\r\n\tprivate int"
},
{
"path": "src/main/java/com/yasenagat/zkweb/model/TreeRoot.java",
"chars": 554,
"preview": "package com.yasenagat.zkweb.model;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.HashMap;\r\nimport java.util.List;\r\nim"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ConfigUtil.java",
"chars": 1616,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.io.FileNotFoundException;\r\nimport java.io.IOException;\r\nimport java.io."
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/H2Util.java",
"chars": 2499,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.sql.ResultSet;\r\nimport java.sql.ResultSetMetaData;\r\nimport java.sql.SQL"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkCache.java",
"chars": 1639,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\nimport java.util.concurrent.Concurre"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkCfgFactory.java",
"chars": 223,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\npublic class ZkCfgFactory {\r\n\t\r\n\tprivate static ZkCfgManager _instance = new ZkCfgM"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkCfgManager.java",
"chars": 821,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\npublic interface ZkCfgManager {\r\n\r"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkCfgManagerImpl.java",
"chars": 11311,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.sql.Connection;\r\nimport java.sql.PreparedStatement;\r\nimport java.sql.Re"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkManager.java",
"chars": 1889,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\npublic interface ZkManager {\r\n\r\n\t/"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkManagerImpl.java",
"chars": 32001,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputSt"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkSpringBootConfiguration.java",
"chars": 5249,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\n\r\nimport java.beans.PropertyVetoException;\r\nimport java.util.Locale;\r\n\r\nimport java"
},
{
"path": "src/main/java/com/yasenagat/zkweb/util/ZkWebMvcConfigurer.java",
"chars": 1790,
"preview": "package com.yasenagat.zkweb.util;\r\n\r\nimport org.springframework.context.annotation.Configuration;\r\nimport org.springfram"
},
{
"path": "src/main/java/com/yasenagat/zkweb/web/ZkCacheServlet.java",
"chars": 2224,
"preview": "package com.yasenagat.zkweb.web;\r\n\r\nimport java.io.IOException;\r\nimport java.util.Map;\r\nimport javax.servlet.ServletExce"
},
{
"path": "src/main/java/com/yasenagat/zkweb/web/ZkCfgController.java",
"chars": 4263,
"preview": "package com.yasenagat.zkweb.web;\r\n\r\nimport java.net.URLDecoder;\r\nimport java.util.HashMap;\r\nimport java.util.Map;\r\nimpor"
},
{
"path": "src/main/java/com/yasenagat/zkweb/web/ZkController.java",
"chars": 6969,
"preview": "package com.yasenagat.zkweb.web;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\nimport java.net.URLDecoder;\r\nimport ja"
},
{
"path": "src/main/resources/META-INF/additional-spring-configuration-metadata.json",
"chars": 1730,
"preview": "{\"properties\": [\n {\n \"name\": \"spring.datasource.initial-pool-size\",\n \"type\": \"java.lang.Integer\",\n \"descriptio"
},
{
"path": "src/main/resources/application-local.yml",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/application-zkweb.yaml",
"chars": 2490,
"preview": "#如果部署到tomcat,logbak必须是logback-spring.xml名称\nlogging: \n config: classpath:logback-spring.xml\nspring: \n h2: \n console:"
},
{
"path": "src/main/resources/logback-spring.xml",
"chars": 3561,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- \n级别包括:TRACE、DEBUG(默认)、INFO、WARN 和 ERROR\nscan:\n当此属性设置为true时,配置文件如果发生改变,将会被重新加"
},
{
"path": "src/main/resources/logback-zkweb-1.0.9.xml",
"chars": 2256,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration status=\"WARN\" monitorInterval=\"30\">\n <appenders>\n <conso"
},
{
"path": "src/main/resources/logback-zkweb-v1.2.3.xml",
"chars": 3379,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- \n级别包括:TRACE、DEBUG(默认)、INFO、WARN 和 ERROR\nscan:\n当此属性设置为true时,配置文件如果发生改变,将会被重新加"
},
{
"path": "src/main/resources/spring.bak/appServlet/controllers.bak.xml",
"chars": 799,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n\txmlns:xsi=\"http://www"
},
{
"path": "src/main/resources/spring.bak/appServlet/servlet-context.bak.xml",
"chars": 4457,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans:beans xmlns=\"http://www.springframework.org/schema/mvc\"\n\txmlns:xsi=\"http:/"
},
{
"path": "src/main/resources/spring.bak/root-context.bak.xml",
"chars": 412,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n xmlns:xsi=\"http:"
},
{
"path": "src/main/resources/static/easyui/easyloader.js",
"chars": 7009,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-af.js",
"chars": 1713,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Bladsy';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-am.js",
"chars": 1921,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Էջ';\r\n\t$.fn.pagination.defaults.afterPageText = 'ից {"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-ar.js",
"chars": 1782,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'صفحة';\r\n\t$.fn.pagination.defaults.afterPageText = 'من"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-bg.js",
"chars": 1745,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Страница';\r\n\t$.fn.pagination.defaults.afterPageText ="
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-ca.js",
"chars": 1769,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Pàgina';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-cs.js",
"chars": 1745,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Strana';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-cz.js",
"chars": 1879,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Strana';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-da.js",
"chars": 1716,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Page';\r\n\t$.fn.pagination.defaults.afterPageText = 'af"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-de.js",
"chars": 2334,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Seite';\r\n\t$.fn.pagination.defaults.afterPageText = 'v"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-el.js",
"chars": 1883,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Σελίδα';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-en.js",
"chars": 1804,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Page';\r\n\t$.fn.pagination.defaults.afterPageText = 'of"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-es.js",
"chars": 1900,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Página';\r\n\t$.fn.pagination.defaults.afterPageT"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-fa.js",
"chars": 1819,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'صفحه';\r\n\t$.fn.pagination.defaults.afterPageText = 'از"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-fr.js",
"chars": 2322,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Page';\r\n\t$.fn.pagination.defaults.afterPageText = 'de"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-it.js",
"chars": 2303,
"preview": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Pagina';\n\t$.fn.pagination.defaults.afterPageText = 'di"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-jp.js",
"chars": 1715,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'ページ';\r\n\t$.fn.pagination.defaults.afterPageText = '{pa"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-ko.js",
"chars": 1706,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = '페이지';\r\n\t$.fn.pagination.defaults.afterPageText = '{pa"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-nl.js",
"chars": 1719,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Pagina';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-pl.js",
"chars": 1819,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Strona';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-pt_BR.js",
"chars": 1789,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Página';\r\n\t$.fn.pagination.defaults.afterPageText = '"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-ru.js",
"chars": 1885,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Страница';\r\n\t$.fn.pagination.defaults.afterPageText ="
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-sv_SE.js",
"chars": 1958,
"preview": "if ($.fn.pagination) {\r\n $.fn.pagination.defaults.beforePageText = 'Sida';\r\n $.fn.pagination.defaults.afterPageTex"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-tr.js",
"chars": 2305,
"preview": "if ($.fn.pagination){\n $.fn.pagination.defaults.beforePageText = 'Sayfa';\n $.fn.pagination.defaults.afterPageText "
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-ua.js",
"chars": 1890,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Сторінка';\r\n\t$.fn.pagination.defaults.afterPageText "
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-zh_CN.js",
"chars": 2281,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = '第';\r\n\t$.fn.pagination.defaults.afterPageText = '共{pag"
},
{
"path": "src/main/resources/static/easyui/locale/easyui-lang-zh_TW.js",
"chars": 1766,
"preview": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = '第';\r\n\t$.fn.pagination.defaults.afterPageText = '共{pag"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.accordion.js",
"chars": 8011,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.calendar.js",
"chars": 10781,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.combo.js",
"chars": 9845,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.combobox.js",
"chars": 14842,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.combogrid.js",
"chars": 8673,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.combotree.js",
"chars": 5586,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.combotreegrid.js",
"chars": 7677,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.datagrid.js",
"chars": 67799,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.datalist.js",
"chars": 3777,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.datebox.js",
"chars": 6092,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.datetimebox.js",
"chars": 5446,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.datetimespinner.js",
"chars": 1856,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.dialog.js",
"chars": 3881,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.draggable.js",
"chars": 7436,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.droppable.js",
"chars": 1703,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.filebox.js",
"chars": 2781,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.form.js",
"chars": 8699,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.layout.js",
"chars": 14412,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.linkbutton.js",
"chars": 4747,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.maskedbox.js",
"chars": 4749,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.menu.js",
"chars": 11527,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.menubutton.js",
"chars": 3324,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.messager.js",
"chars": 5415,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.mobile.js",
"chars": 4269,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.numberbox.js",
"chars": 4827,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.numberspinner.js",
"chars": 1634,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.pagination.js",
"chars": 7836,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.panel.js",
"chars": 16483,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.parser.js",
"chars": 7788,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.passwordbox.js",
"chars": 3800,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.progressbar.js",
"chars": 2197,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.propertygrid.js",
"chars": 12472,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.resizable.js",
"chars": 4738,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.searchbox.js",
"chars": 3566,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.slider.js",
"chars": 8751,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.spinner.js",
"chars": 3860,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.splitbutton.js",
"chars": 1482,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.switchbutton.js",
"chars": 5871,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.tabs.js",
"chars": 18408,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.tagbox.js",
"chars": 6514,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.textbox.js",
"chars": 15413,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.timespinner.js",
"chars": 4075,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.tooltip.js",
"chars": 5913,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.tree.js",
"chars": 27108,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.treegrid.js",
"chars": 33086,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.validatebox.js",
"chars": 9761,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/plugins/jquery.window.js",
"chars": 7918,
"preview": "/**\r\n * EasyUI for jQuery 1.5.5.4\r\n * \r\n * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.\r\n *\r\n * License"
},
{
"path": "src/main/resources/static/easyui/themes/angular.css",
"chars": 10358,
"preview": "*{\n\tbox-sizing: border-box;\n}\n.f-block{\n\tdisplay: block;\n\tposition: relative;\n}\n.f-row{\n\tdisplay: -webkit-box;\n\tdisplay:"
},
{
"path": "src/main/resources/static/easyui/themes/black/accordion.css",
"chars": 2165,
"preview": ".accordion {\n overflow: hidden;\n border-width: 1px;\n border-style: solid;\n}\n.accordion .accordion-header {\n border-w"
},
{
"path": "src/main/resources/static/easyui/themes/black/calendar.css",
"chars": 3914,
"preview": ".calendar {\n border-width: 1px;\n border-style: solid;\n padding: 1px;\n overflow: hidden;\n}\n.calendar table {\n table-"
},
{
"path": "src/main/resources/static/easyui/themes/black/checkbox.css",
"chars": 518,
"preview": ".checkbox {\n position: relative;\n border: 2px solid #00458a;\n -moz-border-radius: 5px 5px 5px 5px;\n -webkit-border-r"
},
{
"path": "src/main/resources/static/easyui/themes/black/combo.css",
"chars": 616,
"preview": ".combo-arrow {\n width: 18px;\n height: 20px;\n overflow: hidden;\n display: inline-block;\n vertical-align: top;\n curs"
},
{
"path": "src/main/resources/static/easyui/themes/black/combobox.css",
"chars": 650,
"preview": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n font-size: 14px;\n padding: 6px 4px;\n line-height: 20px;\n}\n.combob"
},
{
"path": "src/main/resources/static/easyui/themes/black/datagrid.css",
"chars": 5731,
"preview": ".datagrid .panel-body {\n overflow: hidden;\n position: relative;\n}\n.datagrid-view {\n position: relative;\n overflow: h"
},
{
"path": "src/main/resources/static/easyui/themes/black/datalist.css",
"chars": 1821,
"preview": ".datalist .datagrid-header {\n border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n height: 25px;\n l"
},
{
"path": "src/main/resources/static/easyui/themes/black/datebox.css",
"chars": 619,
"preview": ".datebox-calendar-inner {\n height: 250px;\n}\n.datebox-button {\n padding: 4px 0;\n text-align: center;\n}\n.datebox-button"
},
{
"path": "src/main/resources/static/easyui/themes/black/dialog.css",
"chars": 877,
"preview": ".dialog-content {\n overflow: auto;\n}\n.dialog-toolbar {\n position: relative;\n padding: 2px 5px;\n}\n.dialog-tool-separat"
},
{
"path": "src/main/resources/static/easyui/themes/black/easyui.css",
"chars": 70899,
"preview": ".panel {\n overflow: hidden;\n text-align: left;\n margin: 0;\n border: 0;\n -moz-border-radius: 0 0 0 0;\n -webkit-bord"
},
{
"path": "src/main/resources/static/easyui/themes/black/filebox.css",
"chars": 355,
"preview": ".filebox .textbox-value {\n vertical-align: top;\n position: absolute;\n top: 0;\n left: -5000px;\n}\n.filebox-label {\n d"
},
{
"path": "src/main/resources/static/easyui/themes/black/layout.css",
"chars": 3012,
"preview": ".layout {\n position: relative;\n overflow: hidden;\n margin: 0;\n padding: 0;\n z-index: 0;\n}\n.layout-panel {\n positio"
},
{
"path": "src/main/resources/static/easyui/themes/black/linkbutton.css",
"chars": 4350,
"preview": ".l-btn {\n text-decoration: none;\n display: inline-block;\n overflow: hidden;\n margin: 0;\n padding: 0;\n cursor: poin"
},
{
"path": "src/main/resources/static/easyui/themes/black/menu.css",
"chars": 2176,
"preview": ".menu {\n position: absolute;\n margin: 0;\n padding: 2px;\n border-width: 1px;\n border-style: solid;\n overflow: hidde"
},
{
"path": "src/main/resources/static/easyui/themes/black/menubutton.css",
"chars": 1864,
"preview": ".m-btn-downarrow,\n.s-btn-downarrow {\n display: inline-block;\n position: absolute;\n width: 16px;\n height: 16px;\n fon"
},
{
"path": "src/main/resources/static/easyui/themes/black/messager.css",
"chars": 895,
"preview": ".messager-body {\n padding: 10px 10px 30px 10px;\n overflow: auto;\n}\n.messager-button {\n text-align: center;\n padding:"
},
{
"path": "src/main/resources/static/easyui/themes/black/numberbox.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/easyui/themes/black/pagination.css",
"chars": 1535,
"preview": ".pagination {\n zoom: 1;\n padding: 2px;\n}\n.pagination table {\n float: left;\n height: 30px;\n}\n.pagination td {\n borde"
},
{
"path": "src/main/resources/static/easyui/themes/black/panel.css",
"chars": 5661,
"preview": ".panel {\n overflow: hidden;\n text-align: left;\n margin: 0;\n border: 0;\n -moz-border-radius: 0 0 0 0;\n -webkit-bord"
},
{
"path": "src/main/resources/static/easyui/themes/black/passwordbox.css",
"chars": 194,
"preview": ".passwordbox-open {\n background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n b"
},
{
"path": "src/main/resources/static/easyui/themes/black/progressbar.css",
"chars": 664,
"preview": ".progressbar {\n border-width: 1px;\n border-style: solid;\n -moz-border-radius: 5px 5px 5px 5px;\n -webkit-border-radiu"
},
{
"path": "src/main/resources/static/easyui/themes/black/propertygrid.css",
"chars": 694,
"preview": ".propertygrid .datagrid-view1 .datagrid-body td {\n padding-bottom: 1px;\n border-width: 0 1px 0 0;\n}\n.propertygrid .dat"
},
{
"path": "src/main/resources/static/easyui/themes/black/radiobutton.css",
"chars": 408,
"preview": ".radiobutton {\n position: relative;\n border: 2px solid #00458a;\n border-radius: 50%;\n}\n.radiobutton-inner {\n positio"
},
{
"path": "src/main/resources/static/easyui/themes/black/searchbox.css",
"chars": 1341,
"preview": ".searchbox-button {\n width: 18px;\n height: 20px;\n overflow: hidden;\n display: inline-block;\n vertical-align: top;\n "
},
{
"path": "src/main/resources/static/easyui/themes/black/sidemenu.css",
"chars": 1393,
"preview": ".sidemenu .tree-hit {\n background-image: none;\n}\n.sidemenu-default-icon {\n background-image: none;\n width: 0;\n}\n.side"
},
{
"path": "src/main/resources/static/easyui/themes/black/slider.css",
"chars": 1610,
"preview": ".slider-disabled {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.slider-h {\n height: 22px;\n}\n.slider-v {\n width: 22p"
},
{
"path": "src/main/resources/static/easyui/themes/black/spinner.css",
"chars": 2848,
"preview": ".spinner-arrow {\n display: inline-block;\n overflow: hidden;\n vertical-align: top;\n margin: 0;\n padding: 0;\n opacit"
},
{
"path": "src/main/resources/static/easyui/themes/black/splitbutton.css",
"chars": 293,
"preview": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n display: inline-block;\n}\n.l-btn"
},
{
"path": "src/main/resources/static/easyui/themes/black/switchbutton.css",
"chars": 1622,
"preview": ".switchbutton {\n text-decoration: none;\n display: inline-block;\n overflow: hidden;\n vertical-align: middle;\n margin"
},
{
"path": "src/main/resources/static/easyui/themes/black/tabs.css",
"chars": 9452,
"preview": ".tabs-container {\n overflow: hidden;\n}\n.tabs-header {\n border-width: 1px;\n border-style: solid;\n border-bottom-width"
},
{
"path": "src/main/resources/static/easyui/themes/black/tagbox.css",
"chars": 869,
"preview": ".tagbox {\n cursor: text;\n}\n.tagbox .textbox-text {\n float: left;\n}\n.tagbox-label {\n position: relative;\n display: bl"
},
{
"path": "src/main/resources/static/easyui/themes/black/textbox.css",
"chars": 2911,
"preview": ".textbox {\n position: relative;\n border: 1px solid #000;\n background-color: #fff;\n vertical-align: middle;\n display"
},
{
"path": "src/main/resources/static/easyui/themes/black/tooltip.css",
"chars": 1942,
"preview": ".tooltip {\n position: absolute;\n display: none;\n z-index: 9900000;\n outline: none;\n opacity: 1;\n filter: alpha(opa"
},
{
"path": "src/main/resources/static/easyui/themes/black/tree.css",
"chars": 3534,
"preview": ".tree {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.tree li {\n white-space: nowrap;\n}\n.tree li ul {\n list-s"
},
{
"path": "src/main/resources/static/easyui/themes/black/validatebox.css",
"chars": 94,
"preview": ".validatebox-invalid {\n border-color: #ffa8a8;\n background-color: #fff3f3;\n color: #000;\n}\n"
},
{
"path": "src/main/resources/static/easyui/themes/black/window.css",
"chars": 4271,
"preview": ".window {\n overflow: hidden;\n padding: 5px;\n border-width: 1px;\n border-style: solid;\n}\n.window .window-header {\n b"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/accordion.css",
"chars": 2189,
"preview": ".accordion {\n overflow: hidden;\n border-width: 1px;\n border-style: solid;\n}\n.accordion .accordion-header {\n border-w"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/calendar.css",
"chars": 3932,
"preview": ".calendar {\n border-width: 1px;\n border-style: solid;\n padding: 1px;\n overflow: hidden;\n}\n.calendar table {\n table-"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/checkbox.css",
"chars": 518,
"preview": ".checkbox {\n position: relative;\n border: 2px solid #0070a9;\n -moz-border-radius: 5px 5px 5px 5px;\n -webkit-border-r"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/combo.css",
"chars": 625,
"preview": ".combo-arrow {\n width: 18px;\n height: 20px;\n overflow: hidden;\n display: inline-block;\n vertical-align: top;\n curs"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/combobox.css",
"chars": 656,
"preview": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n font-size: 12px;\n padding: 6px 4px;\n line-height: 20px;\n}\n.combob"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/datagrid.css",
"chars": 5755,
"preview": ".datagrid .panel-body {\n overflow: hidden;\n position: relative;\n}\n.datagrid-view {\n position: relative;\n overflow: h"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/datalist.css",
"chars": 1830,
"preview": ".datalist .datagrid-header {\n border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n height: 25px;\n l"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/datebox.css",
"chars": 622,
"preview": ".datebox-calendar-inner {\n height: 250px;\n}\n.datebox-button {\n padding: 4px 0;\n text-align: center;\n}\n.datebox-button"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/dialog.css",
"chars": 907,
"preview": ".dialog-content {\n overflow: auto;\n}\n.dialog-toolbar {\n position: relative;\n padding: 2px 5px;\n}\n.dialog-tool-separat"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/easyui.css",
"chars": 71616,
"preview": ".panel {\n overflow: hidden;\n text-align: left;\n margin: 0;\n border: 0;\n -moz-border-radius: 0 0 0 0;\n -webkit-bord"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/filebox.css",
"chars": 355,
"preview": ".filebox .textbox-value {\n vertical-align: top;\n position: absolute;\n top: 0;\n left: -5000px;\n}\n.filebox-label {\n d"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/layout.css",
"chars": 3009,
"preview": ".layout {\n position: relative;\n overflow: hidden;\n margin: 0;\n padding: 0;\n z-index: 0;\n}\n.layout-panel {\n positio"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/linkbutton.css",
"chars": 4368,
"preview": ".l-btn {\n text-decoration: none;\n display: inline-block;\n overflow: hidden;\n margin: 0;\n padding: 0;\n cursor: poin"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/menu.css",
"chars": 2188,
"preview": ".menu {\n position: absolute;\n margin: 0;\n padding: 2px;\n border-width: 1px;\n border-style: solid;\n overflow: hidde"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/menubutton.css",
"chars": 1873,
"preview": ".m-btn-downarrow,\n.s-btn-downarrow {\n display: inline-block;\n position: absolute;\n width: 16px;\n height: 16px;\n fon"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/messager.css",
"chars": 898,
"preview": ".messager-body {\n padding: 10px 10px 30px 10px;\n overflow: auto;\n}\n.messager-button {\n text-align: center;\n padding:"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/numberbox.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/pagination.css",
"chars": 1538,
"preview": ".pagination {\n zoom: 1;\n padding: 2px;\n}\n.pagination table {\n float: left;\n height: 30px;\n}\n.pagination td {\n borde"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/panel.css",
"chars": 5676,
"preview": ".panel {\n overflow: hidden;\n text-align: left;\n margin: 0;\n border: 0;\n -moz-border-radius: 0 0 0 0;\n -webkit-bord"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/passwordbox.css",
"chars": 194,
"preview": ".passwordbox-open {\n background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n b"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/progressbar.css",
"chars": 667,
"preview": ".progressbar {\n border-width: 1px;\n border-style: solid;\n -moz-border-radius: 5px 5px 5px 5px;\n -webkit-border-radiu"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/propertygrid.css",
"chars": 700,
"preview": ".propertygrid .datagrid-view1 .datagrid-body td {\n padding-bottom: 1px;\n border-width: 0 1px 0 0;\n}\n.propertygrid .dat"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/radiobutton.css",
"chars": 408,
"preview": ".radiobutton {\n position: relative;\n border: 2px solid #0070a9;\n border-radius: 50%;\n}\n.radiobutton-inner {\n positio"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/searchbox.css",
"chars": 1341,
"preview": ".searchbox-button {\n width: 18px;\n height: 20px;\n overflow: hidden;\n display: inline-block;\n vertical-align: top;\n "
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/sidemenu.css",
"chars": 1399,
"preview": ".sidemenu .tree-hit {\n background-image: none;\n}\n.sidemenu-default-icon {\n background-image: none;\n width: 0;\n}\n.side"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/slider.css",
"chars": 1616,
"preview": ".slider-disabled {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.slider-h {\n height: 22px;\n}\n.slider-v {\n width: 22p"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/spinner.css",
"chars": 2854,
"preview": ".spinner-arrow {\n display: inline-block;\n overflow: hidden;\n vertical-align: top;\n margin: 0;\n padding: 0;\n opacit"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/splitbutton.css",
"chars": 290,
"preview": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n display: inline-block;\n}\n.l-btn"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/switchbutton.css",
"chars": 1628,
"preview": ".switchbutton {\n text-decoration: none;\n display: inline-block;\n overflow: hidden;\n vertical-align: middle;\n margin"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/tabs.css",
"chars": 9542,
"preview": ".tabs-container {\n overflow: hidden;\n}\n.tabs-header {\n border-width: 1px;\n border-style: solid;\n border-bottom-width"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/tagbox.css",
"chars": 875,
"preview": ".tagbox {\n cursor: text;\n}\n.tagbox .textbox-text {\n float: left;\n}\n.tagbox-label {\n position: relative;\n display: bl"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/textbox.css",
"chars": 2923,
"preview": ".textbox {\n position: relative;\n border: 1px solid #D4D4D4;\n background-color: #fff;\n vertical-align: middle;\n disp"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/tooltip.css",
"chars": 1972,
"preview": ".tooltip {\n position: absolute;\n display: none;\n z-index: 9900000;\n outline: none;\n opacity: 1;\n filter: alpha(opa"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/tree.css",
"chars": 3549,
"preview": ".tree {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.tree li {\n white-space: nowrap;\n}\n.tree li ul {\n list-s"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/validatebox.css",
"chars": 94,
"preview": ".validatebox-invalid {\n border-color: #ffa8a8;\n background-color: #fff3f3;\n color: #000;\n}\n"
},
{
"path": "src/main/resources/static/easyui/themes/bootstrap/window.css",
"chars": 4280,
"preview": ".window {\n overflow: hidden;\n padding: 5px;\n border-width: 1px;\n border-style: solid;\n}\n.window .window-header {\n b"
},
{
"path": "src/main/resources/static/easyui/themes/color.css",
"chars": 6345,
"preview": ".c1,.c1:hover,.c1>.panel-header{\r\n\tcolor: #fff;\r\n\tborder-color: #3c8b3c;\r\n\tbackground: #4cae4c;\r\n\tbackground: -webkit-li"
},
{
"path": "src/main/resources/static/easyui/themes/default/accordion.css",
"chars": 2192,
"preview": ".accordion {\n overflow: hidden;\n border-width: 1px;\n border-style: solid;\n}\n.accordion .accordion-header {\n border-w"
},
{
"path": "src/main/resources/static/easyui/themes/default/calendar.css",
"chars": 3941,
"preview": ".calendar {\n border-width: 1px;\n border-style: solid;\n padding: 1px;\n overflow: hidden;\n}\n.calendar table {\n table-"
},
{
"path": "src/main/resources/static/easyui/themes/default/checkbox.css",
"chars": 518,
"preview": ".checkbox {\n position: relative;\n border: 2px solid #ffab3f;\n -moz-border-radius: 5px 5px 5px 5px;\n -webkit-border-r"
},
{
"path": "src/main/resources/static/easyui/themes/default/combo.css",
"chars": 625,
"preview": ".combo-arrow {\n width: 18px;\n height: 20px;\n overflow: hidden;\n display: inline-block;\n vertical-align: top;\n curs"
},
{
"path": "src/main/resources/static/easyui/themes/default/combobox.css",
"chars": 659,
"preview": ".combobox-item,\n.combobox-group,\n.combobox-stick {\n font-size: 14px;\n padding: 6px 4px;\n line-height: 20px;\n}\n.combob"
},
{
"path": "src/main/resources/static/easyui/themes/default/datagrid.css",
"chars": 5767,
"preview": ".datagrid .panel-body {\n overflow: hidden;\n position: relative;\n}\n.datagrid-view {\n position: relative;\n overflow: h"
},
{
"path": "src/main/resources/static/easyui/themes/default/datalist.css",
"chars": 1833,
"preview": ".datalist .datagrid-header {\n border-width: 0;\n}\n.datalist .datagrid-group,\n.m-list .m-list-group {\n height: 25px;\n l"
},
{
"path": "src/main/resources/static/easyui/themes/default/datebox.css",
"chars": 622,
"preview": ".datebox-calendar-inner {\n height: 250px;\n}\n.datebox-button {\n padding: 4px 0;\n text-align: center;\n}\n.datebox-button"
},
{
"path": "src/main/resources/static/easyui/themes/default/dialog.css",
"chars": 907,
"preview": ".dialog-content {\n overflow: auto;\n}\n.dialog-toolbar {\n position: relative;\n padding: 2px 5px;\n}\n.dialog-tool-separat"
},
{
"path": "src/main/resources/static/easyui/themes/default/easyui.css",
"chars": 71400,
"preview": ".panel {\n overflow: hidden;\n text-align: left;\n margin: 0;\n border: 0;\n -moz-border-radius: 0 0 0 0;\n -webkit-bord"
},
{
"path": "src/main/resources/static/easyui/themes/default/filebox.css",
"chars": 355,
"preview": ".filebox .textbox-value {\n vertical-align: top;\n position: absolute;\n top: 0;\n left: -5000px;\n}\n.filebox-label {\n d"
},
{
"path": "src/main/resources/static/easyui/themes/default/layout.css",
"chars": 3024,
"preview": ".layout {\n position: relative;\n overflow: hidden;\n margin: 0;\n padding: 0;\n z-index: 0;\n}\n.layout-panel {\n positio"
},
{
"path": "src/main/resources/static/easyui/themes/default/linkbutton.css",
"chars": 4377,
"preview": ".l-btn {\n text-decoration: none;\n display: inline-block;\n overflow: hidden;\n margin: 0;\n padding: 0;\n cursor: poin"
},
{
"path": "src/main/resources/static/easyui/themes/default/menu.css",
"chars": 2194,
"preview": ".menu {\n position: absolute;\n margin: 0;\n padding: 2px;\n border-width: 1px;\n border-style: solid;\n overflow: hidde"
},
{
"path": "src/main/resources/static/easyui/themes/default/menubutton.css",
"chars": 1882,
"preview": ".m-btn-downarrow,\n.s-btn-downarrow {\n display: inline-block;\n position: absolute;\n width: 16px;\n height: 16px;\n fon"
},
{
"path": "src/main/resources/static/easyui/themes/default/messager.css",
"chars": 898,
"preview": ".messager-body {\n padding: 10px 10px 30px 10px;\n overflow: auto;\n}\n.messager-button {\n text-align: center;\n padding:"
},
{
"path": "src/main/resources/static/easyui/themes/default/numberbox.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/easyui/themes/default/pagination.css",
"chars": 1538,
"preview": ".pagination {\n zoom: 1;\n padding: 2px;\n}\n.pagination table {\n float: left;\n height: 30px;\n}\n.pagination td {\n borde"
},
{
"path": "src/main/resources/static/easyui/themes/default/panel.css",
"chars": 5682,
"preview": ".panel {\n overflow: hidden;\n text-align: left;\n margin: 0;\n border: 0;\n -moz-border-radius: 0 0 0 0;\n -webkit-bord"
},
{
"path": "src/main/resources/static/easyui/themes/default/passwordbox.css",
"chars": 194,
"preview": ".passwordbox-open {\n background: url('images/passwordbox_open.png') no-repeat center center;\n}\n.passwordbox-close {\n b"
}
]
// ... and 177 more files (download for full content)
About this extraction
This page contains the full source code of the zhitom/zkweb GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 377 files (56.1 MB), approximately 551.5k tokens, and a symbol index with 680 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.