[
  {
    "path": ".gitignore",
    "content": "# 忽略.idea目录及其子目录、子文件\n.idea/\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Mr.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# ok-admin v1.0\n\n一个很赞的，扁平化风格的，响应式布局的通用后台模版解决方案，旨为后端程序员减压！\n![输入图片说明](https://images.gitee.com/uploads/images/2019/0525/161436_23cd5fd8_1152471.png \"屏幕截图.png\")\n\n### QQ交流群\n\n~~964222534~~ 🈵️ 、 ~~833539807~~ 🈵️ 、 797113469 🔥\n\n# 技术栈\n\n<p>\n  <img src=\"https://img.shields.io/badge/layui-2.4.5-brightgreen.svg\">\n  <img src=\"https://img.shields.io/badge/zTree-3.5.40-brightgreen.svg\">\n  <img src=\"https://img.shields.io/badge/NProgress-0.2.0-brightgreen.svg\">\n  <img src=\"https://img.shields.io/badge/ECharts-2.0-brightgreen.svg\">\n  <img src=\"https://img.shields.io/badge/Animate.css-3.7.0-brightgreen.svg\">\n</p>\n\n# 访问地址\n\n- http://ok-admin-v1.xlbweb.cn\n- http://ok-admin.xlbweb.cn\n\n# 效果预览\n\n<table>\n    <tr>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161523_49e0eb96_1152471.png\"/></td>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161620_a894f907_1152471.png\"/></td>\n    </tr>\n    <tr>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161730_51a9c186_1152471.png\"/></td>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161754_d382086c_1152471.png\"/></td>\n    </tr>\n    <tr>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161830_f075d89f_1152471.png\"/></td>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161853_a07554d7_1152471.png\"/></td>\n    </tr>\n    <tr>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161912_c86d7db2_1152471.png\"/></td>\n        <td><img src=\"https://images.gitee.com/uploads/images/2019/0525/161939_ec3ef027_1152471.png\"/></td>\n    </tr>\n</table>\n\n# 开源协议\n\n[MIT](https://github.com/bobi1234/ok-admin/blob/master/LICENSE)\n"
  },
  {
    "path": "css/okadmin.css",
    "content": "@import \"../lib/layui/css/layui.css\";\n@import \"../font/iconfont.css\";\n@import \"../lib/animate/animate.css\";\n/*所有页面的CSS代码都写在这里*/\nhtml,body{width: 100%;height: 100%;}\n/*登陆页面*/\n.login-body{background:url(../imgs/bg.png) no-repeat center center fixed;background-size:cover}\n.login-body .login-box{width:300px;height:300px;border:1px solid #1a312c;position:absolute;left:50%;top:50%;margin-left:-150px;margin-top:-150px;border-radius:5px}\n.login-body .login-box .head{width:100px;height:100px;border-radius:50%;position:absolute;top:-96px;left:50%;margin-left:-50px;background:url(../imgs/ok.png);background-size:cover}\n.login-body .login-box .input-box{margin:10px 10px 10px 10px}\n.login-body .login-box .input-box input{margin-top:20px;border-radius:5px}\n.login-body .login-box .input-box input[type=submit]{background-color:#189F92;width:100%;border:none;outline:0;cursor:pointer;color:#fff;padding-top:8px;padding-bottom:8px;font-size:18px}\n.login-body .login-box .input-box .remember-me{margin-top:20px}\n.login-body .login-box .input-box .remember-me .layui-form-switch{margin-top:0}\n.login-body .login-box .input-box .oauth{margin-top:20px}\n.login-body .login-box .input-box .oauth i{cursor:pointer;font-size:28px}\n.login-body .login-box .copyright{margin:10px 10px 10px 10px;font-size:12px}\n\n/*index及其它页面*/\n.layui-layout-admin .layui-logo{color:#fff;font-size:20px}\n.layui-nav{padding:0}\n.layui-layout-left{left:235px}\n.layui-tab-title li:first-child .layui-tab-close{display:none}\n.layui-tab-title li{background-color:#f2f2f2}\n.layui-tab-brief>.layui-tab-title .layui-this{color:#fff;background-color:#1AA094;}\n.menu-switch{width:30px;height:30px;position:relative;left:200px;top:16px;color:#fff;background-color:#1AA094;text-align:center;line-height:30px;cursor:pointer}\n.weather{margin: 15px 0 0 20px;}\n.textMarquee{float:left;width:450px;margin-top: 20px;}\n.layui-nav-tree .layui-nav-child a{padding-left:36px}\n.content-body{position:absolute;top:60px;right:0;bottom:42px;left:200px;z-index:1;overflow:hidden;}\n.content-body .layui-tab{margin:0;}\n.content-body .layui-tab-content{position:absolute;top:40px;bottom:0;width:100%;padding:0;z-index:-999;overflow:hidden}\n.content-body .layui-tab-content .layui-tab-item{height:100%}\n.content-body .layui-tab-content .layui-tab-item iframe{height:100%}\n@media screen and (max-width:992px){\n\t.textMarquee{display:none}\n}\n@media screen and (max-width:768px){\n\t.layui-layout-admin .layui-bg-black{left:-200px}\n    .layui-layout-admin .content-body{left:0}\n    .layui-layout-admin .layui-footer{left:0}\n    .layui-layout-left{display:none}\n}\n@media screen and (max-width:480px){\n\t.layui-layout-admin .layui-logo{left:-32px}\n    .menu-switch{left:140px}\n}\n@media screen and (max-width:330px){\n\t.layui-layout-admin .layui-logo{left:-51px;font-size:14px}\n    .menu-switch{left:100px}\n}\n.yy{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.5;z-index:10;background-color:#000;display:none}\n\n/*sub-page页面*/\n.ok-body{padding:10px}\n.layui-row-margin{margin:10px 5px 5px 5px}\n.md2-sub1{width:40%;text-align:center;line-height:80px;float:left;border-top-left-radius:5px;border-bottom-left-radius:5px}\n.md2-sub1 i{font-size:40px;display:block;cursor:pointer;transition:All .4s ease-in-out;-webkit-transition:All .4s ease-in-out;-moz-transition:All .4s ease-in-out;-o-transition:All .4s ease-in-out}\n.md2-sub1 i:hover{transform:rotate(360deg);-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}\n.md2-sub2{width:60%;display:inline-block;background-color:#f2f2f2;line-height:46px;text-align:center;border-top-right-radius:5px;border-bottom-right-radius:5px}\n.md2-sub2 span{font-size:25px;display:block;height:34px}\n.md2-sub2 cite{font-style:normal}\n.ok-body-breadcrumb{position:relative;line-height:39px;height:32px;border-bottom:1px solid #e5e5e5}\n.ok-body-breadcrumb .layui-btn{line-height:2.4em;margin-top:3px;float:right}\n.ok-body-breadcrumb .layui-btn .layui-icon{line-height:32px}\n.ok-search{margin-top:15px}\n.ok-search .layui-input{width:190px;padding-left:10px;margin-left:10px;float:left}\n.ok-search .layui-input:first-child{margin-left:0}\n.ok-search .layui-btn{margin-left:10px}\n@media screen and (max-width:768px){\n\t.ok-search .layui-input{width:100%;margin-left:0;margin-top:10px}\n    .ok-search .layui-btn{margin-left:0;margin-top:10px}\n}\nokToolbar{display:block;margin-top:10px;margin-bottom:10px;padding:5px;line-height:22px;border-radius:0 2px 2px 0;background-color:#f2f2f2}\nokToolbar span{float:right;line-height:30px}\n.ok-form{margin-top:10px}\n\n/*滚动条代码*/\n::-webkit-scrollbar{width:10px;height:10px}\n::-webkit-scrollbar-button:vertical{display:none}\n::-webkit-scrollbar-track:vertical{background-color:#000}\n::-webkit-scrollbar-track-piece{background-color:#F5F5F5}\n::-webkit-scrollbar-thumb{margin-right:10px;background-color:#A6A6A6}\n::-webkit-scrollbar-thumb:hover{background-color:#aaa}\n::-webkit-scrollbar-corner:vertical{background-color:#535353}\n::-webkit-scrollbar-resizer:vertical{background-color:#FF6E00}\n\n/* 公共样式 */\n.tal{text-align:left;}\n.tac{text-align:center;}\n.tar{text-align:right;}\n\n/*三级菜单、四级菜单、五级菜单、六级菜单、七级菜单、八级菜单、九级菜单、十级菜单*/\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left: 54px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 74px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 94px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 114px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 134px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 154px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 174px;}\n.layui-nav-tree .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left: 194px;}\n\n\n"
  },
  {
    "path": "data/menu.json",
    "content": "{\n    \"code\": 0,\n    \"msg\": \"操作成功\",\n    \"data\": [\n        {\n            \"title\": \"会员管理\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe66f;\",\n            \"spread\": true,\n            \"children\": [\n                {\n                    \"title\": \"用户列表\",\n                    \"path\": \"pages/member/user.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe639;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"角色列表\",\n                    \"path\": \"pages/member/role.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe645;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"权限列表\",\n                    \"path\": \"pages/member/permission.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe640;\",\n                    \"spread\": false\n                }\n            ]\n        },\n        {\n            \"title\": \"常用页面\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe672;\",\n            \"spread\": false,\n            \"children\": [\n                {\n                    \"title\": \"文章列表\",\n                    \"path\": \"pages/often/article.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"留言列表\",\n                    \"path\": \"pages/often/message.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"产品列表\",\n                    \"path\": \"pages/often/product.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"下载列表\",\n                    \"path\": \"pages/often/download.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"链接列表\",\n                    \"path\": \"pages/often/link.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"任务列表\",\n                    \"path\": \"pages/often/issue.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"图片列表\",\n                    \"path\": \"pages/often/link.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe62e;\",\n                    \"spread\": false\n                }\n            ]\n        },\n        {\n            \"title\": \"其他页面\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe672;\",\n            \"spread\": false,\n            \"children\": [\n                {\n                    \"title\": \"登陆\",\n                    \"path\": \"pages/other/login.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe66f;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"注册\",\n                    \"path\": \"pages/other/reg.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe66f;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"忘记密码\",\n                    \"path\": \"pages/other/forget.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe66f;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"403页面\",\n                    \"path\": \"pages/other/403.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe653;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"404页面\",\n                    \"path\": \"pages/other/404.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe654;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"500页面\",\n                    \"path\": \"pages/other/500.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe655;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"捐赠列表\",\n                    \"path\": \"pages/other/donate.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe65a;\",\n                    \"spread\": false\n                }\n            ]\n        },\n        {\n            \"title\": \"图表页面\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe628;\",\n            \"spread\": false,\n            \"children\": [\n                {\n                    \"title\": \"柱状图\",\n                    \"path\": \"pages/map/map1.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe67a;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"折线图\",\n                    \"path\": \"pages/map/map2.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe79a;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"折线堆叠图\",\n                    \"path\": \"pages/map/map3.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe79a;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"饼图\",\n                    \"path\": \"pages/map/map4.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe61b;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"环形图\",\n                    \"path\": \"pages/map/map5.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe61f;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"散布图\",\n                    \"path\": \"pages/map/map6.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe61f;\",\n                    \"spread\": false\n                }\n            ]\n        },\n        {\n            \"title\": \"系统管理\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe716;\",\n            \"spread\": false,\n            \"children\": [\n                {\n                    \"title\": \"网站配置\",\n                    \"path\": \"pages/system/system-setting.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe61c;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"系统日志\",\n                    \"path\": \"pages/system/system-log.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe614;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"屏蔽词\",\n                    \"path\": \"pages/system/system-shield.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe641;\",\n                    \"spread\": false\n                }\n            ]\n        },\n        {\n            \"title\": \"框架使用\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe60b;\",\n            \"spread\": false,\n            \"children\": [\n                {\n                    \"title\": \"okMenu使用\",\n                    \"path\": \"pages/use/use-okMenu.html\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe65f;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"okTab使用\",\n                    \"path\": \"pages/use/use-okTab.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe665;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"okLayer使用\",\n                    \"path\": \"pages/use/use-okLayer.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe768;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"okUtils使用\",\n                    \"path\": \"pages/use/use-okUtils.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe6fa;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"Layui图标\",\n                    \"path\": \"https://www.layui.com/doc/element/icon.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe800;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"Iconfont图标\",\n                    \"path\": \"font/demo_index.html\",\n                    \"font\": \"iconfont\",\n                    \"icon\": \"&#xe800;\",\n                    \"spread\": false\n                }\n            ]\n        },\n        {\n            \"title\": \"多级菜单\",\n            \"path\": \"\",\n            \"font\": \"layui-icon\",\n            \"icon\": \"&#xe658;\",\n            \"spread\": false,\n            \"children\": [\n                {\n                    \"title\": \"购物网站\",\n                    \"path\": \"\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe658;\",\n                    \"spread\": false,\n                    \"children\": [\n                        {\n                            \"title\": \"苏宁\",\n                            \"path\": \"https://www.suning.com\",\n                            \"font\": \"layui-icon\",\n                            \"icon\": \"&#xe600;\",\n                            \"spread\": false\n                        },\n                        {\n                            \"title\": \"京东\",\n                            \"path\": \"https://www.jd.com\",\n                            \"font\": \"layui-icon\",\n                            \"icon\": \"&#xe600;\",\n                            \"spread\": false\n                        },\n                        {\n                            \"title\": \"阿里\",\n                            \"path\": \"\",\n                            \"font\": \"layui-icon\",\n                            \"icon\": \"&#xe658;\",\n                            \"spread\": false,\n                            \"children\": [\n                                {\n                                    \"title\": \"淘宝\",\n                                    \"path\": \"https://www.taobao.com\",\n                                    \"font\": \"layui-icon\",\n                                    \"icon\": \"&#xe600;\",\n                                    \"spread\": false\n                                },\n                                {\n                                    \"title\": \"天猫\",\n                                    \"path\": \"https://www.tmall.com\",\n                                    \"font\": \"layui-icon\",\n                                    \"icon\": \"&#xe600;\",\n                                    \"spread\": false\n                                },\n                                {\n                                    \"title\": \"聚划算\",\n                                    \"path\": \"https://ju.taobao.com\",\n                                    \"font\": \"layui-icon\",\n                                    \"icon\": \"&#xe600;\",\n                                    \"spread\": false\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"新浪微博\",\n                    \"path\": \"https://www.sina.com.cn\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe600;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"搜索引擎\",\n                    \"path\": \"\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe658;\",\n                    \"spread\": false,\n                    \"children\": [\n                        {\n                            \"title\": \"百度\",\n                            \"path\": \"https://www.baidu.com\",\n                            \"font\": \"layui-icon\",\n                            \"icon\": \"&#xe600;\",\n                            \"spread\": false\n                        },\n                        {\n                            \"title\": \"谷歌\",\n                            \"path\": \"https://www.google.com\",\n                            \"font\": \"layui-icon\",\n                            \"icon\": \"&#xe600;\",\n                            \"spread\": false\n                        },\n                        {\n                            \"title\": \"360搜索360搜索360搜索360搜索360搜索360搜索\",\n                            \"path\": \"https://www.so.com\",\n                            \"font\": \"layui-icon\",\n                            \"icon\": \"&#xe600;\",\n                            \"spread\": false\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"搜狐\",\n                    \"path\": \"http://www.sohu.com\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe600;\",\n                    \"spread\": false\n                },\n                {\n                    \"title\": \"网易\",\n                    \"path\": \"https://www.163.com\",\n                    \"font\": \"layui-icon\",\n                    \"icon\": \"&#xe600;\",\n                    \"spread\": false\n                }\n            ]\n        }\n    ]\n}\n"
  },
  {
    "path": "data/permission/tree.json",
    "content": "[\n    {\n        \"title\": \"根目录\",\n        \"spread\": true,\n        \"children\": [\n            {\n                \"title\": \"会员管理\",\n                \"spread\": true,\n                \"children\": [\n                    {\n                        \"title\": \"用户管理\",\n                        \"spread\": true,\n                        \"children\": [\n                            {\n                                \"title\": \"添加用户\"\n                            },\n                            {\n                                \"title\": \"编辑用户\"\n                            },\n                            {\n                                \"title\": \"删除用户\"\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"角色管理\",\n                        \"spread\": true,\n                        \"children\": [\n                            {\n                                \"title\": \"添加角色\"\n                            },\n                            {\n                                \"title\": \"编辑角色\"\n                            },\n                            {\n                                \"title\": \"删除角色\"\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"权限管理\",\n                        \"spread\": true,\n                        \"children\": [\n                            {\n                                \"title\": \"添加权限\"\n                            },\n                            {\n                                \"title\": \"编辑权限\"\n                            },\n                            {\n                                \"title\": \"删除权限\"\n                            }\n                        ]\n                    }\n                ]\n            }\n        ]\n    }\n]\n"
  },
  {
    "path": "data/permission-table.json",
    "content": "{\n  \"code\": 0,\n  \"msg\": \"\",\n  \"count\": 19,\n  \"data\": [\n    {\n      \"authorityId\": 1,\n      \"authorityName\": \"系统管理\",\n      \"orderNumber\": 1,\n      \"menuUrl\": null,\n      \"menuIcon\": \"layui-icon-set\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": null,\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 0,\n      \"parentId\": -1\n    },\n    {\n      \"authorityId\": 2,\n      \"authorityName\": \"用户管理\",\n      \"orderNumber\": 2,\n      \"menuUrl\": \"system/user\",\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": null,\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 0,\n      \"parentId\": 1\n    },\n    {\n      \"authorityId\": 3,\n      \"authorityName\": \"查询用户\",\n      \"orderNumber\": 3,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/07/21 13:54:16\",\n      \"authority\": \"user:view\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/21 13:54:16\",\n      \"isMenu\": 1,\n      \"parentId\": 2\n    },\n    {\n      \"authorityId\": 4,\n      \"authorityName\": \"添加用户\",\n      \"orderNumber\": 4,\n      \"menuUrl\": null,\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"user:add\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 2\n    },\n    {\n      \"authorityId\": 5,\n      \"authorityName\": \"修改用户\",\n      \"orderNumber\": 5,\n      \"menuUrl\": null,\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"user:edit\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 2\n    },\n    {\n      \"authorityId\": 6,\n      \"authorityName\": \"删除用户\",\n      \"orderNumber\": 6,\n      \"menuUrl\": null,\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"user:delete\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 2\n    },\n    {\n      \"authorityId\": 7,\n      \"authorityName\": \"角色管理\",\n      \"orderNumber\": 7,\n      \"menuUrl\": \"system/role\",\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": null,\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 0,\n      \"parentId\": 1\n    },\n    {\n      \"authorityId\": 8,\n      \"authorityName\": \"查询角色\",\n      \"orderNumber\": 8,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/07/21 13:54:59\",\n      \"authority\": \"role:view\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/21 13:54:58\",\n      \"isMenu\": 1,\n      \"parentId\": 7\n    },\n    {\n      \"authorityId\": 9,\n      \"authorityName\": \"添加角色\",\n      \"orderNumber\": 9,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"role:add\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 7\n    },\n    {\n      \"authorityId\": 10,\n      \"authorityName\": \"修改角色\",\n      \"orderNumber\": 10,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"role:edit\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 7\n    },\n    {\n      \"authorityId\": 11,\n      \"authorityName\": \"删除角色\",\n      \"orderNumber\": 11,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"role:delete\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 7\n    },\n    {\n      \"authorityId\": 12,\n      \"authorityName\": \"角色权限管理\",\n      \"orderNumber\": 12,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"role:auth\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 15:27:18\",\n      \"isMenu\": 1,\n      \"parentId\": 7\n    },\n    {\n      \"authorityId\": 13,\n      \"authorityName\": \"权限管理\",\n      \"orderNumber\": 13,\n      \"menuUrl\": \"system/authorities\",\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": null,\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 15:45:13\",\n      \"isMenu\": 0,\n      \"parentId\": 1\n    },\n    {\n      \"authorityId\": 14,\n      \"authorityName\": \"查询权限\",\n      \"orderNumber\": 14,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/07/21 13:55:57\",\n      \"authority\": \"authorities:view\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/21 13:55:56\",\n      \"isMenu\": 1,\n      \"parentId\": 13\n    },\n    {\n      \"authorityId\": 15,\n      \"authorityName\": \"添加权限\",\n      \"orderNumber\": 15,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"authorities:add\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/06/29 11:05:41\",\n      \"isMenu\": 1,\n      \"parentId\": 13\n    },\n    {\n      \"authorityId\": 16,\n      \"authorityName\": \"修改权限\",\n      \"orderNumber\": 16,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/07/13 09:13:42\",\n      \"authority\": \"authorities:edit\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/13 09:13:42\",\n      \"isMenu\": 1,\n      \"parentId\": 13\n    },\n    {\n      \"authorityId\": 17,\n      \"authorityName\": \"删除权限\",\n      \"orderNumber\": 17,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": \"authorities:delete\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/06/29 11:05:41\",\n      \"isMenu\": 1,\n      \"parentId\": 13\n    },\n    {\n      \"authorityId\": 18,\n      \"authorityName\": \"登录日志\",\n      \"orderNumber\": 18,\n      \"menuUrl\": \"system/loginRecord\",\n      \"menuIcon\": null,\n      \"createTime\": \"2018/06/29 11:05:41\",\n      \"authority\": null,\n      \"checked\": 0,\n      \"updateTime\": \"2018/06/29 11:05:41\",\n      \"isMenu\": 0,\n      \"parentId\": 1\n    },\n    {\n      \"authorityId\": 19,\n      \"authorityName\": \"查询登录日志\",\n      \"orderNumber\": 19,\n      \"menuUrl\": \"\",\n      \"menuIcon\": \"\",\n      \"createTime\": \"2018/07/21 13:56:43\",\n      \"authority\": \"loginRecord:view\",\n      \"checked\": 0,\n      \"updateTime\": \"2018/07/21 13:56:43\",\n      \"isMenu\": 1,\n      \"parentId\": 18\n    }\n  ]\n}"
  },
  {
    "path": "data/permission-tree.json",
    "content": "{\n  \"status\": 1000,\n  \"msg\": \"查询成功\",\n  \"data\": [\n    {\n      \"id\": \"1\",\n      \"name\": \"根目录\",\n      \"isParent\": true\n    },\n    {\n      \"id\": \"2\",\n      \"name\": \"会员管理\",\n      \"isParent\": true,\n      \"parentId\": \"1\"\n    },\n    {\n      \"id\": \"3\",\n      \"name\": \"用户管理\",\n      \"isParent\": true,\n      \"parentId\": \"2\"\n    },\n    {\n      \"id\": \"4\",\n      \"name\": \"增加\",\n      \"isParent\": false,\n      \"parentId\": \"3\"\n    },\n    {\n      \"id\": \"5\",\n      \"name\": \"修改\",\n      \"isParent\": false,\n      \"parentId\": \"3\"\n    },\n    {\n      \"id\": \"6\",\n      \"name\": \"删除\",\n      \"isParent\": false,\n      \"parentId\": \"3\"\n    },\n    {\n      \"id\": \"7\",\n      \"name\": \"角色管理\",\n      \"isParent\": true,\n      \"parentId\": \"2\"\n    },\n    {\n      \"id\": \"8\",\n      \"name\": \"增加\",\n      \"isParent\": false,\n      \"parentId\": \"7\"\n    },\n    {\n      \"id\": \"9\",\n      \"name\": \"修改\",\n      \"isParent\": false,\n      \"parentId\": \"7\"\n    },\n    {\n      \"id\": \"10\",\n      \"name\": \"删除\",\n      \"isParent\": false,\n      \"parentId\": \"7\"\n    },\n    {\n      \"id\": \"11\",\n      \"name\": \"权限管理\",\n      \"isParent\": true,\n      \"parentId\": \"2\"\n    },\n    {\n      \"id\": \"12\",\n      \"name\": \"增加\",\n      \"isParent\": false,\n      \"parentId\": \"11\"\n    },\n    {\n      \"id\": \"13\",\n      \"name\": \"修改\",\n      \"isParent\": false,\n      \"parentId\": \"11\"\n    },\n    {\n      \"id\": \"14\",\n      \"name\": \"删除\",\n      \"isParent\": false,\n      \"parentId\": \"11\"\n    }\n  ]\n}\n"
  },
  {
    "path": "font/demo.css",
    "content": "/* Logo 字体 */\n@font-face {\n  font-family: \"iconfont logo\";\n  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');\n  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),\n    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');\n}\n\n.logo {\n  font-family: \"iconfont logo\";\n  font-size: 160px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n/* tabs */\n.nav-tabs {\n  position: relative;\n}\n\n.nav-tabs .nav-more {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  height: 42px;\n  line-height: 42px;\n  color: #666;\n}\n\n#tabs {\n  border-bottom: 1px solid #eee;\n}\n\n#tabs li {\n  cursor: pointer;\n  width: 100px;\n  height: 40px;\n  line-height: 40px;\n  text-align: center;\n  font-size: 16px;\n  border-bottom: 2px solid transparent;\n  position: relative;\n  z-index: 1;\n  margin-bottom: -1px;\n  color: #666;\n}\n\n\n#tabs .active {\n  border-bottom-color: #f00;\n  color: #222;\n}\n\n.tab-container .content {\n  display: none;\n}\n\n/* 页面布局 */\n.main {\n  padding: 30px 100px;\n  width: 960px;\n  margin: 0 auto;\n}\n\n.main .logo {\n  color: #333;\n  text-align: left;\n  margin-bottom: 30px;\n  line-height: 1;\n  height: 110px;\n  margin-top: -50px;\n  overflow: hidden;\n  *zoom: 1;\n}\n\n.main .logo a {\n  font-size: 160px;\n  color: #333;\n}\n\n.helps {\n  margin-top: 40px;\n}\n\n.helps pre {\n  padding: 20px;\n  margin: 10px 0;\n  border: solid 1px #e7e1cd;\n  background-color: #fffdef;\n  overflow: auto;\n}\n\n.icon_lists {\n  width: 100% !important;\n  overflow: hidden;\n  *zoom: 1;\n}\n\n.icon_lists li {\n  width: 100px;\n  margin-bottom: 10px;\n  margin-right: 20px;\n  text-align: center;\n  list-style: none !important;\n  cursor: default;\n}\n\n.icon_lists li .code-name {\n  line-height: 1.2;\n}\n\n.icon_lists .icon {\n  display: block;\n  height: 100px;\n  line-height: 100px;\n  font-size: 42px;\n  margin: 10px auto;\n  color: #333;\n  -webkit-transition: font-size 0.25s linear, width 0.25s linear;\n  -moz-transition: font-size 0.25s linear, width 0.25s linear;\n  transition: font-size 0.25s linear, width 0.25s linear;\n}\n\n.icon_lists .icon:hover {\n  font-size: 100px;\n}\n\n.icon_lists .svg-icon {\n  /* 通过设置 font-size 来改变图标大小 */\n  width: 1em;\n  /* 图标和文字相邻时，垂直对齐 */\n  vertical-align: -0.15em;\n  /* 通过设置 color 来改变 SVG 的颜色/fill */\n  fill: currentColor;\n  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示\n      normalize.css 中也包含这行 */\n  overflow: hidden;\n}\n\n.icon_lists li .name,\n.icon_lists li .code-name {\n  color: #666;\n}\n\n/* markdown 样式 */\n.markdown {\n  color: #666;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.highlight {\n  line-height: 1.5;\n}\n\n.markdown img {\n  vertical-align: middle;\n  max-width: 100%;\n}\n\n.markdown h1 {\n  color: #404040;\n  font-weight: 500;\n  line-height: 40px;\n  margin-bottom: 24px;\n}\n\n.markdown h2,\n.markdown h3,\n.markdown h4,\n.markdown h5,\n.markdown h6 {\n  color: #404040;\n  margin: 1.6em 0 0.6em 0;\n  font-weight: 500;\n  clear: both;\n}\n\n.markdown h1 {\n  font-size: 28px;\n}\n\n.markdown h2 {\n  font-size: 22px;\n}\n\n.markdown h3 {\n  font-size: 16px;\n}\n\n.markdown h4 {\n  font-size: 14px;\n}\n\n.markdown h5 {\n  font-size: 12px;\n}\n\n.markdown h6 {\n  font-size: 12px;\n}\n\n.markdown hr {\n  height: 1px;\n  border: 0;\n  background: #e9e9e9;\n  margin: 16px 0;\n  clear: both;\n}\n\n.markdown p {\n  margin: 1em 0;\n}\n\n.markdown>p,\n.markdown>blockquote,\n.markdown>.highlight,\n.markdown>ol,\n.markdown>ul {\n  width: 80%;\n}\n\n.markdown ul>li {\n  list-style: circle;\n}\n\n.markdown>ul li,\n.markdown blockquote ul>li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown>ul li p,\n.markdown>ol li p {\n  margin: 0.6em 0;\n}\n\n.markdown ol>li {\n  list-style: decimal;\n}\n\n.markdown>ol li,\n.markdown blockquote ol>li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown code {\n  margin: 0 3px;\n  padding: 0 5px;\n  background: #eee;\n  border-radius: 3px;\n}\n\n.markdown strong,\n.markdown b {\n  font-weight: 600;\n}\n\n.markdown>table {\n  border-collapse: collapse;\n  border-spacing: 0px;\n  empty-cells: show;\n  border: 1px solid #e9e9e9;\n  width: 95%;\n  margin-bottom: 24px;\n}\n\n.markdown>table th {\n  white-space: nowrap;\n  color: #333;\n  font-weight: 600;\n}\n\n.markdown>table th,\n.markdown>table td {\n  border: 1px solid #e9e9e9;\n  padding: 8px 16px;\n  text-align: left;\n}\n\n.markdown>table th {\n  background: #F7F7F7;\n}\n\n.markdown blockquote {\n  font-size: 90%;\n  color: #999;\n  border-left: 4px solid #e9e9e9;\n  padding-left: 0.8em;\n  margin: 1em 0;\n}\n\n.markdown blockquote p {\n  margin: 0;\n}\n\n.markdown .anchor {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n  margin-left: 8px;\n}\n\n.markdown .waiting {\n  color: #ccc;\n}\n\n.markdown h1:hover .anchor,\n.markdown h2:hover .anchor,\n.markdown h3:hover .anchor,\n.markdown h4:hover .anchor,\n.markdown h5:hover .anchor,\n.markdown h6:hover .anchor {\n  opacity: 1;\n  display: inline-block;\n}\n\n.markdown>br,\n.markdown>p>br {\n  clear: both;\n}\n\n\n.hljs {\n  display: block;\n  background: white;\n  padding: 0.5em;\n  color: #333333;\n  overflow-x: auto;\n}\n\n.hljs-comment,\n.hljs-meta {\n  color: #969896;\n}\n\n.hljs-string,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-strong,\n.hljs-emphasis,\n.hljs-quote {\n  color: #df5000;\n}\n\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-type {\n  color: #a71d5d;\n}\n\n.hljs-literal,\n.hljs-symbol,\n.hljs-bullet,\n.hljs-attribute {\n  color: #0086b3;\n}\n\n.hljs-section,\n.hljs-name {\n  color: #63a35c;\n}\n\n.hljs-tag {\n  color: #333333;\n}\n\n.hljs-title,\n.hljs-attr,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n  color: #795da3;\n}\n\n.hljs-addition {\n  color: #55a532;\n  background-color: #eaffea;\n}\n\n.hljs-deletion {\n  color: #bd2c00;\n  background-color: #ffecec;\n}\n\n.hljs-link {\n  text-decoration: underline;\n}\n\n/* 代码高亮 */\n/* PrismJS 1.15.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n\n  -moz-tab-size: 4;\n  -o-tab-size: 4;\n  tab-size: 4;\n\n  -webkit-hyphens: none;\n  -moz-hyphens: none;\n  -ms-hyphens: none;\n  hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\n@media print {\n\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: .5em 0;\n  overflow: auto;\n}\n\n:not(pre)>code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre)>code[class*=\"language-\"] {\n  padding: .1em;\n  border-radius: .3em;\n  white-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n\n.token.punctuation {\n  color: #999;\n}\n\n.namespace {\n  opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  background: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n\n.token.italic {\n  font-style: italic;\n}\n\n.token.entity {\n  cursor: help;\n}\n"
  },
  {
    "path": "font/demo_index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\"/>\n  <title>IconFont Demo</title>\n  <link rel=\"shortcut icon\" href=\"https://gtms04.alicdn.com/tps/i4/TB1_oz6GVXXXXaFXpXXJDFnIXXX-64-64.ico\" type=\"image/x-icon\"/>\n  <link rel=\"stylesheet\" href=\"https://g.alicdn.com/thx/cube/1.3.2/cube.min.css\">\n  <link rel=\"stylesheet\" href=\"demo.css\">\n  <link rel=\"stylesheet\" href=\"iconfont.css\">\n  <script src=\"iconfont.js\"></script>\n  <!-- jQuery -->\n  <script src=\"https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js\"></script>\n  <!-- 代码高亮 -->\n  <script src=\"https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js\"></script>\n</head>\n<body>\n  <div class=\"main\">\n    <h1 class=\"logo\"><a href=\"https://www.iconfont.cn/\" title=\"iconfont 首页\" target=\"_blank\">&#xe86b;</a></h1>\n    <div class=\"nav-tabs\">\n      <ul id=\"tabs\" class=\"dib-box\">\n        <li class=\"dib active\"><span>Unicode</span></li>\n        <li class=\"dib\"><span>Font class</span></li>\n        <li class=\"dib\"><span>Symbol</span></li>\n      </ul>\n      \n      <a href=\"https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=693759\" target=\"_blank\" class=\"nav-more\">查看项目</a>\n      \n    </div>\n    <div class=\"tab-container\">\n      <div class=\"content unicode\" style=\"display: block;\">\n          <ul class=\"icon_lists dib-box\">\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe62f;</span>\n                <div class=\"name\">404错误</div>\n                <div class=\"code-name\">&amp;#xe62f;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe65a;</span>\n                <div class=\"name\">捐赠</div>\n                <div class=\"code-name\">&amp;#xe65a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6c8;</span>\n                <div class=\"name\">其他</div>\n                <div class=\"code-name\">&amp;#xe6c8;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61d;</span>\n                <div class=\"name\">会员</div>\n                <div class=\"code-name\">&amp;#xe61d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xeaf6;</span>\n                <div class=\"name\">github</div>\n                <div class=\"code-name\">&amp;#xeaf6;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe618;</span>\n                <div class=\"name\">微博</div>\n                <div class=\"code-name\">&amp;#xe618;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe744;</span>\n                <div class=\"name\">留言</div>\n                <div class=\"code-name\">&amp;#xe744;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe790;</span>\n                <div class=\"name\">菜单</div>\n                <div class=\"code-name\">&amp;#xe790;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63d;</span>\n                <div class=\"name\">产品</div>\n                <div class=\"code-name\">&amp;#xe63d;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7ce;</span>\n                <div class=\"name\">支付宝</div>\n                <div class=\"code-name\">&amp;#xe7ce;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe750;</span>\n                <div class=\"name\">上升</div>\n                <div class=\"code-name\">&amp;#xe750;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe79a;</span>\n                <div class=\"name\">图表 折线图</div>\n                <div class=\"code-name\">&amp;#xe79a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe623;</span>\n                <div class=\"name\">qq</div>\n                <div class=\"code-name\">&amp;#xe623;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe63b;</span>\n                <div class=\"name\">新闻</div>\n                <div class=\"code-name\">&amp;#xe63b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe824;</span>\n                <div class=\"name\">使用帮助1</div>\n                <div class=\"code-name\">&amp;#xe824;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe620;</span>\n                <div class=\"name\">添加</div>\n                <div class=\"code-name\">&amp;#xe620;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe600;</span>\n                <div class=\"name\">home</div>\n                <div class=\"code-name\">&amp;#xe600;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe627;</span>\n                <div class=\"name\">other</div>\n                <div class=\"code-name\">&amp;#xe627;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe605;</span>\n                <div class=\"name\">商品</div>\n                <div class=\"code-name\">&amp;#xe605;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe636;</span>\n                <div class=\"name\">友情链接</div>\n                <div class=\"code-name\">&amp;#xe636;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6cc;</span>\n                <div class=\"name\">403</div>\n                <div class=\"code-name\">&amp;#xe6cc;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe66a;</span>\n                <div class=\"name\">微信</div>\n                <div class=\"code-name\">&amp;#xe66a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe626;</span>\n                <div class=\"name\">微信</div>\n                <div class=\"code-name\">&amp;#xe626;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe647;</span>\n                <div class=\"name\">下载</div>\n                <div class=\"code-name\">&amp;#xe647;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67a;</span>\n                <div class=\"name\">图表-柱状图</div>\n                <div class=\"code-name\">&amp;#xe67a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe800;</span>\n                <div class=\"name\">字体</div>\n                <div class=\"code-name\">&amp;#xe800;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe7c3;</span>\n                <div class=\"name\">文章</div>\n                <div class=\"code-name\">&amp;#xe7c3;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6da;</span>\n                <div class=\"name\">下降</div>\n                <div class=\"code-name\">&amp;#xe6da;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe628;</span>\n                <div class=\"name\">页面</div>\n                <div class=\"code-name\">&amp;#xe628;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe71c;</span>\n                <div class=\"name\">500</div>\n                <div class=\"code-name\">&amp;#xe71c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe653;</span>\n                <div class=\"name\">403</div>\n                <div class=\"code-name\">&amp;#xe653;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe654;</span>\n                <div class=\"name\">404</div>\n                <div class=\"code-name\">&amp;#xe654;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe655;</span>\n                <div class=\"name\">500</div>\n                <div class=\"code-name\">&amp;#xe655;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe665;</span>\n                <div class=\"name\">tab</div>\n                <div class=\"code-name\">&amp;#xe665;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe619;</span>\n                <div class=\"name\">评论</div>\n                <div class=\"code-name\">&amp;#xe619;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe67c;</span>\n                <div class=\"name\">登录</div>\n                <div class=\"code-name\">&amp;#xe67c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe60e;</span>\n                <div class=\"name\">流程</div>\n                <div class=\"code-name\">&amp;#xe60e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe76e;</span>\n                <div class=\"name\">角色</div>\n                <div class=\"code-name\">&amp;#xe76e;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe766;</span>\n                <div class=\"name\">符号-login</div>\n                <div class=\"code-name\">&amp;#xe766;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61a;</span>\n                <div class=\"name\">设置</div>\n                <div class=\"code-name\">&amp;#xe61a;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe641;</span>\n                <div class=\"name\">屏蔽</div>\n                <div class=\"code-name\">&amp;#xe641;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe614;</span>\n                <div class=\"name\">日志</div>\n                <div class=\"code-name\">&amp;#xe614;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe639;</span>\n                <div class=\"name\">电力用户总数。</div>\n                <div class=\"code-name\">&amp;#xe639;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe651;</span>\n                <div class=\"name\">人工智能</div>\n                <div class=\"code-name\">&amp;#xe651;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe640;</span>\n                <div class=\"name\">角色授权</div>\n                <div class=\"code-name\">&amp;#xe640;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe630;</span>\n                <div class=\"name\">gitee</div>\n                <div class=\"code-name\">&amp;#xe630;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe768;</span>\n                <div class=\"name\">layer</div>\n                <div class=\"code-name\">&amp;#xe768;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe668;</span>\n                <div class=\"name\">监控控制管理监管</div>\n                <div class=\"code-name\">&amp;#xe668;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe796;</span>\n                <div class=\"name\">图片</div>\n                <div class=\"code-name\">&amp;#xe796;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe645;</span>\n                <div class=\"name\">角色管理</div>\n                <div class=\"code-name\">&amp;#xe645;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61c;</span>\n                <div class=\"name\">配置</div>\n                <div class=\"code-name\">&amp;#xe61c;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61b;</span>\n                <div class=\"name\">饼图</div>\n                <div class=\"code-name\">&amp;#xe61b;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe6fa;</span>\n                <div class=\"name\">工具</div>\n                <div class=\"code-name\">&amp;#xe6fa;</div>\n              </li>\n          \n            <li class=\"dib\">\n              <span class=\"icon iconfont\">&#xe61f;</span>\n                <div class=\"name\">环形图</div>\n                <div class=\"code-name\">&amp;#xe61f;</div>\n              </li>\n          \n          </ul>\n          <div class=\"article markdown\">\n          <h2 id=\"unicode-\">Unicode 引用</h2>\n          <hr>\n\n          <p>Unicode 是字体在网页端最原始的应用方式，特点是：</p>\n          <ul>\n            <li>兼容性最好，支持 IE6+，及所有现代浏览器。</li>\n            <li>支持按字体的方式去动态调整图标大小，颜色等等。</li>\n            <li>但是因为是字体，所以不支持多色。只能使用平台里单色的图标，就算项目里有多色图标也会自动去色。</li>\n          </ul>\n          <blockquote>\n            <p>注意：新版 iconfont 支持多色图标，这些多色图标在 Unicode 模式下将不能使用，如果有需求建议使用symbol 的引用方式</p>\n          </blockquote>\n          <p>Unicode 使用步骤如下：</p>\n          <h3 id=\"-font-face\">第一步：拷贝项目下面生成的 <code>@font-face</code></h3>\n<pre><code class=\"language-css\"\n>@font-face {\n  font-family: 'iconfont';\n  src: url('iconfont.eot');\n  src: url('iconfont.eot?#iefix') format('embedded-opentype'),\n      url('iconfont.woff2') format('woff2'),\n      url('iconfont.woff') format('woff'),\n      url('iconfont.ttf') format('truetype'),\n      url('iconfont.svg#iconfont') format('svg');\n}\n</code></pre>\n          <h3 id=\"-iconfont-\">第二步：定义使用 iconfont 的样式</h3>\n<pre><code class=\"language-css\"\n>.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n</code></pre>\n          <h3 id=\"-\">第三步：挑选相应图标并获取字体编码，应用于页面</h3>\n<pre>\n<code class=\"language-html\"\n>&lt;span class=\"iconfont\"&gt;&amp;#x33;&lt;/span&gt;\n</code></pre>\n          <blockquote>\n            <p>\"iconfont\" 是你项目下的 font-family。可以通过编辑项目查看，默认是 \"iconfont\"。</p>\n          </blockquote>\n          </div>\n      </div>\n      <div class=\"content font-class\">\n        <ul class=\"icon_lists dib-box\">\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-404cuowu\"></span>\n            <div class=\"name\">\n              404错误\n            </div>\n            <div class=\"code-name\">.icon-404cuowu\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-juanzeng\"></span>\n            <div class=\"name\">\n              捐赠\n            </div>\n            <div class=\"code-name\">.icon-juanzeng\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-map-setting\"></span>\n            <div class=\"name\">\n              其他\n            </div>\n            <div class=\"code-name\">.icon-map-setting\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-huiyuan\"></span>\n            <div class=\"name\">\n              会员\n            </div>\n            <div class=\"code-name\">.icon-huiyuan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-github\"></span>\n            <div class=\"name\">\n              github\n            </div>\n            <div class=\"code-name\">.icon-github\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-logo-weibo\"></span>\n            <div class=\"name\">\n              微博\n            </div>\n            <div class=\"code-name\">.icon-logo-weibo\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-liuyan\"></span>\n            <div class=\"name\">\n              留言\n            </div>\n            <div class=\"code-name\">.icon-liuyan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-caidan\"></span>\n            <div class=\"name\">\n              菜单\n            </div>\n            <div class=\"code-name\">.icon-caidan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-weibiaoti35\"></span>\n            <div class=\"name\">\n              产品\n            </div>\n            <div class=\"code-name\">.icon-weibiaoti35\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-zhifubao\"></span>\n            <div class=\"name\">\n              支付宝\n            </div>\n            <div class=\"code-name\">.icon-zhifubao\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shangsheng\"></span>\n            <div class=\"name\">\n              上升\n            </div>\n            <div class=\"code-name\">.icon-shangsheng\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tubiaozhexiantu\"></span>\n            <div class=\"name\">\n              图表 折线图\n            </div>\n            <div class=\"code-name\">.icon-tubiaozhexiantu\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-qq\"></span>\n            <div class=\"name\">\n              qq\n            </div>\n            <div class=\"code-name\">.icon-qq\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-ai-new\"></span>\n            <div class=\"name\">\n              新闻\n            </div>\n            <div class=\"code-name\">.icon-ai-new\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-shiyongbangzhu1\"></span>\n            <div class=\"name\">\n              使用帮助1\n            </div>\n            <div class=\"code-name\">.icon-shiyongbangzhu1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tianjia\"></span>\n            <div class=\"name\">\n              添加\n            </div>\n            <div class=\"code-name\">.icon-tianjia\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-home\"></span>\n            <div class=\"name\">\n              home\n            </div>\n            <div class=\"code-name\">.icon-home\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-other\"></span>\n            <div class=\"name\">\n              other\n            </div>\n            <div class=\"code-name\">.icon-other\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-goods\"></span>\n            <div class=\"name\">\n              商品\n            </div>\n            <div class=\"code-name\">.icon-goods\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-youqinglianjie\"></span>\n            <div class=\"name\">\n              友情链接\n            </div>\n            <div class=\"code-name\">.icon-youqinglianjie\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-icon-test\"></span>\n            <div class=\"name\">\n              403\n            </div>\n            <div class=\"code-name\">.icon-icon-test\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wechat\"></span>\n            <div class=\"name\">\n              微信\n            </div>\n            <div class=\"code-name\">.icon-wechat\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-weixin\"></span>\n            <div class=\"name\">\n              微信\n            </div>\n            <div class=\"code-name\">.icon-weixin\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-xiazai\"></span>\n            <div class=\"name\">\n              下载\n            </div>\n            <div class=\"code-name\">.icon-xiazai\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-zhuzhuangtu\"></span>\n            <div class=\"name\">\n              图表-柱状图\n            </div>\n            <div class=\"code-name\">.icon-zhuzhuangtu\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-font\"></span>\n            <div class=\"name\">\n              字体\n            </div>\n            <div class=\"code-name\">.icon-font\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-wenzhang2\"></span>\n            <div class=\"name\">\n              文章\n            </div>\n            <div class=\"code-name\">.icon-wenzhang2\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-web-icon-\"></span>\n            <div class=\"name\">\n              下降\n            </div>\n            <div class=\"code-name\">.icon-web-icon-\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-webpage\"></span>\n            <div class=\"name\">\n              页面\n            </div>\n            <div class=\"code-name\">.icon-webpage\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-icon-test1\"></span>\n            <div class=\"name\">\n              500\n            </div>\n            <div class=\"code-name\">.icon-icon-test1\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-icon-test2\"></span>\n            <div class=\"name\">\n              403\n            </div>\n            <div class=\"code-name\">.icon-icon-test2\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-icon-test3\"></span>\n            <div class=\"name\">\n              404\n            </div>\n            <div class=\"code-name\">.icon-icon-test3\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-icon-test4\"></span>\n            <div class=\"name\">\n              500\n            </div>\n            <div class=\"code-name\">.icon-icon-test4\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tab\"></span>\n            <div class=\"name\">\n              tab\n            </div>\n            <div class=\"code-name\">.icon-tab\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-pinglun\"></span>\n            <div class=\"name\">\n              评论\n            </div>\n            <div class=\"code-name\">.icon-pinglun\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-denglu\"></span>\n            <div class=\"name\">\n              登录\n            </div>\n            <div class=\"code-name\">.icon-denglu\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-liucheng\"></span>\n            <div class=\"name\">\n              流程\n            </div>\n            <div class=\"code-name\">.icon-liucheng\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jiaose\"></span>\n            <div class=\"name\">\n              角色\n            </div>\n            <div class=\"code-name\">.icon-jiaose\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-login\"></span>\n            <div class=\"name\">\n              符号-login\n            </div>\n            <div class=\"code-name\">.icon-login\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-settings\"></span>\n            <div class=\"name\">\n              设置\n            </div>\n            <div class=\"code-name\">.icon-settings\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-blacklist\"></span>\n            <div class=\"name\">\n              屏蔽\n            </div>\n            <div class=\"code-name\">.icon-blacklist\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rizhi\"></span>\n            <div class=\"name\">\n              日志\n            </div>\n            <div class=\"code-name\">.icon-rizhi\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-dianliyonghuzongshu\"></span>\n            <div class=\"name\">\n              电力用户总数。\n            </div>\n            <div class=\"code-name\">.icon-dianliyonghuzongshu\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-rengongzhineng\"></span>\n            <div class=\"name\">\n              人工智能\n            </div>\n            <div class=\"code-name\">.icon-rengongzhineng\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jiaoseshouquan\"></span>\n            <div class=\"name\">\n              角色授权\n            </div>\n            <div class=\"code-name\">.icon-jiaoseshouquan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-WechatIMG\"></span>\n            <div class=\"name\">\n              gitee\n            </div>\n            <div class=\"code-name\">.icon-WechatIMG\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-layer\"></span>\n            <div class=\"name\">\n              layer\n            </div>\n            <div class=\"code-name\">.icon-layer\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jiankongkongzhiguanlijianguan\"></span>\n            <div class=\"name\">\n              监控控制管理监管\n            </div>\n            <div class=\"code-name\">.icon-jiankongkongzhiguanlijianguan\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-tupian\"></span>\n            <div class=\"name\">\n              图片\n            </div>\n            <div class=\"code-name\">.icon-tupian\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-jiaoseguanli\"></span>\n            <div class=\"name\">\n              角色管理\n            </div>\n            <div class=\"code-name\">.icon-jiaoseguanli\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-peizhi-\"></span>\n            <div class=\"name\">\n              配置\n            </div>\n            <div class=\"code-name\">.icon-peizhi-\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-bingtu\"></span>\n            <div class=\"name\">\n              饼图\n            </div>\n            <div class=\"code-name\">.icon-bingtu\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-gongju\"></span>\n            <div class=\"name\">\n              工具\n            </div>\n            <div class=\"code-name\">.icon-gongju\n            </div>\n          </li>\n          \n          <li class=\"dib\">\n            <span class=\"icon iconfont icon-huanxingtu\"></span>\n            <div class=\"name\">\n              环形图\n            </div>\n            <div class=\"code-name\">.icon-huanxingtu\n            </div>\n          </li>\n          \n        </ul>\n        <div class=\"article markdown\">\n        <h2 id=\"font-class-\">font-class 引用</h2>\n        <hr>\n\n        <p>font-class 是 Unicode 使用方式的一种变种，主要是解决 Unicode 书写不直观，语意不明确的问题。</p>\n        <p>与 Unicode 使用方式相比，具有如下特点：</p>\n        <ul>\n          <li>兼容性良好，支持 IE8+，及所有现代浏览器。</li>\n          <li>相比于 Unicode 语意明确，书写更直观。可以很容易分辨这个 icon 是什么。</li>\n          <li>因为使用 class 来定义图标，所以当要替换图标时，只需要修改 class 里面的 Unicode 引用。</li>\n          <li>不过因为本质上还是使用的字体，所以多色图标还是不支持的。</li>\n        </ul>\n        <p>使用步骤如下：</p>\n        <h3 id=\"-fontclass-\">第一步：引入项目下面生成的 fontclass 代码：</h3>\n<pre><code class=\"language-html\">&lt;link rel=\"stylesheet\" href=\"./iconfont.css\"&gt;\n</code></pre>\n        <h3 id=\"-\">第二步：挑选相应图标并获取类名，应用于页面：</h3>\n<pre><code class=\"language-html\">&lt;span class=\"iconfont icon-xxx\"&gt;&lt;/span&gt;\n</code></pre>\n        <blockquote>\n          <p>\"\n            iconfont\" 是你项目下的 font-family。可以通过编辑项目查看，默认是 \"iconfont\"。</p>\n        </blockquote>\n      </div>\n      </div>\n      <div class=\"content symbol\">\n          <ul class=\"icon_lists dib-box\">\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-404cuowu\"></use>\n                </svg>\n                <div class=\"name\">404错误</div>\n                <div class=\"code-name\">#icon-404cuowu</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-juanzeng\"></use>\n                </svg>\n                <div class=\"name\">捐赠</div>\n                <div class=\"code-name\">#icon-juanzeng</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-map-setting\"></use>\n                </svg>\n                <div class=\"name\">其他</div>\n                <div class=\"code-name\">#icon-map-setting</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-huiyuan\"></use>\n                </svg>\n                <div class=\"name\">会员</div>\n                <div class=\"code-name\">#icon-huiyuan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-github\"></use>\n                </svg>\n                <div class=\"name\">github</div>\n                <div class=\"code-name\">#icon-github</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-logo-weibo\"></use>\n                </svg>\n                <div class=\"name\">微博</div>\n                <div class=\"code-name\">#icon-logo-weibo</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-liuyan\"></use>\n                </svg>\n                <div class=\"name\">留言</div>\n                <div class=\"code-name\">#icon-liuyan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-caidan\"></use>\n                </svg>\n                <div class=\"name\">菜单</div>\n                <div class=\"code-name\">#icon-caidan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-weibiaoti35\"></use>\n                </svg>\n                <div class=\"name\">产品</div>\n                <div class=\"code-name\">#icon-weibiaoti35</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-zhifubao\"></use>\n                </svg>\n                <div class=\"name\">支付宝</div>\n                <div class=\"code-name\">#icon-zhifubao</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shangsheng\"></use>\n                </svg>\n                <div class=\"name\">上升</div>\n                <div class=\"code-name\">#icon-shangsheng</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tubiaozhexiantu\"></use>\n                </svg>\n                <div class=\"name\">图表 折线图</div>\n                <div class=\"code-name\">#icon-tubiaozhexiantu</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-qq\"></use>\n                </svg>\n                <div class=\"name\">qq</div>\n                <div class=\"code-name\">#icon-qq</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-ai-new\"></use>\n                </svg>\n                <div class=\"name\">新闻</div>\n                <div class=\"code-name\">#icon-ai-new</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-shiyongbangzhu1\"></use>\n                </svg>\n                <div class=\"name\">使用帮助1</div>\n                <div class=\"code-name\">#icon-shiyongbangzhu1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tianjia\"></use>\n                </svg>\n                <div class=\"name\">添加</div>\n                <div class=\"code-name\">#icon-tianjia</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-home\"></use>\n                </svg>\n                <div class=\"name\">home</div>\n                <div class=\"code-name\">#icon-home</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-other\"></use>\n                </svg>\n                <div class=\"name\">other</div>\n                <div class=\"code-name\">#icon-other</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-goods\"></use>\n                </svg>\n                <div class=\"name\">商品</div>\n                <div class=\"code-name\">#icon-goods</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-youqinglianjie\"></use>\n                </svg>\n                <div class=\"name\">友情链接</div>\n                <div class=\"code-name\">#icon-youqinglianjie</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-icon-test\"></use>\n                </svg>\n                <div class=\"name\">403</div>\n                <div class=\"code-name\">#icon-icon-test</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wechat\"></use>\n                </svg>\n                <div class=\"name\">微信</div>\n                <div class=\"code-name\">#icon-wechat</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-weixin\"></use>\n                </svg>\n                <div class=\"name\">微信</div>\n                <div class=\"code-name\">#icon-weixin</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-xiazai\"></use>\n                </svg>\n                <div class=\"name\">下载</div>\n                <div class=\"code-name\">#icon-xiazai</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-zhuzhuangtu\"></use>\n                </svg>\n                <div class=\"name\">图表-柱状图</div>\n                <div class=\"code-name\">#icon-zhuzhuangtu</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-font\"></use>\n                </svg>\n                <div class=\"name\">字体</div>\n                <div class=\"code-name\">#icon-font</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-wenzhang2\"></use>\n                </svg>\n                <div class=\"name\">文章</div>\n                <div class=\"code-name\">#icon-wenzhang2</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-web-icon-\"></use>\n                </svg>\n                <div class=\"name\">下降</div>\n                <div class=\"code-name\">#icon-web-icon-</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-webpage\"></use>\n                </svg>\n                <div class=\"name\">页面</div>\n                <div class=\"code-name\">#icon-webpage</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-icon-test1\"></use>\n                </svg>\n                <div class=\"name\">500</div>\n                <div class=\"code-name\">#icon-icon-test1</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-icon-test2\"></use>\n                </svg>\n                <div class=\"name\">403</div>\n                <div class=\"code-name\">#icon-icon-test2</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-icon-test3\"></use>\n                </svg>\n                <div class=\"name\">404</div>\n                <div class=\"code-name\">#icon-icon-test3</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-icon-test4\"></use>\n                </svg>\n                <div class=\"name\">500</div>\n                <div class=\"code-name\">#icon-icon-test4</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tab\"></use>\n                </svg>\n                <div class=\"name\">tab</div>\n                <div class=\"code-name\">#icon-tab</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-pinglun\"></use>\n                </svg>\n                <div class=\"name\">评论</div>\n                <div class=\"code-name\">#icon-pinglun</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-denglu\"></use>\n                </svg>\n                <div class=\"name\">登录</div>\n                <div class=\"code-name\">#icon-denglu</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-liucheng\"></use>\n                </svg>\n                <div class=\"name\">流程</div>\n                <div class=\"code-name\">#icon-liucheng</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jiaose\"></use>\n                </svg>\n                <div class=\"name\">角色</div>\n                <div class=\"code-name\">#icon-jiaose</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-login\"></use>\n                </svg>\n                <div class=\"name\">符号-login</div>\n                <div class=\"code-name\">#icon-login</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-settings\"></use>\n                </svg>\n                <div class=\"name\">设置</div>\n                <div class=\"code-name\">#icon-settings</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-blacklist\"></use>\n                </svg>\n                <div class=\"name\">屏蔽</div>\n                <div class=\"code-name\">#icon-blacklist</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rizhi\"></use>\n                </svg>\n                <div class=\"name\">日志</div>\n                <div class=\"code-name\">#icon-rizhi</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-dianliyonghuzongshu\"></use>\n                </svg>\n                <div class=\"name\">电力用户总数。</div>\n                <div class=\"code-name\">#icon-dianliyonghuzongshu</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-rengongzhineng\"></use>\n                </svg>\n                <div class=\"name\">人工智能</div>\n                <div class=\"code-name\">#icon-rengongzhineng</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jiaoseshouquan\"></use>\n                </svg>\n                <div class=\"name\">角色授权</div>\n                <div class=\"code-name\">#icon-jiaoseshouquan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-WechatIMG\"></use>\n                </svg>\n                <div class=\"name\">gitee</div>\n                <div class=\"code-name\">#icon-WechatIMG</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-layer\"></use>\n                </svg>\n                <div class=\"name\">layer</div>\n                <div class=\"code-name\">#icon-layer</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jiankongkongzhiguanlijianguan\"></use>\n                </svg>\n                <div class=\"name\">监控控制管理监管</div>\n                <div class=\"code-name\">#icon-jiankongkongzhiguanlijianguan</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-tupian\"></use>\n                </svg>\n                <div class=\"name\">图片</div>\n                <div class=\"code-name\">#icon-tupian</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-jiaoseguanli\"></use>\n                </svg>\n                <div class=\"name\">角色管理</div>\n                <div class=\"code-name\">#icon-jiaoseguanli</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-peizhi-\"></use>\n                </svg>\n                <div class=\"name\">配置</div>\n                <div class=\"code-name\">#icon-peizhi-</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-bingtu\"></use>\n                </svg>\n                <div class=\"name\">饼图</div>\n                <div class=\"code-name\">#icon-bingtu</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-gongju\"></use>\n                </svg>\n                <div class=\"name\">工具</div>\n                <div class=\"code-name\">#icon-gongju</div>\n            </li>\n          \n            <li class=\"dib\">\n                <svg class=\"icon svg-icon\" aria-hidden=\"true\">\n                  <use xlink:href=\"#icon-huanxingtu\"></use>\n                </svg>\n                <div class=\"name\">环形图</div>\n                <div class=\"code-name\">#icon-huanxingtu</div>\n            </li>\n          \n          </ul>\n          <div class=\"article markdown\">\n          <h2 id=\"symbol-\">Symbol 引用</h2>\n          <hr>\n\n          <p>这是一种全新的使用方式，应该说这才是未来的主流，也是平台目前推荐的用法。相关介绍可以参考这篇<a href=\"\">文章</a>\n            这种用法其实是做了一个 SVG 的集合，与另外两种相比具有如下特点：</p>\n          <ul>\n            <li>支持多色图标了，不再受单色限制。</li>\n            <li>通过一些技巧，支持像字体那样，通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>\n            <li>兼容性较差，支持 IE9+，及现代浏览器。</li>\n            <li>浏览器渲染 SVG 的性能一般，还不如 png。</li>\n          </ul>\n          <p>使用步骤如下：</p>\n          <h3 id=\"-symbol-\">第一步：引入项目下面生成的 symbol 代码：</h3>\n<pre><code class=\"language-html\">&lt;script src=\"./iconfont.js\"&gt;&lt;/script&gt;\n</code></pre>\n          <h3 id=\"-css-\">第二步：加入通用 CSS 代码（引入一次就行）：</h3>\n<pre><code class=\"language-html\">&lt;style&gt;\n.icon {\n  width: 1em;\n  height: 1em;\n  vertical-align: -0.15em;\n  fill: currentColor;\n  overflow: hidden;\n}\n&lt;/style&gt;\n</code></pre>\n          <h3 id=\"-\">第三步：挑选相应图标并获取类名，应用于页面：</h3>\n<pre><code class=\"language-html\">&lt;svg class=\"icon\" aria-hidden=\"true\"&gt;\n  &lt;use xlink:href=\"#icon-xxx\"&gt;&lt;/use&gt;\n&lt;/svg&gt;\n</code></pre>\n          </div>\n      </div>\n\n    </div>\n  </div>\n  <script>\n  $(document).ready(function () {\n      $('.tab-container .content:first').show()\n\n      $('#tabs li').click(function (e) {\n        var tabContent = $('.tab-container .content')\n        var index = $(this).index()\n\n        if ($(this).hasClass('active')) {\n          return\n        } else {\n          $('#tabs li').removeClass('active')\n          $(this).addClass('active')\n\n          tabContent.hide().eq(index).fadeIn()\n        }\n      })\n    })\n  </script>\n</body>\n</html>\n"
  },
  {
    "path": "font/iconfont.css",
    "content": "@font-face {font-family: \"iconfont\";\n  src: url('iconfont.eot?t=1557734072589'); /* IE9 */\n  src: url('iconfont.eot?t=1557734072589#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAC40AAsAAAAAUcAAAC3kAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCLHgqBh3TqfgE2AiQDgVwLcAAEIAWEbQeFGhsQQhXjmFXAxgGIDfFeR1SKWtn/XxI4GUOy8V/rEVG12mRh1Kq1VkRAzbFlSzeeD8WhD3Ow2Vf213nR3Y3SHhOBKbH5uBG22H4n6/AThCan2uV2maq48JqhlDz8/9r/9p2Z9/ybeESskkgiErpZpDRCg5BoVIhnWFACBHmii/akTqPhed3svf9+1vgJhAQCZLBGWGFLQsIIO2EEESFscQRQQMQVkCFOBKXiAosbW0Gsk1pcrXeCE90otFurxXlXtSXNz9Xne6fWjN0czNhJ+96AYZcNhQVul+lQtkoHSQrH3QPMj/Q7+rwB2Qp0s5ax5UDbUAkOCrL0ebepml3V/2lz7jgs3+qa3mZIgkjIFCCToNsw7pn//b3/1a8EeDAvRjWj7qU6gAm82FmDTFrLA0pudvkBsEgW2KGsshVWfw4Q1Fm6KZuMtFbj1g2Jsm9EHwg8/P/VgOb4TJvIFR6Vhn6vnYbacNIo93Ys45UlUe9KNW3BD1mBknMlWpOrVDQvdXaponPT3R7ofyxAvnig0pGfoAwqMSiQ1CvHSlb17uQuhQqAEiA6AI78dyKd6erpmKoUao+72m3pcefOZeu+MZSTaJmWwgsIu0lSOTnBQzaNQyYKCzSIpWgKQXX6f5+Epknr0um3SRmgriAfSkgPqawA1B1zRUCe1EdVws2imj6rqGdvslF8wt9P/+ymIFPJyQ+dvx1TDI4H+Pshd/47LuYd3tKrcXeLHOsoyKvETUZuNOtyzZfnKNJPXHBcxWCAIOnUz56EnBsFpVDhIqnFiKOXKUeJeeart8LVX0d/ffTrx9KUtrRKm5e59nTNrvx2/Xfwx+kP/3fQzIUcey58M1Xp6b8mL5ILSn7V9d5td7P7ZT7+Qx49+ixYVTVn2b49hUPdOgzpNSHZ1G9Np4YNK3YNWzdl2ozMrG2DRszLDRh3YFJNy5Iti+p2tI1pGtWlQqqC3TZkX4TtIQEQeggS+gg2FggrrBJCVAkR5ghbLBN22CfE2CPsURCO/exDAugm5OggXDBEuKKXcEtohS8gEQpsEkr0E6FYI8LRSUSiQaiwQaixQsRgl4jDMKHHOpGelCcyIIHIBMwQOciIEswS8xK2Yz5gkKjHCLEC88RV5MQoBohHGCc+4oBSjElKLWqUaWhRlmKJch62KM1YpGxHnbILO5Q70Ka8hDHK62jyB0yN4nCCWpc5uoI9FXAEVx6Thhn8xthLcjt9NuhaLZpc0sCVNSpFvKYKPFMHnqm88poCqIFJU3o8/qoGFkq8VxaZBmFb0DO5+p1SpSdUIsvqjImKOzjQ3fbZOzV++euJNQ98sMZ9Q5SchacUAnz6fK9O9ZxoB3HgxyanV1ZOL7zmzedHy36t4ZMakWEuGTVDfF5zKIGlRdGkWI5NXTiT/D8YI5rt06ew1mZP5PnBuIyhpqyRinAbYlO2FkURO5S9bno4jIvXiM8Qflz3Fem7hcjDePx5L9pgyexsARhdLt3VdSJkBqglGcgBt+50wtfqj1IvODSUE2UDiywD8qxsJtLPRUubBzkMHIWxASCIkAAkQkJD6Gr8RFxunrWveE3HUxZ0kSBv+GEfIGXPcHMkViXrZz67gMQbq86Xa9h7+7/Qtc4h8dq6+/YK9srnn24Ap06pB5lrPAVAYO4ZSpVDiIQXeykZcwUgUmuXc5exiBkPh26Ec8Xz0IL01BzJKjcYJzC0dwzmtEZxrJ09+zuUJNHg4RB+HQFJyGok3SfIQnS3npenPw05JNp4yKzsMB2eJI75GOQbRJYkaVW0ZgVEEsoX64Q062RJ80pxo36XFZqgLo9DR1ElpfOyB6jjmXAEGnW1onmHKscpSQ0hNxQgBDaiMaDcPsYhZBIUCnhB1riCa6EZg5ob26jHXm0+1ss81Y9BVLYeF4gIRBQOqdYbuH0kYxSz3Cs8fvGWH3r3ohv5xnSXCZbLM180XPcrfu7YMNw4j71nB4mleWb7ys7kh72hJIpc0m+EBXbCbjwdEeA8Dxv500PoWp0IcdyUiEyosmqPSKOfU6dzRN7WtEpYnSqh9hnWrlB508P0Wd4s6NsGGNzRBkV9psg7t9SdqjlbxeFpGpbNHTVtnCKNvLmlB/5NVf0qsX09zL/BnfNxwd83L63DG6DXok4oiiQzPb4lHBTdGAmRNteZzuohFrAlj8qQOS1m005L0sauxPblG7dnieC+d/YFfdNVui4+0P3Yder5i8AZnty6ie8+JFviQqF5gTEhlaJUHc/PL3l+0eMcOJLFseAmXBzS6ZSXoP2ibNwk80Hi7z0kDV9JVq61ouFa/mgE9gX9EmyNNN5Z7M3kGsaB11woZVtzFMyvX29cs6bhcHn4TE3WbIt5JOaZIU64xZqOEpbOnL1DN3J13ar5J9gJmmyn9sOAwXHB6todeLRmd18+gCMNmzoqumCT03MOoed0EVq6bxmZe5A4tnjPvGn6bhyy5N52PzpcOXxNX/6zMTOIrzu9v49KTcVjveVgy4pPWfKWnNvm/reknD9lRB+m3QHOej2Qcrp7neEaDiNSWY7IyNW9uU0EQuL64Qnonly5cXOzU361PDg5F/AMxBChGV3TwRg0UHMg9HN+FFKVTMXO+hauVyGc+Hqo9e54Ozteb1d0nBDf1UP417oWxOoefxmnGmtl3NkopvHyyS2b03boVWs+mLknPrC6hcPG7QtyoC1KdQNn7y/dNTnUSnstuiQlaUr18JayyocqBUXldNX1/ilWYKkWmMIgl2XoCgL4EfARpGy3Y0UBof8VVCIoRN0ZlBx0ASRTO24lRHPkQwMUUPkagHk65BBzgHlG88i3LQYQUXYSooDEIchlJGGHeWyhyigmnFP+EPOd1BhjH2vYawwxj1osat04T+WTML01lbQpuHlTjRbYsvzAOrJ/dGTsN2NgjDdREHk5lE1lDmc942qWkdJRvx0VmorHPNCFOq2C+4QkqaNR3uj12DHyTVIYnqFMw+ImCcekkqRdPWEMa56s3vm093DDJ6VWqdsFECzIpaLYMxzqCZtqh1cNH5ydP1GJrYXIrFRNdhu9Zvvy4/EvSv7w8AdG31PD9Ar1AiHwdREU/QJE6g3BAONpoNfLA6xBv1tj6smn35At0Wa6CV1ePGw6XkgP5hVwfD/90IGUUrEWuYORBhRjJTTeQeQqa9DVaceHIrIpNIEhkKzw8GQdzt+Hw+X6uLwYnPtvIl5cA7uRCIIpblOY9C3nYhxkyHDSs36dlEdrNiwRoAuFM6J1G66Oz9U6gcLqeKWGPSymRhfumjbN3Isfa7Qrzt6vIyCKQMwQY+1CMPC7SwTUDedM512CemXDHvCn+v9hxPfz7kVCw5eGGHITNNsEnosjmvPfnKxOdm7cHOSPR0m7FoXX/fWVK5y1AUlaM+erYGUYPh6lWefijBNJ6utmdonsiiI4pHhykHAWuBxPj2UzamMLQzuFIMo+xb8Y10owE8Oc0BC6waCDsRdSC7paSACgbcfvthBqEwtmA0d5BkJ7iQQKtr3TwImkogJDb+BeQLY32k33/dWjWTyOMyy37PCa2+NNmCSDeaEl5r75v51a8rzlaq3+X95BZDyU5mND/mNnZtSIWM/0zpsV0XLCfT1rYJ9YqlgvXoiF5YdpJFo7eTn++GclieLY8Y3fUvv0xZ5YtMfPH09NPYIyWIDxMtetNWOlW0qy/N3aw4JLW/BRfAyB+XjF3DKtdTdmm3B/Ijsts19nUtkfoTQ+nPkWrugI/sUWsPlIdiTzQ5xC+3AN70W78b4E42Gthsa/vidbvhPED2PoxgULke/pzh3v4umHogiD7rl1VZ1NZg3lr/ODSrMFj+7OzBI1WRgKFGrwm/rrpSUGm+uV0dYq+JazhsdqarmY/M9q5v/mSDQqNPy2a/CYp0Bt/0h4Ta3I4T37gmYFpd31NharIIVa/tT6dteFZQR/pPsVgGf7dVcz7haSUKp8acsM033dllIMuFHagAasuaH9OEGUaNghpU0AsTfZqnY49xrgOaR1LicbstvSmjH1Okb5gshuX7PtgRvGNOSe1kYTIglxwEqpaSk1JaeH+dsnLITK0W0bpTOiW6oH7ZXHOgM4cmDj8moMn3itjcSuVefN89h7fQO6VheJ7RfcHQPslcN8AzgfbGCDd7aTxSDQ7PYZ3jy5cSeRDyXuXFu6N2dt3XStPiyPv0xZzhRxieE3EGabqPKROdkcHijcZQyATKBiQ1nwBDzOKLAMKCJ2qUEAoG5xL8uZFm8yjUmfNjKQuRrtWeu9hp2Hs8o892ZPneKdvkCXQe5hsUUAQSATa0UNasIWJ0gbyF/W1B2p4d6fXsI/PzOoGEu3gdyDGtEF6IiAeFC8StwMtUXDdOzyI7VK7EdjTUUTOUPVMHUliTgRd0IE7a3L8xa0bG/bceeprri8+OzgTSGJ78woz/DAndW1j5epNCTIo+FgevuD1M29EgxWsLetB5xd4XHg3F1a3ze6CUM0MgZaqruG2jl2583Y1leCfoD1oQ72LkmcrceQWJ9Ma28z2YnueY5kltYfSc9t7MyeCQumplf/0uqClNPDWW9QTK+ycq0RmhnMUPQriOCWwRN6BD2EbFyrWzb2wrDh+CQsupXfIhIhG2CPTw4rmUaWVQ6Nxu1gvYTa64WRYANv8dbym/xVlGlFLksSwfTU5vlN2SSZK2Id3da7EbQ7iSw7D6aMzMd9nY2JYUNr1VkbNx5horkuVnONNW/jjyuJdZrkM8NkTXaKGRyP1ERIhu00iCCeuXS/frDussNITCOYgTtPOnEJSM2BnWgf6MDqIKsw670WgFj5G0VBJXUdrirwHHyw5lhNG5BJb3X7+jpjdjRKI60oDglCcnEXIEsbeZqfKIILYCx920vX6ESbYM0CyyTM5wbj5cTLNw5x7esS4JeC6Q3xsGRJsO/pJucGuusItQsF7fJiUMXeBhwWpgG3DQ6p6tHOgBI9GGgNQmSJrDAO83nlkJxfmoufqKOo8okl6942RennTBfmriTy4uG4rGjpsiXg/DMiSVds14x9QlV++mIcyUmH5uniJbNPyKfc8AG2Z3doeTSsYJMlGU27qaV2n2km6J7Pp1QBZxUhmYuX1ijjcA2M6aUN+qXqQIYr1bBHFfX4901AnmbBRhV3igyYvEPIwkVTg9JPUirQF1slIZ9xU5y9nMCKq/HlK9Z8CZ9rtOftuHnep0SSmUvxtHwFiLV0f/GBeG/hLmp1nWGmV+DC3YXzRu/ifXDI6i4dTp2lOo9r6alsXQeDzivkPV30m9yegFsTBiFTOHaE1L/lr5ZGS6vA5TgE1/WyTMmu/wUHs4WzvVRCu6LmBTTFfg6tktoLpd2fztN34LHO5nS8zEYe/kz+CBerDgHPvzgdFd2pMlyuXsFcQQHgyc73zlu1Wt3p6RnKH+hZai10c0Bq9peWFgh+5HdudrZfEXRnMBfMMv2Yubi8PCgas9FbDJe5f4g13ZjplRk5wCERkYUhld2trrvOGNcSSu0c3HCgF6sLxtJJC3d36xEnEo49CUOzv1wkvSIq+3PC0Yi6Xb2PMvtY3W3ud/zqw2Y1agEeByQZV0wGhDVgZc6sNVluZYTlp1mTeVjcPj1TnD2/m5gap1Zv1nf/n7K+K3u4pf8Wv3+L2o/uu3pYpUvuD1Pojag+H5dcEeC/k8qvIpTYU++WzHsbOO/eJLbJWgZMmLFxywmgFsFMxX6WdQVSzmopI6RNaqlsuub1KJBtfQcGzWDUtvbvqgdALxjsDjZ7kDduOoHbbKNOtsvTIXtDHLI/7iG2DacGTfQ/9Rql85wSjXRU3VWGDbQKqs6h8Z8p4hc2CvGiEUJYYMFz8rYLF+m9+F9+mbCFTvW7ZAr4OSkn+kTzT8CgmEZieSdW5a/StK88b6fzyq5bnHtFoNZ03m/g5EMvnA6euDxHrsbSVr+Y1Oc3Pkzg8lwh6KMoltLJWQBOr5pM6eO6o3ToQeXxw8ZlByYmxw+Y56n/fMI6qI4IlPl0R8NYmYu5JkgUNEu7ATedoabllQI0JCmJWL+KkJZ2WX5+manIXyRIyYMpg+knDz+XTJMvdklJFZA+Wdiupzlxp2NleKc62GFgsFLeRWlS0R7NKMb+sr1NWgqN6URa1iB+aSHikliZJYNGSbaYtt7khvVZOp/lCgd7ZlI49Gic63S41kjUmwnoTjFm+NTEIKzSLS/zNnJl85uBt+asinX396PQrhmPmPKGW34hMd0wm9rIqmF7IgJ+r8yQorb3Wwp2PXYm9oFEj0i7JVfOC7N6s2ibKg5prTFxRBDH5OWnf54an0zv/vlEenL85ysHJIhNR2T8PjGa3jv+x0PJBxzC30wkeOX1g5PDt7ZOxO94Ci1ocmaBC6GvoeJ0i5nkcn+3SxgLMGu4iAXcPkY+ZJkgAxQxYY+CcGsBExILOpvsdCJh0E7Uxn/OYACCKaHv3q+VvbEL5qfSGb5gHyWITO9lK1gXqIFUMZujp2npInopPZcYI2ySKn4Jj7ub0nVKuKNwLdOaSVuW9IZGvmMrYdZQxOO7ks2TRB+YUEuby524Jjf/fW1Ru/J3PrPfWEXzd4364nNv1NVZoZd7ktwTmhIVgSlDyyq9g6QTjUEvHEOvLyjkQoyKS6lcjInBNYgLeAhXVwFg5KFqCT8WYjCWL6lGPCMAVWrcBdUsBhCj4QRVEjqAA4Dxa7i+4ukBBEq5pNjPrfL7F4hUz3hJd2VMMAD9KcOV/opu/TvVtjK5BOqEjvHO3M//u5csOt5OzwDlybjad0FqIdmihjHRjnhjLs3SECes+9LO6cw4xD7NLXv9awgviFSpQxXhnOC50a2NMgnFl77/xzXUNat8UshyPz0lUL24CQgQEcAlkZPFH7eYWoKpJEWAYIsMkrat2YswooS8BOEYQsqtKkssDxBl8ADVBpcSkAIrOxDGw5gUlzQZzkMyAMlEbwGGySDEmfR2GoUK5Ri2b7oBhzwpiULBESHBkOHeKmg6yKq/+YX9Oty03b5t5CBrGVDe3n+mxCmJpqFnSea69aaviXfTesbR7xWYt2z6PeoKR+uo5RRfC129Ijmbvt9mc7nHTcm+Koi26rdJwnLjp+nXnPbI/jKv2HBU9OuZRJgd/f+Htv7vdGzdQmVbcvavs1ntB+3VTpyuX7ZW/XLm6K6fTZLxs5SuQI88IEHhu9DNm9iu+E2guu9Zz92WTGf3jNurPFNN2K5/DXb1N6HBAawJax5sksCSmiGMxAByWZ//iffnPjl/kdiMcPdOln+xXW0iwV+Qcua7kmVDmXuzAljKgIHSvnk1A2e8BdvDS70M/iyDn31J4kHnT/230tb1lZmWhLBkLhdOn7EkJdFo1WXBRYOwkSqj5VsvkLPpWAuZ2s85R1lCqu9KAcenjaCPk/JF3iLBRSt54zGQ43n+zrIatPsoakCNE6lBTtpzFGvEGjCoCSvBWrqwKqwyoiWYNbYSqxrJILzKsvngL2s8Xz9h1IU8QBHmuQKdX8yIpufdyYXJKYtTmm+rhPhmzUiMn0CXvCgSFcWe+MY5/t4WweBeZpNrmb//5crc3JLQVpcLF/SMP6fWeB78uX1pzX/+U/MqyYUqTVJ9i3/+jLf07QHY2focuO+Z3ZaEtM4eKaUZJa7NgY9Et8BeNTh1y0ab1trEJjcXLMZuSNVfyUDBqVnLq/hhXxXpba78nCsolwLg9htplRts27cgar/lgWJTA8iKt17ITuzbk7OoMCCWFEPJivWea1TMPl8xHW3nYVv7+JGGuHwj17Fv6WXN7NorGVvtG7cItqwBYMaRtT0/v81WZrtWp4vXbWdNsgk2QNzCkuJHl7JMbMKOxzZZMqmAmmmxcN/4TmbW9uEexVm3c279bkf6AY9HgHybngVNWR8mAxwDOB84GleknXhtdgg8N9AhgP23f0EQIYufmrrmeG1yathxeGrSeNBzEn2Piigl0Om4z1w3tym1moD6nUztn/s6bckIxOjyGzd6JOLRZ6urwl7FV3622fluLU44NsQMOQ6FkL/HmH7xpx1Px3QAkLhnnSxmKOCr6Fpr5wxQiH/76dP5ZiIDqnQeQimqwfmyyNmjm4ILPUE+X5kqnpQakvKaWO6U/XEOzTqUgwMlT5exo59cX1DhTDNMVdMDei29AXR1CmEGe03c06eFnkKLpdGaWqLPpFovjojYIdaKD0dGkl3JjY0VVtRMfQnVanVr68KaTiZY35BJs1g33cImxMTGKBHt0KI3M8ZHD4RU/iM2u9iYTiX+sX4IYnigCCfwLGdn6yAdcLRxXehmoxyJiw12HWuJljdF7C//8tKXFz88t3jI0LE1dmtPbczptrqy+WUr/XXxLiYlRemdzPfTxdDiXMoIT2lxd7G2rHfe8dC4QmpohXs47s6zmsH+Tgs6C6PHygPwLAQRRmAwVOjqEtKptVp2rlYBMchldpL0MqmKKHTmKnE+ncfmWWME71zomso1l+nRKgulYPDHe3pDqEbbYFdYO156P2QgSzr+/X1+OYRKGs8Kl/EmzkRjsDvaWVfWm5Ya7EJgW8tdAmV8CYHJaMBPixQuVnxaKF3AB8rjLSsXHKPLehMrtRT+Wb9XVa+OraiKqqqN/Bj1cRafNBw1XBsSqpcKyBseMF7ZvOx9MDBh8zRpnpr5VPCUqWa8Eryi71IP2CIdPZNFH6fodJXqyh5rI7NRq8J9sxnhybCsDCbLktzuZKh2jLhxxiv7I3tv0MU3Yn+tGPAjvj67mWY3mM0EIhxitGNbSPTnIoTzNHn0v5OqAwzKBU9XJnpm2m/yTom0/bzy6nSJ5e8odwgEM6nXSXweft1kyEOWwnsl244lrziIP3iKHcIOPnh4EC327KHq4dCzp/anaCpdJ+q3Btb9qLODiwD8Fe/owD3NeMdzwAHqB7/kA5UKJGdqKVYUbfxiOimk4fZtIDetIYREr+x+sj9+1MvrAO0v+pKz/LVWv1qtdZ3cM2extZKDG0h8IUPSS39FA34ySOvVB4I+wXJVcjh/uVVysnq5EV3Dc5ejc/wnKD5Ai5kaXlHzKX9aTJWjbrGa5UHJEbwoztLwZHw5ynjFmvQYqzI1vKTdDXQ3qVEpUteraBljsydmY8ulEclBywOvhZH79ar8GJgJY/Jtoi5/3Wz8CWaUqNAUMAq8Yf6WCVE+1KbHoHw3nEDwT3kf20tpH2ml7R8ttdi4djWbi/HMe9ebYQUciTguuXOpaLvrdjc2F3Fzm6vmwlzYUsXpJOk/bt0SIE+Kbj4VBL95XvF3EjuB/Z56/H0P2yhj2vWNkmgZNJyc//uB7+F/5nAejrc3nEnBvk4WCXeOP+HmnF9+KvH/J36YTwo70jgJYz9BCUEXSGnwbC7zjyfcot5/T1wv4jIes3OOLfzklv9pQbRC2O2t9VN3izQ+6PQHVxUziZtQMbHRHihVf7vogQkNvng+gA/iz5/vjwpl6xnj6ovufrPXF+YkrnUw79llFhdtEH28LV0WlylsrnJJ+RyUT1zgjWU+4el4Tw6nVluT17LqyOrcFqdfnInrmX8SCcSTI9qg7AZvSitrKSUnfdm6OXk8TdrZkNY7g7LAeFWY+IeiwfZme4Q6irSu/dKzdP+zDLCHw5kSFAzUL4XN2FAXtkQdPf+MY55ZeSV+hDPVI8Pmd21QZvMynDOcLjuf+G8K/8REnLU2/+IfzLSzcRFcArsasW13hbsalkCbv2uyfG1SUERu0VymTCQd4OpFht0snogY4apF0SDMQj3HPVvZ+5z7IrmAOcGkWJhMIYufM4ymYWl4EUCFKZmjYWRxrrvVVxkldEqe76H1gIlL8o0wCSxOZqk6aInQlAu1ggyLU+xP5g8/cXWwIN3BsTzqYBwsTnfElrcrmV5Cb5uXwj9Dt9Jul2/pfcR9DP46Vjm3umFXXkhLE9N0qc0D/9oxMuoXZkGTIc/F7P4daNal0sRpaRdCuTDCmhpoBIk5Zh1XUNS9ch7cZJNtr+PmmEEiNNbUDGSvXr3ddnvnjHW4XdPp0llJ/gOx0nW67SKZbWpSVg4gyhFMghmLybI6HwCdSJppSfXHvxqYXE5awN/3kO82zeEXmv0vVAaeTZpNBkpyyy3QtafOwzp9uNf2ozmBk9qItOmBePHetrzayQt38VrGQtUTl7IvfgsKYyOdV8rbv4Saga7jOwdm+MzAzl7NpJbry5jJzTAimVx8N3e3TQSH//X42xE5jdde1y6zjdl/eCqMoRHX/iISUmsSeC+Y6Th5KbkQLQ0gt5Kw3db1Od0/DHyjFdgB4PKPwG7fHKysjRYBS62QJ4yurTwIQhffyySAJG3mLx271fHpc/Qx3d/gPjJfrMD2Q4onOTu9XoXChXkSJbYoy8rKnKifUxPbmbaf7RdIpG2LtlGJD3LJ/AeR0aV+sgx3Mufbp0uGSF9hblKYwqWRiMUTblUDid9N8mZzt2yhlS/Q3x+1ir0hD4DuLghCnXj32CqdDCMhiVri1HnTVhbtKmwp0kwbYXU1NDp/l5VRTJBsjmXOes5byj9UNtwZ7lLetj1v8rEGCzSZWSyqBA/HTJhVJuBRLEj/1kHBil5R7avwEl8Ol4SUXnF2P2U3948D7qL6l/+0hF4nqkQSFGPWCf+s6vTr71zODk9vbHUSbnp7gphWg7RwUrEhIolkknKHQ1AJi1I5tTh1wI6f+y9IV8P0/zkxNBZwOa0xywd4xvvPK/YRk8T3m7b4f29Y4OGKy7lqUoCkEOPgCEoJRFLSfqhUydLJJOTlY6X3w6sDGnBCi99GOMSwwCIFJRBCXsxIE4WHCC4k3SIXQIyAdJKVikBkKiQw/FalHkE5i0KlkkkYRI2DBRhGEIiBrCABseh9BZDUQitrb6aXpatq6cb2FnrZs59dos87+LGjlzc5Krw8r4RxQkovO7v9UAHCSYP5//55QuQVZ9BDRSgoUwGkQdABWWFI4bWNgUiDeE4ABPKwdETEYKdXIGfInU3ZbrI11bHrxobSPR5L3r+fLOIfIpO3/RjT+C5QDyBGQVyEh07DQCe0b4Ur0gCIwbC0VAilGTBeDOCmKfD/mXznpzxcPFBOPiHjBF7cDivu0kvmvG6DX6YXgQ/bZX1gSemjRXySpyCOWV9BAgdOKRd5LznseUTqLVX6FeZGzPn3sOuc9u3tOSmftm/JmU97HqXJa3zBexEVnbfm+aId1jyNY5ybkkO/M1sVzWXPFKTEb3EREhvnMrlIXlw8KJT7Jfzd/fjD7x/6HuZ3zVOkvmp8SmmOKCgGRc6p3kPndzP6s7NU4zA7IJsQ8JtF61oVphUUnmzSTere4eP8m+R3mgO+93BN7N3em0BuoT9qecwf1Pko3JF6Ee/zH+4obISj3NMWihFt0MBRB0x1zrrRuoR/Pk24s5mYjRUe86VXJlnoMXRLUiUd394d7NjhqOyecvs74Q+3uFOuJLNII9SsM+sEBsaXorsncAGXdSpyyiKPcur2FApU7UeIHRaVnZXOT2atqurn1b8TAW8yPSF51WSphaA6UQlRoAg7yyfjrXtutHQNkAKM7p3dAbem5ojcvt3f0jDOU2mxJh0Ek3+s3ajl2XMv6NPs5eKY6R7r9bpZ6978uNgXmunf6BwORR1yADswK7dRoWNDdVaWGqrgeWugmq3QNUZbGxaBeNowf5gK4kymOBgP800wjjbKG6WBeMOi6b3sp5OTr9jsl1NTEws/nh/Phr5FZ0kHxk/6fvTLz+go6v/ll/6L+59/wfvxoz//DEL98Kxmvjbl5lJmH2vpzWdnLKuPmdBrBc2pVocXeC0z4W0CjHXoc6ib3CoptJfeR+99pmn8Wb00CSdty2m9zi8NUXAPAkp6X9GNcM3GG/V+Z6vuKIpCsbJ1bfMwE8qIlVEVRZc+PRptdZHMnpzayB+6im2K3CZv7N2Aa7r0cOFCmAb1CxfooYUL1LFpCxe+qYpSrLUFKwnxLbh4L7LOb8MYaDDSRmk/BO7tgF+osc3fjG7mT74eJV1U8R0+X/QtCMFKWltKB9NhhRmGZFgEURhngOmeqgXcI1mX7YdKdwCK4c0XpQmuAuo6Y4YpZsscpA6y2Qrs9VejCNwSSrvUToUUsKP2+Ai8B49wKQaVLOwkub3UXt4UgVV5i0q+JN0oOtHSKvXkh0E0HqjgUblUPh50BwdhfC9ZzKkvFcdblkojUBjALwUq5BSCKlMEXsJBOKJLl7YMCf93LQZgA1o6TeAamt7yRk1mryV+lxL/J9bezHiCvFkT6p4q1orRdKwkp4o0orOY5moTomn5UU/itEGaVPqRqy5y4dtmTQiKJDO0AxiIkTk4OmymVFr1YiDUZrO2tbbPt7N5qXaVayjAep1MrlSC6mKyGsQ4Ya7HtEubt/hsqanN2OQaxsH2OplcAgo63gw1BaT4p8hS5C7rVEfclYDCVQUSvOmg0zrTqPeY94T3kzTgmK9iE2wJCo9gG5XhyOE2qszSPTW11m5tw9Yjk9r21dGMqN5NDI6cjH2mMMDKCCHUexkeiLjwvIBf3Bmcfjx8eoIzFG4IDo3lF8SKhUYbse4QaggOH+JMTL9+PDi9szhcxiDZSBksjn5Tw9At7UzZJrurhoINRVCM5MGmPtQ0OM3dozSMGpR/wJlitoJXkJ3DUGQzOPAPg3JUadjDnR5oRgV8YwEPNQ/ORJt+zBD8O8ZhNBv509vNYP+G4LHmmUEDnvE7emRZaGT5UrLLwiLzsFUrYZ6LXbUqb++ASeVjFlRlZlYJKnyi8pnQYDYb1GnxcWRSNen1TSRyetDTqpi0mCp1BjCz+gFJIiFJD0/SA/whSeJI9ZQlndnSfiaZDkD9yqtmpTngha0pMTn5B5/mL3Pimn2WJyUnmmxfBJqDFl1dCUIaO3Z3a8Tv243UYaqxvc5SRo1kHwktYU4z6wTfcLFXQD2je6Aspowj45S2tcCjp7Mn/e0DONkcub2MPXbdBtj7T2ZPyuzlYCbcPmiZM1Mg00S7Jefw5RoXcWC58rDHQCLQOwjZs+aZwy3hqyPLOa5eO+2D6p0iLdG4JRGSwZZx9sryQLGLT5ECplN9kIVcMaucI3QoFZZTNkQXRvnPojrVkahdUe8iS4VMV86s8oqab6Sht6iz/FM0RRtAd7tUQ7QdaSPutn+NlDDbGEvFR6TzlBx5OpLFnLCvHeAKMrPEmomnE60lHDlrjCW3106eZNtylSrtTX92DNu/lGRFAr5OEMbJ7P0LFpbeXHHf7v5KtmrUc9QFjHDNrDS2eHuUqbUcmYOMo00NKrnpz1nLiQ9aXNYFHJCcel2DAL+oBfEHt6r4cYrQXTbptunNRVnACDZ5SiVID9kVp9jpf/YT1sci7KRsUFN96UbFT5SiWQe2XdNAw6JFBqiHIJQI5ddD11hxmX2MlK/jsaRiKYsXwGPJ7KQjPBWbJ+axwsUejPhEXSIz3sPLcRVbJlZGPh2OAFVVM6HnWZ39d2aLeMKQ/el81LKYiJZyj9yeDt1Onwp4hx2y/uOu0/72sAyvzN54NHsOFuc4iy2sbGiYqrG2HhOr4BvWA9eI1GX9vGm/chCUJiOBOSCX1m3pBFEiRRdVGCJOhb1An4yVFGEpQN9nEBVVpgMg7ZOdFp9e7fHZ/XN3GCnd1qFvQ9/x1TTD3jfba4M0n9QfY4IWiQ+By05kvL5STrFjMFIrA6m2lBjTa8dhN8r/2XcOVEtoX4lexy6iffpItm3Lju5qn4xabpJTuFw8HU/5+ucvU1ZIJtdSNbQ+Sga1jupP3TA8fVritzHcTxkIMc/Ob1g53/kHxvcNIG71nRK2uLMzkEyNyz5RfrsZuvCwnwIrcRZZA9SgeO6h7gASj7Y6fID/ss3GVq3saEdg68HMnPRro3KS18piXuf4umx5gtKIvSMUX6Uz7exY5LrLYyzbEVIrY+mDYXa7GC0jM7XFElyFBKhuxGgNgi/2ycQ7xKV2n2qseKfdUD/Z7c4p07zSvNRMaHTLE9KamqLV4+NHj4Lv59uXhpXwE0svUrrZE+Ibm1RVoJbG8PXHaO9v/H2d08gfpzOkmdyP3J+8/TKGfE9czlzha1TC7Jqa7KAnRIKhcXG16lJGZ4/iiKLnnmSxmMn7P1UmJFAopVVadAk/82clAAlyM985lKD2RzX6fG05D6Jvvp6bCH5oNnda750YAyc0No+X5uGUbWtMDZpDJaRRQNPj0LFv7ny3DauTE51LUlb8OuhZbIhjZJmfv/mnz9oEhjn3UOsO5t720qIQtrIZhGGregs/IcXCFcGOnccibqpuEqw8NrGowOKUqDzAEUX4+DZlR4gO2NWl1GXP+UA43ITIeio3AJjpqcf27sXqYXnDznn8ZlvHANs5/NKdlvKpWXNAL9p25co21AvEZAZ0nBEdeDvej3ZPF0b942/bItMKYc8wtiZa9hpsuEe4AqyekflffwbAzDUXsQ2Ae0XRCPYWmPkKLUbhAMxsxjFUBcDME6dQMAAz36ELSA3AzDN7EYzq78F6AyfQDVSx5oLvkIrkp2AXAyMuIjDxZ21I7P8doYAFh6gDB5w+S6AHB8h04492I8H1aBLlB06ifUi7ZhBtRClJ/Rewl4FLzqOoNTeNIEUW4ZEs/fXYqTVd6CEqFPws7GasEY3yGQDgBmyQFO/AzuL6HfXt8TjsXBmVEdqB2x5h/5zTiZ6jkixE1hWLs3YPzoCMkVrR1XV39SNPmrUTyhaW4hO660J/oAK5gb4MN6ItgJM0w5L/w70QeJJLnM/nRLynMv5dd9CDmfdPYzZTGz3eAcD/V4XAS/B/bHfAzQDMPM943yFj8NuhAIUxfDhI2h00o9+PJjXoGJjJRP5IZjjWzCQd/NGQSe3UYkknBsOHJfXqGZrKSfz/bV+v3/URHohMNaw7gnfxTO1/XClMytXN+4r69UkVLfuTquqOTWpac+7RW/o8l0tFA6tecJOSbl8nZTp9x5xU/wMLqP81qWLQ/fovfYtRCU1C6umFS6ySyqtXAUGxM83GUCvc5yKt9M1/ok0eAt8hXuovhkjC5uL0/H39O2QMNBzi0l6q9qYPMpq3nA16L2YKMmCrp4510+PZWf8whNNWxp3K+wIEFOoYjY02O2kJ1p9dVZ6v/ydkJR4IAbt9mf0vFER0940Lp84j+N4pHGm3rORGS9Yl5XnPoG0DMTLe8hx5ZY0wJvL5BqilTrkE+uTRGX+4Pqpymn14HI6KzrdHufBRwmRF1XRh/NeMp2U7rofAw2fF2u9xPyKERGzZEbPnwJGElIycE2cuXLlx58GTF28+fCn48RcgUBClYCGp2P/XbZJVKoYEvEW29QjTSURVYpu7RBuS18ySutRUXqycrJAayTyljZTeAnXAtdclgShd3RT1jvrUgFTRAdsWMPZE07UhbR2uCVjT3mKRAZ0wrp5ERxth24QjaOkir75/bgPBgZMRD0UdhkMr0sXjjaQFsfWiimWvtDpRjJqtsHVw0WlNnKWubYFqOvAIKcY0HXTDRLlC3rKCl0a0OUmIOWyYwGJF56CL53aX7a7Sr/erocknFhKJsw4xFtUgtyVk2XDHIx7WUA9xUX0OsWw8tHNPUQ8D1UvGi46AfYGBPdD06NJxiAsmXEM2QsepsOiKC+xHy3+lM/nw5d2hhw2Gl9cYz8OG5uFVm1KjPtTQMk2TFJolD5Jj+YS3XXqSFVJtyFk2sSFVlaOsPerODgA=') format('woff2'),\n  url('iconfont.woff?t=1557734072589') format('woff'),\n  url('iconfont.ttf?t=1557734072589') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */\n  url('iconfont.svg?t=1557734072589#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.iconfont {\n  font-family: \"iconfont\" !important;\n  font-size: 16px;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.icon-404cuowu:before {\n  content: \"\\e62f\";\n}\n\n.icon-juanzeng:before {\n  content: \"\\e65a\";\n}\n\n.icon-map-setting:before {\n  content: \"\\e6c8\";\n}\n\n.icon-huiyuan:before {\n  content: \"\\e61d\";\n}\n\n.icon-github:before {\n  content: \"\\eaf6\";\n}\n\n.icon-logo-weibo:before {\n  content: \"\\e618\";\n}\n\n.icon-liuyan:before {\n  content: \"\\e744\";\n}\n\n.icon-caidan:before {\n  content: \"\\e790\";\n}\n\n.icon-weibiaoti35:before {\n  content: \"\\e63d\";\n}\n\n.icon-zhifubao:before {\n  content: \"\\e7ce\";\n}\n\n.icon-shangsheng:before {\n  content: \"\\e750\";\n}\n\n.icon-tubiaozhexiantu:before {\n  content: \"\\e79a\";\n}\n\n.icon-qq:before {\n  content: \"\\e623\";\n}\n\n.icon-ai-new:before {\n  content: \"\\e63b\";\n}\n\n.icon-shiyongbangzhu1:before {\n  content: \"\\e824\";\n}\n\n.icon-tianjia:before {\n  content: \"\\e620\";\n}\n\n.icon-home:before {\n  content: \"\\e600\";\n}\n\n.icon-other:before {\n  content: \"\\e627\";\n}\n\n.icon-goods:before {\n  content: \"\\e605\";\n}\n\n.icon-youqinglianjie:before {\n  content: \"\\e636\";\n}\n\n.icon-icon-test:before {\n  content: \"\\e6cc\";\n}\n\n.icon-wechat:before {\n  content: \"\\e66a\";\n}\n\n.icon-weixin:before {\n  content: \"\\e626\";\n}\n\n.icon-xiazai:before {\n  content: \"\\e647\";\n}\n\n.icon-zhuzhuangtu:before {\n  content: \"\\e67a\";\n}\n\n.icon-font:before {\n  content: \"\\e800\";\n}\n\n.icon-wenzhang2:before {\n  content: \"\\e7c3\";\n}\n\n.icon-web-icon-:before {\n  content: \"\\e6da\";\n}\n\n.icon-webpage:before {\n  content: \"\\e628\";\n}\n\n.icon-icon-test1:before {\n  content: \"\\e71c\";\n}\n\n.icon-icon-test2:before {\n  content: \"\\e653\";\n}\n\n.icon-icon-test3:before {\n  content: \"\\e654\";\n}\n\n.icon-icon-test4:before {\n  content: \"\\e655\";\n}\n\n.icon-tab:before {\n  content: \"\\e665\";\n}\n\n.icon-pinglun:before {\n  content: \"\\e619\";\n}\n\n.icon-denglu:before {\n  content: \"\\e67c\";\n}\n\n.icon-liucheng:before {\n  content: \"\\e60e\";\n}\n\n.icon-jiaose:before {\n  content: \"\\e76e\";\n}\n\n.icon-login:before {\n  content: \"\\e766\";\n}\n\n.icon-settings:before {\n  content: \"\\e61a\";\n}\n\n.icon-blacklist:before {\n  content: \"\\e641\";\n}\n\n.icon-rizhi:before {\n  content: \"\\e614\";\n}\n\n.icon-dianliyonghuzongshu:before {\n  content: \"\\e639\";\n}\n\n.icon-rengongzhineng:before {\n  content: \"\\e651\";\n}\n\n.icon-jiaoseshouquan:before {\n  content: \"\\e640\";\n}\n\n.icon-WechatIMG:before {\n  content: \"\\e630\";\n}\n\n.icon-layer:before {\n  content: \"\\e768\";\n}\n\n.icon-jiankongkongzhiguanlijianguan:before {\n  content: \"\\e668\";\n}\n\n.icon-tupian:before {\n  content: \"\\e796\";\n}\n\n.icon-jiaoseguanli:before {\n  content: \"\\e645\";\n}\n\n.icon-peizhi-:before {\n  content: \"\\e61c\";\n}\n\n.icon-bingtu:before {\n  content: \"\\e61b\";\n}\n\n.icon-gongju:before {\n  content: \"\\e6fa\";\n}\n\n.icon-huanxingtu:before {\n  content: \"\\e61f\";\n}\n\n"
  },
  {
    "path": "font/iconfont.js",
    "content": "!function(z){var c,a='<svg><symbol id=\"icon-404cuowu\" viewBox=\"0 0 1024 1024\"><path d=\"M304.173056 554.99264l0 163.87584c0 4.89984 0.6656 8.259584 2.013184 10.053632 1.348608 1.82272 3.830784 2.731008 7.474176 2.731008l9.956352 0c7.430144-0.135168 11.281408 4.353024 11.614208 13.507584l0 48.1536c0 8.374272-4.262912 13.104128-12.8 14.236672-5.551104 0.611328-9.005056 1.652736-10.422272 3.070976-1.432576 1.403904-2.149376 4.836352-2.149376 10.189824l0 27.96544c0.630784 9.976832-3.936256 15.19616-13.76256 15.685632l-81.077248 0c-5.687296 0-9.416704-0.992256-11.153408-2.977792-1.744896-1.9712-2.610176-6.217728-2.610176-12.70784l0-24.404992c0-6.636544-1.26976-11.245568-3.800064-13.88544-2.516992-2.581504-6.941696-3.88608-13.266944-3.88608l-92.47232 0c-11.08992 0-18.861056-2.347008-23.363584-6.998016-4.509696-4.667392-6.750208-12.693504-6.750208-24.080384 0-15.17568 1.801216-27.030528 5.445632-35.54816 4.43904-10.600448 17.160192-28.476416 38.1696-53.605376l60.229632-72.312832c30.199808-36.219904 52.48-59.293696 66.873344-69.241856 6.488064-4.43904 14.345216-8.055808 23.584768-10.912768 9.261056-2.850816 17.903616-4.260864 25.987072-4.260864 7.899136 0 13.5936 1.978368 17.067008 5.919744C302.44352 539.511808 304.173056 545.999872 304.173056 554.99264zM204.575744 678.0672l0-11.628544c0-14.211072-3.949568-21.337088-11.870208-21.337088-5.978112 0-11.60704 3.241984-16.813056 9.736192l-36.524032 44.808192c-10.59328 13.123584-15.883264 22.526976-15.883264 28.233728 0 4.100096 2.212864 6.752256 6.65088 7.928832 4.41856 1.189888 15.415296 2.02752 32.945152 2.489344l18.73408 0.247808c8.061952 0 13.507584-0.914432 16.351232-2.737152 2.857984-1.836032 4.5312-5.410816 4.999168-10.77248C204.106752 716.32896 204.575744 700.664832 204.575744 678.0672z\"  ></path><path d=\"M929.953792 554.99264l0 163.87584c0 4.89984 0.667648 8.259584 2.02752 10.053632 1.334272 1.82272 3.828736 2.731008 7.468032 2.731008l9.961472 0c7.417856-0.135168 11.296768 4.353024 11.623424 13.507584l0 48.1536c0 8.374272-4.283392 13.104128-12.82048 14.236672-5.530624 0.611328-9.00608 1.652736-10.445824 3.070976-1.388544 1.403904-2.105344 4.836352-2.105344 10.189824l0 27.96544c0.617472 9.976832-3.96288 15.19616-13.75744 15.685632l-81.104896 0c-5.706752 0-9.416704-0.992256-11.131904-2.977792-1.759232-1.9712-2.63168-6.217728-2.63168-12.70784l0-24.404992c0-6.636544-1.260544-11.245568-3.777536-13.88544-2.538496-2.581504-6.9632-3.88608-13.289472-3.88608l-92.471296 0c-11.075584 0-18.84672-2.347008-23.364608-6.998016-4.516864-4.667392-6.750208-12.693504-6.750208-24.080384 0-15.17568 1.801216-27.030528 5.444608-35.54816 4.432896-10.600448 17.160192-28.476416 38.193152-53.605376l60.214272-72.312832c30.199808-36.219904 52.471808-59.293696 66.880512-69.241856 6.480896-4.43904 14.352384-8.055808 23.591936-10.912768 9.253888-2.850816 17.883136-4.260864 25.965568-4.260864 7.899136 0 13.5936 1.978368 17.060864 5.919744C928.20992 539.511808 929.953792 545.999872 929.953792 554.99264zM830.377984 678.0672l0-11.628544c0-14.211072-3.964928-21.337088-11.879424-21.337088-6.012928 0-11.60704 3.241984-16.818176 9.736192l-36.511744 44.808192c-10.600448 13.123584-15.90272 22.526976-15.90272 28.233728 0 4.100096 2.210816 6.752256 6.649856 7.928832 4.42368 1.189888 15.40096 2.02752 32.958464 2.489344l18.720768 0.247808c8.083456 0 13.50656-0.914432 16.37888-2.737152 2.829312-1.836032 4.503552-5.410816 4.977664-10.77248C829.89568 716.32896 830.377984 700.664832 830.377984 678.0672z\"  ></path><path d=\"M657.708032 624.04096c-16.031744-33.595392-40.23296-58.831872-72.659968-75.799552-23.953408-12.650496-48.820224-18.946048-74.65984-18.946048-42.231808 0-77.338624 13.288448-105.460736 39.913472-31.838208 29.952-47.76448 71.192576-47.76448 123.799552 0 53.932032 17.422336 96.966656 52.3008 129.238016 29.413376 27.271168 65.030144 40.928256 106.88 40.928256 37.909504 0 71.605248-12.2112 101.215232-36.696064 38.638592-32.254976 57.967616-73.623552 57.967616-124.181504C675.52768 674.649088 669.55776 648.569856 657.708032 624.04096zM601.243648 794.258432c-24.846336 18.343936-53.108736 27.57632-84.898816 27.57632-35.098624 0-64.9728-10.303488-89.65632-30.860288-29.241344-24.150016-43.848704-56.6272-43.848704-97.166336 0-39.602176 13.344768-70.624256 40.04864-93.17376 23.570432-19.994624 53.060608-29.979648 88.443904-29.979648 21.676032 0 42.53696 4.752384 62.626816 14.27456 27.227136 12.721152 47.521792 31.766528 60.945408 56.988672 9.976832 18.40128 14.947328 38.084608 14.947328 58.882048C649.851904 738.82112 633.670656 769.893376 601.243648 794.258432z\"  ></path><path d=\"M442.785792 650.447872l7.677952 2.865152c0.667648 0.211968 1.12128 0.339968 1.36192 0.339968 0.531456 0 0.815104-0.567296 0.950272-1.666048l0.041984-0.34816-0.339968-8.224768 0-0.638976c0-2.453504 0.354304-3.985408 1.09056-4.616192 0.731136-0.587776 2.526208-0.908288 5.383168-0.908288 2.453504 0 4.097024 0.206848 4.913152 0.546816 0.795648 0.390144 1.298432 1.14176 1.461248 2.37568 0.141312 1.055744 0.211968 2.126848 0.162816 3.239936l-0.290816 8.224768c0 1.333248 0.339968 2.014208 1.007616 2.014208 0.227328 0 0.659456-0.128 1.304576-0.339968l7.663616-2.865152c1.73056-0.623616 3.063808-0.943104 3.943424-0.943104 0.815104 0 1.4592 0.212992 1.948672 0.750592 0.475136 0.518144 0.971776 1.497088 1.524736 2.965504 0.978944 2.594816 1.468416 4.586496 1.56672 6.012928 0.064512 1.445888-1.56672 2.665472-4.948992 3.595264l-7.906304 2.240512c-1.084416 0.325632-1.666048 0.766976-1.666048 1.333248 0 0.248832 0.262144 0.7168 0.7936 1.383424l5.105664 6.424576c1.496064 1.9712 2.276352 3.417088 2.276352 4.402176 0 1.122304-1.333248 2.57536-3.928064 4.497408-2.312192 1.589248-3.907584 2.388992-4.77184 2.388992-1.120256 0-2.50368-1.176576-4.14208-3.644416l-4.538368-6.829056c-0.55296-0.780288-1.055744-1.191936-1.480704-1.191936-0.390144 0-0.864256 0.411648-1.432576 1.191936l-4.516864 6.829056c-1.631232 2.466816-2.991104 3.644416-4.168704 3.644416-0.872448 0-2.454528-0.799744-4.745216-2.388992-2.60096-1.85856-3.941376-3.340288-3.941376-4.497408 0-0.950272 0.800768-2.403328 2.347008-4.402176l5.041152-6.424576c0.518144-0.6656 0.780288-1.133568 0.780288-1.411072 0-0.5376-0.581632-0.978944-1.67424-1.304576l-7.840768-2.240512c-3.284992-0.929792-4.928512-2.100224-4.928512-3.4816 0-1.516544 0.5888-3.75808 1.794048-6.848512 0.780288-1.985536 1.864704-2.958336 3.247104-2.958336C439.82848 649.540608 441.133056 649.84576 442.785792 650.447872z\"  ></path><path d=\"M557.458432 650.447872l7.663616 2.865152c0.674816 0.211968 1.129472 0.339968 1.355776 0.339968 0.5376 0 0.843776-0.567296 0.97792-1.666048l0.028672-0.34816-0.355328-8.224768 0-0.638976c0-2.453504 0.382976-3.985408 1.097728-4.616192 0.759808-0.587776 2.545664-0.908288 5.403648-0.908288 2.44736 0 4.076544 0.206848 4.891648 0.546816 0.801792 0.390144 1.298432 1.14176 1.447936 2.37568 0.162816 1.055744 0.227328 2.126848 0.2048 3.239936l-0.319488 8.224768c0 1.333248 0.340992 2.014208 1.006592 2.014208 0.246784 0 0.671744-0.128 1.325056-0.339968l7.658496-2.865152c1.743872-0.623616 3.070976-0.943104 3.928064-0.943104 0.82944 0 1.481728 0.212992 1.957888 0.750592 0.466944 0.518144 0.985088 1.497088 1.545216 2.965504 0.93696 2.594816 1.445888 4.586496 1.524736 6.012928 0.091136 1.445888-1.539072 2.665472-4.9152 3.595264l-7.907328 2.240512c-1.097728 0.325632-1.685504 0.766976-1.685504 1.333248 0 0.248832 0.262144 0.7168 0.792576 1.383424l5.113856 6.424576c1.487872 1.9712 2.262016 3.417088 2.262016 4.402176 0 1.122304-1.304576 2.57536-3.944448 4.497408-2.276352 1.589248-3.863552 2.388992-4.743168 2.388992-1.099776 0-2.50368-1.176576-4.168704-3.644416l-4.517888-6.829056c-0.544768-0.780288-1.042432-1.191936-1.460224-1.191936-0.410624 0-0.88576 0.411648-1.431552 1.191936l-4.516864 6.829056c-1.631232 2.466816-3.012608 3.644416-4.16256 3.644416-0.88576 0-2.473984-0.799744-4.75136-2.388992-2.61632-1.85856-3.934208-3.340288-3.934208-4.497408 0-0.950272 0.780288-2.403328 2.325504-4.402176l5.041152-6.424576c0.502784-0.6656 0.7936-1.133568 0.7936-1.411072 0-0.5376-0.587776-0.978944-1.685504-1.304576l-7.835648-2.240512c-3.291136-0.929792-4.928512-2.100224-4.928512-3.4816 0-1.516544 0.596992-3.75808 1.7664-6.848512 0.815104-1.985536 1.893376-2.958336 3.267584-2.958336C554.487808 649.540608 555.805696 649.84576 557.458432 650.447872z\"  ></path><path d=\"M560.854016 773.3248c0 13.7984-11.224064 25.009152-25.088 25.009152l-38.800384 0c-13.884416 0-25.114624-11.210752-25.114624-25.009152l0 0c0-13.94688 11.231232-25.172992 25.114624-25.172992l38.800384 0C549.630976 748.151808 560.854016 759.37792 560.854016 773.3248L560.854016 773.3248z\"  ></path><path d=\"M582.893568 540.33408l17.471488-25.71776c24.619008-36.241408 25.988096-56.5504 22.805504-67.2-2.59584-8.672256-8.778752-12.13952-10.317824-12.883968-102.079488-28.150784-103.001088-100.718592-102.99392-103.795712-2.765824-43.756544 19.308544-85.876736 62.173184-117.87776 40.020992-29.887488 94.101504-48.345088 152.290304-51.989504 6.735872-0.418816 13.507584-0.637952 20.11648-0.637952 111.638528 0 190.275584 57.98912 195.685376 144.299008 5.325824 84.913152-72.928256 142.81728-204.25728 151.170048-5.163008 0.715776-11.240448 2.361344-13.679616 3.651584l-0.126976 0.325632-1.40288 1.531904c-46.170112 50.359296-105.547776 69.156864-108.058624 69.92896L582.893568 540.33408zM744.436736 182.012928c-6.15424 0-12.465152 0.205824-18.755584 0.595968-53.224448 3.332096-104.474624 20.718592-140.617728 47.699968-36.77184 27.455488-55.754752 62.895104-53.44256 99.781632 0.049152 3.062784 1.673216 60.201984 87.712768 83.63008l0.908288 0.289792c1.758208 0.652288 17.308672 6.892544 23.528448 26.293248 5.054464 15.783936 2.19136 35.078144-8.50944 57.598976 19.605504-9.906176 45.89056-26.17856 68.412416-50.408448 5.23264-8.538112 18.791424-12.02688 29.723648-13.44512 93.315072-5.884928 190.355456-42.587136 184.9856-128.159744C913.736704 231.79776 843.835392 182.012928 744.436736 182.012928z\"  ></path><path d=\"M683.776 313.648128l3.516416 19.223552c2.126848 11.628544 2.779136 20.017152 1.929216 25.137152-1.87904 10.934272-8.71424 19.796992-20.5568 26.682368-7.146496 4.21888-15.5648 7.261184-25.237504 8.997888-16.87552 3.091456-31.120384 1.54624-42.728448-4.615168-5.665792-3.042304-9.914368-6.977536-12.7488-11.8784-2.87232-4.813824-5.190656-12.19584-7.000064-22.016-0.714752-3.815424-1.722368-10.182656-3.054592-18.997248-0.978944-6.224896-1.659904-10.338304-2.0224-12.337152-0.815104-4.375552-1.673216-7.297024-2.629632-8.892416-0.958464-1.531904-2.666496-2.864128-5.169152-3.956736-3.88608-1.610752-6.08256-3.79392-6.588416-6.601728-0.382976-2.035712 0.178176-3.999744 1.673216-5.920768 1.432576-1.887232 3.574784-3.396608 6.361088-4.524032 5.572608-2.169856 12.309504-4.027392 20.180992-5.459968 8.685568-1.595392 16.004096-2.240512 21.974016-2.013184 5.865472 0.27648 9.183232 2.581504 9.998336 7.05536 0.384 2.24768-0.069632 4.148224-1.461248 5.743616-0.297984 0.403456-1.7664 1.496064-4.302848 3.318784-1.539072 1.055744-2.433024 2.581504-2.696192 4.644864-0.246784 2.049024 0.03584 5.289984 0.86016 9.771008 0.864256 4.58752 2.459648 14.543872 4.799488 29.782016 1.384448 9.104384 5.078016 15.543296 11.126784 19.330048 4.905984 3.091456 10.671104 4.05504 17.301504 2.849792 4.197376-0.765952 7.871488-2.260992 10.989568-4.4032 3.147776-2.198528 5.354496-4.814848 6.659072-7.79264 1.055744-2.311168 1.609728-4.779008 1.6384-7.417856 0.083968-2.566144-0.277504-6.06208-1.071104-10.436608l-3.182592-17.337344c-2.709504-13.28128-4.497408-20.996096-5.425152-23.15776-0.929792-2.2272-2.942976-3.723264-6.063104-4.503552-2.963456-0.694272-5.04832-1.49504-6.211584-2.289664-1.169408-0.815104-1.913856-1.9712-2.176-3.418112-0.587776-3.155968 0.871424-5.82144 4.381696-7.95648 3.487744-2.126848 9.402368-3.948544 17.697792-5.481472 8.133632-1.460224 14.159872-1.844224 18.081792-1.098752 3.907584 0.765952 6.148096 2.694144 6.735872 5.80096 0.262144 1.516544 0.162816 2.686976-0.339968 3.530752-0.475136 0.878592-1.956864 2.262016-4.324352 4.31104-2.526208 2.092032-3.79392 4.028416-3.837952 5.963776C680.768512 295.140352 681.747456 301.947904 683.776 313.648128z\"  ></path><path d=\"M720.54784 300.10368c2.226176-0.227328 3.494912 1.219584 3.836928 4.368384 0 0.03584 0.034816 0.362496 0.091136 1.000448 0.036864 0.60928 0.07168 1.120256 0.101376 1.538048 0.22528 2.084864 0.975872 3.07712 2.210816 2.942976 0.652288-0.077824 1.595392-1.028096 2.830336-2.842624 1.856512-2.617344 4.283392-4.842496 7.317504-6.587392 3.054592-1.772544 6.247424-2.808832 9.592832-3.183616 6.508544-0.68096 11.252736 1.212416 14.316544 5.67296 1.140736 1.659904 2.049024 2.460672 2.658304 2.368512 0.432128-0.021504 1.340416-0.907264 2.786304-2.630656 4.539392-5.48864 9.99936-8.580096 16.444416-9.253888 5.008384-0.538624 9.269248 0.425984 12.742656 2.837504 3.66592 2.530304 5.792768 6.658048 6.41024 12.423168 0.134144 1.23392 0.325632 3.3536 0.55296 6.310912 0.034816 1.020928 0.297984 4.062208 0.850944 9.203712 0.340992 3.26144 0.566272 5.523456 0.659456 6.863872 0.064512 0.836608 0.099328 1.425408 0.155648 1.801216 0.248832 2.439168 1.255424 4.55168 3.019776 6.260736 1.036288 1.006592 1.701888 1.687552 1.95072 2.06336 0.262144 0.340992 0.418816 0.850944 0.489472 1.460224 0.518144 4.984832-5.062656 8.098816-16.78336 9.331712-5.169152 0.560128-9.403392 0.362496-12.721152-0.531456-3.29728-0.928768-5.056512-2.354176-5.269504-4.381696-0.0768-0.794624-0.041984-1.383424 0.128-1.82272 0.171008-0.446464 0.801792-1.631232 1.893376-3.50208 1.043456-1.709056 1.072128-7.11168 0.135168-16.13824-0.579584-5.233664-1.340416-8.856576-2.275328-10.8288-1.14176-2.354176-2.977792-3.424256-5.538816-3.134464-1.283072 0.135168-2.368512 0.646144-3.282944 1.574912-0.908288 0.879616-1.461248 1.956864-1.65888 3.190784-0.192512 1.439744 0.01536 5.190656 0.617472 11.267072 0.815104 6.537216 1.445888 10.479616 1.887232 11.86304 0.44544 1.360896 1.631232 3.190784 3.579904 5.502976 0.44032 0.545792 0.715776 1.2544 0.815104 2.162688 0.483328 4.644864-5.331968 7.586816-17.429504 8.869888-7.274496 0.745472-12.230656 0.745472-14.869504-0.03584-2.118656-0.6656-3.296256-2.06336-3.545088-4.260864-0.099328-0.971776-0.034816-1.6384 0.156672-2.091008 0.227328-0.398336 0.999424-1.404928 2.331648-2.950144 0.780288-0.914432 1.248256-1.75104 1.41824-2.475008 0.191488-0.758784 0.227328-2.091008 0.128-3.999744-0.18432-4.303872-0.490496-8.614912-0.963584-12.990464-0.7936-7.643136-3.170304-11.2384-7.033856-10.81344-2.935808 0.290816-4.496384 2.091008-4.687872 5.409792-0.14848 3.141632 0.099328 7.580672 0.68096 13.288448 0.483328 4.268032 0.843776 7.076864 1.170432 8.38144 0.326656 1.311744 0.944128 2.61632 1.871872 3.984384 1.120256 1.574912 1.743872 2.921472 1.836032 3.929088 0.262144 2.558976-1.31072 4.488192-4.743168 5.842944-3.765248 1.460224-7.942144 2.403328-12.551168 2.8928-6.013952 0.652288-10.466304 0.652288-13.365248 0-2.900992-0.652288-4.460544-2.021376-4.687872-4.084736-0.070656-0.765952 0.021504-1.425408 0.34816-2.069504 0.29696-0.567296 1.078272-1.503232 2.26816-2.807808 1.573888-1.765376 2.354176-4.099072 2.31936-6.94272-0.064512-4.849664-0.382976-9.856-0.93696-15.039488-0.397312-3.694592-0.864256-6.254592-1.3824-7.694336-0.508928-1.40288-1.43872-2.509824-2.751488-3.268608-1.23392-0.779264-2.084864-1.36704-2.459648-1.800192-0.367616-0.446464-0.594944-1.078272-0.703488-1.893376-0.269312-2.58048 1.56672-4.856832 5.475328-6.813696C708.465664 303.25248 715.633664 300.657664 720.54784 300.10368z\"  ></path><path d=\"M840.496128 298.699776c4.38784-0.488448 8.359936 0.652288 11.912192 3.319808 3.603456 2.7648 5.651456 6.565888 6.168576 11.451392 0.489472 4.55168-0.745472 8.580096-3.679232 12.068864-2.886656 3.396608-6.531072 5.311488-10.928128 5.76512-4.373504 0.453632-8.339456-0.60928-11.870208-3.332096-3.608576-2.808832-5.658624-6.530048-6.182912-11.232256-0.495616-4.800512 0.722944-8.89856 3.658752-12.266496C832.49664 301.125632 836.135936 299.175936 840.496128 298.699776z\"  ></path><path d=\"M882.956288 294.168576c4.36736-0.452608 8.344576 0.666624 11.882496 3.340288 3.616768 2.751488 5.658624 6.55872 6.176768 11.437056 0.489472 4.552704-0.745472 8.608768-3.66592 12.082176-2.914304 3.4048-6.53824 5.325824-10.933248 5.779456-4.36224 0.453632-8.347648-0.659456-11.870208-3.3536-3.610624-2.793472-5.673984-6.55872-6.18496-11.225088-0.495616-4.813824 0.715776-8.892416 3.674112-12.273664C874.935296 296.6016 878.58176 294.68672 882.956288 294.168576z\"  ></path></symbol><symbol id=\"icon-juanzeng\" viewBox=\"0 0 1024 1024\"><path d=\"M876.74368 218.785935c-37.793768-32.534997-104.3363-67.992557-206.570729-52.566216-45.483914 6.895037-86.503143 23.606651-122.242112 49.480948-46.792723-42.701544-109.596094-74.583672-187.54542-74.583672-110.975511 0-201.944362 50.462299-256.076236 142.109602-54.832839 92.791359-70.773903 252.592902 64.767096 397.576971C354.962919 879.614565 552.371988 881.905748 560.693514 881.905748c20.101827 0 36.368302-16.266475 36.462446-36.368302 0.093121-20.146852-16.197914-36.555567-36.323277-36.741809-1.728364-0.022513-175.297468-3.482311-338.349031-177.916109-107.937315-115.463732-97.232508-239.410672-55.230905-310.48952 51.841715-87.742367 133.624347-106.160855 193.132672-106.160855 46.372144 0 85.5924 16.175401 117.357871 39.336914l0.302899-0.490164c0 0 57.543577 36.859489 82.671884 102.5844 6.846942 14.794961 11.497868 28.42233 13.297864 38.963407 6.031367 35.854603 1.029446 68.530816-13.088086 85.241406-6.637164 7.853875-14.818497 11.522428-25.663496 11.522428-13.042037 0-21.947871-11.007705-26.085098-17.552771-12.387122-19.563568-18.46556-55.464219 1.497097-97.583502 4.721535-9.979282 9.745968-19.422352 15.075347-28.327162-12.131295-17.320481-30.549783-38.823214-53.431933-51.468209-9.980305 15.098883-19.423375 30.993898-27.696806 48.477085-27.346835 57.661258-26.294876 122.030287 2.75781 167.982876 20.73116 32.767288 52.775994 51.561329 87.883583 51.561329 32.160467 0 61.096497-13.276375 81.478709-37.421284 28.467355-33.704636 39.173185-86.410022 29.356608-144.633075-5.258771-31.039947-21.971407-72.082712-49.691749-111.465674 25.054629-16.829294 53.315276-27.697829 84.704171-32.419364 59.181891-9.021467 110.391203 3.343141 147.975193 35.667338 35.831067 30.783097 57.193607 77.809133 57.193607 125.771495 0 201.756073-259.346723 298.124911-270.38001 302.120922-18.97926 6.872524-28.79686 27.836999-21.924335 46.838771 6.872524 18.955724 27.860535 28.843932 46.816259 21.900799 118.339222-42.913369 318.600245-169.31522 318.600245-370.861516C959.393052 331.00067 928.492274 263.264962 876.74368 218.785935z\"  ></path></symbol><symbol id=\"icon-map-setting\" viewBox=\"0 0 1024 1024\"><path d=\"M511.998465 57.264215c-204.053396 0-369.471866 165.417447-369.471866 369.472889 0 47.588855 8.999978 93.073792 25.385157 134.852314l0.002047 0.004093c5.529947 14.097066 11.900028 27.773554 19.048845 40.962947 40.070624 79.612199 144.579863 256.800737 325.035818 364.178303 180.420139-107.355053 284.923238-284.496519 325.011258-364.130208 28.356838-52.29504 44.461631-112.200408 44.461631-175.86745C881.471354 222.682685 716.053907 57.264215 511.998465 57.264215zM512.000512 744.713132c-173.35421 0-313.88485-140.53064-313.88485-313.883827S338.646302 116.945479 512.000512 116.945479c173.352163 0 313.882803 140.529617 313.882803 313.882803S685.352675 744.713132 512.000512 744.713132z\"  ></path><path d=\"M696.84952 478.472396c-4.26207 15.357779-10.463306 29.891797-18.20871 43.429115 1.140986 1.426489 41.86448 52.621475 16.839527 77.640288l-12.477172 12.481266c-18.745946 18.747993-65.718771-10.639315-76.924997-18.10945-14.299681 8.016581-29.720905 14.277168-45.992497 18.430768l3.292999 0.099261c0 0-8.902764 66.972321-44.792159 66.972321l-12.313443 0c-27.361161 0-42.6074-57.370639-45.243437-68.199265-16.089443-4.520967-31.31624-11.096732-45.382607-19.415189l2.469238 2.622734c0 0-53.025681 41.691541-78.404698 16.314571l-11.220552-9.335622c-19.287275-19.289322 11.793604-70.38607 18.014282-80.133062-7.498788-13.240559-13.529131-27.423583-17.72264-42.391483-10.540054-2.554172-68.312852-17.807574-68.312852-45.266973l0-12.31242c0-31.692816 55.091736-42.322921 67.991534-44.38079 4.131087-15.086603 10.126638-29.382191 17.613146-42.730197-5.91164-8.984628-38.249139-60.308551-18.789948-79.764672l11.848862-9.970072c22.329565-22.325471 68.082608 9.299807 78.763878 17.228383 13.526061-7.752568 28.058033-13.95585 43.404556-18.238386 3.38612-13.446243 18.551518-67.088978 44.971238-67.088978l12.313443 0c30.770817 0 41.676192 51.881624 44.167942 66.714448 15.565511 4.217045 30.309306 10.392698 44.022633 18.161638 11.600199-7.55814 59.364039-36.756135 78.062913-18.062378l11.220552 11.848862c21.87317 21.87931-8.468882 66.180282-17.283642 78.026074 7.734148 13.563924 13.908778 28.134781 18.155499 43.520189 3.917216 0.554632 66.599837 9.967002 66.599837 44.734854l0 12.31242C763.529175 459.811384 710.842209 474.919477 696.84952 478.472396L696.84952 478.472396zM512.069073 291.894c-74.623581 0-135.114281 60.914348-135.114281 136.063909 0 75.146491 60.490699 136.062885 135.114281 136.062885 74.621535 0 135.115304-60.916395 135.115304-136.062885C647.184377 352.808348 586.690608 291.894 512.069073 291.894L512.069073 291.894z\"  ></path></symbol><symbol id=\"icon-huiyuan\" viewBox=\"0 0 1026 1024\"><path d=\"M940.032 1008.64l-855.04 0c-54.272 0-84.992-32.768-84.992-91.136 0-111.616 99.328-273.408 278.528-273.408 11.264 0 19.456 9.216 19.456 19.456s-9.216 19.456-19.456 19.456c-153.6 0-238.592 138.24-238.592 234.496 0 46.08 24.576 51.2 45.056 51.2l855.04 0c21.504 0 45.056-6.144 45.056-51.2 0-95.232-84.992-234.496-238.592-234.496-11.264 0-19.456-9.216-19.456-19.456s9.216-19.456 19.456-19.456C925.696 644.096 1025.024 805.888 1025.024 917.504 1025.024 974.848 994.304 1008.64 940.032 1008.64z\"  ></path><path d=\"M513.024 629.76c-153.6 0-279.552-137.216-279.552-307.2S359.424 15.36 513.024 15.36s279.552 137.216 279.552 307.2S666.624 629.76 513.024 629.76zM513.024 55.296c-132.096 0-239.616 119.808-239.616 267.264S380.928 589.824 513.024 589.824s239.616-119.808 239.616-267.264S645.12 55.296 513.024 55.296z\"  ></path></symbol><symbol id=\"icon-github\" viewBox=\"0 0 1024 1024\"><path d=\"M950.930286 512q0 143.433143-83.748571 257.974857t-216.283429 158.573714q-15.433143 2.852571-22.601143-4.022857t-7.168-17.115429l0-120.539429q0-55.442286-29.696-81.115429 32.548571-3.437714 58.587429-10.313143t53.686857-22.308571 46.299429-38.034286 30.281143-59.977143 11.702857-86.016q0-69.12-45.129143-117.686857 21.138286-52.004571-4.534857-116.589714-16.018286-5.12-46.299429 6.290286t-52.589714 25.161143l-21.723429 13.677714q-53.174857-14.848-109.714286-14.848t-109.714286 14.848q-9.142857-6.290286-24.283429-15.433143t-47.689143-22.016-49.152-7.68q-25.161143 64.585143-4.022857 116.589714-45.129143 48.566857-45.129143 117.686857 0 48.566857 11.702857 85.723429t29.988571 59.977143 46.006857 38.253714 53.686857 22.308571 58.587429 10.313143q-22.820571 20.553143-28.013714 58.88-11.995429 5.705143-25.746286 8.557714t-32.548571 2.852571-37.449143-12.288-31.744-35.693714q-10.825143-18.285714-27.721143-29.696t-28.306286-13.677714l-11.410286-1.682286q-11.995429 0-16.603429 2.56t-2.852571 6.582857 5.12 7.972571 7.460571 6.875429l4.022857 2.852571q12.580571 5.705143 24.868571 21.723429t17.993143 29.110857l5.705143 13.165714q7.460571 21.723429 25.161143 35.108571t38.253714 17.115429 39.716571 4.022857 31.744-1.974857l13.165714-2.267429q0 21.723429 0.292571 50.834286t0.292571 30.866286q0 10.313143-7.460571 17.115429t-22.820571 4.022857q-132.534857-44.032-216.283429-158.573714t-83.748571-257.974857q0-119.442286 58.88-220.306286t159.744-159.744 220.306286-58.88 220.306286 58.88 159.744 159.744 58.88 220.306286z\"  ></path></symbol><symbol id=\"icon-logo-weibo\" viewBox=\"0 0 1025 1024\"><path d=\"M511.9535 63.941187c-247.458725 0-448.062313 200.602588-448.062313 448.061313 0 247.453725 200.603588 448.057313 448.062313 448.057313 247.453725 0 448.052313-200.603588 448.052313-448.057313C960.005813 264.543775 759.407225 63.941187 511.9535 63.941187L511.9535 63.941187zM470.406378 735.326154c-114.514335 0-231.571678-55.497163-231.571678-146.77843 0-47.72214 30.232089-102.906301 82.306241-154.983454 69.523204-69.506204 150.599441-101.167296 181.093531-70.660207 13.454039 13.437039 14.757043 36.716108 6.107018 64.506189-4.504013 13.997041 13.138038 6.244018 13.138038 6.278018 56.197165-23.528069 105.222308-24.916073 123.142361 0.688002 9.562028 13.64204 8.647025 32.776096-0.166 54.950161-4.078012 10.21503 1.256004 11.796035 9.026026 14.129041 31.665093 9.816029 66.907196 33.559098 66.907196 75.400221C720.390111 648.104899 620.530818 735.326154 470.406378 735.326154L470.406378 735.326154zM677.718986 445.086304c3.706011-11.441034 1.385004-24.485072-7.248021-34.0541-8.624025-9.552028-21.373063-13.176039-33.131097-10.693031L637.339867 400.317173c-9.809029 2.137006-19.472057-4.159012-21.575063-13.959041-2.111006-9.838029 4.154012-19.515057 13.985041-21.609063 24.05307-5.111015 50.106147 2.321007 67.748198 21.895064 17.682052 19.575057 22.413066 46.235135 14.853044 69.626204-3.086009 9.573028-13.344039 14.787043-22.904067 11.728034-9.560028-3.095009-14.788043-13.365039-11.706034-22.917067l-0.018 0L677.718986 445.086304zM783.742296 479.324404c-0.004 0.018-0.004 0.06-0.004 0.081-3.599011 11.095033-15.523045 17.16905-26.610078 13.57904-11.133033-3.595011-17.21505-15.489045-13.62504-26.610078l-0.004-0.009c11.027032-34.1401 4.035012-73.082214-21.715064-101.628298-25.772076-28.554084-63.770187-39.461116-98.88529-32.003094-11.420033 2.431007-22.651066-4.856014-25.088074-16.267048-2.444007-11.397033 4.838014-22.638066 16.258048-25.083073l0.021 0c49.359145-10.492031 102.829301 4.829014 139.085407 45.025132C789.439313 376.562103 799.213341 431.303264 783.742296 479.324404L783.742296 479.324404zM783.742296 479.324404\"  ></path><path d=\"M624.54883 570.13167c-5.924017-59.970176-84.807248-101.273297-176.195516-92.23827-91.371268 9.034026-160.659471 64.97919-154.723453 124.959366 5.936017 60.001176 84.814248 101.304297 176.195516 92.28627C561.213644 686.09901 630.476847 630.149846 624.54883 570.13167L624.54883 570.13167zM528.526548 619.374815c-18.647055 42.179124-72.288212 64.669189-117.792345 49.991146-43.932129-14.176042-62.532183-57.556169-43.298127-96.632283 18.890055-38.315112 68.035199-59.984176 111.517327-48.671143C523.957535 535.692569 546.920602 578.144694 528.526548 619.374815L528.526548 619.374815zM528.526548 619.374815\"  ></path><path d=\"M435.544276 587.23972c-14.147041-5.932017-32.439095 0.166-41.170121 13.860041-8.838026 13.74904-4.693014 30.126088 9.359027 36.525107 14.254042 6.509019 33.179097 0.329001 42.022123-13.77104 8.680025-14.241042 4.107012-30.511089-10.20603-36.614107L435.544276 587.23972zM435.544276 587.23972\"  ></path><path d=\"M470.419378 572.780678c-5.428016-2.154006-12.219036 0.457001-15.404045 5.796017-3.090009 5.368016-1.384004 11.484034 4.057012 13.71904 5.534016 2.278007 12.599037-0.350001 15.796046-5.812017C477.9194 580.982702 475.937394 574.798684 470.419378 572.780678L470.419378 572.780678zM470.419378 572.780678\"  ></path></symbol><symbol id=\"icon-liuyan\" viewBox=\"0 0 1024 1024\"><path d=\"M511.913993 928.016126c-8.256677 0-16.341341-3.096254-22.705863-9.460776l-95.983874-95.983874c-12.55703-12.55703-12.55703-32.682681 0-45.239711s32.682681-12.55703 45.239711 0l73.450025 73.450025 73.450025-73.450025c6.020494-6.020494 14.105157-9.460776 22.705863-9.460776l223.962372 0c17.717453 0 31.994625-14.277171 31.994625-31.994625L864.026877 223.962372c0-17.545439-14.277171-31.994625-31.994625-31.994625l-639.892491 0c-17.545439 0-31.994625 14.449185-31.994625 31.994625l0 511.913993c0 17.717453 14.449185 31.994625 31.994625 31.994625l95.983874 0c17.717453 0 31.994625 14.277171 31.994625 31.994625s-14.277171 31.994625-31.994625 31.994625l-95.983874 0c-52.980346 0-95.983874-43.003528-95.983874-95.983874L96.155888 223.962372c0-52.980346 43.003528-95.983874 95.983874-95.983874l639.892491 0c52.980346 0 95.983874 43.003528 95.983874 95.983874l0 511.913993c0 52.980346-43.003528 95.983874-95.983874 95.983874L621.142953 831.860239 534.619856 918.55535C528.427348 924.747858 520.17067 928.016126 511.913993 928.016126z\"  ></path><path d=\"M335.943558 511.913993c-26.490173 0-47.991937-21.501764-47.991937-47.991937s21.501764-47.991937 47.991937-47.991937 47.991937 21.501764 47.991937 47.991937S362.433731 511.913993 335.943558 511.913993z\"  ></path><path d=\"M527.911305 511.913993c-26.490173 0-47.991937-21.501764-47.991937-47.991937s21.501764-47.991937 47.991937-47.991937 47.991937 21.501764 47.991937 47.991937S554.401478 511.913993 527.911305 511.913993z\"  ></path><path d=\"M720.051067 511.913993c-26.490173 0-47.991937-21.501764-47.991937-47.991937s21.501764-47.991937 47.991937-47.991937c26.490173 0 47.991937 21.501764 47.991937 47.991937S746.369226 511.913993 720.051067 511.913993z\"  ></path></symbol><symbol id=\"icon-caidan\" viewBox=\"0 0 1024 1024\"><path d=\"M133.310936 296.552327l757.206115 0c19.781623 0 35.950949-16.169326 35.950949-35.950949 0-19.781623-15.997312-35.950949-35.950949-35.950949L133.310936 224.650428c-19.781623 0-35.950949 16.169326-35.950949 35.950949C97.359987 280.383 113.529313 296.552327 133.310936 296.552327z\"  ></path><path d=\"M890.51705 476.135058 133.310936 476.135058c-19.781623 0-35.950949 16.169326-35.950949 35.950949 0 19.781623 16.169326 35.950949 35.950949 35.950949l757.206115 0c19.781623 0 35.950949-16.169326 35.950949-35.950949C926.467999 492.304384 910.298673 476.135058 890.51705 476.135058z\"  ></path><path d=\"M890.51705 727.447673 133.310936 727.447673c-19.781623 0-35.950949 15.997312-35.950949 35.950949s16.169326 35.950949 35.950949 35.950949l757.206115 0c19.781623 0 35.950949-15.997312 35.950949-35.950949S910.298673 727.447673 890.51705 727.447673z\"  ></path></symbol><symbol id=\"icon-weibiaoti35\" viewBox=\"0 0 1024 1024\"><path d=\"M962.4 312 736 538.4c-16 16-40.8 16-56.8 0L453.6 312c-16-16-16-40.8 0-56.8L680 29.6c16-16 40.8-16 56.8 0L962.4 256C978.4 271.2 978.4 296.8 962.4 312zM380 972l-320 0c-22.4 0-40-17.6-40-40l0-320c0-22.4 17.6-40 40-40l320 0c22.4 0 40 17.6 40 40l0 320C420 954.4 402.4 972 380 972zM380 492l-320 0c-22.4 0-40-17.6-40-40l0-320c0-22.4 17.6-40 40-40l320 0c22.4 0 40 17.6 40 40l0 320C420 474.4 402.4 492 380 492zM540 572l320 0c22.4 0 40 17.6 40 40l0 320c0 22.4-17.6 40-40 40l-320 0c-22.4 0-40-17.6-40-40l0-320C500 589.6 517.6 572 540 572z\"  ></path></symbol><symbol id=\"icon-zhifubao\" viewBox=\"0 0 1024 1024\"><path d=\"M578.002738 650.941446c0 0-66.546625 53.265134-90.760097 67.220984-21.285792 12.257162-41.259706 20.402679-59.040674 26.069749-17.811668 5.649674-33.416064 9.202593-46.810119 10.674107-13.397125 1.473561-24.486694 2.4017-33.289174 2.834558-0.830925 0.397043-1.890047 0.62217-3.136433 0.62217l-10.051937 0c-23.030529 0-44.702108-2.720971-65.009619-8.17724-20.323884-5.440919-38.010709-13.505595-53.086056-24.183795-15.0733-10.673084-27.01426-24.083511-35.801391-40.203654-8.786107-16.128329-13.1853-34.869159-13.1853-56.218396 0.414439-18.421558 5.436826-35.177174 15.059997-50.253544 9.646708-15.07637 22.102391-27.847232 37.382399-38.32998 15.285125-10.481725 32.252565-18.421558 50.894134-23.876804 18.629289-5.442966 37.370119-7.731078 56.222489-6.901177 18.422581 0.830925 36.220946 3.024893 53.389978 6.580882 17.170055 3.564175 33.623795 7.856945 49.311079 12.879332 15.700587 5.027503 30.566156 10.468422 44.602847 16.344247 14.035668 5.870708 27.316136 11.521404 39.880289 16.96437 5.027503 2.093684 10.261715 4.192485 15.699564 6.28924 5.443989 2.093684 11.093662 4.192485 16.969487 6.28617 12.147668-15.487739 22.387893-30.6603 30.775934-45.546336 8.367575-14.865569 15.281031-28.471448 20.721951-40.826847 5.460362-12.355399 9.652847-22.708188 12.58155-31.097252 2.928702-8.366551 4.802376-14.223956 5.649674-17.585517L344.324628 440.506712l0-30.154787 128.782062 0 0-69.712735L294.072107 340.639191 294.072107 310.484404l179.035606 0 0-56.539714c0-3.76372 2.082428-6.804986 6.277984-9.106402 4.191462-2.305509 9.008164-3.871167 14.45113-4.707209 6.288217-1.26276 13.392008-1.885953 21.348214-1.885953l48.364521 0 0 72.239278 184.049806 0 0 30.153764L563.548538 340.638167l0 69.712735 146.266271 0 0.095167-0.62217 0 0.62217-0.095167 0c-2.963495 18.664082-7.938809 38.3484-14.982226 59.058071-5.858428 18.006096-14.549368 38.520315-26.070772 61.548798-11.524474 23.032576-26.697035 46.702672-45.551452 70.998007 0 0 144.168494 68.960605 296.353568 93.238544 25.2685-56.04648 39.355333-118.253264 39.355333-183.726441 0-247.124354-200.357214-447.464171-447.481567-447.464171-247.13561 0-447.476451 200.339818-447.476451 447.464171 0 247.119237 200.339818 447.476451 447.476451 447.476451 153.293315 0 288.573371-77.093842 369.220133-194.612373C798.713512 746.474242 711.670064 710.319811 578.002738 650.941446L578.002738 650.941446 578.002738 650.941446zM226.230999 630.842689c-1.684362 76.785827 85.188194 82.483596 98.580203 82.903152 44.283576 1.359974 80.040964-15.366989 107.871823-31.896454 27.846208-16.547885 73.265654-59.265802 74.965365-60.737316 1.660826-1.473561 3.344165-3.02387 5.010107-4.707209-12.147668-6.705726-24.088628-12.883425-35.802414-18.533099-11.717879-5.649674-71.296813-37.654598-124.160811-43.11496C252.585227 544.370245 226.741629 607.492888 226.230999 630.842689L226.230999 630.842689 226.230999 630.842689zM226.230999 630.842689\"  ></path></symbol><symbol id=\"icon-shangsheng\" viewBox=\"0 0 1024 1024\"><path d=\"M752.64 376.32 546.56 202.88c-19.2-16-50.56-16-69.76 0L270.72 376.32C240 402.56 261.76 447.36 305.28 447.36L384 447.36C384 447.36 384 448 384 448l0 320c0 35.2 28.8 64 64 64l128 0c35.2 0 64-28.8 64-64L640 448c0 0 0-0.64 0-0.64l78.08 0C761.6 447.36 783.36 402.56 752.64 376.32z\"  ></path></symbol><symbol id=\"icon-tubiaozhexiantu\" viewBox=\"0 0 1024 1024\"><path d=\"M929.28 896 65.28 896 65.28 623.68l184.448-184.448C261.76 444.736 275.072 448 289.28 448s27.456-3.264 39.552-8.768l129.216 129.216C452.48 580.48 449.28 593.856 449.28 608c0 52.992 43.008 96 96 96s96-43.008 96-96c0-14.144-3.264-27.52-8.768-39.552l317.44-317.44c13.824-13.76 13.824-36.096 0-49.92-13.76-13.76-36.096-13.76-49.92 0L581.76 519.296C570.496 514.624 558.208 512 545.28 512S520 514.624 508.736 519.296L377.984 388.48C382.656 377.28 385.28 364.928 385.28 352c0-52.992-43.008-96-96-96s-96 43.008-96 96c0 12.928 2.624 25.28 7.296 36.48L65.28 523.84 65.28 160c0-17.664-14.336-32-32-32s-32 14.336-32 32l0 437.312c-0.832 4.288-0.832 8.576 0 12.864L1.28 928c0 17.664 14.336 32 32 32l896 0c17.664 0 32-14.336 32-32S946.944 896 929.28 896zM545.28 576c17.664 0 32 14.336 32 32S562.944 640 545.28 640s-32-14.336-32-32S527.552 576 545.28 576zM289.28 320c17.664 0 32 14.336 32 32S306.944 384 289.28 384s-32-14.336-32-32S271.552 320 289.28 320z\"  ></path></symbol><symbol id=\"icon-qq\" viewBox=\"0 0 1024 1024\"><path d=\"M902.826667 643.413333 901.12 629.76 897.706667 614.4 896 607.573333 894.293333 599.04 890.88 592.213333 889.173333 583.68 885.76 575.146667 882.346667 566.613333 875.52 552.96 870.4 542.72 865.28 530.773333 860.16 522.24 855.04 513.706667 849.92 505.173333 841.386667 493.226667 831.146667 476.16 829.44 472.746667 827.733333 471.04 827.733333 469.333333 829.44 464.213333 832.853333 459.093333 834.56 448.853333 836.266667 443.733333 836.266667 438.613333 836.266667 435.2 836.266667 430.08 836.266667 426.666667 834.56 421.546667 832.853333 414.72 831.146667 406.186667 829.44 399.36 826.026667 392.533333 822.613333 387.413333 820.906667 380.586667 817.493333 375.466667 814.08 368.64 812.373333 365.226667 810.666667 363.52 808.96 348.16 807.253333 339.626667 805.546667 327.68 803.84 315.733333 800.426667 300.373333 798.72 293.546667 797.013333 286.72 793.6 278.186667 791.893333 269.653333 788.48 262.826667 785.066667 254.293333 778.24 238.933333 774.826667 230.4 769.706667 221.866667 764.586667 215.04 761.173333 206.506667 754.346667 197.973333 749.226667 191.146667 742.4 182.613333 735.573333 175.786667 728.746667 168.96 720.213333 162.133333 715.093333 158.72 711.68 155.306667 703.146667 150.186667 692.906667 143.36 682.666667 136.533333 672.426667 131.413333 660.48 126.293333 648.533333 121.173333 638.293333 117.76 624.64 114.346667 614.4 110.933333 600.746667 107.52 590.506667 105.813333 576.853333 104.106667 564.906667 102.4 552.96 100.693333 541.013333 100.693333 529.066667 100.693333 517.12 100.693333 505.173333 100.693333 493.226667 102.4 481.28 104.106667 469.333333 107.52 459.093333 109.226667 447.146667 110.933333 436.906667 114.346667 426.666667 119.466667 416.426667 122.88 406.186667 126.293333 395.946667 131.413333 387.413333 136.533333 378.88 141.653333 370.346667 146.773333 361.813333 153.6 356.693333 160.426667 344.746667 168.96 336.213333 179.2 327.68 187.733333 320.853333 196.266667 314.026667 206.506667 307.2 215.04 302.08 223.573333 298.666667 228.693333 295.253333 232.106667 290.133333 242.346667 285.013333 250.88 281.6 257.706667 278.186667 266.24 274.773333 274.773333 271.36 281.6 269.653333 290.133333 266.24 296.96 262.826667 310.613333 261.12 322.56 259.413333 332.8 257.706667 341.333333 257.706667 348.16 257.706667 354.986667 257.706667 360.106667 254.293333 361.813333 252.586667 365.226667 250.88 368.64 249.173333 372.053333 247.466667 380.586667 245.76 387.413333 244.053333 394.24 244.053333 399.36 244.053333 402.773333 238.933333 411.306667 235.52 418.133333 233.813333 424.96 232.106667 430.08 230.4 436.906667 228.693333 442.026667 228.693333 447.146667 228.693333 452.266667 228.693333 455.68 228.693333 459.093333 230.4 465.92 232.106667 471.04 228.693333 472.746667 221.866667 477.866667 211.626667 488.106667 204.8 493.226667 199.68 498.346667 194.56 503.466667 191.146667 506.88 184.32 513.706667 177.493333 522.24 172.373333 529.066667 165.546667 539.306667 158.72 547.84 151.893333 558.08 146.773333 566.613333 143.36 576.853333 138.24 585.386667 134.826667 595.626667 131.413333 604.16 129.706667 612.693333 126.293333 622.933333 124.586667 629.76 122.88 638.293333 121.173333 646.826667 119.466667 655.36 119.466667 670.72 119.466667 684.373333 119.466667 691.2 119.466667 696.32 122.88 708.266667 122.88 711.68 124.586667 716.8 126.293333 721.92 128 725.333333 129.706667 730.453333 131.413333 732.16 133.12 733.866667 133.12 735.573333 134.826667 735.573333 134.826667 735.573333 141.653333 733.866667 146.773333 732.16 151.893333 730.453333 158.72 727.04 163.84 723.626667 167.253333 720.213333 172.373333 715.093333 177.493333 709.973333 180.906667 704.853333 184.32 699.733333 187.733333 696.32 189.44 691.2 194.56 684.373333 194.56 680.96 196.266667 679.253333 196.266667 677.546667 196.266667 675.84 197.973333 675.84 199.68 674.133333 199.68 674.133333 199.68 675.84 201.386667 675.84 201.386667 675.84 204.8 686.08 206.506667 694.613333 209.92 703.146667 213.333333 709.973333 216.746667 718.506667 220.16 725.333333 223.573333 732.16 226.986667 738.986667 232.106667 744.106667 233.813333 749.226667 242.346667 759.466667 250.88 768 257.706667 774.826667 264.533333 781.653333 269.653333 786.773333 278.186667 793.6 281.6 795.306667 283.306667 797.013333 283.306667 798.72 283.306667 798.72 281.6 798.72 279.893333 800.426667 274.773333 800.426667 267.946667 800.426667 262.826667 802.133333 257.706667 803.84 252.586667 803.84 247.466667 805.546667 244.053333 808.96 240.64 810.666667 235.52 812.373333 233.813333 814.08 230.4 815.786667 226.986667 817.493333 223.573333 822.613333 221.866667 824.32 220.16 827.733333 218.453333 831.146667 216.746667 836.266667 215.04 839.68 215.04 843.093333 215.04 848.213333 215.04 849.92 213.333333 853.333333 213.333333 858.453333 213.333333 861.866667 213.333333 863.573333 213.333333 866.986667 215.04 870.4 216.746667 875.52 218.453333 878.933333 220.16 880.64 221.866667 884.053333 223.573333 885.76 226.986667 889.173333 228.693333 890.88 233.813333 896 240.64 899.413333 247.466667 902.826667 254.293333 906.24 262.826667 909.653333 271.36 911.36 279.893333 914.773333 290.133333 916.48 300.373333 918.186667 308.906667 919.893333 319.146667 919.893333 339.626667 923.306667 360.106667 923.306667 378.88 923.306667 387.413333 923.306667 395.946667 923.306667 404.48 923.306667 413.013333 921.6 419.84 921.6 426.666667 919.893333 438.613333 918.186667 445.44 916.48 453.973333 914.773333 467.626667 907.946667 474.453333 906.24 479.573333 902.826667 489.813333 897.706667 500.053333 892.586667 505.173333 889.173333 510.293333 884.053333 518.826667 885.76 523.946667 885.76 535.893333 885.76 541.013333 885.76 546.133333 885.76 549.546667 887.466667 552.96 889.173333 559.786667 890.88 564.906667 892.586667 576.853333 896 590.506667 901.12 602.453333 904.533333 614.4 907.946667 626.346667 909.653333 640 911.36 651.946667 913.066667 663.893333 914.773333 675.84 916.48 687.786667 916.48 699.733333 916.48 711.68 916.48 721.92 916.48 732.16 916.48 744.106667 914.773333 754.346667 913.066667 762.88 911.36 773.12 909.653333 781.653333 907.946667 785.066667 906.24 790.186667 904.533333 798.72 901.12 805.546667 897.706667 812.373333 894.293333 817.493333 890.88 822.613333 887.466667 826.026667 885.76 827.733333 882.346667 831.146667 877.226667 834.56 872.106667 836.266667 870.4 836.266667 868.693333 837.973333 865.28 839.68 861.866667 839.68 860.16 839.68 856.746667 839.68 853.333333 837.973333 849.92 836.266667 844.8 836.266667 841.386667 832.853333 837.973333 831.146667 834.56 827.733333 831.146667 824.32 827.733333 817.493333 820.906667 808.96 815.786667 800.426667 810.666667 791.893333 805.546667 773.12 795.306667 768 791.893333 766.293333 791.893333 764.586667 790.186667 774.826667 779.946667 779.946667 776.533333 783.36 771.413333 788.48 761.173333 795.306667 752.64 800.426667 744.106667 805.546667 735.573333 812.373333 718.506667 817.493333 703.146667 820.906667 694.613333 822.613333 691.2 824.32 687.786667 826.026667 686.08 827.733333 686.08 827.733333 686.08 832.853333 696.32 837.973333 706.56 841.386667 711.68 844.8 716.8 848.213333 723.626667 851.626667 728.746667 855.04 732.16 856.746667 735.573333 860.16 737.28 861.866667 738.986667 863.573333 738.986667 866.986667 742.4 870.4 742.4 870.4 742.4 872.106667 742.4 875.52 742.4 877.226667 740.693333 880.64 738.986667 882.346667 737.28 885.76 733.866667 887.466667 730.453333 890.88 728.746667 892.586667 725.333333 894.293333 721.92 896 716.8 897.706667 713.386667 899.413333 703.146667 902.826667 692.906667 902.826667 682.666667 904.533333 675.84 904.533333 670.72 904.533333 663.893333 904.533333 657.066667Z\"  ></path></symbol><symbol id=\"icon-ai-new\" viewBox=\"0 0 1000 1000\"><path d=\"M875 250v-125h-875v687.5c0 34.5313 27.9688 62.5 62.5 62.5h843.75c51.7813 0 93.75-41.9688 93.75-93.75v-531.25h-125zM812.5 812.5h-750v-625h750v625zM125 312.5h625v62.5h-625zM500 437.5h250v62.5h-250zM500 562.5h250v62.5h-250zM500 687.5h187.5v62.5h-187.5zM125 437.5h312.5v312.5h-312.5z\"  ></path></symbol><symbol id=\"icon-shiyongbangzhu1\" viewBox=\"0 0 1103 1024\"><path d=\"M262.564103 498.871795l472.615385 0c14.519795 0 26.25641-11.736615 26.25641-26.25641s-11.736615-26.25641-26.25641-26.25641L262.564103 446.358974c-14.519795 0-26.25641 11.736615-26.25641 26.25641S248.044308 498.871795 262.564103 498.871795z\"  ></path><path d=\"M840.205128 603.897436 262.564103 603.897436c-14.519795 0-26.25641 11.736615-26.25641 26.25641s11.736615 26.25641 26.25641 26.25641l577.641026 0c14.519795 0 26.25641-11.736615 26.25641-26.25641S854.724923 603.897436 840.205128 603.897436z\"  ></path><path d=\"M840.205128 761.435897 262.564103 761.435897c-14.519795 0-26.25641 11.736615-26.25641 26.25641s11.736615 26.25641 26.25641 26.25641l577.641026 0c14.519795 0 26.25641-11.736615 26.25641-26.25641S854.724923 761.435897 840.205128 761.435897z\"  ></path><path d=\"M997.74359 346.059487c-14.519795 0-26.25641 11.762872-26.25641 26.25641L971.487179 840.205128c0 72.362667-58.893128 131.282051-131.282051 131.282051L262.564103 971.487179c-72.388923 0-131.282051-58.919385-131.282051-131.282051L131.282051 293.546667c0-72.388923 58.893128-131.282051 131.282051-131.282051l315.076923 0c14.519795 0 26.25641-11.762872 26.25641-26.25641s-11.736615-26.25641-26.25641-26.25641L262.564103 109.751795c-101.323487 0-183.794872 82.445128-183.794872 183.794872L78.769231 840.205128c0 101.323487 82.471385 183.794872 183.794872 183.794872l577.641026 0c101.323487 0 183.794872-82.471385 183.794872-183.794872L1024 372.315897C1024 357.822359 1012.263385 346.059487 997.74359 346.059487z\"  ></path><path d=\"M723.180308 174.73641c14.414769-1.732923 24.654769-14.808615 22.921846-29.223385-4.516103-37.100308 21.398974-74.909538 47.576615-83.915487 42.771692-14.782359 81.657436-11.526564 118.784 9.87241 17.985641 10.371282 29.617231 28.960821 31.980308 50.989949 2.468103 22.974359-5.697641 45.397333-21.687795 59.943385-2.888205 2.441846-15.044923 9.846154-24.838564 15.780103-10.765128 6.537846-23.079385 14.020923-34.789744 21.714051-37.888 24.864821-50.070974 38.281846-50.070974 55.190974l0.026256 0c-0.183795 4.962462-0.420103 14.729846-0.551385 24.786051-0.131282 7.850667 0 3.387077 0.052513 1.076513-1.155282 13.285744 7.378051 25.547487 20.768821 28.01559 1.627897 0.288821 3.203282 0.446359 4.804923 0.446359 12.419282 0 24.576-8.84841 26.886564-21.477744 0.551385-3.098256 0.551385-3.098256 0-7.246769 0.105026-6.642872 0.183795-13.128205 0.262564-17.434256 3.518359-3.177026 11.106462-9.242256 26.676513-19.456 11.185231-7.351795 22.948103-14.493538 33.240615-20.742564 17.670564-10.712615 27.122872-16.541538 32.768-21.687795 28.514462-25.862564 42.981744-64.932103 38.754462-104.500513-4.174769-38.912-25.311179-72.04759-57.974154-90.899692-50.359795-29.013333-104.894359-33.765744-162.15959-14.020923-52.696615 18.143179-89.74441 80.896-82.602667 139.867897C695.689846 166.229333 708.660513 176.548103 723.180308 174.73641z\"  ></path><path d=\"M837.737026 377.120821c-20.269949 0.393846-35.682462 16.909128-35.026051 37.494154 0.630154 19.298462 16.699077 34.15959 36.522667 33.792 19.954872-0.341333 34.868513-15.465026 34.921026-35.288615C874.180923 394.213744 859.477333 376.726974 837.737026 377.120821z\"  ></path></symbol><symbol id=\"icon-tianjia\" viewBox=\"0 0 1024 1024\"><path d=\"M511.829333 975.725714C242.517333 975.725714 24.210286 757.369905 24.210286 488.106667 24.210286 218.794667 242.517333 0.487619 511.829333 0.487619 781.141333 0.487619 999.448381 218.794667 999.448381 488.106667 999.448381 757.369905 781.141333 975.725714 511.829333 975.725714ZM509.098667 91.428571C290.304 91.428571 120.56381 268.824381 120.56381 487.619048 120.56381 706.413714 290.304 877.714286 509.098667 877.714286 727.942095 877.714286 905.337905 706.413714 905.337905 487.619048 905.337905 268.824381 727.942095 91.428571 509.098667 91.428571ZM707.267048 536.380952C707.267048 536.380952 560.932571 536.380952 560.932571 536.380952 560.932571 536.380952 560.932571 682.715429 560.932571 682.715429 560.932571 709.632 539.136 731.428571 512.219429 731.428571 512.219429 731.428571 512.121905 731.428571 512.121905 731.428571 485.205333 731.428571 463.408762 709.632 463.408762 682.715429 463.408762 682.715429 463.408762 536.380952 463.408762 536.380952 463.408762 536.380952 317.074286 536.380952 317.074286 536.380952 290.157714 536.380952 268.361143 514.584381 268.361143 487.66781 268.361143 487.66781 268.361143 487.570286 268.361143 487.570286 268.361143 460.653714 290.157714 438.857143 317.074286 438.857143 317.074286 438.857143 463.408762 438.857143 463.408762 438.857143 463.408762 438.857143 463.408762 292.522667 463.408762 292.522667 463.408762 265.606095 485.205333 243.809524 512.121905 243.809524 512.121905 243.809524 512.219429 243.809524 512.219429 243.809524 539.136 243.809524 560.932571 265.606095 560.932571 292.522667 560.932571 292.522667 560.932571 438.857143 560.932571 438.857143 560.932571 438.857143 707.267048 438.857143 707.267048 438.857143 734.183619 438.857143 755.98019 460.653714 755.98019 487.570286 755.98019 487.570286 755.98019 487.66781 755.98019 487.66781 755.98019 514.584381 734.183619 536.380952 707.267048 536.380952Z\"  ></path></symbol><symbol id=\"icon-home\" viewBox=\"0 0 1024 1024\"><path d=\"M230.4 992c-64 0-115.2-51.2-115.2-115.2L115.2 544 76.8 582.4C70.4 588.8 57.6 595.2 44.8 595.2c-12.8 0-25.6-6.4-32-12.8C6.4 569.6 0 556.8 0 544 0 537.6 6.4 524.8 12.8 512l467.2-467.2C486.4 38.4 499.2 32 512 32s25.6 6.4 32 12.8L1011.2 512C1017.6 524.8 1024 537.6 1024 544c0 12.8-6.4 25.6-12.8 32-6.4 6.4-19.2 12.8-32 12.8s-25.6-6.4-32-12.8L512 147.2 211.2 448l0 422.4c0 12.8 12.8 25.6 25.6 25.6l115.2 0 0-185.6c0-25.6 19.2-44.8 44.8-44.8l230.4 0c25.6 0 44.8 19.2 44.8 44.8s-19.2 44.8-44.8 44.8L441.6 755.2l0 185.6c0 25.6-19.2 44.8-44.8 44.8L230.4 985.6zM627.2 992c-25.6 0-44.8-19.2-44.8-44.8 0-25.6 19.2-44.8 44.8-44.8l160 0c12.8 0 25.6-12.8 25.6-25.6l0-256c0-25.6 19.2-44.8 44.8-44.8 25.6 0 44.8 19.2 44.8 44.8l0 256c0 64-51.2 115.2-115.2 115.2L627.2 992z\"  ></path></symbol><symbol id=\"icon-other\" viewBox=\"0 0 1024 1024\"><path d=\"M361.577296 106.421505h-122.794044c-67.843709 0-133.026881 44.717498-133.026881 112.561207v122.794044c0 67.843709 65.183172 133.026881 133.026881 133.026881h122.794044c124.124313 0 112.561207-3.78615 112.561207-133.026881v-122.794044c-0.102328-67.843709-44.819826-112.561207-112.561207-112.561207m71.629859 221.745578c0 100.486459 11.256121 105.705206-85.239532 105.705206h-95.47237C199.591486 433.872289 146.687719 380.866194 146.687719 328.167083v-95.472369c0-52.699111 53.006096-85.239532 105.705206-85.239533h95.472369c52.801439 0 85.239532 32.540422 85.239533 85.239533v95.472369h0.102328zM361.577296 556.666334h-122.794044c-67.843709 0-133.026881 44.717498-133.026881 112.561207v122.794044c0 67.843709 65.183172 133.026881 133.026881 133.026881h122.794044c67.843709 0 112.561207-65.183172 112.561207-133.026881v-122.794044c-0.102328-118.905566 6.344359-112.561207-112.561207-112.561207m71.629859 221.745578c0 52.699111-32.540422 105.705206-85.239532 105.705206h-95.47237c-52.801439 0-105.705206-53.006096-105.705206-105.705206v-95.47237c0-52.699111 53.006096-85.239532 105.705206-85.239532H347.967623c92.504847 0 85.239532-7.265314 85.239532 85.239532V778.411912zM811.822125 106.421505h-122.794045c-67.843709 0-133.026881 44.717498-133.026881 112.561207v122.794044c0 124.124313 8.902568 133.026881 133.026881 133.026881h122.794045c67.843709 0 112.561207-65.183172 112.561207-133.026881v-122.794044c0-67.741381-44.819826-112.561207-112.561207-112.561207m71.629859 221.745578c0 52.699111-32.540422 105.705206-85.239533 105.705206h-95.472369c-96.495653 0-105.705206-9.209553-105.705206-105.705206v-95.472369c0-52.699111 53.006096-85.341861 105.705206-85.341861h95.472369c52.801439 0 85.239532 32.540422 85.239533 85.341861v95.472369zM811.822125 556.666334h-122.794045c-124.124313 0-133.026881-11.563106-133.026881 112.561207v122.794044c0 67.843709 65.183172 133.026881 133.026881 133.026881h122.794045c67.843709 0 112.561207-65.183172 112.561207-133.026881v-122.794044c0-67.741381-44.819826-112.561207-112.561207-112.561207m71.629859 221.745578c0 52.699111-32.540422 105.705206-85.239533 105.705206h-95.472369c-52.801439 0-105.705206-53.006096-105.705206-105.705206v-95.47237c0-96.495653 9.209553-85.239532 105.705206-85.239532h95.472369c52.801439 0 85.239532 32.540422 85.239533 85.239532V778.411912z\" fill=\"\" ></path></symbol><symbol id=\"icon-goods\" viewBox=\"0 0 1024 1024\"><path d=\"M893.653 33.69h-761.918c-54.133 0-98.129 43.995-98.129 98.129v762.053c0 54.133 43.995 98.128 98.129 98.128h761.985c54.133 0 98.128-43.995 98.128-98.128v-762.12c-0.066-54.134-44.063-98.062-98.196-98.062zM806.877 305.978l-2.026 1.082-0.271 2.297c-20.885 144.152-146.382 252.892-291.886 252.892-145.503 0-271.003-108.739-291.885-252.892l-0.338-2.297-2.028-1.082c-14.463-8.583-23.113-23.113-23.113-39.063 0-25.275 20.545-45.821 45.889-45.821 25.275 0 45.821 20.545 45.821 45.821 0 13.314-6.015 25.748-17.031 34.871l-2.163 1.689 0.473 2.704c19.26 120.903 122.053 208.626 244.376 208.626 122.324 0 225.115-87.788 244.376-208.626l0.474-2.636-2.095-1.689c-11.083-9.191-17.031-21.559-17.031-34.872 0-25.275 20.545-45.821 45.821-45.821v0 0 0c25.342 0 45.889 20.544 45.889 45.821-0.068 15.884-8.719 30.414-23.249 38.996z\"  ></path></symbol><symbol id=\"icon-youqinglianjie\" viewBox=\"0 0 1024 1024\"><path d=\"M894.528 150.4a195.072 195.072 0 0 0-270.912-52.288L359.424 276.992a195.072 195.072 0 0 0-52.16 270.912c56.768 83.904 167.04 108.288 254.208 60.736l-0.384-0.832c1.92-0.896 3.904-1.216 5.76-2.432a34.496 34.496 0 1 0-35.52-59.2H531.2l-0.448-0.768c-57.344 34.56-128.64 24.128-166.656-32.064a127.552 127.552 0 0 1 34.112-177.152l258.816-175.168a127.552 127.552 0 0 1 177.152 34.112c39.488 58.368 26.816 127.488-31.552 166.976l-39.488 27.52a35.392 35.392 0 1 0 39.68 58.624c0.32-0.192 0.448-0.576 0.768-0.768l38.72-26.176a195.072 195.072 0 0 0 52.224-270.912z\" fill=\"\" ></path><path d=\"M453.888 411.328l0.448 0.832c-1.92 0.896-3.968 1.28-5.76 2.56a34.496 34.496 0 1 0 36.992 58.24l0.064 0.128 0.512 0.64c56.448-35.968 128-27.264 167.424 28.032 40.96 57.344 27.584 136.96-29.76 177.92L369.28 861.184c-57.344 40.896-136.96 27.52-177.92-29.76-40.896-57.344-29.952-126.784 27.456-167.68l38.784-28.544a35.392 35.392 0 1 0-41.088-57.6c-0.32 0.192-0.448 0.576-0.768 0.768l-38.08 27.136a195.072 195.072 0 0 0 226.56 317.632l259.712-185.28a195.072 195.072 0 0 0 45.504-272.128c-58.816-82.432-169.6-104.064-255.616-54.4z\" fill=\"\" ></path></symbol><symbol id=\"icon-icon-test\" viewBox=\"0 0 1036 1024\"><path d=\"M867.567045 646.752791c25.824273-54.351491 40.448391-115.024949 40.448391-179.129335 0-230.413889-186.893336-417.308967-417.303742-417.308967S73.400985 237.209567 73.400985 467.623456c0 2.887554 0.181125 5.776849 0.181126 8.667886l149.877616-185.992935h87.039364l-128.931532 194.840204h41.893909v-49.476785l89.564668-139.583087v353.749698h-89.564668v-74.398916H87.486953c38.823489 145.361677 154.029563 259.482741 300.11574 296.68307-9.390645 23.657737-36.656953 80.71914-81.981791 90.830802-56.15926 12.640449 152.406402 3.068679 301.199009-94.444598 114.303931-33.04664 208.381054-113.581172 259.484483-218.675583l1.262651-3.070421z m-510.482205-51.103429c-4.334814-10.115146-6.499608-20.944342-6.499608-32.503264V369.572028c0-11.558922 2.166536-22.393344 6.499608-32.505006 4.33133-10.113404 10.291046-18.960673 17.694538-26.365907 7.403492-7.401751 16.252503-13.361466 26.365907-17.694538 10.111662-4.333072 20.944342-6.50135 32.503264-6.50135h73.674415c11.558922 0 22.391602 2.168278 32.506748 6.50135 9.927054 4.333072 18.598423 10.111662 26.003657 17.335771l-79.998123 116.830976v-20.764959c0-4.334814-1.443777-7.946868-4.333072-10.834421-2.887554-2.889295-6.50135-4.334814-10.834421-4.334814s-7.946868 1.445518-10.834422 4.334814c-2.887554 2.887554-4.33133 6.499608-4.33133 10.834421v65.004788l-92.63683 135.070631c-2.170019-3.429188-4.15543-7.0395-5.780331-10.834422z m233.122059-32.503264c0 11.558922-2.166536 22.388119-6.497867 32.503264-4.333072 10.113404-10.294529 18.962415-17.699763 26.365908-7.401751 7.401751-16.250762 13.363208-26.362424 17.696279-10.111662 4.329589-20.944342 6.499608-32.503264 6.499608h-73.674415c-11.557181 0-22.389861-2.170019-32.505006-6.499608-10.113404-4.333072-18.960673-10.294529-26.364166-17.696279-3.249804-3.246321-6.320224-7.042984-9.028394-10.834422l89.566409-130.556434v45.687089c0 4.33133 1.443777 7.945126 4.333072 10.830938 2.885812 2.891037 6.499608 4.336555 10.834422 4.336555s7.945126-1.445518 10.832679-4.336555c2.889295-2.885812 4.334814-6.496125 4.334814-10.830938v-89.92866l83.604952-122.067932a82.624438 82.624438 0 0 1 14.446476 22.752111c4.334814 10.111662 6.496125 20.946084 6.496125 32.505006v193.57407h0.18635z m67.852284-273.803823h185.710798l-56.81758 135.204733c19.991693 13.678435 34.722048 28.764074 44.191064 45.244726 9.470758 16.489359 14.204395 36.12751 14.204395 58.921419 0 35.075591-12.191119 63.392077-36.562907 84.963391-24.382238 21.569573-55.856224 32.353488-94.434149 32.353488-18.59494 0-37.707131-2.810924-57.345282-8.417097v-98.904806c15.42699 7.01686 29.458968 10.524419 42.087226 10.524419 12.274715 0 21.832552-3.592897 28.673512-10.787399 6.839218-7.182311 10.257956-17.442008 10.257956-30.773867 0-14.376812-6.050278-25.951409-18.150835-34.72379-12.100556-8.761931-28.326936-13.150734-48.661722-13.150734l25.778992-68.916395H658.059183v-101.538088z m172.263994 67.199189L643.375851 624.021579l3.568515 2.493955 186.947326-267.478374-3.568515-2.495696z\"  ></path></symbol><symbol id=\"icon-wechat\" viewBox=\"0 0 1024 1024\"><path d=\"M670.6 367.9c10.3 0 20.4 0.8 30.5 1.9-27.4-127.8-164-222.7-320-222.7C206.8 147.1 64 265.9 64 416.8c0 87.1 47.5 158.6 126.9 214.1l-31.7 95.4L270 670.7c39.7 7.9 71.5 15.9 111.1 15.9 9.9 0 19.8-0.5 29.6-1.3-6.2-21.2-9.8-43.4-9.8-66.4 0.1-138.6 119-251 269.7-251z m-170.5-86c23.9 0 39.7 15.7 39.7 39.6 0 23.8-15.8 39.7-39.7 39.7-23.8 0-47.6-15.9-47.6-39.7-0.1-23.9 23.8-39.6 47.6-39.6z m-222 79.3c-23.8 0-47.8-15.9-47.8-39.7 0-23.9 24-39.6 47.8-39.6 23.8 0 39.6 15.7 39.6 39.6 0 23.8-15.8 39.7-39.6 39.7z\" fill=\"\" ></path><path d=\"M960 615.1C960 488.3 833.1 385 690.6 385c-150.9 0-269.7 103.3-269.7 230.1 0 127 118.8 230.1 269.7 230.1 31.6 0 63.5-8 95.2-15.9l87 47.6-23.8-79.2c63.6-47.8 111-111.1 111-182.6z m-356.8-39.7c-15.8 0-31.7-15.7-31.7-31.7 0-15.8 15.9-31.7 31.7-31.7 24 0 39.7 15.9 39.7 31.7 0 16-15.7 31.7-39.7 31.7z m174.4 0c-15.7 0-31.5-15.7-31.5-31.7 0-15.8 15.8-31.7 31.5-31.7 23.8 0 39.7 15.9 39.7 31.7 0 16-15.9 31.7-39.7 31.7z\" fill=\"\" ></path></symbol><symbol id=\"icon-weixin\" viewBox=\"0 0 1024 1024\"><path d=\"M570.625 510.794c-10.16 0-20.321 9.435-20.321 21.046 0 9.435 10.16 18.87 20.321 18.87 15.24 0 26.126-9.436 26.126-18.87 0-11.611-10.886-21.046-26.126-21.046zM503.856 412.818c15.966 0 26.126-10.16 26.126-25.4 0-15.967-10.16-25.402-26.126-25.402-15.24 0-29.755 9.435-29.755 25.401 0 15.241 14.515 25.401 29.755 25.401z\"  ></path><path d=\"M511.84 65.717c-246.01 0-445.44 199.43-445.44 445.44s199.43 445.44 445.44 445.44 445.44-199.43 445.44-445.44-199.43-445.44-445.44-445.44zM427.652 624.01c-26.852 0-46.447-4.354-71.849-11.612l-73.3 37.014 21.046-62.414c-51.527-36.288-82.009-82.01-82.009-137.892 0-98.701 92.896-174.178 206.112-174.178 100.152 0 189.42 59.51 206.838 143.698-7.257-1.451-13.79-2.177-19.595-2.177-98.702 0-174.905 74.025-174.905 163.292 0 15.24 2.177 29.029 5.806 43.544-5.806 0.725-12.338 0.725-18.144 0.725z m302.636 71.123l14.515 52.254-55.156-31.208c-21.047 4.355-41.368 10.887-62.414 10.887-97.25 0-174.179-66.77-174.179-149.503s76.93-149.503 174.179-149.503c92.169 0 174.904 66.769 174.904 149.503 0 46.447-31.207 87.815-71.849 117.57z\"  ></path><path d=\"M360.16 362.017c-15.241 0-31.208 9.435-31.208 25.401 0 15.24 15.966 25.401 31.207 25.401 14.515 0 26.127-10.16 26.127-25.4 0-15.968-11.613-25.402-26.127-25.402zM684.567 510.794c-10.887 0-20.322 9.435-20.322 21.046 0 9.435 9.435 18.87 20.322 18.87 14.515 0 25.4-9.436 25.4-18.87 0-11.611-10.885-21.046-25.4-21.046z\"  ></path></symbol><symbol id=\"icon-xiazai\" viewBox=\"0 0 1024 1024\"><path d=\"M752 720H640a32 32 0 0 1 0-64h112c79.4 0 144-64.6 144-144a144 144 0 0 0-132.45-143.54 32 32 0 0 1-29.24-28C720.6 228.46 625 144 512 144s-208.6 84.46-222.31 196.45a32 32 0 0 1-29.24 28A144 144 0 0 0 128 512c0 79.4 64.6 144 144 144h112a32 32 0 0 1 0 64H272c-114.69 0-208-93.31-208-208a208.08 208.08 0 0 1 166.23-203.79C258 176.5 375 80 512 80s254 96.5 281.77 228.21A208.08 208.08 0 0 1 960 512c0 114.69-93.31 208-208 208z\"  ></path><path d=\"M663 806.63l-128 128a32.86 32.86 0 0 1-45.95 0l-128-128a32 32 0 1 1 45.25-45.25L480 835.1V496.35a32 32 0 1 1 64 0V835.1l73.72-73.72A32 32 0 1 1 663 806.63z\"  ></path><path d=\"M752 720H640a32 32 0 0 1 0-64h112c79.4 0 144-64.6 144-144a144 144 0 0 0-132.45-143.54 32 32 0 0 1-29.24-28C720.6 228.46 625 144 512 144s-208.6 84.46-222.31 196.45a32 32 0 0 1-29.24 28A144 144 0 0 0 128 512c0 79.4 64.6 144 144 144h112a32 32 0 0 1 0 64H272c-114.69 0-208-93.31-208-208a208.08 208.08 0 0 1 166.23-203.79C258 176.5 375 80 512 80s254 96.5 281.77 228.21A208.08 208.08 0 0 1 960 512c0 114.69-93.31 208-208 208z\"  ></path><path d=\"M663 806.63l-128 128a32.86 32.86 0 0 1-45.95 0l-128-128a32 32 0 1 1 45.25-45.25L480 835.1V496.35a32 32 0 1 1 64 0V835.1l73.72-73.72A32 32 0 1 1 663 806.63z\"  ></path></symbol><symbol id=\"icon-zhuzhuangtu\" viewBox=\"0 0 1024 1024\"><path d=\"M320 352H64v480h256V352z m-64 416H128V416h128v352zM640 64H384v768h256V64z m-64 704H448V128h128v640zM64 896h896v64H64z m640-64h256V224H704v608z m64-544h128v480H768V288z\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-font\" viewBox=\"0 0 1024 1024\"><path d=\"M249.6 544h179.2l48 150.4H544L374.4 201.6H307.2L140.8 694.4h64L249.6 544zM288 419.2c16-54.4 32-108.8 48-166.4h3.2c16 57.6 32 112 48 166.4l22.4 73.6H265.6l22.4-73.6zM601.6 598.4c0 67.2 44.8 102.4 105.6 102.4 44.8 0 86.4-22.4 121.6-51.2h3.2l6.4 44.8h51.2v-224c0-89.6-38.4-150.4-124.8-150.4-57.6 0-108.8 25.6-144 48l25.6 41.6c28.8-19.2 67.2-38.4 108.8-38.4 60.8 0 73.6 44.8 73.6 92.8-160 16-227.2 57.6-227.2 134.4z m220.8-96v102.4c-35.2 32-64 48-99.2 48s-64-16-64-57.6c0-48 41.6-76.8 163.2-92.8zM140.8 758.4h742.4v64H140.8z\" fill=\"#707070\" ></path></symbol><symbol id=\"icon-wenzhang2\" viewBox=\"0 0 1024 1024\"><path d=\"M662.528 205.312h-410.624c-15.36 0-28.16 12.8-28.16 28.16s12.8 28.16 28.16 28.16h410.624c15.36 0 28.16-12.8 28.16-28.16s-12.8-28.16-28.16-28.16zM555.008 478.72h-302.592c-15.36 0-28.16 12.8-28.16 28.16s12.8 28.16 28.16 28.16h302.592c15.36 0 28.16-12.8 28.16-28.16s-12.8-28.16-28.16-28.16zM408.576 751.616h-156.16c-15.36 0-28.16 12.8-28.16 28.16s12.8 28.16 28.16 28.16h156.16c15.36 0 28.16-12.8 28.16-28.16-0.512-15.36-12.8-28.16-28.16-28.16z\"  ></path><path d=\"M923.648 136.704c-43.008-5.632-76.8-8.704-93.696-9.728v-35.328c0-33.792-27.648-61.44-61.44-61.44h-631.296c-33.792 0-61.44 27.648-61.44 61.44v837.12c0 33.792 27.648 61.44 61.44 61.44h609.792l69.632 10.24s45.568 1.536 62.464-41.984 102.912-748.032 102.912-748.032 4.608-65.536-58.368-73.728z m-151.552 782.336c0 8.192-6.656 14.336-14.336 14.336h-609.28c-8.192 0-14.336-6.656-14.336-14.336v-819.2c0-8.192 6.656-14.336 14.336-14.336h609.28c8.192 0 14.336 6.656 14.336 14.336v819.2z m148.992-679.424l-91.136 666.112v-711.168c34.816 2.048 89.088 6.144 92.672 12.8 3.584 6.656-1.536 32.256-1.536 32.256z\"  ></path></symbol><symbol id=\"icon-web-icon-\" viewBox=\"0 0 1024 1024\"><path d=\"M257.216 600.832l253.76 279.168 253.76-279.168c21.856-24.064 13.312-43.52-19.04-43.52h-117.408V234.752c0-32.544-26.24-58.752-58.624-58.752h-117.44A58.56 58.56 0 0 0 393.6 234.752v322.592H276.288c-32.288 0-40.896 19.456-19.072 43.488z\"  ></path></symbol><symbol id=\"icon-webpage\" viewBox=\"0 0 1024 1024\"><path d=\"M919.2 170.2c-26-26-44-44-56.2-56.2 0 0 0 0 0 0 0 0 0 0 0 0-0.2-0.2-0.4-0.4-0.8-0.8l-19.2-19.2c-0.2-0.2-0.6-0.6-0.8-0.8l0 0c0 0 0 0 0 0C830 81 812 63 786 37 767.6 18.6 753.2 6.2 717 2l0 251 251.6 0C962.4 204.6 942.2 193.2 919.2 170.2z\"  ></path><path d=\"M863 114C863 114 863 114 863 114 863 114 863 114 863 114 863 114 863 114 863 114z\"  ></path><path d=\"M710.8 494.6c-1.8 0.6-13.8 6.2-13.8 8.2 0 1.8 1.8 12.6 3.8 20 1.8 7.6-4.4 33.2-7.6 34.6-3.2 1.2-11.4 13.8-13.8 13.8-1.2 0-2.6-2.2-3.8-4.6 2.6-7.8 4.2-15 2.2-20.8-6.8-20.4-25.8-31.2-27-35.2-1.4-4-19-9.4-23 0-4 9.4-4 14.8-19 14.8-14.8 0 8.2-17.6 14.8-36.4 6.8-18.8 12.2-5.6 8.2-15-4-9.4 5.4-10.8 8.2-16.2 2.8-5.4 10.8 1.4 14.8 0 4-1.4 14.8-4 14.8-14.8 0-10.6 2.8-5.6 8.2-13.8 1.2-1.8 4.4-2.2 8.6-1.6-35.6-28.8-80.8-46.2-130-46.2-19.2 0-37.8 2.6-55.4 7.6 0.6 0.4 1 0.6 1.6 1 21 12.2 41.4-2.6 21 12.2-20.4 14.8-25.8 14.8-21 20.4 4.8 5.4 5.8 4 10 8.2 4.2 4 7 8.2 9.6 14.8 2.6 6.8-32 31.2 9.8 9.4 41.6-21.6 43-20.4 49.8-23 6.8-2.8 16.2 31.8 16.2 31.8l-19 57.6-33.4 0c0 0-5.8-27-7.2 0-1.4 27-2.8 27-1.4 40.6 1.4 13.6-1.4 5-21.6 26.2-20.4 21.2-33.8 24-38 24-4 0-19-5.4-13.6 13.6 5.4 19-17.6 29.8 5.4 31.2 23 1.4 40.6-10.8 40.6-10.8s14.8-2.4 6.8 11c-8.2 13.4-12.2 4-21.6 18.8-9.4 14.8-24.4 35.4-44.6 18.4-20.4-17-25.8-23.8-29.8-30.6-1-1.8-2.6-4.2-4.6-6.8l0 0c0 0-0.2-0.2-0.2-0.2-0.6-0.6-1.2-1.4-1.8-2-3.6-4.4-11.2-13.6-11.2-13.6s7.4-7.8 6.6-10.6c-0.8-2.8-7.2-17-6.6-19.2 0.8-2.2 3.4-0.8 0-7-3.4-6.4-7.2-17 0-25.4 7.2-8.4 1.6-15-4-6.4-5.8 8.6-7.8 10.4-9.4 15.8-1.4 5.4-0.8 7.6-4.2 9.6-3.6 2.2-8.6 1.4-7 5.6 1.4 4.2 15.6-0.8 5 22.6-10.6 23.4-8.6 26.2-10.6 29.2-2 2.8-7.6-5.2-3.4 6.6l0 0c-0.8 2.6-1.6 5.6-2.2 8.8 31.8 73 104.8 124.2 189.4 124.2 114 0 206.6-92.6 206.6-206.6 0-24.6-4.2-48-12.2-69.8-7.4-8.8-17-15.2-18.8-17C730.4 499.6 712.8 494 710.8 494.6z\"  ></path><path d=\"M737.2 317.8 652 317.8l0-85.2L652 0 162.2 0C138.8 0 119.6 19 119.6 42.6l0 936.6c0 23.6 19 42.6 42.6 42.6l766.4 0c23.6 0 42.6-19 42.6-42.6L971.2 317.8 737.2 317.8zM556.4 816.6c-125.8 0-228.4-102.4-228.4-228.4 0-126 102.4-228.4 228.4-228.4 126 0 228.4 102.4 228.4 228.4C784.8 714.2 682.4 816.6 556.4 816.6z\"  ></path></symbol><symbol id=\"icon-icon-test1\" viewBox=\"0 0 1134 1024\"><path d=\"M555.346197 538.811876c-12.394106-25.969236-31.104695-45.489289-56.171576-58.599972-18.51154-9.766662-37.739656-14.649993-57.710887-14.649993-32.644006 0-59.780994 10.270919-81.517125 30.852567-24.602434 23.156012-36.93019 55.030363-36.93019 95.702671 0 41.694092 13.46897 74.948514 40.433449 99.895965 22.731375 21.072635 50.266461 31.635492 82.618529 31.635492 29.299986 0 55.348841-9.434914 78.239455-28.371091 29.870592-24.934182 44.812523-56.914692 44.812523-95.981339 0-21.377843-4.617933-41.521583-13.774178-60.4843z m-43.64477 131.571267c-19.214846 14.172276-41.057136 21.311493-65.63303 21.311493-27.123719 0-50.226651-7.961953-69.308798-23.859318-22.598676-18.657509-33.891378-43.7642-33.891378-75.107753 0-30.613708 10.310729-54.579185 30.958726-72.015862 18.219602-15.459458 41.017326-23.182552 68.366633-23.182552 16.75991 0 32.882864 3.675768 48.408672 11.040574 21.046095 9.833012 36.731142 24.562624 47.10822 44.042868a94.21644 94.21644 0 0 1 11.558101 45.51583c0 29.419415-12.513536 53.424702-37.567146 72.25472z m-23.023313-23.47449c0 8.001762-6.303213 14.490754-14.079387 14.490753h-21.77594c-7.789444 0-14.105926-6.488991-14.105926-14.490753 0-8.068112 6.303213-14.570373 14.105926-14.570374h21.77594c7.789444 0 14.079386 6.488991 14.079387 14.570374z m338.316638-145.756813l13.508779-19.878342c19.042337-28.012803 20.090661-43.71112 17.635725-51.938471a16.056605 16.056605 0 0 0-7.988492-9.965711c-78.902951-21.762671-79.619526-77.854627-79.606257-80.229943-2.136457-33.825029 14.915391-66.389415 48.050385-91.124548 30.932186-23.102933 72.732437-37.368098 117.71747-40.194591 5.215079-0.318478 10.443428-0.490987 15.552347-0.490987 86.307567 0 147.083805 44.825793 151.26383 111.546957 4.126945 65.63303-56.370625 110.392473-157.885521 116.854925-3.994246 0.557337-8.678528 1.831249-10.576127 2.826493l-0.106159 0.252128-1.074864 1.181023c-35.682818 38.933948-81.583475 53.464512-83.534153 54.061659l-22.956963 7.099408z m124.869957-276.969793c-4.750632 0-9.633963 0.159239-14.490754 0.464447-41.150025 2.574365-80.76074 16.016795-108.707193 36.877111-28.424171 21.218604-43.087434 48.620991-41.295995 77.138051 0.03981 2.362046 1.287182 46.537613 67.796027 64.651055l0.703306 0.225589c1.366802 0.504257 13.37608 5.334508 18.179792 20.329519 3.914627 12.195057 1.69855 27.110449-6.568611 44.520585 15.15425-7.643475 35.470499-20.22336 52.880635-38.960488 4.047326-6.608421 14.517294-9.302215 22.970234-10.390348 72.135291-4.551583 147.136885-32.922674 142.983399-99.059961-3.569609-57.326059-57.617997-95.79556-134.45084-95.79556z m-46.882631 101.753755l2.707064 14.862311c1.64547 8.997006 2.149727 15.472728 1.499501 19.427165-1.446421 8.45294-6.74112 15.300219-15.897366 20.634727a58.188604 58.188604 0 0 1-19.506784 6.953439c-13.044332 2.388586-24.058367 1.194293-33.028833-3.569609a24.137986 24.137986 0 0 1-9.846282-9.182786c-2.229347-3.715578-4.020786-9.421644-5.414127-17.012038a453.048376 453.048376 0 0 1-2.362046-14.689803 500.700662 500.700662 0 0 0-1.565851-9.527803c-0.623686-3.38383-1.300452-5.639716-2.017028-6.87382a8.625449 8.625449 0 0 0-4.007516-3.052081c-3.012272-1.247373-4.697552-2.932653-5.09565-5.10892a5.573367 5.573367 0 0 1 1.300452-4.578123 11.345783 11.345783 0 0 1 4.909871-3.503259 86.957793 86.957793 0 0 1 15.605427-4.219835 79.818575 79.818575 0 0 1 16.985499-1.56585c4.538313 0.212319 7.099408 2.003758 7.723094 5.453937a5.10892 5.10892 0 0 1-1.127943 4.445424 28.66303 28.66303 0 0 1-3.33075 2.561094 4.816981 4.816981 0 0 0-2.070108 3.596149c-0.199049 1.579121 0.02654 4.087136 0.663496 7.550585 0.663496 3.556339 1.910869 11.239623 3.702308 23.023313 1.074864 7.033058 3.927897 12.022548 8.598909 14.941931 3.795197 2.388586 8.240621 3.131701 13.376081 2.202807 3.237861-0.583877 6.090894-1.73836 8.506019-3.3971a14.437674 14.437674 0 0 0 6.422642-11.75715 41.906411 41.906411 0 0 0-0.836005-8.068112l-2.468206-13.40262c-2.096648-10.270919-3.489989-16.229113-4.193295-17.901124-0.716576-1.72509-2.269157-2.879573-4.684282-3.476719a15.485998 15.485998 0 0 1-4.803711-1.764899 4.060596 4.060596 0 0 1-1.68528-2.640715c-0.451177-2.441665 0.676766-4.498503 3.3971-6.143973 2.693794-1.64547 7.258647-3.052082 13.668018-4.233105 6.289943-1.127943 10.947685-1.419882 13.986497-0.849275 3.025542 0.583877 4.750632 2.083378 5.215079 4.485233 0.199049 1.167753 0.119429 2.070108-0.278668 2.733604-0.358288 0.676766-1.499501 1.75163-3.34402 3.33075-1.937408 1.61893-2.932653 3.118431-2.972463 4.617933-0.06635 1.380072 0.703306 6.64823 2.269157 15.698317z m28.424171-10.483238c1.72509-0.172509 2.707064 0.942164 2.972462 3.37056l0.07962 0.782925 0.079619 1.181023c0.172509 1.61893 0.756386 2.375316 1.71182 2.269157 0.490987-0.05308 1.234103-0.796195 2.176267-2.202807 1.433151-2.017028 3.31748-3.742118 5.666256-5.09565 2.362046-1.366802 4.816981-2.176267 7.417886-2.468205 5.0293-0.530797 8.691798 0.942164 11.067114 4.392344 0.875815 1.287182 1.579121 1.910869 2.056838 1.831249 0.318478-0.01327 1.021784-0.703306 2.149727-2.030298 3.516529-4.246375 7.723094-6.634961 12.712585-7.152488 3.861547-0.411368 7.165757 0.331748 9.846281 2.189537 2.826493 1.950678 4.471963 5.148729 4.949681 9.607423 0.106159 0.955434 0.265398 2.600905 0.424637 4.883331 0.02654 0.796195 0.238859 3.144971 0.663496 7.112678 0.265398 2.521285 0.437907 4.272915 0.504257 5.307968 0.05308 0.650226 0.07962 1.101403 0.11943 1.393342a7.643475 7.643475 0 0 0 2.348776 4.843521c0.809465 0.782925 1.313722 1.313722 1.499501 1.592391 0.212319 0.265398 0.318478 0.663496 0.371558 1.127943 0.398098 3.848277-3.914627 6.263403-12.977983 7.205567-3.994246 0.437907-7.271917 0.278668-9.833012-0.411367-2.534555-0.716576-3.901357-1.817979-4.073866-3.38383a2.839763 2.839763 0 0 1 0.10616-1.406612c0.132699-0.345018 0.610416-1.260643 1.446421-2.707064 0.822735-1.313722 0.836005-5.493747 0.10616-12.473726-0.437907-4.047326-1.021784-6.847279-1.75163-8.37332-0.875815-1.817979-2.308966-2.640714-4.286185-2.428395a3.980976 3.980976 0 0 0-2.521285 1.220832 4.259645 4.259645 0 0 0-1.287182 2.468206c-0.159239 1.114673 0.01327 4.007516 0.464447 8.705068 0.636956 5.05584 1.127943 8.094652 1.459692 9.169515 0.345018 1.061594 1.260643 2.468205 2.773413 4.259645a3.224591 3.224591 0 0 1 0.623686 1.67201c0.371558 3.596149-4.126945 5.865305-13.482239 6.860549-5.613177 0.570607-9.448184 0.570607-11.491752-0.02654a3.635958 3.635958 0 0 1-2.733604-3.30421 3.3971 3.3971 0 0 1 0.11943-1.61893c0.185779-0.305208 0.782925-1.088134 1.817979-2.282427a4.856791 4.856791 0 0 0 1.088133-1.910868 11.359052 11.359052 0 0 0 0.10616-3.091892 153.134889 153.134889 0 0 0-0.756386-10.04533c-0.610416-5.905115-2.454935-8.691798-5.427398-8.36005-2.269157 0.225589-3.476719 1.61893-3.622688 4.180025-0.119429 2.428396 0.07962 5.865305 0.530797 10.270919 0.358288 3.30421 0.650226 5.480477 0.889084 6.475721a10.217839 10.217839 0 0 0 1.446422 3.078622c0.862545 1.220833 1.353532 2.255887 1.419881 3.038812 0.199049 1.977218-1.021784 3.476719-3.662498 4.525043-2.919383 1.127943-6.143973 1.857789-9.700312 2.229347-4.657742 0.504257-8.081382 0.504257-10.323999 0-2.242617-0.504257-3.450179-1.565851-3.622688-3.158242a2.879573 2.879573 0 0 1 0.278668-1.60566c0.238859-0.437907 0.836005-1.154483 1.75163-2.176267a7.563855 7.563855 0 0 0 1.791439-5.361048 118.447316 118.447316 0 0 0-0.716576-11.624451 29.100937 29.100937 0 0 0-1.074863-5.944925 4.671012 4.671012 0 0 0-2.123188-2.521285 10.576127 10.576127 0 0 1-1.910868-1.393342 2.999002 2.999002 0 0 1-0.544067-1.459691c-0.212319-1.990488 1.220833-3.755388 4.233105-5.268159 7.311727-3.516529 12.858554-5.520287 16.653751-5.958194z m92.716938-1.074864a12.526805 12.526805 0 0 1 13.973227 11.412132 11.982739 11.982739 0 0 1-2.853033 9.328755 12.380836 12.380836 0 0 1-8.452939 4.458693 12.460456 12.460456 0 0 1-9.169516-2.574364 12.208327 12.208327 0 0 1-4.763902-8.678529 11.903119 11.903119 0 0 1 2.826494-9.474723 12.672775 12.672775 0 0 1 8.439669-4.471964z m32.829785-3.503259a12.606425 12.606425 0 0 1 9.182786 2.587635c2.799953 2.123187 4.365804 5.06911 4.763901 8.837767a12.049088 12.049088 0 0 1-2.826493 9.342025 12.380836 12.380836 0 0 1-8.46621 4.471963 12.566615 12.566615 0 0 1-9.169515-2.587635 12.248137 12.248137 0 0 1-4.777172-8.678528 11.929659 11.929659 0 0 1 2.853033-9.487994 12.686045 12.686045 0 0 1 8.43967-4.485233zM829.741625 540.245027c-12.407376-25.969236-31.104695-45.47602-56.171576-58.586702-18.51154-9.779932-37.739656-14.649993-57.710886-14.649992-32.644006 0-59.780994 10.270919-81.530396 30.852566-24.602434 23.156012-36.91692 55.030363-36.91692 95.702671 0 41.694092 13.46897 74.948514 40.43345 99.895966 22.731375 21.085905 50.266461 31.635492 82.618528 31.635492 29.313256 0 55.348841-9.434914 78.239455-28.357822 29.870592-24.947452 44.812523-56.914692 44.812523-95.994609 0-21.364573-4.617933-41.534853-13.774178-60.49757z m-43.64477 131.571268c-19.214846 14.185546-41.057136 21.324763-65.63303 21.324763-27.123719 0-50.213381-7.975223-69.308798-23.859318-22.598676-18.670779-33.904648-43.77747-33.904648-75.107754 0-30.626978 10.310729-54.592455 30.971996-72.029131 18.219602-15.459458 41.017326-23.182552 68.353363-23.182552 16.75991 0 32.896134 3.675768 48.408672 11.040574 21.046095 9.833012 36.744411 24.562624 47.12149 44.042868a94.21644 94.21644 0 0 1 11.544832 45.529099c0.01327 29.406145-12.486996 53.411432-37.553877 72.241451z m-33.851569-111.162129l5.918385 2.216076c0.517527 0.172509 0.862545 0.265398 1.048324 0.265399 0.411368 0 0.650226-0.424637 0.756385-1.287182l0.02654-0.278669-0.278668-6.356292v-0.490987c0-1.910869 0.291938-3.078622 0.836005-3.582879 0.583877-0.451177 1.963948-0.703306 4.180025-0.703306 1.884329 0 3.144971 0.159239 3.768658 0.424638 0.623686 0.291938 1.008514 0.875815 1.127943 1.831249 0.119429 0.822735 0.172509 1.64547 0.159239 2.508015l-0.252129 6.356292c0 1.035054 0.265398 1.552581 0.782926 1.552581a3.901357 3.901357 0 0 0 1.021784-0.265398l5.918384-2.216077a10.416888 10.416888 0 0 1 3.038812-0.729846c0.650226 0 1.154483 0.172509 1.512771 0.583877 0.358288 0.398098 0.769655 1.154483 1.194293 2.295696 0.729846 1.990488 1.114673 3.543069 1.181023 4.644472 0.06635 1.127943-1.194293 2.056838-3.795197 2.786684l-6.117434 1.738359c-0.836005 0.252129-1.300452 0.583877-1.300452 1.021784 0 0.199049 0.199049 0.557337 0.610416 1.074864l3.954437 4.96295c1.154483 1.512771 1.75163 2.640714 1.751629 3.3971 0 0.862545-1.008514 1.990488-3.038812 3.48999-1.7649 1.220833-2.999002 1.844519-3.662498 1.844519-0.849275 0-1.937408-0.902355-3.224591-2.813224l-3.489989-5.281428c-0.424637-0.597146-0.822735-0.915625-1.127943-0.915625-0.318478 0-0.690036 0.318478-1.114674 0.915625l-3.489989 5.281428c-1.273912 1.910869-2.335506 2.813223-3.224591 2.813224-0.690036 0-1.910869-0.623686-3.662498-1.844519-2.017028-1.433151-3.038812-2.587635-3.038812-3.48999 0-0.729846 0.610416-1.857789 1.80471-3.3971l3.901356-4.96295c0.384828-0.517527 0.610416-0.875815 0.610417-1.101403 0-0.411368-0.451177-0.756386-1.313722-0.995245l-6.051084-1.738359c-2.534555-0.729846-3.808467-1.61893-3.808468-2.693794 0-1.167753 0.464447-2.906113 1.366802-5.281429 0.636956-1.539311 1.459691-2.295696 2.521285-2.295696a10.483238 10.483238 0 0 1 2.999002 0.716576z m-20.555108 89.359648c0 9.169515-7.470966 16.627211-16.68029 16.627211H689.239701a16.693561 16.693561 0 0 1 0-33.347311h25.770187c9.209325 0 16.680291 7.457696 16.68029 16.7201z m-212.955693-78.398694a10.642477 10.642477 0 1 1-21.271684 0 10.642477 10.642477 0 0 1 21.271684 0z m168.607617-2.415125a10.615937 10.615937 0 1 1-21.258413 0 10.615937 10.615937 0 0 1 21.258413 0z m-295.98559-8.041572l5.918385 2.202807c0.530797 0.172509 0.875815 0.278668 1.048324 0.278668 0.411368 0 0.650226-0.437907 0.756386-1.300452l0.013269-0.265399-0.278668-6.356292v-0.504257c0-1.910869 0.291938-3.078622 0.849275-3.582879 0.583877-0.451177 1.963948-0.703306 4.166755-0.703306 1.897599 0 3.158241 0.172509 3.781928 0.424638 0.623686 0.291938 1.008514 0.875815 1.114673 1.844519 0.119429 0.822735 0.172509 1.64547 0.159239 2.494745l-0.252128 6.356292c0 1.021784 0.265398 1.552581 0.782925 1.552581a4.259645 4.259645 0 0 0 1.021784-0.278668l5.918385-2.202807a10.11168 10.11168 0 0 1 3.038812-0.743116c0.636956 0 1.141213 0.172509 1.512771 0.583877 0.358288 0.398098 0.769655 1.154483 1.194293 2.295696 0.729846 2.003758 1.114673 3.556339 1.181023 4.657742 0.06635 1.114673-1.194293 2.056838-3.808468 2.773414l-6.104163 1.73836c-0.849275 0.252129-1.300452 0.597146-1.300453 1.021784 0 0.199049 0.199049 0.557337 0.610417 1.074863l3.954436 4.962951c1.154483 1.526041 1.75163 2.640714 1.75163 3.410369 0 0.862545-1.008514 1.977218-3.038812 3.47672-1.7649 1.234103-2.985732 1.844519-3.662498 1.844519-0.849275 0-1.937408-0.902355-3.224591-2.813224l-3.489989-5.268158c-0.424637-0.610416-0.809465-0.915625-1.127944-0.915625-0.318478 0-0.676766 0.305208-1.101403 0.915625l-3.489989 5.268158c-1.260643 1.910869-2.335506 2.813223-3.224591 2.813224-0.690036 0-1.910869-0.610416-3.675768-1.844519-2.017028-1.433151-3.038812-2.574365-3.038812-3.47672 0-0.743116 0.597146-1.871059 1.791439-3.410369l3.901357-4.962951c0.384828-0.517527 0.610416-0.875815 0.610416-1.088133 0-0.411368-0.451177-0.769655-1.300452-1.008514l-6.051084-1.73836c-2.547825-0.716576-3.808467-1.61893-3.808467-2.693794 0-1.167753 0.464447-2.906113 1.366801-5.281429 0.623686-1.539311 1.459691-2.295696 2.521285-2.295696 0.716576 0.02654 1.73836 0.265398 3.012272 0.743116z m-248.426192-51.248436c-6.900359-6.223593 6.117434-51.195356 13.760908-53.968769 7.616935-2.760144 123.834904 8.306971 130.748533 1.393342 0 0 5.533557-37.368098 0-40.141511-5.520287-2.773414-170.916584-12.460456-189.613903 10.377078-18.684049 22.837534-27.362577 128.028199-18.365571 136.335169 8.997006 8.306971 162.848471-22.877344 164.241814 51.182086 1.380072 74.03289-109.516659 47.784986-121.287079 43.618231-11.77042-4.153485-33.214612-16.600671-40.141511-12.447186s1.300452 42.596447 9.607423 50.200111c11.85004 10.868065 119.469099 40.818277 157.527233 8.612179 44.985032-38.058134 63.748701-84.423238 40.513069-145.332176-23.235632-60.895668-140.077287-43.591691-146.990916-49.828554z\"  ></path></symbol><symbol id=\"icon-icon-test2\" viewBox=\"0 0 1024 1024\"><path d=\"M423.128 711.528v-53.8H313.704v-44.864l115.992-169.792h43.04v169.608h33.192v45.048h-33.192v53.8h-49.608z m0-98.84V521.32l-61.456 91.368h61.456zM616.992 443.08c25.888 0 46.144 9.24 60.728 27.72 17.384 21.88 26.08 58.176 26.08 108.88 0 50.576-8.752 86.928-26.256 109.056-14.472 18.232-34.656 27.36-60.544 27.36-26.024 0-46.992-10-62.92-30s-23.888-55.656-23.888-106.96c0-50.336 8.76-86.568 26.264-108.696 14.448-18.24 34.64-27.36 60.536-27.36z m0 42.496c-6.2 0-11.736 1.976-16.6 5.928-4.856 3.952-8.632 11.032-11.304 21.248-3.528 13.256-5.288 35.56-5.288 66.936 0 31.368 1.576 52.912 4.744 64.648s7.144 19.544 11.944 23.44 10.304 5.832 16.504 5.832a25.6 25.6 0 0 0 16.592-5.928c4.856-3.952 8.632-11.032 11.304-21.248 3.52-13.128 5.288-35.376 5.288-66.744 0-31.376-1.576-52.92-4.744-64.656-3.168-11.736-7.144-19.576-11.944-23.528a25.232 25.232 0 0 0-16.496-5.928zM736.256 640.584l49.608-6.016c1.576 12.648 5.832 22.312 12.768 29s15.32 10.032 25.168 10.032c10.576 0 19.488-4.016 26.72-12.04s10.848-18.84 10.848-32.464c0-12.888-3.464-23.104-10.392-30.64s-15.384-11.304-25.352-11.304c-6.568 0-14.408 1.272-23.528 3.832l5.656-41.768c13.856 0.368 24.44-2.64 31.736-9.024s10.944-14.864 10.944-25.44c0-9-2.68-16.168-8.032-21.52-5.352-5.344-12.464-8.024-21.336-8.024-8.752 0-16.224 3.04-22.432 9.12s-9.968 14.952-11.304 26.624l-47.232-8.024c3.28-16.168 8.232-29.088 14.856-38.752 6.624-9.664 15.864-17.264 27.72-22.8 11.856-5.528 25.144-8.304 39.848-8.304 25.168 0 45.352 8.024 60.544 24.072 12.52 13.136 18.784 27.968 18.784 44.504 0 23.464-12.832 42.192-38.48 56.168 15.32 3.28 27.56 10.64 36.752 22.072 9.176 11.432 13.768 25.224 13.768 41.4 0 23.464-8.568 43.472-25.712 60-17.152 16.528-38.488 24.808-64.016 24.808-24.192 0-44.256-6.96-60.176-20.88-15.928-13.928-25.168-32.128-27.728-54.632z\"  ></path><path d=\"M893.84 198.04H135.936v624.808h216.776v-46.952H183.904V245h661.984v103.808h47.952V198.04z\"  ></path></symbol><symbol id=\"icon-icon-test3\" viewBox=\"0 0 1024 1024\"><path d=\"M423.128 711.528v-53.8H313.704v-44.864l115.992-169.792h43.04v169.608h33.192v45.048h-33.192v53.8h-49.608z m0-98.84V521.32l-61.456 91.368h61.456zM616.992 443.08c25.888 0 46.144 9.24 60.728 27.72 17.384 21.88 26.08 58.176 26.08 108.88 0 50.576-8.752 86.928-26.256 109.056-14.472 18.232-34.656 27.36-60.544 27.36-26.024 0-46.992-10-62.92-30s-23.888-55.656-23.888-106.96c0-50.336 8.76-86.568 26.264-108.696 14.448-18.24 34.64-27.36 60.536-27.36z m0 42.496c-6.2 0-11.736 1.976-16.6 5.928-4.856 3.952-8.632 11.032-11.304 21.248-3.528 13.256-5.288 35.56-5.288 66.936 0 31.368 1.576 52.912 4.744 64.648s7.144 19.544 11.944 23.44 10.304 5.832 16.504 5.832a25.6 25.6 0 0 0 16.592-5.928c4.856-3.952 8.632-11.032 11.304-21.248 3.52-13.128 5.288-35.376 5.288-66.744 0-31.376-1.576-52.92-4.744-64.656-3.168-11.736-7.144-19.576-11.944-23.528a25.232 25.232 0 0 0-16.496-5.928zM838.568 711.528v-53.8H729.152v-44.864l115.992-169.792h43.04v169.608h33.184v45.048h-33.184v53.8h-49.616z m0-98.84V521.32l-61.464 91.368h61.464z\"  ></path><path d=\"M893.84 198.04H135.936v624.808h216.776v-46.952H183.904V245h661.984v103.808h47.952V198.04z\"  ></path></symbol><symbol id=\"icon-icon-test4\" viewBox=\"0 0 1024 1024\"><path d=\"M323.368 642.776l51.064-5.288c1.456 11.552 5.776 20.704 12.952 27.456 7.168 6.744 15.44 10.12 24.8 10.12 10.696 0 19.76-4.344 27.176-13.04 7.416-8.688 11.128-21.792 11.128-39.296 0-16.416-3.68-28.728-11.032-36.928-7.36-8.208-16.936-12.312-28.72-12.312-14.712 0-27.904 6.504-39.576 19.512l-41.584-6.024 26.264-139.152h135.504v47.968H394.672l-8.024 45.408c11.424-5.712 23.096-8.568 35.016-8.568 22.736 0 42 8.264 57.816 24.808 15.808 16.528 23.704 37.992 23.704 64.376 0 22.008-6.384 41.64-19.152 58.904-17.384 23.584-41.52 35.384-72.4 35.384-24.68 0-44.808-6.624-60.36-19.88-15.568-13.264-24.864-31.072-27.904-53.448zM616.992 443.08c25.888 0 46.144 9.24 60.728 27.72 17.384 21.88 26.08 58.176 26.08 108.88 0 50.576-8.752 86.928-26.256 109.056-14.472 18.232-34.656 27.36-60.544 27.36-26.024 0-46.992-10-62.92-30s-23.888-55.656-23.888-106.96c0-50.336 8.76-86.568 26.264-108.696 14.448-18.24 34.64-27.36 60.536-27.36z m0 42.496c-6.2 0-11.736 1.976-16.6 5.928-4.856 3.952-8.632 11.032-11.304 21.248-3.528 13.256-5.288 35.56-5.288 66.936 0 31.368 1.576 52.912 4.744 64.648s7.144 19.544 11.944 23.44 10.304 5.832 16.504 5.832a25.6 25.6 0 0 0 16.592-5.928c4.856-3.952 8.632-11.032 11.304-21.248 3.52-13.128 5.288-35.376 5.288-66.744 0-31.376-1.576-52.92-4.744-64.656-3.168-11.736-7.144-19.576-11.944-23.528a25.232 25.232 0 0 0-16.496-5.928zM824.712 443.08c25.896 0 46.144 9.24 60.736 27.72 17.384 21.88 26.08 58.176 26.08 108.88 0 50.576-8.76 86.928-26.264 109.056-14.472 18.232-34.648 27.36-60.544 27.36-26.016 0-46.992-10-62.912-30-15.928-20-23.888-55.656-23.888-106.96 0-50.336 8.752-86.568 26.256-108.696 14.456-18.24 34.64-27.36 60.536-27.36z m0 42.496c-6.2 0-11.736 1.976-16.592 5.928-4.864 3.952-8.632 11.032-11.304 21.248-3.528 13.256-5.288 35.56-5.288 66.936 0 31.368 1.576 52.912 4.744 64.648 3.16 11.736 7.144 19.544 11.944 23.44 4.8 3.888 10.296 5.832 16.504 5.832s11.736-1.976 16.592-5.928c4.864-3.952 8.632-11.032 11.312-21.248 3.52-13.128 5.288-35.376 5.288-66.744 0-31.376-1.584-52.92-4.744-64.656-3.168-11.736-7.152-19.576-11.944-23.528a25.272 25.272 0 0 0-16.512-5.928z\"  ></path><path d=\"M893.84 198.04H135.936v624.808h216.776v-46.952H183.904V245h661.984v103.808h47.952V198.04z\"  ></path></symbol><symbol id=\"icon-tab\" viewBox=\"0 0 1024 1024\"><path d=\"M758.216 745.72H249.184c-44.008 0-79.816-35.808-79.816-79.816V279.712c0-44.008 35.808-79.816 79.816-79.816h439.496v127.872c0 8.912 5.168 15.12 9.792 15.12h139.56v323.016c0 44.008-35.808 79.816-79.816 79.816zM249.184 230.288a49.472 49.472 0 0 0-49.416 49.424v386.192a49.48 49.48 0 0 0 49.416 49.424h509.032a49.48 49.48 0 0 0 49.424-49.424V373.28H698.472c-22.16 0-40.184-20.408-40.184-45.504V230.288H249.184z\"  ></path><path d=\"M834.232 278.352c0 6.44-4.304 11.656-9.608 11.656h-75.68c-5.304 0-9.608-5.216-9.608-11.656v-69.64c0-6.44 4.304-11.656 9.608-11.656h75.68c5.304 0 9.608 5.216 9.608 11.656v69.64z\"  ></path><path d=\"M316.528 617.808V464.88h-54.616v-31.136h146.272v31.136h-54.496v152.928h-37.16zM579.072 617.808H538.64l-16.072-41.816h-73.576l-15.192 41.816h-39.424l71.688-184.064h39.304l73.704 184.064z m-68.432-72.824l-25.36-68.304-24.856 68.304h50.216zM598.904 433.744h73.568c14.568 0 25.432 0.608 32.584 1.824s13.552 3.744 19.208 7.592c5.648 3.848 10.352 8.976 14.128 15.384 3.768 6.4 5.648 13.584 5.648 21.528 0 8.624-2.32 16.528-6.968 23.728A43.2 43.2 0 0 1 718.176 520c11.216 3.256 19.832 8.832 25.864 16.696 6.024 7.864 9.04 17.12 9.04 27.752a54.808 54.808 0 0 1-5.832 24.424c-3.896 7.904-9.208 14.224-15.944 18.952-6.744 4.736-15.048 7.64-24.92 8.728-6.2 0.672-21.144 1.096-44.832 1.256h-62.648V433.744z m37.168 30.632v42.56h24.352c14.488 0 23.488-0.2 27-0.624 6.36-0.76 11.36-2.952 15-6.592s5.464-8.432 5.464-14.376c0-5.688-1.568-10.32-4.704-13.872-3.144-3.552-7.808-5.712-14-6.464-3.688-0.416-14.272-0.632-31.768-0.632h-21.344z m0 73.2v49.208h34.4c13.392 0 21.888-0.376 25.496-1.128 5.52-1.008 10.024-3.456 13.496-7.344 3.48-3.896 5.208-9.112 5.208-15.632 0-5.52-1.336-10.208-4.016-14.064s-6.552-6.656-11.616-8.416-16.048-2.632-32.952-2.632h-30.016z\"  ></path></symbol><symbol id=\"icon-pinglun\" viewBox=\"0 0 1109 1024\"><path d=\"M301.738667 902.826667l11.605333-74.496a66.048 66.048 0 0 0-14.421333-54.101334 66.56 66.56 0 0 0-51.626667-22.698666H145.322667a60.074667 60.074667 0 0 1-60.16-59.733334V144.469333c0-32.938667 26.794667-59.733333 59.733333-59.733333h819.882667c32.938667 0 59.733333 26.794667 59.733333 59.733333v547.157334c0 33.024-26.88 59.818667-59.904 59.818666H673.792c-38.912 0-97.194667 17.237333-129.877333 38.4l-207.957334 134.912a41.557333 41.557333 0 0 1-21.76 8.192 11.093333 11.093333 0 0 1-8.96-3.669333c-4.096-4.778667-5.376-14.506667-3.498666-26.538667M963.669333 0H144.896C65.024 0 0 64.853333 0 144.469333v546.986667c0 79.616 64.938667 144.384 144.810667 144.384h67.669333c6.741333 0 12.629333 2.56 16.554667 7.082667a21.504 21.504 0 0 1 4.693333 17.408l-10.069333 70.656c-4.608 32.512 0.426667 58.368 14.592 74.752a52.309333 52.309333 0 0 0 40.874666 17.664c16.725333 0 35.328-5.973333 55.381334-17.664l234.410666-136.618667c31.402667-18.346667 86.613333-33.28 123.050667-33.28h271.786667c79.872 0 144.810667-64.853333 144.810666-144.384v-546.986667C1108.565333 64.768 1043.626667 0 963.669333 0\" fill=\"#878787\" ></path><path d=\"M554.325333 528.384a76.544 76.544 0 0 0 0-152.917333 76.544 76.544 0 0 0 0 152.917333M827.306667 528.384a76.544 76.544 0 0 0 0-152.917333 76.544 76.544 0 0 0 0 152.917333M357.717333 451.925333a76.544 76.544 0 0 0-152.917333 0 76.544 76.544 0 0 0 152.917333 0\" fill=\"#878787\" ></path></symbol><symbol id=\"icon-denglu\" viewBox=\"0 0 1024 1024\"><path d=\"M575.215 547.318c53.367-24.316 90.562-78.011 90.562-140.522 0-85.257-69.149-154.383-154.406-154.383-85.299 0-154.427 69.126-154.427 154.383 0 62.49 37.172 116.185 90.562 140.522-87.156 27.24-150.586 108.698-150.586 204.715 0 12.071 9.779 21.827 21.827 21.827s21.827-9.756 21.827-21.827c0-94.161 76.613-170.774 170.776-170.774 94.184 0 170.797 76.613 170.797 170.774 0 12.071 9.756 21.827 21.827 21.827 12.07 0 21.827-9.756 21.827-21.827 0.021-95.994-63.43-177.475-150.586-204.715zM400.621 406.817c0-61.072 49.678-110.729 110.773-110.729 61.072 0 110.75 49.657 110.75 110.729 0 61.094-49.678 110.794-110.75 110.794-61.095 0-110.773-49.7-110.773-110.794z\"  ></path><path d=\"M511.371 960.81c-246.951 0-447.869-200.918-447.869-447.891 0-246.93 200.919-447.871 447.869-447.871 246.973 0 447.892 200.919 447.892 447.871 0 246.973-200.919 447.891-447.892 447.891z m0-854.269c-224.098 0-406.398 182.301-406.398 406.377s182.3 406.397 406.398 406.397c224.099 0 406.42-182.321 406.42-406.397S735.47 106.541 511.371 106.541z\"  ></path></symbol><symbol id=\"icon-liucheng\" viewBox=\"0 0 1024 1024\"><path d=\"M914.944 636.416h-86.016v-133.12h-274.432V435.2h77.824c38.912 0 70.656-31.744 70.656-70.656v-162.816c0-38.912-31.744-70.656-70.656-70.656h-223.744c-38.912 0-70.656 31.744-70.656 70.656v162.816c0 38.912 31.744 70.656 70.656 70.656h81.408V503.296h-277.504v133.12h-79.872c-38.912 0-70.656 31.744-70.656 70.656V870.4c0 38.912 31.744 70.656 70.656 70.656h223.744c38.912 0 70.656-31.744 70.656-70.656V707.072c0-38.912-31.744-70.656-70.656-70.656H271.36V562.176h498.688v74.24H691.2c-38.912 0-70.656 31.744-70.656 70.656V870.4c0 38.912 31.744 70.656 70.656 70.656h223.744c38.912 0 70.656-31.744 70.656-70.656V707.072c0-38.912-31.744-70.656-70.656-70.656zM356.352 695.296c6.656 0 11.776 5.12 11.776 11.776V870.4c0 6.656-5.12 11.776-11.776 11.776h-223.744c-6.656 0-11.776-5.12-11.776-11.776V707.072c0-6.656 5.12-11.776 11.776-11.776h223.744z m52.736-318.976c-6.656 0-11.776-5.12-11.776-11.776v-162.816c0-6.656 5.12-11.776 11.776-11.776h223.744c6.656 0 11.776 5.12 11.776 11.776v162.816c0 6.656-5.12 11.776-11.776 11.776h-223.744zM926.72 870.4c0 6.656-5.12 11.776-11.776 11.776H691.2c-6.656 0-11.776-5.12-11.776-11.776V707.072c0-6.656 5.12-11.776 11.776-11.776h223.744c6.656 0 11.776 5.12 11.776 11.776V870.4z\" fill=\"#040000\" ></path></symbol><symbol id=\"icon-jiaose\" viewBox=\"0 0 1024 1024\"><path d=\"M52.139251 997.722656c-14.742623 0-26.851732-11.928484-26.851732-26.566345v-87.404501c0-172.453651 104.578339-325.370888 266.331757-389.590348l27.881296-11.079546-23.65828-18.391251C235.665223 417.742581 201.216397 347.526367 201.216397 272.140662c0-134.999224 110.676244-244.924067 246.705031-244.924067s246.715868 109.928456 246.715868 244.924067c0 75.385705-34.546363 145.507994-94.629507 192.546391l-15.963649 12.484809c-23.65828 21.024765-70.028364 35.294151-130.487208 39.994017h-2.348127c-1.033176 0-2.062739-0.097538-3.092302-0.097538-9.392507 0-19.153489 0.3757-29.109546 1.217414l-10.606308 0.848938-4.692641 0.657475c-185.317773 22.061554-324.814563 178.558781-324.814563 363.959642v60.834544h405.45646l2.250589 4.504791c6.101517 12.293347 12.954434 24.413293 20.558752 35.864926l8.355719 12.676272H52.139251v0.090313zM447.921428 80.251746c-106.45684 0-193.008791 86.085938-193.008791 191.885303 0 105.802977 86.649488 191.881691 193.008791 191.881691 106.45684 0 193.113554-86.082326 193.113554-191.881691-0.093925-105.799365-86.656713-191.885303-193.113554-191.885303z m0 0\" fill=\"#333333\" ></path><path d=\"M447.921428 31.905623c-133.49281 0-242.016002 107.771791-242.016002 240.231426 0 73.879292 33.8925 142.693855 92.84493 188.785776l30.045185 23.47043-35.485614 14.08876C133.341085 562.029549 29.980159 713.274197 29.980159 883.748197v87.404502c0 12.018796 9.952445 21.866479 22.159092 21.866478h454.647908l-3.569153-5.342891a332.205743 332.205743 0 0 1-20.840528-36.421252l-0.942863-1.968814H74.200804v-65.538023c0-187.846525 141.284978-346.305341 328.661879-368.551132l4.790178-0.664701 10.79777-0.93925c10.042757-0.751401 19.897665-1.213801 29.47441-1.213801 1.130713 0 2.163889 0 3.287377 0.090312h1.784576c59.613519-4.692641 104.957652-18.488789 127.860919-38.957228l16.147887-12.578734c59.053581-46.091921 92.848543-114.906484 92.848543-188.879701-0.007225-132.376547-108.530417-240.148338-241.932915-240.148339z m0 436.816595c-109.08313 0-197.701432-88.155902-197.701432-196.585169 0-108.425654 88.712227-196.577944 197.701432-196.577944 109.086742 0 197.802582 88.15229 197.802582 196.577944-0.090313 108.432879-88.809765 196.585169-197.802582 196.585169z m0 0\" fill=\"#333333\" ></path><path d=\"M821.085726 1004.474423c-10.230607 0-20.652678-4.414478-27.126282-11.643096-7.514006-8.167868-31.07836-29.373259-49.476836-29.373259-18.120313 0-41.681056 20.840528-49.191449 28.809709-6.473605 7.047993-16.80175 11.364933-26.938432 11.364933a34.904001 34.904001 0 0 1-13.239822-2.532364l-0.281775-0.0867-63.175447-35.211064-0.281775-0.18785c-13.517985-9.854907-18.683864-27.501983-12.304184-41.868905 0-0.0867 5.259804-12.394497 5.259804-23.185042 0-33.520412-27.321358-60.834545-60.830932-60.834545h-2.163889c-13.04836 0-23.091117-10.425683-26.284569-27.032357-0.56355-2.91529-5.350116-29.008396-5.350117-50.134312 0-21.024765 4.786566-47.219022 5.350117-50.130699 3.193452-16.711437 13.051972-27.13712 25.912481-27.13712h2.532364c33.509575 0 60.830932-27.314133 60.830932-60.823707 0-9.85852-4.414478-20.938065-5.259803-23.192267-6.37968-14.554773-1.502801-32.295774 11.552783-41.305355l1.123488-0.755013 65.342948-35.864927 0.18785-0.0867c4.692641-1.972426 9.204657-2.911677 14.175461-2.911677 10.143907 0 20.46844 4.316941 26.942045 11.169858 9.294969 9.479207 31.446836 27.606745 48.440047 27.606746 21.404078 0 47.876498-26.858957 48.161886-27.133508 6.571142-6.849305 16.6139-10.895308 26.754194-10.895308a34.860651 34.860651 0 0 1 13.232598 2.53959l0.285387 0.0867 64.30616 35.579538 0.18785 0.191463c13.521597 9.85852 18.774176 27.41167 12.390884 41.77498-0.559938 1.224638-5.350116 12.958047-5.350116 23.192267 0 33.509575 27.321358 60.823707 60.834544 60.823707h2.160277c13.051972 0 23.094729 10.425683 26.280957 27.03597 0.946476 4.790179 5.350116 29.759797 5.350116 50.130699 0 20.374515-4.407253 45.351358-5.350116 50.1307-3.18984 16.711437-13.138672 27.13712-25.905257 27.13712h-2.535977c-33.513187 0-60.834545 27.314133-60.834544 60.834544 0 9.284132 3.659465 19.243802 5.259804 23.098342 6.386905 14.540323 1.499189 32.288549-11.549171 41.301743l-1.130714 0.7514-63.453609 35.117139-0.18785 0.0867c-5.165879 2.629902-9.580357 3.561928-14.652311 3.561927z m-76.603118-87.679052c16.519975 0 34.260975 6.946843 52.756988 20.742991a185.679023 185.679023 0 0 1 17.556763 15.017173l2.810527 2.723827 51.073563-28.249771-1.311339-4.23024c-2.348127-6.939618-5.071954-17.650688-5.071953-28.726621 0-47.497185 35.489226-88.047527 82.516785-94.156269l3.850928-0.466013 0.56355-3.847315c1.408876-9.107119 3.092302-22.245791 3.092303-32.859324 0-10.50877-1.687039-23.661892-3.092303-32.855712l-0.56355-3.850928-3.850928-0.466013c-47.027559-6.105129-82.516785-46.662697-82.516785-94.159881 0-11.079546 2.723827-21.682241 5.071953-28.730234l1.311339-4.12909-50.5064-28.069146-2.810527 2.62629c-3.663078 3.475228-9.674282 8.644719-17.274987 13.98761-18.026388 12.683497-35.203838 19.157102-51.06995 19.157102-16.053962 0-33.332562-6.574755-51.543188-19.532802a162.678219 162.678219 0 0 1-17.462838-14.366923l-2.723827-2.622677-52.475213 28.820546 1.314951 4.12909c2.344514 6.950455 5.068341 17.650688 5.068341 28.639921 0 47.497185-35.485613 88.058364-82.520398 94.152657l-3.847315 0.466013-0.559938 3.850928c-1.412489 9.107119-3.095915 22.155479-3.095915 32.859324 0 10.613533 1.687039 23.65828 3.095915 32.859324l0.559938 3.847315 3.847315 0.473238c47.034784 6.097904 82.520398 46.648247 82.520398 94.156269 0 11.166246-2.723827 21.776166-5.068341 28.816933l-1.314951 4.038778 49.101136 27.501983 2.814139-2.723827a172.648726 172.648726 0 0 1 17.376138-14.641473c18.488789-13.427672 36.041939-20.183052 52.377676-20.183053z m0 0\" fill=\"#333333\" ></path><path d=\"M991.754801 713.454823c-2.723827-14.359698-10.982008-23.275355-21.685853-23.275355h-2.163889c-36.143089 0-65.523573-29.391322-65.523573-65.53441 0-11.820109 5.635504-24.868468 5.725817-25.063544 5.534354-12.387272 0.939251-27.592295-10.797771-36.146701l-63.832922-35.294151a31.125323 31.125323 0 0 0-11.455245-2.156664c-8.919269 0-17.650688 3.558315-23.372893 9.479207-0.281775 0.281775-27.97522 28.531546-51.449262 28.531546-23.55713 0-51.539575-28.719396-51.817738-29.004784-5.635504-6.007592-14.739011-9.674282-23.564355-9.674282-4.313328 0-8.258181 0.848938-12.394497 2.535977l-64.963635 35.680688-0.8381 0.559938c-11.173471 7.792168-15.494024 23.098342-9.952445 35.680689 1.314951 3.186227 5.631892 14.540323 5.631892 24.962393 0 36.146701-29.380484 65.527185-65.523573 65.527186h-2.532365c-10.42207 0-18.589939 8.922882-21.313765 23.282579-0.184238 1.130713-5.256191 28.069146-5.256192 49.191449 0 20.750215 4.689028 46.373696 5.256192 49.281761 2.720214 14.366923 10.985621 23.28258 21.685853 23.282579h2.160277c36.143089 0 65.523573 29.384097 65.523573 65.527186 0 12.018796-5.722204 25.063543-5.722205 25.063543-5.537967 12.398109-0.942863 27.606745 10.794158 36.146702l62.615509 34.925675a31.114485 31.114485 0 0 0 11.455246 2.160277c8.919269 0 17.838538-3.764228 23.470429-9.95967 0.278163-0.27455 28.719396-30.323347 52.659451-30.323347 24.319368 0 52.666676 30.608735 52.948452 30.883285 5.635504 6.202667 14.735398 10.049982 23.654667 10.049982 4.418091 0 8.175093-0.841713 13.04836-2.998377l63.085133-34.925676 0.845326-0.567162c11.173471-7.784943 15.486799-23.094729 9.85852-35.666239-1.694264-4.129091-5.635504-14.836548-5.635505-24.976843 0-36.143089 29.380484-65.527185 65.523573-65.527186h2.532365c10.425683 0 18.589939-8.919269 21.313765-23.271742 0.845326-4.703478 5.259804-29.203471 5.259804-49.292598 0.007225-19.80374-4.403641-44.40127-5.252579-49.093911z m-37.830127 82.79856l-1.130714 7.326156-7.412855 0.93925c-44.69027 5.823354-78.48162 44.31457-78.48162 89.553941 0 10.425683 2.626289 20.558753 4.779341 27.22382l2.629902 7.788555-57.543555 31.829761-5.252579-5.158653a170.773838 170.773838 0 0 0-16.993212-14.551161c-17.6543-13.145897-34.546363-19.807352-49.946462-19.807352-15.302561 0-32.006773 6.571142-49.570761 19.431652a172.182714 172.182714 0 0 0-16.895675 14.272998l-5.256191 5.162266-55.571128-31.07836 2.532364-7.788556c2.160277-6.665067 4.884104-16.808975 4.884104-27.321358 0-45.152671-33.70465-83.640274-78.485233-89.55394l-7.322543-0.939251-1.127101-7.326155c-1.412489-9.294969-3.193452-22.719029-3.193452-33.607112 0-10.982008 1.687039-24.30853 3.193452-33.509575l1.127101-7.326155 7.322543-0.939251c44.683045-5.823354 78.485232-44.303732 78.485233-89.553941 0-10.425683-2.633514-20.562365-4.793791-27.22382l-2.622677-7.799393 58.854893-32.292161 5.259804 4.978029a151.804586 151.804586 0 0 0 16.9896 13.90091c17.372525 12.387272 33.701037 18.582714 48.815748 18.582714 14.926861 0 31.168673-6.097904 48.346123-18.300939a146.429182 146.429182 0 0 0 16.805362-13.61191l5.256191-4.884103 56.893305 31.54076-2.532365 7.788556c-2.163889 6.672292-4.793791 16.899287-4.793791 27.321357 0 45.152671 33.708262 83.640274 78.485233 89.553941l7.416468 0.939251 1.1271 7.326155c1.412489 9.291357 3.193452 22.719029 3.193453 33.607112-0.281775 10.786933-2.066352 24.210993-3.471615 33.505962z m0 0\" fill=\"#333333\" ></path><path d=\"M744.670458 853.984788c-50.506399 0-91.623905-41.11028-91.623905-91.620292 0-50.502787 41.117505-91.620292 91.623905-91.620292s91.623905 41.117505 91.623905 91.620292c0 50.600325-41.117505 91.620292-91.623905 91.620292z m0-139.489565c-26.382107 0-47.872885 21.490778-47.872885 47.869273 0 26.385719 21.490778 47.876498 47.872885 47.876497 26.378494 0 47.88011-21.490778 47.88011-47.876497 0-26.378494-21.505228-47.869273-47.88011-47.869273z m0 0\" fill=\"#333333\" ></path><path d=\"M744.670458 675.436845c-47.872885 0-86.927651 38.957229-86.927651 86.927651 0 47.977648 38.950004 86.927651 86.927651 86.927651s86.927651-38.950004 86.927651-86.927651c0-47.869273-38.953616-86.927651-86.927651-86.927651z m0 139.597939c-29.008396 0-52.565526-23.560742-52.565526-52.579976 0-29.004784 23.55713-52.565526 52.565526-52.565526 29.004784 0 52.572751 23.55713 52.572751 52.565526-0.003613 28.918084-23.567967 52.579976-52.572751 52.579976z m0 0\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-login\" viewBox=\"0 0 1024 1024\"><path d=\"M288 544v320a32 32 0 0 0 32 32h544a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32H320a32 32 0 0 0-32 32v320h337.6l-170.176-170.176a32 32 0 0 1 45.248-45.248l226.304 226.24a32 32 0 0 1 0 45.28l-226.304 226.272a32 32 0 0 1-45.248-45.248l173.12-173.12H288z m0-64v-160a32 32 0 1 1-64 0V128a64 64 0 0 1 64-64h608a64 64 0 0 1 64 64v768a64 64 0 0 1-64 64H288a64 64 0 0 1-64-64v-192a32 32 0 0 1 64 0v-160H96a32 32 0 0 1 0-64h192z\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-settings\" viewBox=\"0 0 1024 1024\"><path d=\"M972.353753 405.620568l-98.014307-19.641248a387.002968 387.002968 0 0 0-17.178095-41.233826l55.53291-83.299366a63.946019 63.946019 0 0 0-7.997251-80.708257l-61.546843-61.546843a63.850052 63.850052 0 0 0-80.708256-7.997251l-83.299366 55.500922a386.747056 386.747056 0 0 0-41.297804-17.146106L618.203493 51.502296A63.91403 63.91403 0 0 0 555.473056 0.063978h-87.01009a63.978008 63.978008 0 0 0-62.730437 51.438318l-19.641248 98.046297c-14.171129 4.926307-27.9264 10.716316-41.233826 17.146106L261.590078 111.193777a63.850052 63.850052 0 0 0-80.740245 7.997251L119.334979 180.737871a63.978008 63.978008 0 0 0-7.997251 80.708257l55.500921 83.299366c-6.461779 13.339415-12.219799 27.094686-17.146106 41.265815l-98.078285 19.609259A63.978008 63.978008 0 0 0 0.17594 468.351004v87.010091a63.978008 63.978008 0 0 0 51.438318 62.730436l98.046296 19.673237c4.926307 14.171129 10.716316 27.9264 17.146106 41.233826L111.337728 762.29796a63.946019 63.946019 0 0 0 7.997251 80.708257l61.546843 61.546843a63.850052 63.850052 0 0 0 80.708256 7.997251l83.299366-55.532911c13.339415 6.493768 27.094686 12.251788 41.265815 17.178095l19.609259 98.014308a63.978008 63.978008 0 0 0 62.730437 51.470307h87.01009a63.978008 63.978008 0 0 0 62.730437-51.470307l19.673237-98.014308c14.171129-4.926307 27.9264-10.748305 41.233826-17.178095l83.299366 55.532911a63.91403 63.91403 0 0 0 80.708256-7.997251l61.546843-61.546843a63.978008 63.978008 0 0 0 7.997251-80.708257l-55.53291-83.299366c6.493768-13.371404 12.251788-27.126675 17.178095-41.297804l98.014307-19.609259A63.978008 63.978008 0 0 0 1023.82406 555.361095v-87.010091c0-30.485521-21.560589-56.748493-51.470307-62.730436z m-110.585986 169.381775a63.882041 63.882041 0 0 0-47.855549 41.74565c-4.126581 11.803942-8.924932 23.256006-14.299085 34.35619a63.850052 63.850052 0 0 0 4.318515 63.402205l55.532911 83.299366-61.546843 61.546844-83.299366-55.532911a63.882041 63.882041 0 0 0-63.338228-4.382494c-11.132173 5.374153-22.552248 10.236481-34.420168 14.363063a63.91403 63.91403 0 0 0-41.681672 47.85555l-19.673237 98.078285h-87.01009l-19.609259-98.078285a63.882041 63.882041 0 0 0-41.713661-47.85555 325.328168 325.328168 0 0 1-34.388179-14.299085 63.786074 63.786074 0 0 0-63.370217 4.318516l-83.299366 55.532911-61.546843-61.546844 55.500922-83.299366c12.571678-18.873512 14.203118-42.993221 4.382493-63.338227a323.280872 323.280872 0 0 1-14.331074-34.420168 63.978008 63.978008 0 0 0-47.855549-41.681672l-98.046297-19.673237L64.153947 468.351004l98.078286-19.609259a63.946019 63.946019 0 0 0 47.855549-41.713661c4.126581-11.803942 8.892943-23.287995 14.299085-34.388179a63.818063 63.818063 0 0 0-4.350504-63.370216L164.56743 225.970323 226.082284 164.423479l83.299366 55.500922a63.882041 63.882041 0 0 0 63.338228 4.382494 322.769048 322.769048 0 0 1 34.388179-14.331074 63.946019 63.946019 0 0 0 41.713661-47.85555l19.641248-98.046296 87.01009-0.031989 19.609259 98.078285a63.91403 63.91403 0 0 0 41.74565 47.85555c11.803942 4.126581 23.256006 8.892943 34.35619 14.299085a63.91403 63.91403 0 0 0 63.402206-4.350505l83.299366-55.500922 61.546843 61.546844-55.532911 83.299366a64.169942 64.169942 0 0 0-4.382493 63.338227c5.374153 11.100184 10.236481 22.552248 14.363063 34.388179a63.882041 63.882041 0 0 0 47.855549 41.713661l98.014308 19.641248 0.095967 87.010091-98.078286 19.641248z\" fill=\"#333333\" ></path><path d=\"M512 287.933023A223.923026 223.923026 0 1 0 512.031989 735.747087 223.923026 223.923026 0 0 0 512 287.901034z m0 419.887664a195.964637 195.964637 0 1 1 195.932648-195.932649A195.996626 195.996626 0 0 1 512 707.820687z\" fill=\"#333333\" ></path><path d=\"M512 383.900034a127.956015 127.956015 0 1 0 0 255.912031 127.956015 127.956015 0 0 0 0-255.912031z m0 223.955016a95.999 95.999 0 0 1 0-191.934023 95.999 95.999 0 0 1 0 191.934023z\" fill=\"#333333\" ></path></symbol><symbol id=\"icon-blacklist\" viewBox=\"0 0 1024 1024\"><path d=\"M512.090917 1024a512 512 0 1 1 512.090917-512 512.045459 512.045459 0 0 1-512.090917 512zM91.599041 511.249933a419.446329 419.446329 0 0 0 682.083282 327.301785L184.107254 248.931191a417.400693 417.400693 0 0 0-92.417296 262.296013zM511.295392 91.6445a417.627985 417.627985 0 0 0-261.386842 91.599041l589.393235 589.256859A419.287224 419.287224 0 0 0 511.386309 91.62177z\" fill=\"#2F3135\" ></path></symbol><symbol id=\"icon-rizhi\" viewBox=\"0 0 1024 1024\"><path d=\"M904 238.5L746.2 84.2c-13.1-13.1-31-20-48.9-20H195.8c-53.7 0-97.1 44.1-97.1 97.8v700c0 53.7 43.4 97.8 97.1 97.8h631.7c53.7 0 97.8-44.1 97.8-97.8V288.8c0-18.6-8.2-37.2-21.3-50.3zM856.4 862c0 15.8-13.1 28.9-28.9 28.9H195.8c-15.8 0-28.2-13.1-28.2-28.9V162c0-15.8 12.4-28.9 28.2-28.9l454 0.7v121.9c0 57.2 46.2 103.3 103.3 103.3h103.3v503z m0-571.8H753.1c-19.3 0-34.4-15.2-34.4-34.4v-102l137.8 135v1.4z\"  ></path><path d=\"M684 475.2H339.5c-19 0-34.4 15.4-34.4 34.4s15.4 34.4 34.4 34.4H684c19 0 34.4-15.4 34.4-34.4S703 475.2 684 475.2zM684 681.9H339.5c-19 0-34.4 15.4-34.4 34.4s15.4 34.4 34.4 34.4H684c19 0 34.4-15.4 34.4-34.4S703 681.9 684 681.9z\"  ></path></symbol><symbol id=\"icon-dianliyonghuzongshu\" viewBox=\"0 0 1024 1024\"><path d=\"M512 580.48a139.52 139.52 0 0 1-138.88-147.2 138.88 138.88 0 1 1 277.12 0A139.52 139.52 0 0 1 512 580.48z m199.04 298.24c-7.68 22.4-377.6 24.32-398.08 0a181.12 181.12 0 0 1-35.84-103.68A231.68 231.68 0 0 1 395.52 576a176 176 0 0 0 232.96 0 231.68 231.68 0 0 1 118.4 201.6 181.12 181.12 0 0 1-35.84 101.12z m78.08-456.32a139.52 139.52 0 0 1-138.88-147.2 138.88 138.88 0 1 1 277.12 0 139.52 139.52 0 0 1-138.24 147.2z m-554.24 0a139.52 139.52 0 0 1-138.24-147.2 138.88 138.88 0 1 1 277.12 0 139.52 139.52 0 0 1-138.88 147.2z m670.08-7.04A231.68 231.68 0 0 1 1024 616.96a180.48 180.48 0 0 1-35.84 103.68 643.84 643.84 0 0 1-209.28 17.28 267.52 267.52 0 0 0-128-192 192 192 0 0 0 35.84-113.28v-7.68a176.64 176.64 0 0 0 220.8-9.6z m-659.84 320a666.88 666.88 0 0 1-209.28-17.28A181.12 181.12 0 0 1 0 616.96a231.68 231.68 0 0 1 119.04-201.6 171.52 171.52 0 0 0 116.48 43.52 172.8 172.8 0 0 0 103.68-33.92v7.68a192 192 0 0 0 35.84 113.28 266.88 266.88 0 0 0-129.92 192z\"  ></path></symbol><symbol id=\"icon-rengongzhineng\" viewBox=\"0 0 1024 1024\"><path d=\"M409.6 750.933l34.133 68.267H170.667v136.533h682.666V819.2H580.267l34.133-68.267h238.933A68.267 68.267 0 0 1 921.6 819.2v136.533A68.267 68.267 0 0 1 853.333 1024H170.667a68.267 68.267 0 0 1-68.267-68.267V819.2a68.267 68.267 0 0 1 68.267-68.267H409.6zM273.067 68.267h477.866a68.267 68.267 0 0 1 68.267 68.266V614.4a68.267 68.267 0 0 1-68.267 68.267H273.067A68.267 68.267 0 0 1 204.8 614.4V136.533a68.267 68.267 0 0 1 68.267-68.266z m0 68.266V614.4h477.866V136.533H273.067z m614.4 102.4a34.133 34.133 0 0 1 34.133 34.134v204.8a34.133 34.133 0 1 1-68.267 0v-204.8a34.133 34.133 0 0 1 34.134-34.134z m-750.934 0a34.133 34.133 0 0 1 34.134 34.134v204.8a34.133 34.133 0 0 1-68.267 0v-204.8a34.133 34.133 0 0 1 34.133-34.134zM989.867 307.2A34.133 34.133 0 0 1 1024 341.333V409.6a34.133 34.133 0 1 1-68.267 0v-68.267a34.133 34.133 0 0 1 34.134-34.133z m-955.734 0a34.133 34.133 0 0 1 34.134 34.133V409.6A34.133 34.133 0 0 1 0 409.6v-68.267A34.133 34.133 0 0 1 34.133 307.2z m341.334 102.4a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4z m273.066 0a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4zM512 0a34.133 34.133 0 0 1 34.133 34.133V102.4a34.133 34.133 0 0 1-68.266 0V34.133A34.133 34.133 0 0 1 512 0z m-68.267 614.4a34.133 34.133 0 0 1 34.134 34.133v136.534a34.133 34.133 0 1 1-68.267 0V648.533a34.133 34.133 0 0 1 34.133-34.133z m136.534 0a34.133 34.133 0 0 1 34.133 34.133v136.534a34.133 34.133 0 1 1-68.267 0V648.533a34.133 34.133 0 0 1 34.134-34.133z\"  ></path></symbol><symbol id=\"icon-jiaoseshouquan\" viewBox=\"0 0 1024 1024\"><path d=\"M819.218448 577.111635a32.383215 32.383215 0 0 0-9.714964-44.688837 485.748223 485.748223 0 0 0-122.408552-56.994458 259.065719 259.065719 0 1 0-284.972291 0A488.986545 488.986545 0 0 0 56.269906 942.394299a32.383215 32.383215 0 0 0 64.76643 0A423.57245 423.57245 0 0 1 774.529612 587.474264a32.383215 32.383215 0 0 0 44.688836-10.362629zM352.25249 263.642115a194.299289 194.299289 0 1 1 194.299289 194.299289 194.299289 194.299289 0 0 1-194.299289-194.299289z\" fill=\"#666666\" ></path><path d=\"M898.233493 834.882025V762.343624h17.486936a32.383215 32.383215 0 0 0 0-64.76643H898.233493v-50.517815h17.486936a32.383215 32.383215 0 0 0 0-64.76643H898.233493v-64.76643a32.383215 32.383215 0 1 0-64.76643 0v315.412513a97.797309 97.797309 0 1 0 64.76643 0z m-32.383215 124.99921a33.030879 33.030879 0 1 1 33.030879-33.03088 33.030879 33.030879 0 0 1-31.087886 32.383215z\" fill=\"#666666\" ></path></symbol><symbol id=\"icon-WechatIMG\" viewBox=\"0 0 1030 1024\"><path d=\"M1030.62114 506.72206v17.177019c-2.576553 12.023913-6.870808 24.906678-7.729659 36.930591-22.330125 243.91367-222.442396 442.308239-456.049854 461.20296-291.150472 24.047827-503.286657-176.064445-549.664608-397.64799C10.306211 591.748304 6.011957 557.394266 0 523.899079v-17.177019c2.576553-12.023913 6.870808-24.906678 7.729659-36.930591C28.342081 245.631372 182.935252 67.849225 401.942244 17.177019 431.143177 10.306211 460.344109 6.011957 489.545041 0h51.531057c11.165062 2.576553 21.471274 6.870808 32.636336 7.729659 222.442396 27.48323 393.353735 183.794103 440.590538 401.942244 6.870808 32.636336 11.165062 65.272672 16.318168 97.050157zM453.473301 799.590234c57.543014 0 114.227176 1.717702 171.77019-0.858851 95.332455-3.435404 163.18168-73.002331 165.758234-167.475935 0.858851-41.224846-0.858851-83.308542 0.858851-124.533388 0.858851-26.624379-11.165062-41.224846-37.789442-41.224845-85.885095 0-171.77019-0.858851-257.655285 0-44.660249 0-36.930591 34.354038-37.789442 61.837268-0.858851 27.48323 0.858851 52.389908 39.507144 51.531057 42.942547-0.858851 85.885095-1.717702 128.827642 0.858851 16.318168 0.858851 42.942547 6.870808 46.377952 17.177019 5.153106 16.318168 1.717702 42.942547-9.447361 54.966461-14.600466 16.318168-39.507144 30.918634-60.978417 31.777485-69.566927 4.294255-139.992705 0.858851-210.418483 1.717702-30.059783 0.858851-41.224846-11.165062-40.365995-40.365995 0.858851-61.837268 0-122.815686 0-184.652954C352.128889 381.329822 371.882461 360.717399 450.037898 360.717399c98.767859 0 197.535718-0.858851 296.303577 0 49.813355 0.858851 43.801398-32.636336 44.66025-64.413821 1.717702-33.495187-7.729659-50.672206-45.519101-49.813355-107.356369 1.717702-214.712737 0-322.069106 0.858851-102.203263 1.717702-182.076401 78.155436-183.794103 182.076401-1.717702 109.074071 0 217.28929-0.858851 326.363361 0 34.354038 15.459317 44.660249 47.236802 44.660249 55.825312-1.717702 111.650623-0.858851 167.475935-0.858851z\"  ></path></symbol><symbol id=\"icon-layer\" viewBox=\"0 0 1024 1024\"><path d=\"M538.197333 94.336a42.709333 42.709333 0 0 0-52.437333 0l-384 298.666667a42.752 42.752 0 0 0 0.042667 67.328l384 298.666666a42.410667 42.410667 0 0 0 52.394666 0l384-298.666666a42.666667 42.666667 0 0 0 0-67.328l-384-298.666667zM512 671.274667L197.504 426.666667 512 182.058667 826.496 426.666667 512 671.274667z\" fill=\"\" ></path><path d=\"M512 938.666667c9.258667 0 18.517333-2.986667 26.197333-9.002667l366.933334-285.354667-69.461334-54.101333-323.669333 251.733333-322.432-250.794666-69.504 54.058666 365.696 284.458667A42.624 42.624 0 0 0 512 938.666667z\" fill=\"\" ></path></symbol><symbol id=\"icon-jiankongkongzhiguanlijianguan\" viewBox=\"0 0 1024 1024\"><path d=\"M709.3 858.9c-4 0.3-7.2 0.4-10.3 0.4-125.9 0.1-252 0.1-377.9 0.1-10.7 0-10.8-0.1-10.7-10.8V822c0-7.5 3.1-10.6 10.8-10.6 26.3 0 52.7 0.1 79 0 11-0.1 12-1.3 12-11.9v-26.6c-0.1-9.9-2.5-12.3-12.3-12.3H159.3c-20.9 0-35.8-9.3-43.3-29-2.1-5.4-3.7-11.3-3.7-16.9-0.2-167.9 0-335.8-0.3-503.6 0-19.5 10.5-31.9 25.1-41.5 5-3.3 12.2-4 18.4-4.8 5.7-0.8 11.8-0.3 17.8-0.3H858c16.4 0 30.9 4.7 41 17.7 6.7 8.6 12.3 17.2 12.2 30.1-0.6 166.9-0.4 333.9-0.4 500.8 0 8.2 0 15.5-7 22.6-4.9 5.1-7.8 13-14.7 16.6-6.4 3.4-13.3 7.7-20.1 7.9-41.9 0.8-83.9 0.4-125.8 0.4-40.9 0.1-81.9 0-122.8 0-10.1 0-10.4 0.3-10.5 10.6-0.1 10.5 0.4 21-0.2 31.6-0.5 7.7 3.7 8.8 9.6 8.8 26-0.1 51.8-0.1 77.6-0.1 11.3 0 12.4 1.2 12.3 12.2 0.1 11.4 0.1 22.8 0.1 35.2z m-547.7-646c-0.3 5.1-0.8 9.1-0.8 13.2-0.1 35.7 0 71.3 0 107.1v266.6c0 13.3 0 13.2 13.3 13.2h674.5c10.7 0 13-2.1 13-12.9V224.2c0-10.7-0.8-11.4-11.5-11.4H161.6z m291.3 188.8c-10.4 1-19.7-1.3-28.2-7.7-1.3-0.9-5 0.1-6.7 1.4-19 15-37.7 30.3-56.7 45.3-12 9.5-24.3 18.6-36.3 28-4.7 3.8-9.3 7.8-3.7 14.4 0.8 0.9 1 2.9 0.6 4.1-4.6 15.2-8.8 30.3-25.2 37.9-20.9 9.6-40.5 3.9-54.7-13.3-8.4-10.3-10.3-22.4-7.9-34.5 2.8-13.8 10.8-25.2 24.4-30.5 7.3-2.8 15.6-3.1 23.4-4.5 1.6-0.3 3.7-0.2 4.9 0.6 11.5 7.3 20.1 3.2 29.4-5.3 10.8-10 23.2-18.4 34.9-27.5 17.3-13.4 34.7-26.7 51.6-40.5 2.8-2.2 4.8-6.9 4.7-10.5-0.4-16.2 7.3-29 19.7-36.9 11.7-7.5 26-9.4 40.1-3.1 7.7 3.3 14.1 7.6 18.8 14.5 8.8 13.1 11.3 26.5 4.7 41.6-1.3 2.8 1.9 8.5 4.5 11.6 10.7 13.2 22.8 25.1 32.2 38.9 4.8 7.3 9.8 6.2 16 6.6 8.1 0.5 16.6-2.4 23.9 4 0.8 0.9 5.2-0.6 7-2.1 12.5-11.5 24.9-23.1 37.3-34.8 21-19.6 42-39.3 63.2-58.9 7.2-6.6 14.8-12.7 21.6-19.7 2.4-2.5 4-6.5 4.5-10.1 0.6-5.6-1-11.5-0.3-17.2 1.7-13.2 6.5-25.2 19.2-31.6 6.9-3.5 14.4-7.9 21.7-7.8 12.5 0.2 24.9 4.2 34.1 13.7 12.7 13.2 12.2 30 8.9 45.7-2.5 11.6-12.2 20.3-24.1 24.3-6.5 2.2-13.8 2.9-20.7 4-1.3 0.3-3.2 0.3-4.2-0.4-12.4-8.6-18.8 1.1-26.4 8.2-12.1 11.6-24.6 22.7-37 34.2-17.9 16.7-35.8 33.6-53.7 50.3-8.8 8.3-17.8 16.5-26.2 25.2-2.1 2.1-3.7 6.3-3.3 9.2 2 18.6-5.1 33.9-20.6 43-10.1 5.9-22.2 9.2-35.3 3.5-9-4-17.5-7.6-22.7-16.1-7.9-12.5-11.5-25.6-4.7-40.1 2.2-4.5 2.6-9.3-1.8-14.3-11.4-13-21.7-26.9-32.5-40.2-1.4-1.7-4.1-3-6.4-3.1-3.7-0.3-7.9 0.4-12 0.5z m-161.7 83.7c-0.1-8.5-4.9-12.7-14.2-12.7-8.5 0.1-13.6 5.2-13.4 13.7 0.1 8.4 5.6 13.9 13.7 13.9 7.1-0.1 14-7.4 13.9-14.9z m453.1-200.7c-9-0.1-13.7 4.3-13.8 13.2-0.1 8.5 5.2 14.4 13 14.4 6.7 0 14.7-7.4 14.7-13.9 0.1-7.5-6.2-13.6-13.9-13.7z m-211 189c-0.2 9.8 3.2 13.8 12 13.9 8.8 0.1 15.2-5.4 15.3-13.2 0.1-4.7-7.3-14.7-14.1-14.4-8.3 0.2-13 4.6-13.2 13.7z m-67.8-114.2c-3.1-10.7-8.8-16.4-20.5-12.7-6.4 2-6.6 7.9-8.2 12.3-1.4 4.3 6.2 12.5 12.7 13.5 10 1.5 13-6.5 16-13.1z m0 0\"  ></path></symbol><symbol id=\"icon-tupian\" viewBox=\"0 0 1024 1024\"><path d=\"M892.4 221.4c-13.1-13-28.7-19.5-47.1-19.5H178.7c-18.3 0-34 6.5-47.1 19.5-13.1 13.1-19.5 28.8-19.5 47.1v506.7c0 18.3 6.5 34 19.5 47.1 13.1 13 28.8 19.5 47.1 19.5h666.8c18.3 0 34-6.5 47.1-19.5 13-13.1 19.5-28.8 19.5-47.1V268.5c-0.1-18.5-6.6-34.1-19.7-47.1zM241.9 331.7c15.5-15.5 34.4-23.3 56.7-23.3s41.2 7.8 56.7 23.3c15.5 15.6 23.3 34.4 23.3 56.7s-7.8 41.1-23.3 56.7c-15.6 15.6-34.4 23.3-56.7 23.3s-41.1-7.8-56.7-23.3c-15.6-15.5-23.3-34.4-23.3-56.7s7.8-41.1 23.3-56.7z m563.4 403.4H218.7v-80l133.4-133.4 66.7 66.7 213.3-213.3 173.3 173.3v186.7z\"  ></path></symbol><symbol id=\"icon-jiaoseguanli\" viewBox=\"0 0 1024 1024\"><path d=\"M711.016 789.333c-37.703 0-68.267-30.564-68.267-68.266 0-37.703 30.564-68.267 68.267-68.267 37.703 0 68.267 30.564 68.267 68.267 0 37.702-30.564 68.266-68.267 68.266z m0-51.2c9.426 0 17.067-7.64 17.067-17.066 0-9.426-7.641-17.067-17.067-17.067s-17.067 7.641-17.067 17.067c0 9.425 7.641 17.066 17.067 17.066z m65.626-130.735H645.39l-65.626 113.669 65.626 113.668h131.253l65.627-113.668-65.627-113.669zM502.87 546.07C334.628 590.652 237.74 673.254 206.327 794.642c-6.494 25.094 8.585 50.701 33.678 57.195a46.933 46.933 0 0 0 11.758 1.496h249.862c21.207 0 38.4 17.193 38.4 38.4 0 21.208-17.193 38.4-38.4 38.4H251.763a123.733 123.733 0 0 1-30.998-3.945c-66.156-17.12-105.909-84.63-88.79-150.786 31.335-121.089 114.154-210.328 245.417-267.32-53.698-37.84-88.776-100.331-88.776-171.015C288.616 221.602 382.218 128 497.683 128c115.464 0 209.066 93.602 209.066 209.067 0 113.73-90.811 206.25-203.879 209.003z m408.373 192.063L825.91 885.935a34.133 34.133 0 0 1-29.56 17.067H625.682a34.133 34.133 0 0 1-29.56-17.067l-85.334-147.802a34.133 34.133 0 0 1 0-34.133l85.333-147.802a34.133 34.133 0 0 1 29.56-17.066H796.35a34.133 34.133 0 0 1 29.56 17.066L911.244 704a34.133 34.133 0 0 1 0 34.133z m-413.56-268.8c73.048 0 132.266-59.217 132.266-132.266 0-73.05-59.218-132.267-132.266-132.267-73.05 0-132.267 59.218-132.267 132.267 0 73.049 59.218 132.266 132.267 132.266z\"  ></path></symbol><symbol id=\"icon-peizhi-\" viewBox=\"0 0 1024 1024\"><path d=\"M512 88.39l-366.86 211.8v423.62L512 935.61l366.86-211.8V300.19z m302.86 598.47L512 861.71 209.14 686.86V337.14L512 162.29l302.86 174.85z\"  ></path><path d=\"M315.9 512c0 108.3 87.8 196.1 196.1 196.1S708.1 620.3 708.1 512 620.3 315.9 512 315.9 315.9 403.7 315.9 512z m328.2 0a132.1 132.1 0 1 1-38.69-93.41A131.25 131.25 0 0 1 644.1 512z\"  ></path></symbol><symbol id=\"icon-bingtu\" viewBox=\"0 0 1089 1024\"><path d=\"M580.40742 479.754087L292.530603 77.469686a562.608519 562.608519 0 0 1 669.706492 74.740765 478.523636 478.523636 0 0 1 115.296919 177.647895z m-93.441184-25.19379L0 277.338796a474.807917 474.807917 0 0 1 127.004478-172.99411 525.183315 525.183315 0 0 1 70.757028-51.216002z m78.322474 89.676735L1064.084331 396.059049a450.430367 450.430367 0 0 1-138.663307 498.369228C707.899206 1075.47514 389.492583 1065.753359 183.410304 871.79285a449.358291 449.358291 0 0 1-105.27057-504.363108z\"  ></path></symbol><symbol id=\"icon-gongju\" viewBox=\"0 0 1024 1024\"><path d=\"M928 257.7H768v-97.4c0-35.3-28.7-64-64-64H320c-35.3 0-64 28.7-64 64v97.4H96c-17.7 0-32 14.3-32 32v606c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32v-606c0-17.7-14.3-32-32-32z m-608-97.4h384v97H320v-97z m576 703.4H128v-271h281v60c0 17.7 14.3 32 32 32h142c17.7 0 32-14.3 32-32v-60h281v271z m-423-243v-120h78v120h-78z m423-92H615v-60c0-17.7-14.3-32-32-32H441c-17.7 0-32 14.3-32 32v60H128v-207h768v207z\"  ></path></symbol><symbol id=\"icon-huanxingtu\" viewBox=\"0 0 1024 1024\"><path d=\"M512 224c160 0 288 128 288 288 0 137.6-99.2 259.2-236.8 281.6l-25.6 6.4H512c-160 0-288-128-288-288v-25.6l6.4-28.8C252.8 323.2 374.4 224 512 224m0-224C230.4 0 0 230.4 0 512h160c0 195.2 156.8 352 352 352v160c281.6 0 512-230.4 512-512S793.6 0 512 0zM70.4 448C99.2 230.4 288 64 512 64c246.4 0 448 201.6 448 448 0 224-166.4 412.8-384 441.6v-96C739.2 828.8 864 684.8 864 512c0-195.2-156.8-352-352-352-172.8 0-316.8 124.8-345.6 288h-96z\"  ></path></symbol></svg>',l=(c=document.getElementsByTagName(\"script\"))[c.length-1].getAttribute(\"data-injectcss\");if(l&&!z.__iconfont__svg__cssinject__){z.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener(\"DOMContentLoaded\",l,!1),c()};document.addEventListener(\"DOMContentLoaded\",l,!1)}else document.attachEvent&&(a=c,h=z.document,t=!1,o=function(){t||(t=!0,a())},(i=function(){try{h.documentElement.doScroll(\"left\")}catch(c){return void setTimeout(i,50)}o()})(),h.onreadystatechange=function(){\"complete\"==h.readyState&&(h.onreadystatechange=null,o())});var a,h,t,o,i}(function(){var c,l;(c=document.createElement(\"div\")).innerHTML=a,a=null,(l=c.getElementsByTagName(\"svg\")[0])&&(l.setAttribute(\"aria-hidden\",\"true\"),l.style.position=\"absolute\",l.style.width=0,l.style.height=0,l.style.overflow=\"hidden\",function(c,l){l.firstChild?function(c,l){l.parentNode.insertBefore(c,l)}(c,l.firstChild):l.appendChild(c)}(l,document.body))})}(window);"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>ok-admin v1.0 | 很赞的后台模版</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <meta name=\"keywords\" content=\"ok-admin v1.0,ok-admin网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载\">\n    <meta name=\"description\" content=\"ok-admin v1.0，顾名思义，很赞的后台模版，它是一款基于Layui框架的轻量级扁平化且完全免费开源的网站后台管理系统模板，适合中小型CMS后台系统。\">\n    <link rel=\"shortcut icon\" href=\"imgs/favicon.ico\"/>\n    <link rel=\"stylesheet\" href=\"css/okadmin.css\">\n</head>\n<body class=\"layui-layout-body\">\n<div class=\"layui-layout layui-layout-admin\">\n    <!--头部导航-->\n    <div class=\"layui-header\">\n        <div class=\"layui-logo\">ok-admin v1.0</div>\n        <div class=\"menu-switch\">\n            <i class=\"iconfont icon-caidan\"></i>\n        </div>\n        <ul class=\"layui-nav layui-layout-left\">\n            <li class=\"weather\">\n                <div id=\"tp-weather-widget\"></div>\n            </li>\n        </ul>\n        <ul class=\"layui-nav layui-layout-right\" lay-filter=\"navFilter\">\n\t\t\t<li class=\"textMarquee\">\n\t\t\t\t<marquee>通知：今天，明天，后天，开始大幅降温了，请不要傻不愣登的，只要风度不要温度，再把自己弄感冒喽！</marquee>\n\t\t\t</li>\n            <li class=\"layui-nav-item\">\n                <a href=\"javascript:;\">\n                    <img src=\"imgs/head.png\" class=\"layui-nav-img\">\n                    bobi\n                </a>\n                <dl class=\"layui-nav-child\">\n                    <dd lay-unselect><a href=\"javascript:;\" path=\"pages/member/user-center.html\">个人中心<span class=\"layui-badge-dot\"></span></a></dd>\n                    <dd lay-unselect><a href=\"javascript:;\" path=\"pages/member/user-info.html\">基本资料</a></dd>\n                    <dd lay-unselect><a href=\"javascript:;\" path=\"pages/member/user-notify.html\">消息中心</a></dd>\n\t\t\t\t\t<dd lay-unselect><a href=\"javascript:;\" path=\"pages/member/user-pwd.html\">修改密码</a><hr></dd>\n\t\t\t\t\t<dd lay-unselect><a href=\"javascript:;\" id=\"alertSkin\">皮肤动画</a><hr></dd>\n                    <dd lay-unselect><a href=\"javascript:;\" id=\"lock\">锁定账户</a></dd>\n                </dl>\n            </li>\n            <li class=\"layui-nav-item\"><a href=\"javascript:void(0)\" id=\"logout\">退出</a></li>\n        </ul>\n    </div>\n    <!--左侧导航区域-->\n    <div class=\"layui-side layui-bg-black\">\n        <div class=\"layui-side-scroll\">\n            <ul class=\"layui-nav layui-nav-tree\" lay-shrink=\"all\" lay-filter=\"navFilter\">\n            </ul>\n        </div>\n    </div>\n    <!-- 内容主体区域 -->\n    <div class=\"content-body\">\n        <div class=\"layui-tab layui-tab-brief\" lay-filter=\"ok-tab\" lay-allowClose=\"true\">\n            <ul class=\"layui-tab-title\">\n                <li class=\"layui-this\"><i class=\"iconfont icon-home\" style=\"font-size:15px;\"></i> 控制台</li>\n            </ul>\n            <div class=\"layui-tab-content\">\n                <div class=\"layui-tab-item layui-show\">\n                    <iframe src=\"pages/welcome.html\" frameborder=\"0\" scrolling=\"yes\" width=\"100%\" height=\"100%\"></iframe>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!--底部信息-->\n    <div class=\"layui-footer\">\n        Copyright ©2018-©<span id=\"endYear\"></span> ok-admin v1.0 All Rights Reserved\n        <button class=\"layui-btn layui-btn-danger layui-btn-xs donate\">捐赠作者</button>\n        <button class=\"layui-btn layui-btn-danger layui-btn-xs communication\">QQ群交流</button>\n    </div>\n</div>\n<div class=\"yy\"></div>\n<!--js逻辑-->\n<script src=\"lib/layui/layui.js\"></script>\n<script src=\"js/okadmin.js\"></script>\n<!--天气预报插件-->\n<script>(function(T,h,i,n,k,P,a,g,e){g=function(){P=h.createElement(i);a=h.getElementsByTagName(i)[0];P.src=k;P.charset=\"utf-8\";P.async=1;a.parentNode.insertBefore(P,a)};T[\"ThinkPageWeatherWidgetObject\"]=n;T[n]||(T[n]=function(){(T[n].q=T[n].q||[]).push(arguments)});T[n].l=+new Date();if(T.attachEvent){T.attachEvent(\"onload\",g)}else{T.addEventListener(\"load\",g,false)}}(window,document,\"script\",\"tpwidget\",\"//widget.seniverse.com/widget/chameleon.js\"))</script>\n<script>tpwidget(\"init\",{\"flavor\":\"slim\",\"location\":\"WX4FBXXFKE4F\",\"geolocation\":\"enabled\",\"language\":\"zh-chs\",\"unit\":\"c\",\"theme\":\"chameleon\",\"container\":\"tp-weather-widget\",\"bubble\":\"disabled\",\"alarmType\":\"badge\",\"color\":\"#FFFFFF\",\"uid\":\"U9EC08A15F\",\"hash\":\"039da28f5581f4bcb5c799fb4cdfb673\"});tpwidget(\"show\");</script>\n<!--百度统计-->\n<script>var _hmt=_hmt||[];(function(){var hm=document.createElement(\"script\");hm.src=\"https://hm.baidu.com/hm.js?e4a38d186cb7e65e5ead3eb3f7eb190e\";var s=document.getElementsByTagName(\"script\")[0];s.parentNode.insertBefore(hm,s)})();</script>\n</body>\n</html>\n"
  },
  {
    "path": "js/okadmin.js",
    "content": "layui.use([\"element\", \"layer\", \"okTab\", \"okMenu\", \"okUtils\", \"okLayer\"], function () {\n    var element = layui.element;\n    var layer = layui.layer;\n    var okTab = layui.okTab;\n    var okMenu = layui.okMenu;\n    var $ = layui.jquery;\n    var okUtils = layui.okUtils;\n    var okLayer = layui.okLayer;\n\n    /**\n     * localhost运行提示\n     */\n    var href = location.href;\n    if (href.substring(0, 4) != \"http\") {\n        layer.msg(\"请先部署到localhost环境下再访问！\", {icon: 7, time: 3000, anim: 1});\n    }\n\n    /**\n     * 左边菜单显示/隐藏功能\n     * @type {boolean}\n     */\n    $(\".menu-switch\").click(function () {\n        if ($(\".layui-layout-admin .layui-side\").css(\"left\") == '0px') {\n            $(\".layui-layout-admin .layui-side\").animate({left: \"-200px\"});\n            $(\".layui-layout-admin .content-body\").animate({left: \"0px\"});\n            $(\".layui-layout-admin .layui-footer\").animate({left: \"0px\"});\n        } else {\n            $(\".layui-layout-admin .layui-side\").animate({left: \"0px\"});\n            $(\".layui-layout-admin .content-body\").animate({left: \"200px\"});\n            $(\".layui-layout-admin .layui-footer\").animate({left: \"200px\"});\n        }\n    });\n\n    /**\n     * 生成左侧菜单树\n     */\n    okMenu.generatorMenu(\"data/menu.json\", \"get\");\n\n    /**\n     * 监听导航菜单的点击\n     */\n    element.on(\"nav(navFilter)\", function (elem) {\n        var path = elem.context.attributes.path;\n        if (path && path.textContent != \"\") {\n            // var title = elem.context.innerHTML;\n            var title = elem.context.innerText;\n            title = title.substring(title.indexOf(\" \"), title.length);\n            var path = path.textContent;\n            okTab.add(title, path)\n        }\n    });\n\n    /**\n     * 修改copyright结束时间\n     */\n    var data = new Date();\n    var year = data.getFullYear();\n    $(\"#endYear\").text(year);\n\n    /**\n     * 捐赠作者\n     */\n    $(\".layui-footer button.donate\").click(function () {\n        layer.tab({\n            area: [\"330px\", \"350px\"],\n            tab: [{\n                title: \"支付宝\",\n                content: \"<img src='imgs/zfb.jpg' width='200' height='300' style='margin-left: 60px'>\"\n            }, {\n                title: \"微信\",\n                content: \"<img src='imgs/wx.jpg' width='200' height='300' style='margin-left: 60px'>\"\n            }]\n        });\n    });\n\n    /**\n     * QQ群交流\n     */\n    $(\".layui-footer button.communication\").click(function () {\n        layer.tab({\n            area: [\"330px\", \"350px\"],\n            tab: [{\n                title: \"QQ群\",\n                content: \"<img src='imgs/qq.png' width='200' height='300' style='display: block;margin: 0 auto'>\"\n            }]\n        });\n    });\n\n    /**\n     * 退出操作\n     */\n    $(\"#logout\").click(function () {\n        okLayer.confirm(\"确定要退出吗？\", function (index) {\n            window.location = \"pages/other/login.html\";\n        });\n    });\n\n    /**\n     * 弹窗皮肤\n     */\n    $(\"#alertSkin\").click(function () {\n        okLayer.open(\"皮肤动画\", \"pages/system/alertSkin.html\", \"50%\", \"45%\", function (layero) {}, function () {});\n    });\n\n    /**\n     * 锁定账户\n     */\n    $(\"#lock\").click(function () {\n        okLayer.confirm(\"确定要锁定账户吗？\", function (index) {\n            layer.close(index);\n            $(\".yy\").show();\n            layer.prompt({btn: ['确定'], title: '输入密码解锁(123456)', closeBtn: 0, formType: 1}, function (value, index, elem) {\n                if (value == \"123456\") {\n                    layer.close(index);\n                    $(\".yy\").hide();\n                } else {\n                    layer.msg('密码错误', {anim: 6, time: 1000});\n                }\n            });\n        });\n    });\n\n    console.log(\"        __                         .___      .__        \\n\" +\n        \"  ____ |  | __         _____     __| _/_____ |__| ____  \\n\" +\n        \" /  _ \\\\|  |/ /  ______ \\\\__  \\\\   / __ |/     \\\\|  |/    \\\\ \\n\" +\n        \"(  <_> )    <  /_____/  / __ \\\\_/ /_/ |  Y Y  \\\\  |   |  \\\\\\n\" +\n        \" \\\\____/|__|_ \\\\         (____  /\\\\____ |__|_|  /__|___|  /\\n\" +\n        \"            \\\\/              \\\\/      \\\\/     \\\\/        \\\\/ \\n\" +\n        \"版本：v1.0\\n\" +\n        \"作者：bobi\\n\" +\n        \"邮箱：bobi1234@foxmail.com\\n\" +\n        \"描述：一个很赞的，扁平化风格的，响应式布局的后台管理模版，旨为后端程序员减压！\")\n});\n"
  },
  {
    "path": "lib/animate/animate.css",
    "content": "@charset \"UTF-8\";\n\n/*!\n * animate.css -http://daneden.me/animate\n * Version - 3.7.0\n * Licensed under the MIT license - http://opensource.org/licenses/MIT\n *\n * Copyright (c) 2018 Daniel Eden\n */\n\n@-webkit-keyframes bounce {\n    from,\n    20%,\n    53%,\n    80%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    40%,\n    43% {\n        -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        -webkit-transform: translate3d(0, -30px, 0);\n        transform: translate3d(0, -30px, 0);\n    }\n\n    70% {\n        -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        -webkit-transform: translate3d(0, -15px, 0);\n        transform: translate3d(0, -15px, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(0, -4px, 0);\n        transform: translate3d(0, -4px, 0);\n    }\n}\n\n@keyframes bounce {\n    from,\n    20%,\n    53%,\n    80%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    40%,\n    43% {\n        -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        -webkit-transform: translate3d(0, -30px, 0);\n        transform: translate3d(0, -30px, 0);\n    }\n\n    70% {\n        -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n        -webkit-transform: translate3d(0, -15px, 0);\n        transform: translate3d(0, -15px, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(0, -4px, 0);\n        transform: translate3d(0, -4px, 0);\n    }\n}\n\n.bounce {\n    -webkit-animation-name: bounce;\n    animation-name: bounce;\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n}\n\n@-webkit-keyframes flash {\n    from,\n    50%,\n    to {\n        opacity: 1;\n    }\n\n    25%,\n    75% {\n        opacity: 0;\n    }\n}\n\n@keyframes flash {\n    from,\n    50%,\n    to {\n        opacity: 1;\n    }\n\n    25%,\n    75% {\n        opacity: 0;\n    }\n}\n\n.flash {\n    -webkit-animation-name: flash;\n    animation-name: flash;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes pulse {\n    from {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n\n    50% {\n        -webkit-transform: scale3d(1.05, 1.05, 1.05);\n        transform: scale3d(1.05, 1.05, 1.05);\n    }\n\n    to {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n@keyframes pulse {\n    from {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n\n    50% {\n        -webkit-transform: scale3d(1.05, 1.05, 1.05);\n        transform: scale3d(1.05, 1.05, 1.05);\n    }\n\n    to {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n.pulse {\n    -webkit-animation-name: pulse;\n    animation-name: pulse;\n}\n\n@-webkit-keyframes rubberBand {\n    from {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n\n    30% {\n        -webkit-transform: scale3d(1.25, 0.75, 1);\n        transform: scale3d(1.25, 0.75, 1);\n    }\n\n    40% {\n        -webkit-transform: scale3d(0.75, 1.25, 1);\n        transform: scale3d(0.75, 1.25, 1);\n    }\n\n    50% {\n        -webkit-transform: scale3d(1.15, 0.85, 1);\n        transform: scale3d(1.15, 0.85, 1);\n    }\n\n    65% {\n        -webkit-transform: scale3d(0.95, 1.05, 1);\n        transform: scale3d(0.95, 1.05, 1);\n    }\n\n    75% {\n        -webkit-transform: scale3d(1.05, 0.95, 1);\n        transform: scale3d(1.05, 0.95, 1);\n    }\n\n    to {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n@keyframes rubberBand {\n    from {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n\n    30% {\n        -webkit-transform: scale3d(1.25, 0.75, 1);\n        transform: scale3d(1.25, 0.75, 1);\n    }\n\n    40% {\n        -webkit-transform: scale3d(0.75, 1.25, 1);\n        transform: scale3d(0.75, 1.25, 1);\n    }\n\n    50% {\n        -webkit-transform: scale3d(1.15, 0.85, 1);\n        transform: scale3d(1.15, 0.85, 1);\n    }\n\n    65% {\n        -webkit-transform: scale3d(0.95, 1.05, 1);\n        transform: scale3d(0.95, 1.05, 1);\n    }\n\n    75% {\n        -webkit-transform: scale3d(1.05, 0.95, 1);\n        transform: scale3d(1.05, 0.95, 1);\n    }\n\n    to {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n.rubberBand {\n    -webkit-animation-name: rubberBand;\n    animation-name: rubberBand;\n}\n\n@-webkit-keyframes shake {\n    from,\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    10%,\n    30%,\n    50%,\n    70%,\n    90% {\n        -webkit-transform: translate3d(-10px, 0, 0);\n        transform: translate3d(-10px, 0, 0);\n    }\n\n    20%,\n    40%,\n    60%,\n    80% {\n        -webkit-transform: translate3d(10px, 0, 0);\n        transform: translate3d(10px, 0, 0);\n    }\n}\n\n@keyframes shake {\n    from,\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    10%,\n    30%,\n    50%,\n    70%,\n    90% {\n        -webkit-transform: translate3d(-10px, 0, 0);\n        transform: translate3d(-10px, 0, 0);\n    }\n\n    20%,\n    40%,\n    60%,\n    80% {\n        -webkit-transform: translate3d(10px, 0, 0);\n        transform: translate3d(10px, 0, 0);\n    }\n}\n\n.shake {\n    -webkit-animation-name: shake;\n    animation-name: shake;\n}\n\n@-webkit-keyframes headShake {\n    0% {\n        -webkit-transform: translateX(0);\n        transform: translateX(0);\n    }\n\n    6.5% {\n        -webkit-transform: translateX(-6px) rotateY(-9deg);\n        transform: translateX(-6px) rotateY(-9deg);\n    }\n\n    18.5% {\n        -webkit-transform: translateX(5px) rotateY(7deg);\n        transform: translateX(5px) rotateY(7deg);\n    }\n\n    31.5% {\n        -webkit-transform: translateX(-3px) rotateY(-5deg);\n        transform: translateX(-3px) rotateY(-5deg);\n    }\n\n    43.5% {\n        -webkit-transform: translateX(2px) rotateY(3deg);\n        transform: translateX(2px) rotateY(3deg);\n    }\n\n    50% {\n        -webkit-transform: translateX(0);\n        transform: translateX(0);\n    }\n}\n\n@keyframes headShake {\n    0% {\n        -webkit-transform: translateX(0);\n        transform: translateX(0);\n    }\n\n    6.5% {\n        -webkit-transform: translateX(-6px) rotateY(-9deg);\n        transform: translateX(-6px) rotateY(-9deg);\n    }\n\n    18.5% {\n        -webkit-transform: translateX(5px) rotateY(7deg);\n        transform: translateX(5px) rotateY(7deg);\n    }\n\n    31.5% {\n        -webkit-transform: translateX(-3px) rotateY(-5deg);\n        transform: translateX(-3px) rotateY(-5deg);\n    }\n\n    43.5% {\n        -webkit-transform: translateX(2px) rotateY(3deg);\n        transform: translateX(2px) rotateY(3deg);\n    }\n\n    50% {\n        -webkit-transform: translateX(0);\n        transform: translateX(0);\n    }\n}\n\n.headShake {\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-name: headShake;\n    animation-name: headShake;\n}\n\n@-webkit-keyframes swing {\n    20% {\n        -webkit-transform: rotate3d(0, 0, 1, 15deg);\n        transform: rotate3d(0, 0, 1, 15deg);\n    }\n\n    40% {\n        -webkit-transform: rotate3d(0, 0, 1, -10deg);\n        transform: rotate3d(0, 0, 1, -10deg);\n    }\n\n    60% {\n        -webkit-transform: rotate3d(0, 0, 1, 5deg);\n        transform: rotate3d(0, 0, 1, 5deg);\n    }\n\n    80% {\n        -webkit-transform: rotate3d(0, 0, 1, -5deg);\n        transform: rotate3d(0, 0, 1, -5deg);\n    }\n\n    to {\n        -webkit-transform: rotate3d(0, 0, 1, 0deg);\n        transform: rotate3d(0, 0, 1, 0deg);\n    }\n}\n\n@keyframes swing {\n    20% {\n        -webkit-transform: rotate3d(0, 0, 1, 15deg);\n        transform: rotate3d(0, 0, 1, 15deg);\n    }\n\n    40% {\n        -webkit-transform: rotate3d(0, 0, 1, -10deg);\n        transform: rotate3d(0, 0, 1, -10deg);\n    }\n\n    60% {\n        -webkit-transform: rotate3d(0, 0, 1, 5deg);\n        transform: rotate3d(0, 0, 1, 5deg);\n    }\n\n    80% {\n        -webkit-transform: rotate3d(0, 0, 1, -5deg);\n        transform: rotate3d(0, 0, 1, -5deg);\n    }\n\n    to {\n        -webkit-transform: rotate3d(0, 0, 1, 0deg);\n        transform: rotate3d(0, 0, 1, 0deg);\n    }\n}\n\n.swing {\n    -webkit-transform-origin: top center;\n    transform-origin: top center;\n    -webkit-animation-name: swing;\n    animation-name: swing;\n}\n\n@-webkit-keyframes tada {\n    from {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n\n    10%,\n    20% {\n        -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n        transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n    }\n\n    30%,\n    50%,\n    70%,\n    90% {\n        -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n        transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    }\n\n    40%,\n    60%,\n    80% {\n        -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n        transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    }\n\n    to {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n@keyframes tada {\n    from {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n\n    10%,\n    20% {\n        -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n        transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n    }\n\n    30%,\n    50%,\n    70%,\n    90% {\n        -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n        transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    }\n\n    40%,\n    60%,\n    80% {\n        -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n        transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    }\n\n    to {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n.tada {\n    -webkit-animation-name: tada;\n    animation-name: tada;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes wobble {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    15% {\n        -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n        transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    }\n\n    30% {\n        -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n        transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    }\n\n    45% {\n        -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n        transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    }\n\n    60% {\n        -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n        transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    }\n\n    75% {\n        -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n        transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes wobble {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    15% {\n        -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n        transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    }\n\n    30% {\n        -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n        transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    }\n\n    45% {\n        -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n        transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    }\n\n    60% {\n        -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n        transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    }\n\n    75% {\n        -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n        transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.wobble {\n    -webkit-animation-name: wobble;\n    animation-name: wobble;\n}\n\n@-webkit-keyframes jello {\n    from,\n    11.1%,\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    22.2% {\n        -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n        transform: skewX(-12.5deg) skewY(-12.5deg);\n    }\n\n    33.3% {\n        -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n        transform: skewX(6.25deg) skewY(6.25deg);\n    }\n\n    44.4% {\n        -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n        transform: skewX(-3.125deg) skewY(-3.125deg);\n    }\n\n    55.5% {\n        -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n        transform: skewX(1.5625deg) skewY(1.5625deg);\n    }\n\n    66.6% {\n        -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n        transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    }\n\n    77.7% {\n        -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);\n        transform: skewX(0.390625deg) skewY(0.390625deg);\n    }\n\n    88.8% {\n        -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n        transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n    }\n}\n\n@keyframes jello {\n    from,\n    11.1%,\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    22.2% {\n        -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n        transform: skewX(-12.5deg) skewY(-12.5deg);\n    }\n\n    33.3% {\n        -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n        transform: skewX(6.25deg) skewY(6.25deg);\n    }\n\n    44.4% {\n        -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n        transform: skewX(-3.125deg) skewY(-3.125deg);\n    }\n\n    55.5% {\n        -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n        transform: skewX(1.5625deg) skewY(1.5625deg);\n    }\n\n    66.6% {\n        -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n        transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    }\n\n    77.7% {\n        -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);\n        transform: skewX(0.390625deg) skewY(0.390625deg);\n    }\n\n    88.8% {\n        -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n        transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n    }\n}\n\n.jello {\n    -webkit-animation-name: jello;\n    animation-name: jello;\n    -webkit-transform-origin: center;\n    transform-origin: center;\n}\n\n@-webkit-keyframes heartBeat {\n    0% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n\n    14% {\n        -webkit-transform: scale(1.3);\n        transform: scale(1.3);\n    }\n\n    28% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n\n    42% {\n        -webkit-transform: scale(1.3);\n        transform: scale(1.3);\n    }\n\n    70% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n}\n\n@keyframes heartBeat {\n    0% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n\n    14% {\n        -webkit-transform: scale(1.3);\n        transform: scale(1.3);\n    }\n\n    28% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n\n    42% {\n        -webkit-transform: scale(1.3);\n        transform: scale(1.3);\n    }\n\n    70% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n}\n\n.heartBeat {\n    -webkit-animation-name: heartBeat;\n    animation-name: heartBeat;\n    -webkit-animation-duration: 1.3s;\n    animation-duration: 1.3s;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n}\n\n@-webkit-keyframes bounceIn {\n    from,\n    20%,\n    40%,\n    60%,\n    80%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    0% {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n\n    20% {\n        -webkit-transform: scale3d(1.1, 1.1, 1.1);\n        transform: scale3d(1.1, 1.1, 1.1);\n    }\n\n    40% {\n        -webkit-transform: scale3d(0.9, 0.9, 0.9);\n        transform: scale3d(0.9, 0.9, 0.9);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(1.03, 1.03, 1.03);\n        transform: scale3d(1.03, 1.03, 1.03);\n    }\n\n    80% {\n        -webkit-transform: scale3d(0.97, 0.97, 0.97);\n        transform: scale3d(0.97, 0.97, 0.97);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n@keyframes bounceIn {\n    from,\n    20%,\n    40%,\n    60%,\n    80%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    0% {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n\n    20% {\n        -webkit-transform: scale3d(1.1, 1.1, 1.1);\n        transform: scale3d(1.1, 1.1, 1.1);\n    }\n\n    40% {\n        -webkit-transform: scale3d(0.9, 0.9, 0.9);\n        transform: scale3d(0.9, 0.9, 0.9);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(1.03, 1.03, 1.03);\n        transform: scale3d(1.03, 1.03, 1.03);\n    }\n\n    80% {\n        -webkit-transform: scale3d(0.97, 0.97, 0.97);\n        transform: scale3d(0.97, 0.97, 0.97);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1);\n    }\n}\n\n.bounceIn {\n    -webkit-animation-duration: 0.75s;\n    animation-duration: 0.75s;\n    -webkit-animation-name: bounceIn;\n    animation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceInDown {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -3000px, 0);\n        transform: translate3d(0, -3000px, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 25px, 0);\n        transform: translate3d(0, 25px, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(0, -10px, 0);\n        transform: translate3d(0, -10px, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(0, 5px, 0);\n        transform: translate3d(0, 5px, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes bounceInDown {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -3000px, 0);\n        transform: translate3d(0, -3000px, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 25px, 0);\n        transform: translate3d(0, 25px, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(0, -10px, 0);\n        transform: translate3d(0, -10px, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(0, 5px, 0);\n        transform: translate3d(0, 5px, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.bounceInDown {\n    -webkit-animation-name: bounceInDown;\n    animation-name: bounceInDown;\n}\n\n@-webkit-keyframes bounceInLeft {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(-3000px, 0, 0);\n        transform: translate3d(-3000px, 0, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(25px, 0, 0);\n        transform: translate3d(25px, 0, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(-10px, 0, 0);\n        transform: translate3d(-10px, 0, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(5px, 0, 0);\n        transform: translate3d(5px, 0, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes bounceInLeft {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(-3000px, 0, 0);\n        transform: translate3d(-3000px, 0, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(25px, 0, 0);\n        transform: translate3d(25px, 0, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(-10px, 0, 0);\n        transform: translate3d(-10px, 0, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(5px, 0, 0);\n        transform: translate3d(5px, 0, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.bounceInLeft {\n    -webkit-animation-name: bounceInLeft;\n    animation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(3000px, 0, 0);\n        transform: translate3d(3000px, 0, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(-25px, 0, 0);\n        transform: translate3d(-25px, 0, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(10px, 0, 0);\n        transform: translate3d(10px, 0, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(-5px, 0, 0);\n        transform: translate3d(-5px, 0, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes bounceInRight {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(3000px, 0, 0);\n        transform: translate3d(3000px, 0, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(-25px, 0, 0);\n        transform: translate3d(-25px, 0, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(10px, 0, 0);\n        transform: translate3d(10px, 0, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(-5px, 0, 0);\n        transform: translate3d(-5px, 0, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.bounceInRight {\n    -webkit-animation-name: bounceInRight;\n    animation-name: bounceInRight;\n}\n\n@-webkit-keyframes bounceInUp {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 3000px, 0);\n        transform: translate3d(0, 3000px, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, -20px, 0);\n        transform: translate3d(0, -20px, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(0, 10px, 0);\n        transform: translate3d(0, 10px, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(0, -5px, 0);\n        transform: translate3d(0, -5px, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes bounceInUp {\n    from,\n    60%,\n    75%,\n    90%,\n    to {\n        -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n        animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    }\n\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 3000px, 0);\n        transform: translate3d(0, 3000px, 0);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, -20px, 0);\n        transform: translate3d(0, -20px, 0);\n    }\n\n    75% {\n        -webkit-transform: translate3d(0, 10px, 0);\n        transform: translate3d(0, 10px, 0);\n    }\n\n    90% {\n        -webkit-transform: translate3d(0, -5px, 0);\n        transform: translate3d(0, -5px, 0);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.bounceInUp {\n    -webkit-animation-name: bounceInUp;\n    animation-name: bounceInUp;\n}\n\n@-webkit-keyframes bounceOut {\n    20% {\n        -webkit-transform: scale3d(0.9, 0.9, 0.9);\n        transform: scale3d(0.9, 0.9, 0.9);\n    }\n\n    50%,\n    55% {\n        opacity: 1;\n        -webkit-transform: scale3d(1.1, 1.1, 1.1);\n        transform: scale3d(1.1, 1.1, 1.1);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n}\n\n@keyframes bounceOut {\n    20% {\n        -webkit-transform: scale3d(0.9, 0.9, 0.9);\n        transform: scale3d(0.9, 0.9, 0.9);\n    }\n\n    50%,\n    55% {\n        opacity: 1;\n        -webkit-transform: scale3d(1.1, 1.1, 1.1);\n        transform: scale3d(1.1, 1.1, 1.1);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n}\n\n.bounceOut {\n    -webkit-animation-duration: 0.75s;\n    animation-duration: 0.75s;\n    -webkit-animation-name: bounceOut;\n    animation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceOutDown {\n    20% {\n        -webkit-transform: translate3d(0, 10px, 0);\n        transform: translate3d(0, 10px, 0);\n    }\n\n    40%,\n    45% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, -20px, 0);\n        transform: translate3d(0, -20px, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 2000px, 0);\n        transform: translate3d(0, 2000px, 0);\n    }\n}\n\n@keyframes bounceOutDown {\n    20% {\n        -webkit-transform: translate3d(0, 10px, 0);\n        transform: translate3d(0, 10px, 0);\n    }\n\n    40%,\n    45% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, -20px, 0);\n        transform: translate3d(0, -20px, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 2000px, 0);\n        transform: translate3d(0, 2000px, 0);\n    }\n}\n\n.bounceOutDown {\n    -webkit-animation-name: bounceOutDown;\n    animation-name: bounceOutDown;\n}\n\n@-webkit-keyframes bounceOutLeft {\n    20% {\n        opacity: 1;\n        -webkit-transform: translate3d(20px, 0, 0);\n        transform: translate3d(20px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(-2000px, 0, 0);\n        transform: translate3d(-2000px, 0, 0);\n    }\n}\n\n@keyframes bounceOutLeft {\n    20% {\n        opacity: 1;\n        -webkit-transform: translate3d(20px, 0, 0);\n        transform: translate3d(20px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(-2000px, 0, 0);\n        transform: translate3d(-2000px, 0, 0);\n    }\n}\n\n.bounceOutLeft {\n    -webkit-animation-name: bounceOutLeft;\n    animation-name: bounceOutLeft;\n}\n\n@-webkit-keyframes bounceOutRight {\n    20% {\n        opacity: 1;\n        -webkit-transform: translate3d(-20px, 0, 0);\n        transform: translate3d(-20px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(2000px, 0, 0);\n        transform: translate3d(2000px, 0, 0);\n    }\n}\n\n@keyframes bounceOutRight {\n    20% {\n        opacity: 1;\n        -webkit-transform: translate3d(-20px, 0, 0);\n        transform: translate3d(-20px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(2000px, 0, 0);\n        transform: translate3d(2000px, 0, 0);\n    }\n}\n\n.bounceOutRight {\n    -webkit-animation-name: bounceOutRight;\n    animation-name: bounceOutRight;\n}\n\n@-webkit-keyframes bounceOutUp {\n    20% {\n        -webkit-transform: translate3d(0, -10px, 0);\n        transform: translate3d(0, -10px, 0);\n    }\n\n    40%,\n    45% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 20px, 0);\n        transform: translate3d(0, 20px, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -2000px, 0);\n        transform: translate3d(0, -2000px, 0);\n    }\n}\n\n@keyframes bounceOutUp {\n    20% {\n        -webkit-transform: translate3d(0, -10px, 0);\n        transform: translate3d(0, -10px, 0);\n    }\n\n    40%,\n    45% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 20px, 0);\n        transform: translate3d(0, 20px, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -2000px, 0);\n        transform: translate3d(0, -2000px, 0);\n    }\n}\n\n.bounceOutUp {\n    -webkit-animation-name: bounceOutUp;\n    animation-name: bounceOutUp;\n}\n\n@-webkit-keyframes fadeIn {\n    from {\n        opacity: 0;\n    }\n\n    to {\n        opacity: 1;\n    }\n}\n\n@keyframes fadeIn {\n    from {\n        opacity: 0;\n    }\n\n    to {\n        opacity: 1;\n    }\n}\n\n.fadeIn {\n    -webkit-animation-name: fadeIn;\n    animation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInDown {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInDown {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInDown {\n    -webkit-animation-name: fadeInDown;\n    animation-name: fadeInDown;\n}\n\n@-webkit-keyframes fadeInDownBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -2000px, 0);\n        transform: translate3d(0, -2000px, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInDownBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -2000px, 0);\n        transform: translate3d(0, -2000px, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInDownBig {\n    -webkit-animation-name: fadeInDownBig;\n    animation-name: fadeInDownBig;\n}\n\n@-webkit-keyframes fadeInLeft {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInLeft {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInLeft {\n    -webkit-animation-name: fadeInLeft;\n    animation-name: fadeInLeft;\n}\n\n@-webkit-keyframes fadeInLeftBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(-2000px, 0, 0);\n        transform: translate3d(-2000px, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInLeftBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(-2000px, 0, 0);\n        transform: translate3d(-2000px, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInLeftBig {\n    -webkit-animation-name: fadeInLeftBig;\n    animation-name: fadeInLeftBig;\n}\n\n@-webkit-keyframes fadeInRight {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInRight {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInRight {\n    -webkit-animation-name: fadeInRight;\n    animation-name: fadeInRight;\n}\n\n@-webkit-keyframes fadeInRightBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(2000px, 0, 0);\n        transform: translate3d(2000px, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInRightBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(2000px, 0, 0);\n        transform: translate3d(2000px, 0, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInRightBig {\n    -webkit-animation-name: fadeInRightBig;\n    animation-name: fadeInRightBig;\n}\n\n@-webkit-keyframes fadeInUp {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInUp {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInUp {\n    -webkit-animation-name: fadeInUp;\n    animation-name: fadeInUp;\n}\n\n@-webkit-keyframes fadeInUpBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 2000px, 0);\n        transform: translate3d(0, 2000px, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes fadeInUpBig {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 2000px, 0);\n        transform: translate3d(0, 2000px, 0);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.fadeInUpBig {\n    -webkit-animation-name: fadeInUpBig;\n    animation-name: fadeInUpBig;\n}\n\n@-webkit-keyframes fadeOut {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n    }\n}\n\n@keyframes fadeOut {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n    }\n}\n\n.fadeOut {\n    -webkit-animation-name: fadeOut;\n    animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeOutDown {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n@keyframes fadeOutDown {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n.fadeOutDown {\n    -webkit-animation-name: fadeOutDown;\n    animation-name: fadeOutDown;\n}\n\n@-webkit-keyframes fadeOutDownBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 2000px, 0);\n        transform: translate3d(0, 2000px, 0);\n    }\n}\n\n@keyframes fadeOutDownBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 2000px, 0);\n        transform: translate3d(0, 2000px, 0);\n    }\n}\n\n.fadeOutDownBig {\n    -webkit-animation-name: fadeOutDownBig;\n    animation-name: fadeOutDownBig;\n}\n\n@-webkit-keyframes fadeOutLeft {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n}\n\n@keyframes fadeOutLeft {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n}\n\n.fadeOutLeft {\n    -webkit-animation-name: fadeOutLeft;\n    animation-name: fadeOutLeft;\n}\n\n@-webkit-keyframes fadeOutLeftBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(-2000px, 0, 0);\n        transform: translate3d(-2000px, 0, 0);\n    }\n}\n\n@keyframes fadeOutLeftBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(-2000px, 0, 0);\n        transform: translate3d(-2000px, 0, 0);\n    }\n}\n\n.fadeOutLeftBig {\n    -webkit-animation-name: fadeOutLeftBig;\n    animation-name: fadeOutLeftBig;\n}\n\n@-webkit-keyframes fadeOutRight {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n}\n\n@keyframes fadeOutRight {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n}\n\n.fadeOutRight {\n    -webkit-animation-name: fadeOutRight;\n    animation-name: fadeOutRight;\n}\n\n@-webkit-keyframes fadeOutRightBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(2000px, 0, 0);\n        transform: translate3d(2000px, 0, 0);\n    }\n}\n\n@keyframes fadeOutRightBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(2000px, 0, 0);\n        transform: translate3d(2000px, 0, 0);\n    }\n}\n\n.fadeOutRightBig {\n    -webkit-animation-name: fadeOutRightBig;\n    animation-name: fadeOutRightBig;\n}\n\n@-webkit-keyframes fadeOutUp {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n}\n\n@keyframes fadeOutUp {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n}\n\n.fadeOutUp {\n    -webkit-animation-name: fadeOutUp;\n    animation-name: fadeOutUp;\n}\n\n@-webkit-keyframes fadeOutUpBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -2000px, 0);\n        transform: translate3d(0, -2000px, 0);\n    }\n}\n\n@keyframes fadeOutUpBig {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -2000px, 0);\n        transform: translate3d(0, -2000px, 0);\n    }\n}\n\n.fadeOutUpBig {\n    -webkit-animation-name: fadeOutUpBig;\n    animation-name: fadeOutUpBig;\n}\n\n@-webkit-keyframes flip {\n    from {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, -360deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);\n        -webkit-animation-timing-function: ease-out;\n        animation-timing-function: ease-out;\n    }\n\n    40% {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -190deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -190deg);\n        -webkit-animation-timing-function: ease-out;\n        animation-timing-function: ease-out;\n    }\n\n    50% {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -170deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -170deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    80% {\n        -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, 0deg);\n        transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, 0deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    to {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, 0deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n}\n\n@keyframes flip {\n    from {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, -360deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);\n        -webkit-animation-timing-function: ease-out;\n        animation-timing-function: ease-out;\n    }\n\n    40% {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -190deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -190deg);\n        -webkit-animation-timing-function: ease-out;\n        animation-timing-function: ease-out;\n    }\n\n    50% {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -170deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n        rotate3d(0, 1, 0, -170deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    80% {\n        -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, 0deg);\n        transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, 0deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    to {\n        -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n        rotate3d(0, 1, 0, 0deg);\n        transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n}\n\n.animated.flip {\n    -webkit-backface-visibility: visible;\n    backface-visibility: visible;\n    -webkit-animation-name: flip;\n    animation-name: flip;\n}\n\n@-webkit-keyframes flipInX {\n    from {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n        opacity: 0;\n    }\n\n    40% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    60% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n        opacity: 1;\n    }\n\n    80% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    }\n\n    to {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n}\n\n@keyframes flipInX {\n    from {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n        opacity: 0;\n    }\n\n    40% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    60% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n        opacity: 1;\n    }\n\n    80% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    }\n\n    to {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n}\n\n.flipInX {\n    -webkit-backface-visibility: visible !important;\n    backface-visibility: visible !important;\n    -webkit-animation-name: flipInX;\n    animation-name: flipInX;\n}\n\n@-webkit-keyframes flipInY {\n    from {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n        opacity: 0;\n    }\n\n    40% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    60% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n        opacity: 1;\n    }\n\n    80% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    }\n\n    to {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n}\n\n@keyframes flipInY {\n    from {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n        opacity: 0;\n    }\n\n    40% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n        -webkit-animation-timing-function: ease-in;\n        animation-timing-function: ease-in;\n    }\n\n    60% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n        opacity: 1;\n    }\n\n    80% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    }\n\n    to {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n}\n\n.flipInY {\n    -webkit-backface-visibility: visible !important;\n    backface-visibility: visible !important;\n    -webkit-animation-name: flipInY;\n    animation-name: flipInY;\n}\n\n@-webkit-keyframes flipOutX {\n    from {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n\n    30% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        opacity: 0;\n    }\n}\n\n@keyframes flipOutX {\n    from {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n\n    30% {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n        opacity: 0;\n    }\n}\n\n.flipOutX {\n    -webkit-animation-duration: 0.75s;\n    animation-duration: 0.75s;\n    -webkit-animation-name: flipOutX;\n    animation-name: flipOutX;\n    -webkit-backface-visibility: visible !important;\n    backface-visibility: visible !important;\n}\n\n@-webkit-keyframes flipOutY {\n    from {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n\n    30% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        opacity: 0;\n    }\n}\n\n@keyframes flipOutY {\n    from {\n        -webkit-transform: perspective(400px);\n        transform: perspective(400px);\n    }\n\n    30% {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n        opacity: 0;\n    }\n}\n\n.flipOutY {\n    -webkit-animation-duration: 0.75s;\n    animation-duration: 0.75s;\n    -webkit-backface-visibility: visible !important;\n    backface-visibility: visible !important;\n    -webkit-animation-name: flipOutY;\n    animation-name: flipOutY;\n}\n\n@-webkit-keyframes lightSpeedIn {\n    from {\n        -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n        transform: translate3d(100%, 0, 0) skewX(-30deg);\n        opacity: 0;\n    }\n\n    60% {\n        -webkit-transform: skewX(20deg);\n        transform: skewX(20deg);\n        opacity: 1;\n    }\n\n    80% {\n        -webkit-transform: skewX(-5deg);\n        transform: skewX(-5deg);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes lightSpeedIn {\n    from {\n        -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n        transform: translate3d(100%, 0, 0) skewX(-30deg);\n        opacity: 0;\n    }\n\n    60% {\n        -webkit-transform: skewX(20deg);\n        transform: skewX(20deg);\n        opacity: 1;\n    }\n\n    80% {\n        -webkit-transform: skewX(-5deg);\n        transform: skewX(-5deg);\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.lightSpeedIn {\n    -webkit-animation-name: lightSpeedIn;\n    animation-name: lightSpeedIn;\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n}\n\n@-webkit-keyframes lightSpeedOut {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n        transform: translate3d(100%, 0, 0) skewX(30deg);\n        opacity: 0;\n    }\n}\n\n@keyframes lightSpeedOut {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n        transform: translate3d(100%, 0, 0) skewX(30deg);\n        opacity: 0;\n    }\n}\n\n.lightSpeedOut {\n    -webkit-animation-name: lightSpeedOut;\n    animation-name: lightSpeedOut;\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n}\n\n@-webkit-keyframes rotateIn {\n    from {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        -webkit-transform: rotate3d(0, 0, 1, -200deg);\n        transform: rotate3d(0, 0, 1, -200deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n@keyframes rotateIn {\n    from {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        -webkit-transform: rotate3d(0, 0, 1, -200deg);\n        transform: rotate3d(0, 0, 1, -200deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n.rotateIn {\n    -webkit-animation-name: rotateIn;\n    animation-name: rotateIn;\n}\n\n@-webkit-keyframes rotateInDownLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -45deg);\n        transform: rotate3d(0, 0, 1, -45deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n@keyframes rotateInDownLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -45deg);\n        transform: rotate3d(0, 0, 1, -45deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n.rotateInDownLeft {\n    -webkit-animation-name: rotateInDownLeft;\n    animation-name: rotateInDownLeft;\n}\n\n@-webkit-keyframes rotateInDownRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 45deg);\n        transform: rotate3d(0, 0, 1, 45deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n@keyframes rotateInDownRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 45deg);\n        transform: rotate3d(0, 0, 1, 45deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n.rotateInDownRight {\n    -webkit-animation-name: rotateInDownRight;\n    animation-name: rotateInDownRight;\n}\n\n@-webkit-keyframes rotateInUpLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 45deg);\n        transform: rotate3d(0, 0, 1, 45deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n@keyframes rotateInUpLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 45deg);\n        transform: rotate3d(0, 0, 1, 45deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n.rotateInUpLeft {\n    -webkit-animation-name: rotateInUpLeft;\n    animation-name: rotateInUpLeft;\n}\n\n@-webkit-keyframes rotateInUpRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -90deg);\n        transform: rotate3d(0, 0, 1, -90deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n@keyframes rotateInUpRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -90deg);\n        transform: rotate3d(0, 0, 1, -90deg);\n        opacity: 0;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        opacity: 1;\n    }\n}\n\n.rotateInUpRight {\n    -webkit-animation-name: rotateInUpRight;\n    animation-name: rotateInUpRight;\n}\n\n@-webkit-keyframes rotateOut {\n    from {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        -webkit-transform: rotate3d(0, 0, 1, 200deg);\n        transform: rotate3d(0, 0, 1, 200deg);\n        opacity: 0;\n    }\n}\n\n@keyframes rotateOut {\n    from {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: center;\n        transform-origin: center;\n        -webkit-transform: rotate3d(0, 0, 1, 200deg);\n        transform: rotate3d(0, 0, 1, 200deg);\n        opacity: 0;\n    }\n}\n\n.rotateOut {\n    -webkit-animation-name: rotateOut;\n    animation-name: rotateOut;\n}\n\n@-webkit-keyframes rotateOutDownLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 45deg);\n        transform: rotate3d(0, 0, 1, 45deg);\n        opacity: 0;\n    }\n}\n\n@keyframes rotateOutDownLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 45deg);\n        transform: rotate3d(0, 0, 1, 45deg);\n        opacity: 0;\n    }\n}\n\n.rotateOutDownLeft {\n    -webkit-animation-name: rotateOutDownLeft;\n    animation-name: rotateOutDownLeft;\n}\n\n@-webkit-keyframes rotateOutDownRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -45deg);\n        transform: rotate3d(0, 0, 1, -45deg);\n        opacity: 0;\n    }\n}\n\n@keyframes rotateOutDownRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -45deg);\n        transform: rotate3d(0, 0, 1, -45deg);\n        opacity: 0;\n    }\n}\n\n.rotateOutDownRight {\n    -webkit-animation-name: rotateOutDownRight;\n    animation-name: rotateOutDownRight;\n}\n\n@-webkit-keyframes rotateOutUpLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -45deg);\n        transform: rotate3d(0, 0, 1, -45deg);\n        opacity: 0;\n    }\n}\n\n@keyframes rotateOutUpLeft {\n    from {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: left bottom;\n        transform-origin: left bottom;\n        -webkit-transform: rotate3d(0, 0, 1, -45deg);\n        transform: rotate3d(0, 0, 1, -45deg);\n        opacity: 0;\n    }\n}\n\n.rotateOutUpLeft {\n    -webkit-animation-name: rotateOutUpLeft;\n    animation-name: rotateOutUpLeft;\n}\n\n@-webkit-keyframes rotateOutUpRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 90deg);\n        transform: rotate3d(0, 0, 1, 90deg);\n        opacity: 0;\n    }\n}\n\n@keyframes rotateOutUpRight {\n    from {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform-origin: right bottom;\n        transform-origin: right bottom;\n        -webkit-transform: rotate3d(0, 0, 1, 90deg);\n        transform: rotate3d(0, 0, 1, 90deg);\n        opacity: 0;\n    }\n}\n\n.rotateOutUpRight {\n    -webkit-animation-name: rotateOutUpRight;\n    animation-name: rotateOutUpRight;\n}\n\n@-webkit-keyframes hinge {\n    0% {\n        -webkit-transform-origin: top left;\n        transform-origin: top left;\n        -webkit-animation-timing-function: ease-in-out;\n        animation-timing-function: ease-in-out;\n    }\n\n    20%,\n    60% {\n        -webkit-transform: rotate3d(0, 0, 1, 80deg);\n        transform: rotate3d(0, 0, 1, 80deg);\n        -webkit-transform-origin: top left;\n        transform-origin: top left;\n        -webkit-animation-timing-function: ease-in-out;\n        animation-timing-function: ease-in-out;\n    }\n\n    40%,\n    80% {\n        -webkit-transform: rotate3d(0, 0, 1, 60deg);\n        transform: rotate3d(0, 0, 1, 60deg);\n        -webkit-transform-origin: top left;\n        transform-origin: top left;\n        -webkit-animation-timing-function: ease-in-out;\n        animation-timing-function: ease-in-out;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 700px, 0);\n        transform: translate3d(0, 700px, 0);\n        opacity: 0;\n    }\n}\n\n@keyframes hinge {\n    0% {\n        -webkit-transform-origin: top left;\n        transform-origin: top left;\n        -webkit-animation-timing-function: ease-in-out;\n        animation-timing-function: ease-in-out;\n    }\n\n    20%,\n    60% {\n        -webkit-transform: rotate3d(0, 0, 1, 80deg);\n        transform: rotate3d(0, 0, 1, 80deg);\n        -webkit-transform-origin: top left;\n        transform-origin: top left;\n        -webkit-animation-timing-function: ease-in-out;\n        animation-timing-function: ease-in-out;\n    }\n\n    40%,\n    80% {\n        -webkit-transform: rotate3d(0, 0, 1, 60deg);\n        transform: rotate3d(0, 0, 1, 60deg);\n        -webkit-transform-origin: top left;\n        transform-origin: top left;\n        -webkit-animation-timing-function: ease-in-out;\n        animation-timing-function: ease-in-out;\n        opacity: 1;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 700px, 0);\n        transform: translate3d(0, 700px, 0);\n        opacity: 0;\n    }\n}\n\n.hinge {\n    -webkit-animation-duration: 2s;\n    animation-duration: 2s;\n    -webkit-animation-name: hinge;\n    animation-name: hinge;\n}\n\n@-webkit-keyframes jackInTheBox {\n    from {\n        opacity: 0;\n        -webkit-transform: scale(0.1) rotate(30deg);\n        transform: scale(0.1) rotate(30deg);\n        -webkit-transform-origin: center bottom;\n        transform-origin: center bottom;\n    }\n\n    50% {\n        -webkit-transform: rotate(-10deg);\n        transform: rotate(-10deg);\n    }\n\n    70% {\n        -webkit-transform: rotate(3deg);\n        transform: rotate(3deg);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n}\n\n@keyframes jackInTheBox {\n    from {\n        opacity: 0;\n        -webkit-transform: scale(0.1) rotate(30deg);\n        transform: scale(0.1) rotate(30deg);\n        -webkit-transform-origin: center bottom;\n        transform-origin: center bottom;\n    }\n\n    50% {\n        -webkit-transform: rotate(-10deg);\n        transform: rotate(-10deg);\n    }\n\n    70% {\n        -webkit-transform: rotate(3deg);\n        transform: rotate(3deg);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n}\n\n.jackInTheBox {\n    -webkit-animation-name: jackInTheBox;\n    animation-name: jackInTheBox;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollIn {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n        transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes rollIn {\n    from {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n        transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    }\n\n    to {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.rollIn {\n    -webkit-animation-name: rollIn;\n    animation-name: rollIn;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollOut {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n        transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    }\n}\n\n@keyframes rollOut {\n    from {\n        opacity: 1;\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n        transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    }\n}\n\n.rollOut {\n    -webkit-animation-name: rollOut;\n    animation-name: rollOut;\n}\n\n@-webkit-keyframes zoomIn {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n\n    50% {\n        opacity: 1;\n    }\n}\n\n@keyframes zoomIn {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n\n    50% {\n        opacity: 1;\n    }\n}\n\n.zoomIn {\n    -webkit-animation-name: zoomIn;\n    animation-name: zoomIn;\n}\n\n@-webkit-keyframes zoomInDown {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n@keyframes zoomInDown {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n.zoomInDown {\n    -webkit-animation-name: zoomInDown;\n    animation-name: zoomInDown;\n}\n\n@-webkit-keyframes zoomInLeft {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n@keyframes zoomInLeft {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n.zoomInLeft {\n    -webkit-animation-name: zoomInLeft;\n    animation-name: zoomInLeft;\n}\n\n@-webkit-keyframes zoomInRight {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n@keyframes zoomInRight {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n.zoomInRight {\n    -webkit-animation-name: zoomInRight;\n    animation-name: zoomInRight;\n}\n\n@-webkit-keyframes zoomInUp {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n@keyframes zoomInUp {\n    from {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    60% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n.zoomInUp {\n    -webkit-animation-name: zoomInUp;\n    animation-name: zoomInUp;\n}\n\n@-webkit-keyframes zoomOut {\n    from {\n        opacity: 1;\n    }\n\n    50% {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n\n    to {\n        opacity: 0;\n    }\n}\n\n@keyframes zoomOut {\n    from {\n        opacity: 1;\n    }\n\n    50% {\n        opacity: 0;\n        -webkit-transform: scale3d(0.3, 0.3, 0.3);\n        transform: scale3d(0.3, 0.3, 0.3);\n    }\n\n    to {\n        opacity: 0;\n    }\n}\n\n.zoomOut {\n    -webkit-animation-name: zoomOut;\n    animation-name: zoomOut;\n}\n\n@-webkit-keyframes zoomOutDown {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n        -webkit-transform-origin: center bottom;\n        transform-origin: center bottom;\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n@keyframes zoomOutDown {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n        -webkit-transform-origin: center bottom;\n        transform-origin: center bottom;\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n.zoomOutDown {\n    -webkit-animation-name: zoomOutDown;\n    animation-name: zoomOutDown;\n}\n\n@-webkit-keyframes zoomOutLeft {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n        transform: scale(0.1) translate3d(-2000px, 0, 0);\n        -webkit-transform-origin: left center;\n        transform-origin: left center;\n    }\n}\n\n@keyframes zoomOutLeft {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n        transform: scale(0.1) translate3d(-2000px, 0, 0);\n        -webkit-transform-origin: left center;\n        transform-origin: left center;\n    }\n}\n\n.zoomOutLeft {\n    -webkit-animation-name: zoomOutLeft;\n    animation-name: zoomOutLeft;\n}\n\n@-webkit-keyframes zoomOutRight {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n        transform: scale(0.1) translate3d(2000px, 0, 0);\n        -webkit-transform-origin: right center;\n        transform-origin: right center;\n    }\n}\n\n@keyframes zoomOutRight {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n        transform: scale(0.1) translate3d(2000px, 0, 0);\n        -webkit-transform-origin: right center;\n        transform-origin: right center;\n    }\n}\n\n.zoomOutRight {\n    -webkit-animation-name: zoomOutRight;\n    animation-name: zoomOutRight;\n}\n\n@-webkit-keyframes zoomOutUp {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n        -webkit-transform-origin: center bottom;\n        transform-origin: center bottom;\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n@keyframes zoomOutUp {\n    40% {\n        opacity: 1;\n        -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n        -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n        animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    }\n\n    to {\n        opacity: 0;\n        -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n        transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n        -webkit-transform-origin: center bottom;\n        transform-origin: center bottom;\n        -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n        animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    }\n}\n\n.zoomOutUp {\n    -webkit-animation-name: zoomOutUp;\n    animation-name: zoomOutUp;\n}\n\n@-webkit-keyframes slideInDown {\n    from {\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes slideInDown {\n    from {\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.slideInDown {\n    -webkit-animation-name: slideInDown;\n    animation-name: slideInDown;\n}\n\n@-webkit-keyframes slideInLeft {\n    from {\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes slideInLeft {\n    from {\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.slideInLeft {\n    -webkit-animation-name: slideInLeft;\n    animation-name: slideInLeft;\n}\n\n@-webkit-keyframes slideInRight {\n    from {\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes slideInRight {\n    from {\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.slideInRight {\n    -webkit-animation-name: slideInRight;\n    animation-name: slideInRight;\n}\n\n@-webkit-keyframes slideInUp {\n    from {\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes slideInUp {\n    from {\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n        visibility: visible;\n    }\n\n    to {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n.slideInUp {\n    -webkit-animation-name: slideInUp;\n    animation-name: slideInUp;\n}\n\n@-webkit-keyframes slideOutDown {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n@keyframes slideOutDown {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n.slideOutDown {\n    -webkit-animation-name: slideOutDown;\n    animation-name: slideOutDown;\n}\n\n@-webkit-keyframes slideOutLeft {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n}\n\n@keyframes slideOutLeft {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n}\n\n.slideOutLeft {\n    -webkit-animation-name: slideOutLeft;\n    animation-name: slideOutLeft;\n}\n\n@-webkit-keyframes slideOutRight {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n}\n\n@keyframes slideOutRight {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n}\n\n.slideOutRight {\n    -webkit-animation-name: slideOutRight;\n    animation-name: slideOutRight;\n}\n\n@-webkit-keyframes slideOutUp {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n}\n\n@keyframes slideOutUp {\n    from {\n        -webkit-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n\n    to {\n        visibility: hidden;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n}\n\n.slideOutUp {\n    -webkit-animation-name: slideOutUp;\n    animation-name: slideOutUp;\n}\n\n.animated {\n    -webkit-animation-duration: 1s;\n    animation-duration: 1s;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both;\n}\n\n.animated.infinite {\n    -webkit-animation-iteration-count: infinite;\n    animation-iteration-count: infinite;\n}\n\n.animated.delay-1s {\n    -webkit-animation-delay: 1s;\n    animation-delay: 1s;\n}\n\n.animated.delay-2s {\n    -webkit-animation-delay: 2s;\n    animation-delay: 2s;\n}\n\n.animated.delay-3s {\n    -webkit-animation-delay: 3s;\n    animation-delay: 3s;\n}\n\n.animated.delay-4s {\n    -webkit-animation-delay: 4s;\n    animation-delay: 4s;\n}\n\n.animated.delay-5s {\n    -webkit-animation-delay: 5s;\n    animation-delay: 5s;\n}\n\n.animated.fast {\n    -webkit-animation-duration: 800ms;\n    animation-duration: 800ms;\n}\n\n.animated.faster {\n    -webkit-animation-duration: 500ms;\n    animation-duration: 500ms;\n}\n\n.animated.slow {\n    -webkit-animation-duration: 2s;\n    animation-duration: 2s;\n}\n\n.animated.slower {\n    -webkit-animation-duration: 3s;\n    animation-duration: 3s;\n}\n\n@media (print), (prefers-reduced-motion) {\n    .animated {\n        -webkit-animation: unset !important;\n        animation: unset !important;\n        -webkit-transition: none !important;\n        transition: none !important;\n    }\n}\n"
  },
  {
    "path": "lib/layui/css/layui.css",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-body,.layui-edge,.layui-elip{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-elip,.layui-form-checkbox span,.layui-form-pane .layui-form-label{text-overflow:ellipsis;white-space:nowrap}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=250);src:url(../font/iconfont.eot?v=250#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=250) format('woff2'),url(../font/iconfont.woff?v=250) format('woff'),url(../font/iconfont.ttf?v=250) format('truetype'),url(../font/iconfont.svg?v=250#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:\"\\e611\"}.layui-icon-set-fill:before{content:\"\\e614\"}.layui-icon-menu-fill:before{content:\"\\e60f\"}.layui-icon-search:before{content:\"\\e615\"}.layui-icon-share:before{content:\"\\e641\"}.layui-icon-set-sm:before{content:\"\\e620\"}.layui-icon-engine:before{content:\"\\e628\"}.layui-icon-close:before{content:\"\\1006\"}.layui-icon-close-fill:before{content:\"\\1007\"}.layui-icon-chart-screen:before{content:\"\\e629\"}.layui-icon-star:before{content:\"\\e600\"}.layui-icon-circle-dot:before{content:\"\\e617\"}.layui-icon-chat:before{content:\"\\e606\"}.layui-icon-release:before{content:\"\\e609\"}.layui-icon-list:before{content:\"\\e60a\"}.layui-icon-chart:before{content:\"\\e62c\"}.layui-icon-ok-circle:before{content:\"\\1005\"}.layui-icon-layim-theme:before{content:\"\\e61b\"}.layui-icon-table:before{content:\"\\e62d\"}.layui-icon-right:before{content:\"\\e602\"}.layui-icon-left:before{content:\"\\e603\"}.layui-icon-cart-simple:before{content:\"\\e698\"}.layui-icon-face-cry:before{content:\"\\e69c\"}.layui-icon-face-smile:before{content:\"\\e6af\"}.layui-icon-survey:before{content:\"\\e6b2\"}.layui-icon-tree:before{content:\"\\e62e\"}.layui-icon-upload-circle:before{content:\"\\e62f\"}.layui-icon-add-circle:before{content:\"\\e61f\"}.layui-icon-download-circle:before{content:\"\\e601\"}.layui-icon-templeate-1:before{content:\"\\e630\"}.layui-icon-util:before{content:\"\\e631\"}.layui-icon-face-surprised:before{content:\"\\e664\"}.layui-icon-edit:before{content:\"\\e642\"}.layui-icon-speaker:before{content:\"\\e645\"}.layui-icon-down:before{content:\"\\e61a\"}.layui-icon-file:before{content:\"\\e621\"}.layui-icon-layouts:before{content:\"\\e632\"}.layui-icon-rate-half:before{content:\"\\e6c9\"}.layui-icon-add-circle-fine:before{content:\"\\e608\"}.layui-icon-prev-circle:before{content:\"\\e633\"}.layui-icon-read:before{content:\"\\e705\"}.layui-icon-404:before{content:\"\\e61c\"}.layui-icon-carousel:before{content:\"\\e634\"}.layui-icon-help:before{content:\"\\e607\"}.layui-icon-code-circle:before{content:\"\\e635\"}.layui-icon-water:before{content:\"\\e636\"}.layui-icon-username:before{content:\"\\e66f\"}.layui-icon-find-fill:before{content:\"\\e670\"}.layui-icon-about:before{content:\"\\e60b\"}.layui-icon-location:before{content:\"\\e715\"}.layui-icon-up:before{content:\"\\e619\"}.layui-icon-pause:before{content:\"\\e651\"}.layui-icon-date:before{content:\"\\e637\"}.layui-icon-layim-uploadfile:before{content:\"\\e61d\"}.layui-icon-delete:before{content:\"\\e640\"}.layui-icon-play:before{content:\"\\e652\"}.layui-icon-top:before{content:\"\\e604\"}.layui-icon-friends:before{content:\"\\e612\"}.layui-icon-refresh-3:before{content:\"\\e9aa\"}.layui-icon-ok:before{content:\"\\e605\"}.layui-icon-layer:before{content:\"\\e638\"}.layui-icon-face-smile-fine:before{content:\"\\e60c\"}.layui-icon-dollar:before{content:\"\\e659\"}.layui-icon-group:before{content:\"\\e613\"}.layui-icon-layim-download:before{content:\"\\e61e\"}.layui-icon-picture-fine:before{content:\"\\e60d\"}.layui-icon-link:before{content:\"\\e64c\"}.layui-icon-diamond:before{content:\"\\e735\"}.layui-icon-log:before{content:\"\\e60e\"}.layui-icon-rate-solid:before{content:\"\\e67a\"}.layui-icon-fonts-del:before{content:\"\\e64f\"}.layui-icon-unlink:before{content:\"\\e64d\"}.layui-icon-fonts-clear:before{content:\"\\e639\"}.layui-icon-triangle-r:before{content:\"\\e623\"}.layui-icon-circle:before{content:\"\\e63f\"}.layui-icon-radio:before{content:\"\\e643\"}.layui-icon-align-center:before{content:\"\\e647\"}.layui-icon-align-right:before{content:\"\\e648\"}.layui-icon-align-left:before{content:\"\\e649\"}.layui-icon-loading-1:before{content:\"\\e63e\"}.layui-icon-return:before{content:\"\\e65c\"}.layui-icon-fonts-strong:before{content:\"\\e62b\"}.layui-icon-upload:before{content:\"\\e67c\"}.layui-icon-dialogue:before{content:\"\\e63a\"}.layui-icon-video:before{content:\"\\e6ed\"}.layui-icon-headset:before{content:\"\\e6fc\"}.layui-icon-cellphone-fine:before{content:\"\\e63b\"}.layui-icon-add-1:before{content:\"\\e654\"}.layui-icon-face-smile-b:before{content:\"\\e650\"}.layui-icon-fonts-html:before{content:\"\\e64b\"}.layui-icon-form:before{content:\"\\e63c\"}.layui-icon-cart:before{content:\"\\e657\"}.layui-icon-camera-fill:before{content:\"\\e65d\"}.layui-icon-tabs:before{content:\"\\e62a\"}.layui-icon-fonts-code:before{content:\"\\e64e\"}.layui-icon-fire:before{content:\"\\e756\"}.layui-icon-set:before{content:\"\\e716\"}.layui-icon-fonts-u:before{content:\"\\e646\"}.layui-icon-triangle-d:before{content:\"\\e625\"}.layui-icon-tips:before{content:\"\\e702\"}.layui-icon-picture:before{content:\"\\e64a\"}.layui-icon-more-vertical:before{content:\"\\e671\"}.layui-icon-flag:before{content:\"\\e66c\"}.layui-icon-loading:before{content:\"\\e63d\"}.layui-icon-fonts-i:before{content:\"\\e644\"}.layui-icon-refresh-1:before{content:\"\\e666\"}.layui-icon-rmb:before{content:\"\\e65e\"}.layui-icon-home:before{content:\"\\e68e\"}.layui-icon-user:before{content:\"\\e770\"}.layui-icon-notice:before{content:\"\\e667\"}.layui-icon-login-weibo:before{content:\"\\e675\"}.layui-icon-voice:before{content:\"\\e688\"}.layui-icon-upload-drag:before{content:\"\\e681\"}.layui-icon-login-qq:before{content:\"\\e676\"}.layui-icon-snowflake:before{content:\"\\e6b1\"}.layui-icon-file-b:before{content:\"\\e655\"}.layui-icon-template:before{content:\"\\e663\"}.layui-icon-auz:before{content:\"\\e672\"}.layui-icon-console:before{content:\"\\e665\"}.layui-icon-app:before{content:\"\\e653\"}.layui-icon-prev:before{content:\"\\e65a\"}.layui-icon-website:before{content:\"\\e7ae\"}.layui-icon-next:before{content:\"\\e65b\"}.layui-icon-component:before{content:\"\\e857\"}.layui-icon-more:before{content:\"\\e65f\"}.layui-icon-login-wechat:before{content:\"\\e677\"}.layui-icon-shrink-right:before{content:\"\\e668\"}.layui-icon-spread-left:before{content:\"\\e66b\"}.layui-icon-camera:before{content:\"\\e660\"}.layui-icon-note:before{content:\"\\e66e\"}.layui-icon-refresh:before{content:\"\\e669\"}.layui-icon-female:before{content:\"\\e661\"}.layui-icon-male:before{content:\"\\e662\"}.layui-icon-password:before{content:\"\\e673\"}.layui-icon-senior:before{content:\"\\e674\"}.layui-icon-theme:before{content:\"\\e66a\"}.layui-icon-tread:before{content:\"\\e6c5\"}.layui-icon-praise:before{content:\"\\e6c6\"}.layui-icon-star-fill:before{content:\"\\e658\"}.layui-icon-rate:before{content:\"\\e67b\"}.layui-icon-template-1:before{content:\"\\e656\"}.layui-icon-vercode:before{content:\"\\e679\"}.layui-icon-cellphone:before{content:\"\\e678\"}.layui-icon-screen-full:before{content:\"\\e622\"}.layui-icon-screen-restore:before{content:\"\\e758\"}.layui-icon-cols:before{content:\"\\e610\"}.layui-icon-export:before{content:\"\\e67d\"}.layui-icon-print:before{content:\"\\e66d\"}.layui-icon-slider:before{content:\"\\e714\"}.layui-icon-addition:before{content:\"\\e624\"}.layui-icon-subtraction:before{content:\"\\e67e\"}.layui-icon-service:before{content:\"\\e626\"}.layui-icon-transfer:before{content:\"\\e691\"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:fixed;top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space3{margin:-1.5px}.layui-col-space3>*{padding:1.5px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space8{margin:-3.5px}.layui-col-space8>*{padding:3.5px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\\9}:root .layui-form-selected .layui-edge{margin-top:-9px\\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disbaled,.layui-checkbox-disbaled i{border-color:#e2e2e2!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#f2f2f2}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#e6e6e6}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#e6e6e6;color:#C9C9C9}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#f2f2f2;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{position:relative;height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{right:10px}.layui-nav-itemed>.layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #e6e6e6;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;z-index:66666666;width:280px;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#e2e2e2;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:\"\";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:'';position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #e6e6e6;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-15px}.layui-slider-input-btn{display:none;position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #d2d2d2}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #d2d2d2}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:34px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \\0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:'';position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:'';position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:'';position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .3s;-webkit-transition:all .3s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}"
  },
  {
    "path": "lib/layui/css/layui.mobile.css",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}"
  },
  {
    "path": "lib/layui/css/modules/code.css",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}"
  },
  {
    "path": "lib/layui/css/modules/laydate/default/laydate.css",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}"
  },
  {
    "path": "lib/layui/css/modules/layer/default/layer.css",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+\"px\")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}}"
  },
  {
    "path": "lib/layui/lay/modules/carousel.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t=\"carousel\",a=\"layui-this\",l=\">*[carousel-item]>*\",o=\"layui-carousel-left\",r=\"layui-carousel-right\",d=\"layui-carousel-prev\",s=\"layui-carousel-next\",u=\"layui-carousel-arrow\",c=\"layui-carousel-ind\",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:\"600px\",height:\"280px\",full:!1,arrow:\"hover\",indicator:\"inside\",autoplay:!0,interval:3e3,anim:\"\",trigger:\"click\",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:\"fixed\",width:\"100%\",height:\"100%\",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr(\"lay-anim\",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['<button class=\"layui-icon '+u+'\" lay-type=\"sub\">'+(\"updown\"===n.anim?\"&#xe619;\":\"&#xe603;\")+\"</button>\",'<button class=\"layui-icon '+u+'\" lay-type=\"add\">'+(\"updown\"===n.anim?\"&#xe61a;\":\"&#xe602;\")+\"</button>\"].join(\"\"));n.elem.attr(\"lay-arrow\",n.arrow),n.elem.find(\".\"+u)[0]&&n.elem.find(\".\"+u).remove(),n.elem.append(t),t.on(\"click\",function(){var n=i(this),t=n.attr(\"lay-type\");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['<div class=\"'+c+'\"><ul>',function(){var i=[];return layui.each(e.elemItem,function(e){i.push(\"<li\"+(n.index===e?' class=\"layui-this\"':\"\")+\"></li>\")}),i.join(\"\")}(),\"</ul></div>\"].join(\"\"));n.elem.attr(\"lay-indicator\",n.indicator),n.elem.find(\".\"+c)[0]&&n.elem.find(\".\"+c).remove(),n.elem.append(t),\"updown\"===n.anim&&t.css(\"margin-top\",-(t.height()/2)),t.find(\"li\").on(\"hover\"===n.trigger?\"mouseover\":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide(\"add\",a-n.index):a<n.index&&e.slide(\"sub\",n.index-a)})},m.prototype.slide=function(e,i){var n=this,l=n.elemItem,u=n.config,c=u.index,m=u.elem.attr(\"lay-filter\");n.haveSlide||(\"sub\"===e?(n.subIndex(i),l.eq(u.index).addClass(d),setTimeout(function(){l.eq(c).addClass(r),l.eq(u.index).addClass(r)},50)):(n.addIndex(i),l.eq(u.index).addClass(s),setTimeout(function(){l.eq(c).addClass(o),l.eq(u.index).addClass(o)},50)),setTimeout(function(){l.removeClass(a+\" \"+d+\" \"+s+\" \"+o+\" \"+r),l.eq(u.index).addClass(a),n.haveSlide=!1},300),n.elemInd.find(\"li\").eq(u.index).addClass(a).siblings().removeClass(a),n.haveSlide=!0,layui.event.call(this,t,\"change(\"+m+\")\",{index:u.index,prevIndex:c,item:l.eq(u.index)}))},m.prototype.events=function(){var e=this,i=e.config;i.elem.data(\"haveEvents\")||(i.elem.on(\"mouseenter\",function(){clearInterval(e.timer)}).on(\"mouseleave\",function(){e.autoplay()}),i.elem.data(\"haveEvents\",!0))},n.render=function(e){var i=new m(e);return i},e(t,n)});"
  },
  {
    "path": "lib/layui/lay/modules/code.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var a=layui.$,l=\"http://www.layui.com/doc/modules/code.html\";e(\"code\",function(e){var t=[];e=e||{},e.elem=a(e.elem||\".layui-code\"),e.about=!(\"about\"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr(\"lay-encode\")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")),c.html('<ol class=\"layui-code-ol\"><li>'+o.replace(/[\\r\\t\\n]+/g,\"</li><li>\")+\"</li></ol>\"),c.find(\">.layui-code-h3\")[0]||c.prepend('<h3 class=\"layui-code-h3\">'+(c.attr(\"lay-title\")||e.title||\"code\")+(e.about?'<a href=\"'+l+'\" target=\"_blank\">layui.code</a>':\"\")+\"</h3>\");var d=c.find(\">.layui-code-ol\");c.addClass(\"layui-box layui-code-view\"),(c.attr(\"lay-skin\")||e.skin)&&c.addClass(\"layui-code-\"+(c.attr(\"lay-skin\")||e.skin)),(d.find(\"li\").length/100|0)>0&&d.css(\"margin-left\",(d.find(\"li\").length/100|0)+\"px\"),(c.attr(\"lay-height\")||e.height)&&d.css(\"max-height\",c.attr(\"lay-height\")||e.height)})})}).addcss(\"modules/code.css\",\"skincodecss\");"
  },
  {
    "path": "lib/layui/lay/modules/colorpicker.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.jquery,o={config:{},index:layui.colorpicker?layui.colorpicker.index+1e4:0,set:function(e){var o=this;return o.config=i.extend({},o.config,e),o},on:function(e,i){return layui.onevent.call(this,\"colorpicker\",e,i)}},r=function(){var e=this,i=e.config;return{config:i}},t=\"colorpicker\",n=\"layui-show\",l=\"layui-colorpicker\",c=\".layui-colorpicker-main\",a=\"layui-icon-down\",s=\"layui-icon-close\",f=\"layui-colorpicker-trigger-span\",d=\"layui-colorpicker-trigger-i\",u=\"layui-colorpicker-side\",p=\"layui-colorpicker-side-slider\",g=\"layui-colorpicker-basis\",v=\"layui-colorpicker-alpha-bgcolor\",h=\"layui-colorpicker-alpha-slider\",m=\"layui-colorpicker-basis-cursor\",b=\"layui-colorpicker-main-input\",k=function(e){var i={h:0,s:0,b:0},o=Math.min(e.r,e.g,e.b),r=Math.max(e.r,e.g,e.b),t=r-o;return i.b=r,i.s=0!=r?255*t/r:0,0!=i.s?e.r==r?i.h=(e.g-e.b)/t:e.g==r?i.h=2+(e.b-e.r)/t:i.h=4+(e.r-e.g)/t:i.h=-1,r==o&&(i.h=0),i.h*=60,i.h<0&&(i.h+=360),i.s*=100/255,i.b*=100/255,i},y=function(e){var e=e.indexOf(\"#\")>-1?e.substring(1):e;if(3==e.length){var i=e.split(\"\");e=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]}e=parseInt(e,16);var o={r:e>>16,g:(65280&e)>>8,b:255&e};return k(o)},x=function(e){var i={},o=e.h,r=255*e.s/100,t=255*e.b/100;if(0==r)i.r=i.g=i.b=t;else{var n=t,l=(255-r)*t/255,c=(n-l)*(o%60)/60;360==o&&(o=0),o<60?(i.r=n,i.b=l,i.g=l+c):o<120?(i.g=n,i.b=l,i.r=n-c):o<180?(i.g=n,i.r=l,i.b=l+c):o<240?(i.b=n,i.r=l,i.g=n-c):o<300?(i.b=n,i.g=l,i.r=l+c):o<360?(i.r=n,i.g=l,i.b=n-c):(i.r=0,i.g=0,i.b=0)}return{r:Math.round(i.r),g:Math.round(i.g),b:Math.round(i.b)}},C=function(e){var o=x(e),r=[o.r.toString(16),o.g.toString(16),o.b.toString(16)];return i.each(r,function(e,i){1==i.length&&(r[e]=\"0\"+i)}),r.join(\"\")},P=function(e){var i=/[0-9]{1,3}/g,o=e.match(i)||[];return{r:o[0],g:o[1],b:o[2]}},B=i(window),w=i(document),D=function(e){var r=this;r.index=++o.index,r.config=i.extend({},r.config,o.config,e),r.render()};D.prototype.config={color:\"\",size:null,alpha:!1,format:\"hex\",predefine:!1,colors:[\"#009688\",\"#5FB878\",\"#1E9FFF\",\"#FF5722\",\"#FFB800\",\"#01AAED\",\"#999\",\"#c00\",\"#ff8c00\",\"#ffd700\",\"#90ee90\",\"#00ced1\",\"#1e90ff\",\"#c71585\",\"rgb(0, 186, 189)\",\"rgb(255, 120, 0)\",\"rgb(250, 212, 0)\",\"#393D49\",\"rgba(0,0,0,.5)\",\"rgba(255, 69, 0, 0.68)\",\"rgba(144, 240, 144, 0.5)\",\"rgba(31, 147, 255, 0.73)\"]},D.prototype.render=function(){var e=this,o=e.config,r=i(['<div class=\"layui-unselect layui-colorpicker\">',\"<span \"+(\"rgb\"==o.format&&o.alpha?'class=\"layui-colorpicker-trigger-bgcolor\"':\"\")+\">\",'<span class=\"layui-colorpicker-trigger-span\" ','lay-type=\"'+(\"rgb\"==o.format?o.alpha?\"rgba\":\"torgb\":\"\")+'\" ','style=\"'+function(){var e=\"\";return o.color?(e=o.color,(o.color.match(/[0-9]{1,3}/g)||[]).length>3&&(o.alpha&&\"rgb\"==o.format||(e=\"#\"+C(k(P(o.color))))),\"background: \"+e):e}()+'\">','<i class=\"layui-icon layui-colorpicker-trigger-i '+(o.color?a:s)+'\"></i>',\"</span>\",\"</span>\",\"</div>\"].join(\"\")),t=i(o.elem);o.size&&r.addClass(\"layui-colorpicker-\"+o.size),t.addClass(\"layui-inline\").html(e.elemColorBox=r),e.color=e.elemColorBox.find(\".\"+f)[0].style.background,e.events()},D.prototype.renderPicker=function(){var e=this,o=e.config,r=e.elemColorBox[0],t=e.elemPicker=i(['<div id=\"layui-colorpicker'+e.index+'\" data-index=\"'+e.index+'\" class=\"layui-anim layui-anim-upbit layui-colorpicker-main\">','<div class=\"layui-colorpicker-main-wrapper\">','<div class=\"layui-colorpicker-basis\">','<div class=\"layui-colorpicker-basis-white\"></div>','<div class=\"layui-colorpicker-basis-black\"></div>','<div class=\"layui-colorpicker-basis-cursor\"></div>',\"</div>\",'<div class=\"layui-colorpicker-side\">','<div class=\"layui-colorpicker-side-slider\"></div>',\"</div>\",\"</div>\",'<div class=\"layui-colorpicker-main-alpha '+(o.alpha?n:\"\")+'\">','<div class=\"layui-colorpicker-alpha-bgcolor\">','<div class=\"layui-colorpicker-alpha-slider\"></div>',\"</div>\",\"</div>\",function(){if(o.predefine){var e=['<div class=\"layui-colorpicker-main-pre\">'];return layui.each(o.colors,function(i,o){e.push(['<div class=\"layui-colorpicker-pre'+((o.match(/[0-9]{1,3}/g)||[]).length>3?\" layui-colorpicker-pre-isalpha\":\"\")+'\">','<div style=\"background:'+o+'\"></div>',\"</div>\"].join(\"\"))}),e.push(\"</div>\"),e.join(\"\")}return\"\"}(),'<div class=\"layui-colorpicker-main-input\">','<div class=\"layui-inline\">','<input type=\"text\" class=\"layui-input\">',\"</div>\",'<div class=\"layui-btn-container\">','<button class=\"layui-btn layui-btn-primary layui-btn-sm\" colorpicker-events=\"clear\">清空</button>','<button class=\"layui-btn layui-btn-sm\" colorpicker-events=\"confirm\">确定</button>',\"</div\",\"</div>\",\"</div>\"].join(\"\"));e.elemColorBox.find(\".\"+f)[0];i(c)[0]&&i(c).data(\"index\")==e.index?e.removePicker(D.thisElemInd):(e.removePicker(D.thisElemInd),i(\"body\").append(t)),D.thisElemInd=e.index,D.thisColor=r.style.background,e.position(),e.pickerEvents()},D.prototype.removePicker=function(e){var o=this;o.config;return i(\"#layui-colorpicker\"+(e||o.index)).remove(),o},D.prototype.position=function(){var e=this,i=e.config,o=e.bindElem||e.elemColorBox[0],r=e.elemPicker[0],t=o.getBoundingClientRect(),n=r.offsetWidth,l=r.offsetHeight,c=function(e){return e=e?\"scrollLeft\":\"scrollTop\",document.body[e]|document.documentElement[e]},a=function(e){return document.documentElement[e?\"clientWidth\":\"clientHeight\"]},s=5,f=t.left,d=t.bottom;f-=(n-o.offsetWidth)/2,d+=s,f+n+s>a(\"width\")?f=a(\"width\")-n-s:f<s&&(f=s),d+l+s>a()&&(d=t.top>l?t.top-l:a()-l,d-=2*s),i.position&&(r.style.position=i.position),r.style.left=f+(\"fixed\"===i.position?0:c(1))+\"px\",r.style.top=d+(\"fixed\"===i.position?0:c())+\"px\"},D.prototype.val=function(){var e=this,i=(e.config,e.elemColorBox.find(\".\"+f)),o=e.elemPicker.find(\".\"+b),r=i[0],t=r.style.backgroundColor;if(t){var n=k(P(t)),l=i.attr(\"lay-type\");if(e.select(n.h,n.s,n.b),\"torgb\"===l&&o.find(\"input\").val(t),\"rgba\"===l){var c=P(t);if(3==(t.match(/[0-9]{1,3}/g)||[]).length)o.find(\"input\").val(\"rgba(\"+c.r+\", \"+c.g+\", \"+c.b+\", 1)\"),e.elemPicker.find(\".\"+h).css(\"left\",280);else{o.find(\"input\").val(t);var a=280*t.slice(t.lastIndexOf(\",\")+1,t.length-1);e.elemPicker.find(\".\"+h).css(\"left\",a)}e.elemPicker.find(\".\"+v)[0].style.background=\"linear-gradient(to right, rgba(\"+c.r+\", \"+c.g+\", \"+c.b+\", 0), rgb(\"+c.r+\", \"+c.g+\", \"+c.b+\"))\"}}else e.select(0,100,100),o.find(\"input\").val(\"\"),e.elemPicker.find(\".\"+v)[0].style.background=\"\",e.elemPicker.find(\".\"+h).css(\"left\",280)},D.prototype.side=function(){var e=this,o=e.config,r=e.elemColorBox.find(\".\"+f),t=r.attr(\"lay-type\"),n=e.elemPicker.find(\".\"+u),l=e.elemPicker.find(\".\"+p),c=e.elemPicker.find(\".\"+g),y=e.elemPicker.find(\".\"+m),C=e.elemPicker.find(\".\"+v),w=e.elemPicker.find(\".\"+h),D=l[0].offsetTop/180*360,E=100-(y[0].offsetTop+3)/180*100,H=(y[0].offsetLeft+3)/260*100,W=Math.round(w[0].offsetLeft/280*100)/100,j=e.elemColorBox.find(\".\"+d),F=e.elemPicker.find(\".layui-colorpicker-pre\").children(\"div\"),L=function(i,n,l,c){e.select(i,n,l);var f=x({h:i,s:n,b:l});if(j.addClass(a).removeClass(s),r[0].style.background=\"rgb(\"+f.r+\", \"+f.g+\", \"+f.b+\")\",\"torgb\"===t&&e.elemPicker.find(\".\"+b).find(\"input\").val(\"rgb(\"+f.r+\", \"+f.g+\", \"+f.b+\")\"),\"rgba\"===t){var d=0;d=280*c,w.css(\"left\",d),e.elemPicker.find(\".\"+b).find(\"input\").val(\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+c+\")\"),r[0].style.background=\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+c+\")\",C[0].style.background=\"linear-gradient(to right, rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", 0), rgb(\"+f.r+\", \"+f.g+\", \"+f.b+\"))\"}o.change&&o.change(e.elemPicker.find(\".\"+b).find(\"input\").val())},M=i(['<div class=\"layui-auxiliar-moving\" id=\"LAY-colorpicker-moving\"></div'].join(\"\")),Y=function(e){i(\"#LAY-colorpicker-moving\")[0]||i(\"body\").append(M),M.on(\"mousemove\",e),M.on(\"mouseup\",function(){M.remove()}).on(\"mouseleave\",function(){M.remove()})};l.on(\"mousedown\",function(e){var i=this.offsetTop,o=e.clientY,r=function(e){var r=i+(e.clientY-o),t=n[0].offsetHeight;r<0&&(r=0),r>t&&(r=t);var l=r/180*360;D=l,L(l,H,E,W),e.preventDefault()};Y(r),e.preventDefault()}),n.on(\"click\",function(e){var o=e.clientY-i(this).offset().top;o<0&&(o=0),o>this.offsetHeight&&(o=this.offsetHeight);var r=o/180*360;D=r,L(r,H,E,W),e.preventDefault()}),y.on(\"mousedown\",function(e){var i=this.offsetTop,o=this.offsetLeft,r=e.clientY,t=e.clientX,n=function(e){var n=i+(e.clientY-r),l=o+(e.clientX-t),a=c[0].offsetHeight-3,s=c[0].offsetWidth-3;n<-3&&(n=-3),n>a&&(n=a),l<-3&&(l=-3),l>s&&(l=s);var f=(l+3)/260*100,d=100-(n+3)/180*100;E=d,H=f,L(D,f,d,W),e.preventDefault()};layui.stope(e),Y(n),e.preventDefault()}),c.on(\"mousedown\",function(e){var o=e.clientY-i(this).offset().top-3+B.scrollTop(),r=e.clientX-i(this).offset().left-3+B.scrollLeft();o<-3&&(o=-3),o>this.offsetHeight-3&&(o=this.offsetHeight-3),r<-3&&(r=-3),r>this.offsetWidth-3&&(r=this.offsetWidth-3);var t=(r+3)/260*100,n=100-(o+3)/180*100;E=n,H=t,L(D,t,n,W),e.preventDefault(),y.trigger(e,\"mousedown\")}),w.on(\"mousedown\",function(e){var i=this.offsetLeft,o=e.clientX,r=function(e){var r=i+(e.clientX-o),t=C[0].offsetWidth;r<0&&(r=0),r>t&&(r=t);var n=Math.round(r/280*100)/100;W=n,L(D,H,E,n),e.preventDefault()};Y(r),e.preventDefault()}),C.on(\"click\",function(e){var o=e.clientX-i(this).offset().left;o<0&&(o=0),o>this.offsetWidth&&(o=this.offsetWidth);var r=Math.round(o/280*100)/100;W=r,L(D,H,E,r),e.preventDefault()}),F.each(function(){i(this).on(\"click\",function(){i(this).parent(\".layui-colorpicker-pre\").addClass(\"selected\").siblings().removeClass(\"selected\");var e,o=this.style.backgroundColor,r=k(P(o)),t=o.slice(o.lastIndexOf(\",\")+1,o.length-1);D=r.h,H=r.s,E=r.b,3==(o.match(/[0-9]{1,3}/g)||[]).length&&(t=1),W=t,e=280*t,L(r.h,r.s,r.b,t)})})},D.prototype.select=function(e,i,o,r){var t=this,n=(t.config,C({h:e,s:100,b:100})),l=C({h:e,s:i,b:o}),c=e/360*180,a=180-o/100*180-3,s=i/100*260-3;t.elemPicker.find(\".\"+p).css(\"top\",c),t.elemPicker.find(\".\"+g)[0].style.background=\"#\"+n,t.elemPicker.find(\".\"+m).css({top:a,left:s}),\"change\"!==r&&t.elemPicker.find(\".\"+b).find(\"input\").val(\"#\"+l)},D.prototype.pickerEvents=function(){var e=this,o=e.config,r=e.elemColorBox.find(\".\"+f),t=e.elemPicker.find(\".\"+b+\" input\"),n={clear:function(i){r[0].style.background=\"\",e.elemColorBox.find(\".\"+d).removeClass(a).addClass(s),e.color=\"\",o.done&&o.done(\"\"),e.removePicker()},confirm:function(i,n){var l=t.val(),c=l,f={};if(l.indexOf(\",\")>-1){if(f=k(P(l)),e.select(f.h,f.s,f.b),r[0].style.background=c=\"#\"+C(f),(l.match(/[0-9]{1,3}/g)||[]).length>3&&\"rgba\"===r.attr(\"lay-type\")){var u=280*l.slice(l.lastIndexOf(\",\")+1,l.length-1);e.elemPicker.find(\".\"+h).css(\"left\",u),r[0].style.background=l,c=l}}else f=y(l),r[0].style.background=c=\"#\"+C(f),e.elemColorBox.find(\".\"+d).removeClass(s).addClass(a);return\"change\"===n?(e.select(f.h,f.s,f.b,n),void(o.change&&o.change(c))):(e.color=l,o.done&&o.done(l),void e.removePicker())}};e.elemPicker.on(\"click\",\"*[colorpicker-events]\",function(){var e=i(this),o=e.attr(\"colorpicker-events\");n[o]&&n[o].call(this,e)}),t.on(\"keyup\",function(e){var o=i(this);n.confirm.call(this,o,13===e.keyCode?null:\"change\")})},D.prototype.events=function(){var e=this,o=e.config,r=e.elemColorBox.find(\".\"+f);e.elemColorBox.on(\"click\",function(){e.renderPicker(),i(c)[0]&&(e.val(),e.side())}),o.elem[0]&&!e.elemColorBox[0].eventHandler&&(w.on(\"click\",function(o){if(!i(o.target).hasClass(l)&&!i(o.target).parents(\".\"+l)[0]&&!i(o.target).hasClass(c.replace(/\\./g,\"\"))&&!i(o.target).parents(c)[0]&&e.elemPicker){if(e.color){var t=k(P(e.color));e.select(t.h,t.s,t.b)}else e.elemColorBox.find(\".\"+d).removeClass(a).addClass(s);r[0].style.background=e.color||\"\",e.removePicker()}}),B.on(\"resize\",function(){return!(!e.elemPicker||!i(c)[0])&&void e.position()}),e.elemColorBox[0].eventHandler=!0)},o.render=function(e){var i=new D(e);return r.call(i)},e(t,o)});"
  },
  {
    "path": "lib/layui/lay/modules/element.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(t){\"use strict\";var a=layui.$,i=(layui.hint(),layui.device()),e=\"element\",l=\"layui-this\",n=\"layui-show\",s=function(){this.config={}};s.prototype.set=function(t){var i=this;return a.extend(!0,i.config,t),i},s.prototype.on=function(t,a){return layui.onevent.call(this,e,t,a)},s.prototype.tabAdd=function(t,i){var e=\".layui-tab-title\",l=a(\".layui-tab[lay-filter=\"+t+\"]\"),n=l.children(e),s=n.children(\".layui-tab-bar\"),o=l.children(\".layui-tab-content\"),r='<li lay-id=\"'+(i.id||\"\")+'\"'+(i.attr?' lay-attr=\"'+i.attr+'\"':\"\")+\">\"+(i.title||\"unnaming\")+\"</li>\";return s[0]?s.before(r):n.append(r),o.append('<div class=\"layui-tab-item\">'+(i.content||\"\")+\"</div>\"),f.hideTabMore(!0),f.tabAuto(),this},s.prototype.tabDelete=function(t,i){var e=\".layui-tab-title\",l=a(\".layui-tab[lay-filter=\"+t+\"]\"),n=l.children(e),s=n.find('>li[lay-id=\"'+i+'\"]');return f.tabDelete(null,s),this},s.prototype.tabChange=function(t,i){var e=\".layui-tab-title\",l=a(\".layui-tab[lay-filter=\"+t+\"]\"),n=l.children(e),s=n.find('>li[lay-id=\"'+i+'\"]');return f.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},b.on(\"click\",t.headerElem,function(i){var e=a(this).index();f.tabClick.call(this,i,e,null,t)})},s.prototype.progress=function(t,i){var e=\"layui-progress\",l=a(\".\"+e+\"[lay-filter=\"+t+\"]\"),n=l.find(\".\"+e+\"-bar\"),s=n.find(\".\"+e+\"-text\");return n.css(\"width\",i),s.text(i),this};var o=\".layui-nav\",r=\"layui-nav-item\",c=\"layui-nav-bar\",u=\"layui-nav-tree\",d=\"layui-nav-child\",y=\"layui-nav-more\",h=\"layui-anim layui-anim-upbit\",f={tabClick:function(t,i,s,o){o=o||{};var r=s||a(this),i=i||r.parent().children(\"li\").index(r),c=o.headerElem?r.parent():r.parents(\".layui-tab\").eq(0),u=o.bodyElem?a(o.bodyElem):c.children(\".layui-tab-content\").children(\".layui-tab-item\"),d=r.find(\"a\"),y=c.attr(\"lay-filter\");\"javascript:;\"!==d.attr(\"href\")&&\"_blank\"===d.attr(\"target\")||(r.addClass(l).siblings().removeClass(l),u.eq(i).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,\"tab(\"+y+\")\",{elem:c,index:i})},tabDelete:function(t,i){var n=i||a(this).parent(),s=n.index(),o=n.parents(\".layui-tab\").eq(0),r=o.children(\".layui-tab-content\").children(\".layui-tab-item\"),c=o.attr(\"lay-filter\");n.hasClass(l)&&(n.next()[0]?f.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&f.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){f.tabAuto()},50),layui.event.call(this,e,\"tabDelete(\"+c+\")\",{elem:o,index:s})},tabAuto:function(){var t=\"layui-tab-more\",e=\"layui-tab-bar\",l=\"layui-tab-close\",n=this;a(\".layui-tab\").each(function(){var s=a(this),o=s.children(\".layui-tab-title\"),r=(s.children(\".layui-tab-content\").children(\".layui-tab-item\"),'lay-stope=\"tabmore\"'),c=a('<span class=\"layui-unselect layui-tab-bar\" '+r+\"><i \"+r+' class=\"layui-icon\">&#xe61a;</i></span>');if(n===window&&8!=i.ie&&f.hideTabMore(!0),s.attr(\"lay-allowClose\")&&o.find(\"li\").each(function(){var t=a(this);if(!t.find(\".\"+l)[0]){var i=a('<i class=\"layui-icon layui-unselect '+l+'\">&#x1006;</i>');i.on(\"click\",f.tabDelete),t.append(i)}}),\"string\"!=typeof s.attr(\"lay-unauto\"))if(o.prop(\"scrollWidth\")>o.outerWidth()+1){if(o.find(\".\"+e)[0])return;o.append(c),s.attr(\"overflow\",\"\"),c.on(\"click\",function(a){o[this.title?\"removeClass\":\"addClass\"](t),this.title=this.title?\"\":\"收缩\"})}else o.find(\".\"+e).remove(),s.removeAttr(\"overflow\")})},hideTabMore:function(t){var i=a(\".layui-tab-title\");t!==!0&&\"tabmore\"===a(t.target).attr(\"lay-stope\")||(i.removeClass(\"layui-tab-more\"),i.find(\".layui-tab-bar\").attr(\"title\",\"\"))},clickThis:function(){var t=a(this),i=t.parents(o),n=i.attr(\"lay-filter\"),s=t.parent(),c=t.siblings(\".\"+d),y=\"string\"==typeof s.attr(\"lay-unselect\");\"javascript:;\"!==t.attr(\"href\")&&\"_blank\"===t.attr(\"target\")||y||c[0]||(i.find(\".\"+l).removeClass(l),s.addClass(l)),i.hasClass(u)&&(c.removeClass(h),c[0]&&(s[\"none\"===c.css(\"display\")?\"addClass\":\"removeClass\"](r+\"ed\"),\"all\"===i.attr(\"lay-shrink\")&&s.siblings().removeClass(r+\"ed\"))),layui.event.call(this,e,\"nav(\"+n+\")\",t)},collapse:function(){var t=a(this),i=t.find(\".layui-colla-icon\"),l=t.siblings(\".layui-colla-content\"),s=t.parents(\".layui-collapse\").eq(0),o=s.attr(\"lay-filter\"),r=\"none\"===l.css(\"display\");if(\"string\"==typeof s.attr(\"lay-accordion\")){var c=s.children(\".layui-colla-item\").children(\".\"+n);c.siblings(\".layui-colla-title\").children(\".layui-colla-icon\").html(\"&#xe602;\"),c.removeClass(n)}l[r?\"addClass\":\"removeClass\"](n),i.html(r?\"&#xe61a;\":\"&#xe602;\"),layui.event.call(this,e,\"collapse(\"+o+\")\",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter=\"'+e+'\"]':\"\"}(),s={tab:function(){f.tabAuto.call({})},nav:function(){var t=200,e={},s={},p={},b=function(l,o,r){var c=a(this),f=c.find(\".\"+d);o.hasClass(u)?l.css({top:c.position().top,height:c.children(\"a\").outerHeight(),opacity:1}):(f.addClass(h),l.css({left:c.position().left+parseFloat(c.css(\"marginLeft\")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:c.width(),opacity:1})},i.ie&&i.ie<10?0:t),clearTimeout(p[r]),\"block\"===f.css(\"display\")&&clearTimeout(s[r]),s[r]=setTimeout(function(){f.addClass(n),c.find(\".\"+y).addClass(y+\"d\")},300))};a(o+l).each(function(i){var l=a(this),o=a('<span class=\"'+c+'\"></span>'),h=l.find(\".\"+r);l.find(\".\"+c)[0]||(l.append(o),h.on(\"mouseenter\",function(){b.call(this,o,l,i)}).on(\"mouseleave\",function(){l.hasClass(u)||(clearTimeout(s[i]),s[i]=setTimeout(function(){l.find(\".\"+d).removeClass(n),l.find(\".\"+y).removeClass(y+\"d\")},300))}),l.on(\"mouseleave\",function(){clearTimeout(e[i]),p[i]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),h.find(\"a\").each(function(){var t=a(this),i=(t.parent(),t.siblings(\".\"+d));i[0]&&!t.children(\".\"+y)[0]&&t.append('<span class=\"'+y+'\"></span>'),t.off(\"click\",f.clickThis).on(\"click\",f.clickThis)})})},breadcrumb:function(){var t=\".layui-breadcrumb\";a(t+l).each(function(){var t=a(this),i=\"lay-separator\",e=t.attr(i)||\"/\",l=t.find(\"a\");l.next(\"span[\"+i+\"]\")[0]||(l.each(function(t){t!==l.length-1&&a(this).after(\"<span \"+i+\">\"+e+\"</span>\")}),t.css(\"visibility\",\"visible\"))})},progress:function(){var t=\"layui-progress\";a(\".\"+t+l).each(function(){var i=a(this),e=i.find(\".layui-progress-bar\"),l=e.attr(\"lay-percent\");e.css(\"width\",function(){return/^.+\\/.+$/.test(l)?100*new Function(\"return \"+l)()+\"%\":l}()),i.attr(\"lay-showPercent\")&&setTimeout(function(){e.html('<span class=\"'+t+'-text\">'+l+\"</span>\")},350)})},collapse:function(){var t=\"layui-collapse\";a(\".\"+t+l).each(function(){var t=a(this).find(\".layui-colla-item\");t.each(function(){var t=a(this),i=t.find(\".layui-colla-title\"),e=t.find(\".layui-colla-content\"),l=\"none\"===e.css(\"display\");i.find(\".layui-colla-icon\").remove(),i.append('<i class=\"layui-icon layui-colla-icon\">'+(l?\"&#xe602;\":\"&#xe61a;\")+\"</i>\"),i.off(\"click\",f.collapse).on(\"click\",f.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,a){a()})},s.prototype.render=s.prototype.init;var p=new s,b=a(document);p.render();var v=\".layui-tab-title li\";b.on(\"click\",v,f.tabClick),b.on(\"click\",f.hideTabMore),a(window).on(\"resize\",f.tabAuto),t(e,p)});"
  },
  {
    "path": "lib/layui/lay/modules/flow.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var l=layui.$,o=function(e){},t='<i class=\"layui-anim layui-anim-rotate layui-anim-loop layui-icon \">&#xe63e;</i>';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!(\"isAuto\"in e)||e.isAuto,v=e.end||\"没有更多了\",y=e.scrollElem&&e.scrollElem!==document,d=\"<cite>加载更多</cite>\",h=l('<div class=\"layui-flow-more\"><a href=\"javascript:;\">'+d+\"</a></div>\");f.find(\".layui-flow-more\")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find(\"a\").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find(\"a\").html(t),\"function\"==typeof e.done&&e.done(++c,p)};if(g(),h.find(\"a\").on(\"click\",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+\" img\",scrollElem:e.scrollElem});return s?(m.on(\"scroll\",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop(\"scrollHeight\"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||\"img\",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr(\"src\")){var m=e.attr(\"lay-src\");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr(\"src\",m).removeAttr(\"lay-src\"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;s<t.lazyimg.elem.length;s++){var v=t.lazyimg.elem.eq(s),y=a?function(){return v.offset().top-n.offset().top+m}():v.offset().top;if(c(v,f),i=s,y>u)break}};if(f(),!o){var m;n.on(\"scroll\",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e(\"flow\",new o)});"
  },
  {
    "path": "lib/layui/lay/modules/form.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"layer\",function(e){\"use strict\";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l=\"form\",r=\".layui-form\",s=\"layui-this\",o=\"layui-hide\",c=\"layui-disabled\",u=function(){this.config={verify:{required:[/[\\S]+/,\"必填项不能为空\"],phone:[/^1\\d{10}$/,\"请输入正确的手机号\"],email:[/^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/,\"邮箱格式不正确\"],url:[/(^#)|(^http(s*):\\/\\/[^\\s]+\\.[^\\s]+)/,\"链接格式不正确\"],number:function(e){if(!e||isNaN(e))return\"只能填写数字\"},date:[/^(\\d{4})[-\\/](\\d{1}|0\\d{1}|1[0-2])([-\\/](\\d{1}|0\\d{1}|[1-2][0-9]|3[0-1]))*$/,\"日期格式不正确\"],identity:[/(^\\d{15}$)|(^\\d{17}(x|X|\\d)$)/,\"请输入正确的身份证号\"]}}};u.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},u.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},u.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},u.prototype.val=function(e,i){var a=t(r+'[lay-filter=\"'+e+'\"]');a.each(function(e,a){var n=t(this);layui.each(i,function(e,t){var i,a=n.find('[name=\"'+e+'\"]');a[0]&&(i=a[0].type,\"checkbox\"===i?a[0].checked=t:\"radio\"===i?a.each(function(){this.value==t&&(this.checked=!0)}):a.val(t))})}),f.render(null,e)},u.prototype.render=function(e,i){var n=this,u=t(r+function(){return i?'[lay-filter=\"'+i+'\"]':\"\"}()),d={select:function(){var e,i=\"请选择\",a=\"layui-form-select\",n=\"layui-select-title\",r=\"layui-select-none\",d=\"\",f=u.find(\"select\"),v=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t(\".\"+a).removeClass(a+\"ed \"+a+\"up\"),e&&d&&e.val(d)),e=null},y=function(i,u,f){var y,p=t(this),m=i.find(\".\"+n),k=m.find(\"input\"),x=i.find(\"dl\"),g=x.children(\"dd\"),b=this.selectedIndex;if(!u){var C=function(){var e=i.offset().top+i.outerHeight()+5-h.scrollTop(),t=x.outerHeight();b=p[0].selectedIndex,i.addClass(a+\"ed\"),g.removeClass(o),y=null,g.eq(b).addClass(s).siblings().removeClass(s),e+t>h.height()&&e>=t&&i.addClass(a+\"up\"),T()},w=function(e){i.removeClass(a+\"ed \"+a+\"up\"),k.blur(),y=null,e||$(k.val(),function(e){var i=p[0].selectedIndex;e&&(d=t(p[0].options[i]).html(),0===i&&d===k.attr(\"placeholder\")&&(d=\"\"),k.val(d||\"\"))})},T=function(){var e=x.children(\"dd.\"+s);if(e[0]){var t=e.position().top,i=x.height(),a=e.height();t>i&&x.scrollTop(t+x.scrollTop()-i+a-5),t<0&&x.scrollTop(t+x.scrollTop()-5)}};m.on(\"click\",function(e){i.hasClass(a+\"ed\")?w():(v(e,!0),C()),x.find(\".\"+r).remove()}),m.find(\".layui-edge\").on(\"click\",function(){k.focus()}),k.on(\"keyup\",function(e){var t=e.keyCode;9===t&&C()}).on(\"keydown\",function(e){var t=e.keyCode;9===t&&w();var i=function(t,a){var n,l;e.preventDefault();var r=function(){var e=x.children(\"dd.\"+s);if(x.children(\"dd.\"+o)[0]&&\"next\"===t){var i=x.children(\"dd:not(.\"+o+\",.\"+c+\")\"),n=i.eq(0).index();if(n>=0&&n<e.index()&&!i.hasClass(s))return i.eq(0).prev()[0]?i.eq(0).prev():x.children(\":last\")}return a&&a[0]?a:y&&y[0]?y:e}();return l=r[t](),n=r[t](\"dd:not(.\"+o+\")\"),l[0]?(y=r[t](),n[0]&&!n.hasClass(c)||!y[0]?(n.addClass(s).siblings().removeClass(s),void T()):i(t,y)):y=null};38===t&&i(\"prev\"),40===t&&i(\"next\"),13===t&&(e.preventDefault(),x.children(\"dd.\"+s).trigger(\"click\"))});var $=function(e,i,a){var n=0;layui.each(g,function(){var i=t(this),l=i.text(),r=l.indexOf(e)===-1;(\"\"===e||\"blur\"===a?e!==l:r)&&n++,\"keyup\"===a&&i[r?\"addClass\":\"removeClass\"](o)});var l=n===g.length;return i(l),l},q=function(e){var t=this.value,i=e.keyCode;return 9!==i&&13!==i&&37!==i&&38!==i&&39!==i&&40!==i&&($(t,function(e){e?x.find(\".\"+r)[0]||x.append('<p class=\"'+r+'\">无匹配项</p>'):x.find(\".\"+r).remove()},\"keyup\"),\"\"===t&&x.find(\".\"+r).remove(),void T())};f&&k.on(\"keyup\",q).on(\"blur\",function(i){var a=p[0].selectedIndex;e=k,d=t(p[0].options[a]).html(),0===a&&d===k.attr(\"placeholder\")&&(d=\"\"),setTimeout(function(){$(k.val(),function(e){d||k.val(\"\")},\"blur\")},200)}),g.on(\"click\",function(){var e=t(this),a=e.attr(\"lay-value\"),n=p.attr(\"lay-filter\");return!e.hasClass(c)&&(e.hasClass(\"layui-select-tips\")?k.val(\"\"):(k.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),p.val(a).removeClass(\"layui-form-danger\"),layui.event.call(this,l,\"select(\"+n+\")\",{elem:p[0],value:a,othis:i}),w(!0),!1)}),i.find(\"dl>dt\").on(\"click\",function(e){return!1}),t(document).off(\"click\",v).on(\"click\",v)}};f.each(function(e,l){var r=t(this),o=r.next(\".\"+a),u=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),v=l.options[0];if(\"string\"==typeof r.attr(\"lay-ignore\"))return r.show();var h=\"string\"==typeof r.attr(\"lay-search\"),p=v?v.value?i:v.innerHTML||i:i,m=t(['<div class=\"'+(h?\"\":\"layui-unselect \")+a,(u?\" layui-select-disabled\":\"\")+'\">','<div class=\"'+n+'\">','<input type=\"text\" placeholder=\"'+p+'\" '+('value=\"'+(d?f.html():\"\")+'\"')+(h?\"\":\" readonly\")+' class=\"layui-input'+(h?\"\":\" layui-unselect\")+(u?\" \"+c:\"\")+'\">','<i class=\"layui-edge\"></i></div>','<dl class=\"layui-anim layui-anim-upbit'+(r.find(\"optgroup\")[0]?\" layui-select-group\":\"\")+'\">',function(e){var t=[];return layui.each(e,function(e,a){0!==e||a.value?\"optgroup\"===a.tagName.toLowerCase()?t.push(\"<dt>\"+a.label+\"</dt>\"):t.push('<dd lay-value=\"'+a.value+'\" class=\"'+(d===a.value?s:\"\")+(a.disabled?\" \"+c:\"\")+'\">'+a.innerHTML+\"</dd>\"):t.push('<dd lay-value=\"\" class=\"layui-select-tips\">'+(a.innerHTML||i)+\"</dd>\")}),0===t.length&&t.push('<dd lay-value=\"\" class=\"'+c+'\">没有选项</dd>'),t.join(\"\")}(r.find(\"*\"))+\"</dl>\",\"</div>\"].join(\"\"));o[0]&&o.remove(),r.after(m),y.call(this,m,u,h)})},checkbox:function(){var e={checkbox:[\"layui-form-checkbox\",\"layui-form-checked\",\"checkbox\"],_switch:[\"layui-form-switch\",\"layui-form-onswitch\",\"switch\"]},i=u.find(\"input[type=checkbox]\"),a=function(e,i){var a=t(this);e.on(\"click\",function(){var t=a.attr(\"lay-filter\"),n=(a.attr(\"lay-text\")||\"\").split(\"|\");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find(\"em\").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find(\"em\").text(n[0])),layui.event.call(a[0],l,i[2]+\"(\"+t+\")\",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr(\"lay-skin\"),s=(l.attr(\"lay-text\")||\"\").split(\"|\"),o=this.disabled;\"switch\"===r&&(r=\"_\"+r);var u=e[r]||e.checkbox;if(\"string\"==typeof l.attr(\"lay-ignore\"))return l.show();var d=l.next(\".\"+u[0]),f=t(['<div class=\"layui-unselect '+u[0],n.checked?\" \"+u[1]:\"\",o?\" layui-checkbox-disbaled \"+c:\"\",'\"',r?' lay-skin=\"'+r+'\"':\"\",\">\",function(){var e=n.title.replace(/\\s/g,\"\"),t={checkbox:[e?\"<span>\"+n.title+\"</span>\":\"\",'<i class=\"layui-icon layui-icon-ok\"></i>'].join(\"\"),_switch:\"<em>\"+((n.checked?s[0]:s[1])||\"\")+\"</em><i></i>\"};return t[r]||t.checkbox}(),\"</div>\"].join(\"\"));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e=\"layui-form-radio\",i=[\"&#xe643;\",\"&#xe63f;\"],a=u.find(\"input[type=radio]\"),n=function(a){var n=t(this),s=\"layui-anim-scaleSpring\";a.on(\"click\",function(){var o=n[0].name,c=n.parents(r),u=n.attr(\"lay-filter\"),d=c.find(\"input[name=\"+o.replace(/(\\.|#|\\[|\\])/g,\"\\\\$1\")+\"]\");n[0].disabled||(layui.each(d,function(){var a=t(this).next(\".\"+e);this.checked=!1,a.removeClass(e+\"ed\"),a.find(\".layui-icon\").removeClass(s).html(i[1])}),n[0].checked=!0,a.addClass(e+\"ed\"),a.find(\".layui-icon\").addClass(s).html(i[0]),layui.event.call(n[0],l,\"radio(\"+u+\")\",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),s=r.next(\".\"+e),o=this.disabled;if(\"string\"==typeof r.attr(\"lay-ignore\"))return r.show();s[0]&&s.remove();var u=t(['<div class=\"layui-unselect '+e,l.checked?\" \"+e+\"ed\":\"\",(o?\" layui-radio-disbaled \"+c:\"\")+'\">','<i class=\"layui-anim layui-icon\">'+i[l.checked?0:1]+\"</i>\",\"<div>\"+function(){var e=l.title||\"\";return\"string\"==typeof r.next().attr(\"lay-radio\")&&(e=r.next().html(),r.next().remove()),e}()+\"</div>\",\"</div>\"].join(\"\"));r.after(u),n.call(this,u)})}};return e?d[e]?d[e]():a.error(\"不支持的\"+e+\"表单渲染\"):layui.each(d,function(e,t){t()}),n};var d=function(){var e=t(this),a=f.config.verify,s=null,o=\"layui-form-danger\",c={},u=e.parents(r),d=u.find(\"*[lay-verify]\"),v=e.parents(\"form\")[0],h=u.find(\"input,select,textarea\"),y=e.attr(\"lay-filter\");if(layui.each(d,function(e,l){var r=t(this),c=r.attr(\"lay-verify\").split(\"|\"),u=r.attr(\"lay-verType\"),d=r.val();if(r.removeClass(o),layui.each(c,function(e,t){var c,f=\"\",v=\"function\"==typeof a[t];if(a[t]){var c=v?f=a[t](d,l):!a[t][0].test(d);if(f=f||a[t][1],\"required\"===t&&(f=r.attr(\"lay-reqText\")||f),c)return\"tips\"===u?i.tips(f,function(){return\"string\"==typeof r.attr(\"lay-ignore\")||\"select\"!==l.tagName.toLowerCase()&&!/^checkbox|radio$/.test(l.type)?r:r.next()}(),{tips:1}):\"alert\"===u?i.alert(f,{title:\"提示\",shadeClose:!0}):i.msg(f,{icon:5,shift:6}),n.android||n.ios||setTimeout(function(){l.focus()},7),r.addClass(o),s=!0}}),s)return s}),s)return!1;var p={};return layui.each(h,function(e,t){if(t.name=(t.name||\"\").replace(/^\\s*|\\s*&/,\"\"),t.name){if(/^.*\\[\\]$/.test(t.name)){var i=t.name.match(/^(.*)\\[\\]$/g)[0];p[i]=0|p[i],t.name=t.name.replace(/^(.*)\\[\\]$/,\"$1[\"+p[i]++ +\"]\")}/^checkbox|radio$/.test(t.type)&&!t.checked||(c[t.name]=t.value)}}),layui.event.call(this,l,\"submit(\"+y+\")\",{elem:this,form:v,field:c})},f=new u,v=t(document),h=t(window);f.render(),v.on(\"reset\",r,function(){var e=t(this).attr(\"lay-filter\");setTimeout(function(){f.render(null,e)},50)}),v.on(\"submit\",r,d).on(\"click\",\"*[lay-submit]\",d),e(l,f)});"
  },
  {
    "path": "lib/layui/lay/modules/jquery.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;!function(e,t){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&\"length\"in e&&e.length,n=pe.type(e);return\"function\"!==n&&!pe.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(Ce.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener(\"DOMContentLoaded\",s),e.removeEventListener(\"load\",s)):(re.detachEvent(\"onreadystatechange\",s),e.detachEvent(\"onload\",s))}function s(){(re.addEventListener||\"load\"===e.event.type||\"complete\"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r=\"data-\"+t.replace(_e,\"-$1\").toLowerCase();if(n=e.getAttribute(r),\"string\"==typeof n){try{n=\"true\"===n||\"false\"!==n&&(\"null\"===n?null:+n+\"\"===n?+n:qe.test(n)?pe.parseJSON(n):n)}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if((\"data\"!==t||!pe.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||\"string\"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),\"object\"!=typeof t&&\"function\"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),\"string\"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):fe.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,\"\")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?\"\":\"px\"),c=(pe.cssNumber[t]||\"px\"!==l&&+u)&&Me.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||\".5\",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,\"globalEval\",!t||pe._data(t[r],\"globalEval\"))}function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x<d;x++)if(a=e[x],a||0===a)if(\"object\"===pe.type(a))pe.merge(v,a.nodeType?[a]:a);else if(Ue.test(a)){for(u=u||y.appendChild(t.createElement(\"div\")),l=(We.exec(a)||[\"\",\"\"])[1].toLowerCase(),f=Xe[l]||Xe._default,u.innerHTML=f[1]+pe.htmlPrefilter(a)+f[2],o=f[0];o--;)u=u.lastChild;if(!fe.leadingWhitespace&&$e.test(a)&&v.push(t.createTextNode($e.exec(a)[0])),!fe.tbody)for(a=\"table\"!==l||Ve.test(a)?\"<table>\"!==f[1]||Ve.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],\"tbody\")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(v,u.childNodes),u.textContent=\"\";u.firstChild;)u.removeChild(u.firstChild);u=y.lastChild}else v.push(t.createTextNode(a));for(u&&y.removeChild(u),fe.appendChecked||pe.grep(h(v,\"input\"),m),x=0;a=v[x++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(y.appendChild(a),\"script\"),s&&g(u),n)for(o=0;a=u[o++];)Ie.test(a.type||\"\")&&n.push(a);return u=null,y}function v(){return!0}function x(){return!1}function b(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,\"table\")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function C(e){return e.type=(null!==pe.find.attr(e,\"type\"))+\"/\"+e.type,e}function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;r<i;r++)pe.event.add(t,n,s[n][r])}a.data&&(a.data=pe.extend({},a.data))}}function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!fe.noCloneEvent&&t[pe.expando]){i=pe._data(t);for(r in i.events)pe.removeEvent(t,r,i.handle);t.removeAttribute(pe.expando)}\"script\"===n&&t.text!==e.text?(C(t).text=e.text,E(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),fe.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Be.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}}function S(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,f=e.length,d=f-1,p=t[0],g=pe.isFunction(p);if(g||f>1&&\"string\"==typeof p&&!fe.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);g&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(f&&(l=y(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,\"script\"),C),a=s.length;c<f;c++)o=l,c!==d&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,\"script\"))),n.call(e[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,pe.map(s,E),c=0;c<a;c++)o=s[c],Ie.test(o.type||\"\")&&!pe._data(o,\"globalEval\")&&pe.contains(u,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||\"\").replace(ot,\"\")));l=i=null}return e}function A(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||pe.cleanData(h(r)),r.parentNode&&(n&&pe.contains(r.ownerDocument,r)&&g(h(r,\"script\")),r.parentNode.removeChild(r));return e}function D(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n[0],\"display\");return n.detach(),r}function j(e){var t=re,n=lt[e];return n||(n=D(e,t),\"none\"!==n&&n||(ut=(ut||pe(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(t.documentElement),t=(ut[0].contentWindow||ut[0].contentDocument).document,t.write(),t.close(),n=D(e,t),ut.detach()),lt[e]=n),n}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Ct.length;n--;)if(e=Ct[n]+t,e in Et)return e}function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a<s;a++)r=e[a],r.style&&(o[a]=pe._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&Re(r)&&(o[a]=pe._data(r,\"olddisplay\",j(r.nodeName)))):(i=Re(r),(n&&\"none\"!==n||!i)&&pe._data(r,\"olddisplay\",i?n:pe.css(r,\"display\"))));for(a=0;a<s;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}function _(e,t,n){var r=bt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function F(e,t,n,r,i){for(var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;o<4;o+=2)\"margin\"===n&&(a+=pe.css(e,n+Oe[o],!0,i)),r?(\"content\"===n&&(a-=pe.css(e,\"padding\"+Oe[o],!0,i)),\"margin\"!==n&&(a-=pe.css(e,\"border\"+Oe[o]+\"Width\",!0,i))):(a+=pe.css(e,\"padding\"+Oe[o],!0,i),\"padding\"!==n&&(a+=pe.css(e,\"border\"+Oe[o]+\"Width\",!0,i)));return a}function M(t,n,r){var i=!0,o=\"width\"===n?t.offsetWidth:t.offsetHeight,a=ht(t),s=fe.boxSizing&&\"border-box\"===pe.css(t,\"boxSizing\",!1,a);if(re.msFullscreenElement&&e.top!==e&&t.getClientRects().length&&(o=Math.round(100*t.getBoundingClientRect()[n])),o<=0||null==o){if(o=gt(t,n,a),(o<0||null==o)&&(o=t.style[n]),ft.test(o))return o;i=s&&(fe.boxSizingReliable()||o===t.style[n]),o=parseFloat(o)||0}return o+F(t,n,r||(s?\"border\":\"content\"),i,a)+\"px\"}function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}function R(){return e.setTimeout(function(){Nt=void 0}),Nt=pe.now()}function P(e,t){var n,r={height:e},i=0;for(t=t?1:0;i<4;i+=2-t)n=Oe[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}function B(e,t,n){for(var r,i=($.tweeners[t]||[]).concat($.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function W(e,t,n){var r,i,o,a,s,u,l,c,f=this,d={},p=e.style,h=e.nodeType&&Re(e),g=pe._data(e,\"fxshow\");n.queue||(s=pe._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,u=s.empty.fire,s.empty.fire=function(){s.unqueued||u()}),s.unqueued++,f.always(function(){f.always(function(){s.unqueued--,pe.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],l=pe.css(e,\"display\"),c=\"none\"===l?pe._data(e,\"olddisplay\")||j(e.nodeName):l,\"inline\"===c&&\"none\"===pe.css(e,\"float\")&&(fe.inlineBlockNeedsLayout&&\"inline\"!==j(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",fe.shrinkWrapBlocks()||f.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],St.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(h?\"hide\":\"show\")){if(\"show\"!==i||!g||void 0===g[r])continue;h=!0}d[r]=g&&g[r]||pe.style(e,r)}else l=void 0;if(pe.isEmptyObject(d))\"inline\"===(\"none\"===l?j(e.nodeName):l)&&(p.display=l);else{g?\"hidden\"in g&&(h=g.hidden):g=pe._data(e,\"fxshow\",{}),o&&(g.hidden=!h),h?pe(e).show():f.done(function(){pe(e).hide()}),f.done(function(){var t;pe._removeData(e,\"fxshow\");for(t in d)pe.style(e,t,d[t])});for(r in d)a=B(h?g[r]:0,r,f),r in g||(g[r]=a.start,h&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function I(e,t){var n,r,i,o,a;for(n in e)if(r=pe.camelCase(n),i=t[r],o=e[n],pe.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=pe.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function $(e,t,n){var r,i,o=0,a=$.prefilters.length,s=pe.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Nt||R(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;a<u;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),o<1&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:pe.extend({},t),opts:pe.extend(!0,{specialEasing:{},easing:pe.easing._default},n),originalProperties:t,originalOptions:n,startTime:Nt||R(),duration:n.duration,tweens:[],createTween:function(t,n){var r=pe.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(I(c,l.opts.specialEasing);o<a;o++)if(r=$.prefilters[o].call(l,e,c,l.opts))return pe.isFunction(r.stop)&&(pe._queueHooks(l.elem,l.opts.queue).stop=pe.proxy(r.stop,r)),r;return pe.map(c,B,l),pe.isFunction(l.opts.start)&&l.opts.start.call(e,l),pe.fx.timer(pe.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function z(e){return pe.attr(e,\"class\")||\"\"}function X(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(De)||[];if(pe.isFunction(n))for(;r=o[i++];)\"+\"===r.charAt(0)?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function U(e,t,n,r){function i(s){var u;return o[s]=!0,pe.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||a||o[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),i(l),!1)}),u}var o={},a=e===Qt;return i(t.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function V(e,t){var n,r,i=pe.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((i[r]?e:n||(n={}))[r]=t[r]);return n&&pe.extend(!0,e,n),e}function Y(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(i)for(a in s)if(s[a]&&s[a].test(i)){u.unshift(a);break}if(u[0]in n)o=u[0];else{for(a in n){if(!u[0]||e.converters[a+\" \"+u[0]]){o=a;break}r||(r=a)}o=o||r}if(o)return o!==u[0]&&u.unshift(o),n[o]}function J(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(a=l[u+\" \"+o]||l[\"* \"+o],!a)for(i in l)if(s=i.split(\" \"),s[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){a===!0?a=l[i]:l[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(f){return{state:\"parsererror\",error:a?f:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}function G(e){return e.style&&e.style.display||pe.css(e,\"display\")}function K(e){for(;e&&1===e.nodeType;){if(\"none\"===G(e)||\"hidden\"===e.type)return!0;e=e.parentNode}return!1}function Q(e,t,n,r){var i;if(pe.isArray(t))pe.each(t,function(t,i){n||rn.test(e)?r(e,i):Q(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==pe.type(t))r(e,t);else for(i in t)Q(e+\"[\"+i+\"]\",t[i],n,r)}function Z(){try{return new e.XMLHttpRequest}catch(t){}}function ee(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var ne=[],re=e.document,ie=ne.slice,oe=ne.concat,ae=ne.push,se=ne.indexOf,ue={},le=ue.toString,ce=ue.hasOwnProperty,fe={},de=\"1.12.3\",pe=function(e,t){return new pe.fn.init(e,t)},he=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,ge=/^-ms-/,me=/-([\\da-z])/gi,ye=function(e,t){return t.toUpperCase()};pe.fn=pe.prototype={jquery:de,constructor:pe,selector:\"\",length:0,toArray:function(){return ie.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:ie.call(this)},pushStack:function(e){var t=pe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return pe.each(this,e)},map:function(e){return this.pushStack(pe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ie.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ae,sort:ne.sort,splice:ne.splice},pe.extend=pe.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||pe.isFunction(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(i=arguments[s]))for(r in i)e=a[r],n=i[r],a!==n&&(l&&n&&(pe.isPlainObject(n)||(t=pe.isArray(n)))?(t?(t=!1,o=e&&pe.isArray(e)?e:[]):o=e&&pe.isPlainObject(e)?e:{},a[r]=pe.extend(l,o,n)):void 0!==n&&(a[r]=n));return a},pe.extend({expando:\"jQuery\"+(de+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===pe.type(e)},isArray:Array.isArray||function(e){return\"array\"===pe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){var t=e&&e.toString();return!pe.isArray(e)&&t-parseFloat(t)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||\"object\"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,\"constructor\")&&!ce.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(n){return!1}if(!fe.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?ue[le.call(e)]||\"object\":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ge,\"ms-\").replace(me,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var r,i=0;if(n(e))for(r=e.length;i<r&&t.call(e[i],i,e[i])!==!1;i++);else for(i in e)if(t.call(e[i],i,e[i])===!1)break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(he,\"\")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?pe.merge(r,\"string\"==typeof e?[e]:e):ae.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(se)return se.call(t,e,n);for(r=t.length,n=n?n<0?Math.max(0,r+n):n:0;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;)e[i++]=t[r++];if(n!==n)for(;void 0!==t[r];)e[i++]=t[r++];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)r=!t(e[o],o),r!==s&&i.push(e[o]);return i},map:function(e,t,r){var i,o,a=0,s=[];if(n(e))for(i=e.length;a<i;a++)o=t(e[a],a,r),null!=o&&s.push(o);else for(a in e)o=t(e[a],a,r),null!=o&&s.push(o);return oe.apply([],s)},guid:1,proxy:function(e,t){var n,r,i;if(\"string\"==typeof t&&(i=e[t],t=e,e=i),pe.isFunction(e))return n=ie.call(arguments,2),r=function(){return e.apply(t||this,n.concat(ie.call(arguments)))},r.guid=e.guid=e.guid||pe.guid++,r},now:function(){return+new Date},support:fe}),\"function\"==typeof Symbol&&(pe.fn[Symbol.iterator]=ne[Symbol.iterator]),pe.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){ue[\"[object \"+t+\"]\"]=t.toLowerCase()});var ve=function(e){function t(e,t,n,r){var i,o,a,s,u,l,f,p,h=t&&t.ownerDocument,g=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==g&&9!==g&&11!==g)return n;if(!r&&((t?t.ownerDocument||t:B)!==H&&L(t),t=t||H,_)){if(11!==g&&(l=ye.exec(e)))if(i=l[1]){if(9===g){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(h&&(a=h.getElementById(i))&&R(t,a)&&a.id===i)return n.push(a),n}else{if(l[2])return Q.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Q.apply(n,t.getElementsByClassName(i)),n}if(w.qsa&&!X[e+\" \"]&&(!F||!F.test(e))){if(1!==g)h=t,p=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((s=t.getAttribute(\"id\"))?s=s.replace(xe,\"\\\\$&\"):t.setAttribute(\"id\",s=P),f=N(e),o=f.length,u=de.test(s)?\"#\"+s:\"[id='\"+s+\"']\";o--;)f[o]=u+\" \"+d(f[o]);p=f.join(\",\"),h=ve.test(e)&&c(t.parentNode)||t}if(p)try{return Q.apply(n,h.querySelectorAll(p)),n}catch(m){}finally{s===P&&t.removeAttribute(\"id\")}}}return S(e.replace(se,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>T.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=H.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||V)-(~e.sourceIndex||V);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function f(){}function d(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=n&&\"parentNode\"===r,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=[W,o];if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(l=t[P]||(t[P]={}),u=l[t.uniqueID]||(l[t.uniqueID]={}),(s=u[r])&&s[0]===W&&s[1]===o)return c[2]=s[2];if(u[r]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function m(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function y(e,t,n,i,o,a){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,a)),r(function(r,a,s,u){var l,c,f,d=[],p=[],h=a.length,y=r||g(t||\"*\",s.nodeType?[s]:s,[]),v=!e||!r&&t?y:m(y,d,e,s,u),x=n?o||(r?e:h||i)?[]:a:v;if(n&&n(v,x,s,u),i)for(l=m(x,p),i(l,[],s,u),c=l.length;c--;)(f=l[c])&&(x[p[c]]=!(v[p[c]]=f));if(r){if(o||e){if(o){for(l=[],c=x.length;c--;)(f=x[c])&&l.push(v[c]=f);o(null,x=[],l,u)}for(c=x.length;c--;)(f=x[c])&&(l=o?ee(r,f):d[c])>-1&&(r[l]=!(a[l]=f))}}else x=m(x===a?x.splice(h,x.length):x),o?o(null,a,x,u):Q.apply(a,x)})}function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.relative[\" \"],s=o?1:0,u=p(function(e){return e===t},a,!0),l=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];s<i;s++)if(n=T.relative[e[s].type])c=[p(h(c),n)];else{if(n=T.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;r<i&&!T.relative[e[r].type];r++);return y(s>1&&h(c),s>1&&d(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(se,\"$1\"),n,s<r&&v(e.slice(s,r)),r<i&&v(e=e.slice(r)),r<i&&d(e))}c.push(n)}return h(c)}function x(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,u,l){var c,f,d,p=0,h=\"0\",g=r&&[],y=[],v=A,x=r||o&&T.find.TAG(\"*\",l),b=W+=null==v?1:Math.random()||.1,w=x.length;for(l&&(A=a===H||a||l);h!==w&&null!=(c=x[h]);h++){if(o&&c){for(f=0,a||c.ownerDocument===H||(L(c),s=!_);d=e[f++];)if(d(c,a||H,s)){u.push(c);break}l&&(W=b)}i&&((c=!d&&c)&&p--,r&&g.push(c))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,y,a,s);if(r){if(p>0)for(;h--;)g[h]||y[h]||(y[h]=G.call(u));y=m(y)}Q.apply(u,y),l&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(W=b,A=v),g};return i?r(a):a}var b,w,T,C,E,N,k,S,A,D,j,L,H,q,_,F,M,O,R,P=\"sizzle\"+1*new Date,B=e.document,W=0,I=0,$=n(),z=n(),X=n(),U=function(e,t){return e===t&&(j=!0),0},V=1<<31,Y={}.hasOwnProperty,J=[],G=J.pop,K=J.push,Q=J.push,Z=J.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ne=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",re=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ie=\"\\\\[\"+ne+\"*(\"+re+\")(?:\"+ne+\"*([*^$|!~]?=)\"+ne+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+re+\"))|)\"+ne+\"*\\\\]\",oe=\":(\"+re+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ie+\")*)|.*)\\\\)|)\",ae=new RegExp(ne+\"+\",\"g\"),se=new RegExp(\"^\"+ne+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ne+\"+$\",\"g\"),ue=new RegExp(\"^\"+ne+\"*,\"+ne+\"*\"),le=new RegExp(\"^\"+ne+\"*([>+~]|\"+ne+\")\"+ne+\"*\"),ce=new RegExp(\"=\"+ne+\"*([^\\\\]'\\\"]*?)\"+ne+\"*\\\\]\",\"g\"),fe=new RegExp(oe),de=new RegExp(\"^\"+re+\"$\"),pe={ID:new RegExp(\"^#(\"+re+\")\"),CLASS:new RegExp(\"^\\\\.(\"+re+\")\"),TAG:new RegExp(\"^(\"+re+\"|[*])\"),ATTR:new RegExp(\"^\"+ie),PSEUDO:new RegExp(\"^\"+oe),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ne+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ne+\"*(?:([+-]|)\"+ne+\"*(\\\\d+)|))\"+ne+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+te+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ne+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ne+\"*((?:-\\\\d)?\\\\d*)\"+ne+\"*\\\\)|)(?=[^-]|$)\",\"i\")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\\d$/i,me=/^[^{]+\\{\\s*\\[native \\w/,ye=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ve=/[+~]/,xe=/'|\\\\/g,be=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ne+\"?|(\"+ne+\")|.)\",\"ig\"),we=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Te=function(){L()};try{Q.apply(J=Z.call(B.childNodes),B.childNodes),J[B.childNodes.length].nodeType}catch(Ce){Q={apply:J.length?function(e,t){K.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==H&&9===r.nodeType&&r.documentElement?(H=r,q=H.documentElement,_=!E(H),(n=H.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",Te,!1):n.attachEvent&&n.attachEvent(\"onunload\",Te)),w.attributes=i(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),w.getElementsByTagName=i(function(e){return e.appendChild(H.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),w.getElementsByClassName=me.test(H.getElementsByClassName),w.getById=i(function(e){return q.appendChild(e).id=P,!H.getElementsByName||!H.getElementsByName(P).length}),w.getById?(T.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&_){var n=t.getElementById(e);return n?[n]:[]}},T.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute(\"id\")===t}}):(delete T.find.ID,T.filter.ID=function(e){var t=e.replace(be,we);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}}),T.find.TAG=w.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},T.find.CLASS=w.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&_)return t.getElementsByClassName(e)},M=[],F=[],(w.qsa=me.test(H.querySelectorAll))&&(i(function(e){q.appendChild(e).innerHTML=\"<a id='\"+P+\"'></a><select id='\"+P+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&F.push(\"[*^$]=\"+ne+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||F.push(\"\\\\[\"+ne+\"*(?:value|\"+te+\")\"),e.querySelectorAll(\"[id~=\"+P+\"-]\").length||F.push(\"~=\"),e.querySelectorAll(\":checked\").length||F.push(\":checked\"),e.querySelectorAll(\"a#\"+P+\"+*\").length||F.push(\".#.+[+~]\")}),i(function(e){var t=H.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&F.push(\"name\"+ne+\"*[*^$|!~]?=\"),e.querySelectorAll(\":enabled\").length||F.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),F.push(\",.*:\")})),(w.matchesSelector=me.test(O=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&i(function(e){w.disconnectedMatch=O.call(e,\"div\"),O.call(e,\"[s!='']:x\"),M.push(\"!=\",oe)}),F=F.length&&new RegExp(F.join(\"|\")),M=M.length&&new RegExp(M.join(\"|\")),t=me.test(q.compareDocumentPosition),R=t||me.test(q.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===H||e.ownerDocument===B&&R(B,e)?-1:t===H||t.ownerDocument===B&&R(B,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===H?-1:t===H?1:i?-1:o?1:D?ee(D,e)-ee(D,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===B?-1:u[r]===B?1:0},H):H},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==H&&L(e),n=n.replace(ce,\"='$1']\"),w.matchesSelector&&_&&!X[n+\" \"]&&(!M||!M.test(n))&&(!F||!F.test(n)))try{var r=O.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return t(n,H,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==H&&L(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==H&&L(e);var n=T.attrHandle[t.toLowerCase()],r=n&&Y.call(T.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==r?r:w.attributes||!_?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!w.detectDuplicates,D=!w.sortStable&&e.slice(0),e.sort(U),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return D=null,e},C=t.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||\"\").replace(be,we),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&fe.test(n)&&(t=N(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=$[e+\" \"];return t||(t=new RegExp(\"(^|\"+ne+\")\"+e+\"(\"+ne+\"|$)\"))&&$(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(ae,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s,x=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(d=m,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),\nl=c[e]||[],p=l[0]===W&&l[1],x=p&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){c[e]=[W,p,x];break}}else if(v&&(d=t,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===W&&l[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++x||(v&&(f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return o[P]?o(n):o.length>1?(i=[e,e,\"\",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=k(e.replace(se,\"$1\"));return i[P]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(be,we).toLowerCase(),function(t){var n;do if(n=_?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===q},focus:function(e){return e===H.activeElement&&(!H.hasFocus||H.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:l(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:l(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},T.pseudos.nth=T.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})T.pseudos[b]=s(b);for(b in{submit:!0,reset:!0})T.pseudos[b]=u(b);return f.prototype=T.filters=T.pseudos,T.setFilters=new f,N=t.tokenize=function(e,n){var r,i,o,a,s,u,l,c=z[e+\" \"];if(c)return n?0:c.slice(0);for(s=e,u=[],l=T.preFilter;s;){r&&!(i=ue.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),r=!1,(i=le.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(se,\" \")}),s=s.slice(r.length));for(a in T.filter)!(i=pe[a].exec(s))||l[a]&&!(i=l[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):z(e,u).slice(0)},k=t.compile=function(e,t){var n,r=[],i=[],o=X[e+\" \"];if(!o){for(t||(t=N(e)),n=t.length;n--;)o=v(t[n]),o[P]?r.push(o):i.push(o);o=X(e,x(i,r)),o.selector=e}return o},S=t.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,f=!r&&N(e=l.selector||e);if(n=n||[],1===f.length){if(o=f[0]=f[0].slice(0),o.length>2&&\"ID\"===(a=o[0]).type&&w.getById&&9===t.nodeType&&_&&T.relative[o[1].type]){if(t=(T.find.ID(a.matches[0].replace(be,we),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(be,we),ve.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Q.apply(n,r),n;break}}return(l||k(e,f))(r,t,!_,n,!t||ve.test(e)&&c(t.parentNode)||t),n},w.sortStable=P.split(\"\").sort(U).join(\"\")===P,w.detectDuplicates=!!j,L(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(H.createElement(\"div\"))}),i(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||o(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute(\"disabled\")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=ve,pe.expr=ve.selectors,pe.expr[\":\"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ve.uniqueSort,pe.text=ve.getText,pe.isXMLDoc=ve.isXML,pe.contains=ve.contains;var xe=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&pe(e).is(n))break;r.push(e)}return r},be=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Te=/^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,Ce=/^.[^:#\\[\\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;t<i;t++)if(pe.contains(r[t],this))return!0}));for(t=0;t<i;t++)pe.find(e,r[t],n);return n=this.pushStack(i>1?pe.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,\"string\"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var Ee,Ne=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,ke=pe.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ee,\"string\"==typeof e){if(r=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),Te.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if(i=re.getElementById(r[2]),i&&i.parentNode){if(i.id!==r[2])return Ee.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?\"undefined\"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};ke.prototype=pe.fn,Ee=pe(re);var Se=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(pe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=we.test(e)||\"string\"!=typeof e?pe(e,t||this.context):0;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,\"parentNode\")},parentsUntil:function(e,t,n){return xe(e,\"parentNode\",n)},next:function(e){return i(e,\"nextSibling\")},prev:function(e){return i(e,\"previousSibling\")},nextAll:function(e){return xe(e,\"nextSibling\")},prevAll:function(e){return xe(e,\"previousSibling\")},nextUntil:function(e,t,n){return xe(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return xe(e,\"previousSibling\",n)},siblings:function(e){return be((e.parentNode||{}).firstChild,e)},children:function(e){return be(e.firstChild)},contents:function(e){return pe.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var i=pe.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=pe.filter(r,i)),this.length>1&&(Ae[e]||(i=pe.uniqueSort(i)),Se.test(e)&&(i=i.reverse())),this.pushStack(i)}});var De=/\\S+/g;pe.Callbacks=function(e){e=\"string\"==typeof e?o(e):pe.extend({},e);var t,n,r,i,a=[],s=[],u=-1,l=function(){for(i=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u<a.length;)a[u].apply(n[0],n[1])===!1&&e.stopOnFalse&&(u=a.length,n=!1);e.memory||(n=!1),t=!1,i&&(a=n?[]:\"\")},c={add:function(){return a&&(n&&!t&&(u=a.length-1,s.push(n)),function r(t){pe.each(t,function(t,n){pe.isFunction(n)?e.unique&&c.has(n)||a.push(n):n&&n.length&&\"string\"!==pe.type(n)&&r(n)})}(arguments),n&&!t&&l()),this},remove:function(){return pe.each(arguments,function(e,t){for(var n;(n=pe.inArray(t,a,n))>-1;)a.splice(n,1),n<=u&&u--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n=\"\",this},disabled:function(){return!a},lock:function(){return i=!0,n||c.disable(),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},pe.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",pe.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",pe.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",pe.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+\"With\"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,r):r}},i={};return r.pipe=r.then,pe.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ie.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,u=1===s?e:pe.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ie.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);i<a;i++)o[i]&&pe.isFunction(o[i].promise)?o[i].promise().progress(l(i,n,t)).done(l(i,r,o)).fail(u.reject):--s;return s||u.resolveWith(r,o),u.promise()}});var je;pe.fn.ready=function(e){return pe.ready.promise().done(e),this},pe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?pe.readyWait++:pe.ready(!0)},ready:function(e){(e===!0?--pe.readyWait:pe.isReady)||(pe.isReady=!0,e!==!0&&--pe.readyWait>0||(je.resolveWith(re,[pe]),pe.fn.triggerHandler&&(pe(re).triggerHandler(\"ready\"),pe(re).off(\"ready\"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),\"complete\"===re.readyState||\"loading\"!==re.readyState&&!re.documentElement.doScroll)e.setTimeout(pe.ready);else if(re.addEventListener)re.addEventListener(\"DOMContentLoaded\",s),e.addEventListener(\"load\",s);else{re.attachEvent(\"onreadystatechange\",s),e.attachEvent(\"onload\",s);var n=!1;try{n=null==e.frameElement&&re.documentElement}catch(r){}n&&n.doScroll&&!function i(){if(!pe.isReady){try{n.doScroll(\"left\")}catch(t){return e.setTimeout(i,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var Le;for(Le in pe(fe))break;fe.ownFirst=\"0\"===Le,fe.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,r;n=re.getElementsByTagName(\"body\")[0],n&&n.style&&(t=re.createElement(\"div\"),r=re.createElement(\"div\"),r.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",n.appendChild(r).appendChild(t),\"undefined\"!=typeof t.style.zoom&&(t.style.cssText=\"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\",fe.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=re.createElement(\"div\");fe.deleteExpando=!0;try{delete e.test}catch(t){fe.deleteExpando=!1}e=null}();var He=function(e){var t=pe.noData[(e.nodeName+\" \").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute(\"classid\")===t)},qe=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,_e=/([A-Z])/g;pe.extend({cache:{},noData:{\"applet \":!0,\"embed \":!0,\"object \":\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!l(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return f(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return f(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=pe.data(o),1===o.nodeType&&!pe._data(o,\"parsedAttrs\"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf(\"data-\")&&(r=pe.camelCase(r.slice(5)),u(o,r,i[r])));pe._data(o,\"parsedAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?u(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=pe._data(e,t),n&&(!r||pe.isArray(n)?r=pe._data(e,t,pe.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=pe.queue(e,t),r=n.length,i=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks(\"once memory\").add(function(){pe._removeData(e,t+\"queue\"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?pe.queue(this[0],e):void 0===t?this:this.each(function(){var n=pe.queue(this,e,t);pe._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&pe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){pe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=pe.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";a--;)n=pe._data(o[a],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}}),function(){var e;fe.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,r;return n=re.getElementsByTagName(\"body\")[0],n&&n.style?(t=re.createElement(\"div\"),r=re.createElement(\"div\"),r.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",n.appendChild(r).appendChild(t),\"undefined\"!=typeof t.style.zoom&&(t.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1\",t.appendChild(re.createElement(\"div\")).style.width=\"5px\",e=3!==t.offsetWidth),n.removeChild(r),e):void 0}}();var Fe=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Me=new RegExp(\"^(?:([+-])=|)(\"+Fe+\")([a-z%]*)$\",\"i\"),Oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Re=function(e,t){return e=t||e,\"none\"===pe.css(e,\"display\")||!pe.contains(e.ownerDocument,e)},Pe=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===pe.type(n)){i=!0;for(s in n)Pe(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,pe.isFunction(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(pe(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},Be=/^(?:checkbox|radio)$/i,We=/<([\\w:-]+)/,Ie=/^$|\\/(?:java|ecma)script/i,$e=/^\\s+/,ze=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video\";!function(){var e=re.createElement(\"div\"),t=re.createDocumentFragment(),n=re.createElement(\"input\");e.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",fe.leadingWhitespace=3===e.firstChild.nodeType,fe.tbody=!e.getElementsByTagName(\"tbody\").length,fe.htmlSerialize=!!e.getElementsByTagName(\"link\").length,fe.html5Clone=\"<:nav></:nav>\"!==re.createElement(\"nav\").cloneNode(!0).outerHTML,n.type=\"checkbox\",n.checked=!0,t.appendChild(n),fe.appendChecked=n.checked,e.innerHTML=\"<textarea>x</textarea>\",fe.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=re.createElement(\"input\"),n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),e.appendChild(n),fe.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,fe.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:fe.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ue=/<|&#?\\w+;/,Ve=/<tbody/i;!function(){var t,n,r=re.createElement(\"div\");for(t in{submit:!0,change:!0,focusin:!0})n=\"on\"+t,(fe[t]=n in e)||(r.setAttribute(n,\"t\"),fe[t]=r.attributes[n].expando===!1);r=null}();var Ye=/^(?:input|select|textarea)$/i,Je=/^key/,Ge=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ke=/^(?:focusinfocus|focusoutblur)$/,Qe=/^([^.]*)(?:\\.(.+)|)/;pe.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=pe._data(e);if(m){for(n.handler&&(u=n,n=u.handler,i=u.selector),n.guid||(n.guid=pe.guid++),(a=m.events)||(a=m.events={}),(c=m.handle)||(c=m.handle=function(e){return\"undefined\"==typeof pe||e&&pe.event.triggered===e.type?void 0:pe.event.dispatch.apply(c.elem,arguments)},c.elem=e),t=(t||\"\").match(De)||[\"\"],s=t.length;s--;)o=Qe.exec(t[s])||[],p=g=o[1],h=(o[2]||\"\").split(\".\").sort(),p&&(l=pe.event.special[p]||{},p=(i?l.delegateType:l.bindType)||p,l=pe.event.special[p]||{},f=pe.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&pe.expr.match.needsContext.test(i),namespace:h.join(\".\")},u),(d=a[p])||(d=a[p]=[],d.delegateCount=0,l.setup&&l.setup.call(e,r,h,c)!==!1||(e.addEventListener?e.addEventListener(p,c,!1):e.attachEvent&&e.attachEvent(\"on\"+p,c))),l.add&&(l.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,f):d.push(f),pe.event.global[p]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=pe.hasData(e)&&pe._data(e);if(m&&(c=m.events)){for(t=(t||\"\").match(De)||[\"\"],l=t.length;l--;)if(s=Qe.exec(t[l])||[],p=g=s[1],h=(s[2]||\"\").split(\".\").sort(),p){for(f=pe.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=c[p]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),u=o=d.length;o--;)a=d[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(d.splice(o,1),a.selector&&d.delegateCount--,f.remove&&f.remove.call(e,a));u&&!d.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||pe.removeEvent(e,p,m.handle),delete c[p])}else for(p in c)pe.event.remove(e,p+t[l],n,r,!0);pe.isEmptyObject(c)&&(delete m.handle,pe._removeData(e,\"events\"))}},trigger:function(t,n,r,i){var o,a,s,u,l,c,f,d=[r||re],p=ce.call(t,\"type\")?t.type:t,h=ce.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=c=r=r||re,3!==r.nodeType&&8!==r.nodeType&&!Ke.test(p+pe.event.triggered)&&(p.indexOf(\".\")>-1&&(h=p.split(\".\"),p=h.shift(),h.sort()),a=p.indexOf(\":\")<0&&\"on\"+p,t=t[pe.expando]?t:new pe.Event(p,\"object\"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),l=pe.event.special[p]||{},i||!l.trigger||l.trigger.apply(r,n)!==!1)){if(!i&&!l.noBubble&&!pe.isWindow(r)){for(u=l.delegateType||p,Ke.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),c=s;c===(r.ownerDocument||re)&&d.push(c.defaultView||c.parentWindow||e)}for(f=0;(s=d[f++])&&!t.isPropagationStopped();)t.type=f>1?u:l.bindType||p,o=(pe._data(s,\"events\")||{})[t.type]&&pe._data(s,\"handle\"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&He(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&He(r)&&a&&r[p]&&!pe.isWindow(r)){c=r[a],c&&(r[a]=null),pe.event.triggered=p;try{r[p]()}catch(g){}pe.event.triggered=void 0,c&&(r[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,r,i,o,a=[],s=ie.call(arguments),u=(pe._data(this,\"events\")||{})[e.type]||[],l=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,u),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((pe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&(\"click\"!==e.type||isNaN(e.button)||e.button<1))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(r=[],n=0;n<s;n++)o=t[n],i=o.selector+\" \",void 0===r[i]&&(r[i]=o.needsContext?pe(i,this).index(u)>-1:pe.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s<t.length&&a.push({elem:this,handlers:t.slice(s)}),a},fix:function(e){if(e[pe.expando])return e;var t,n,r,i=e.type,o=e,a=this.fixHooks[i];for(a||(this.fixHooks[i]=a=Ge.test(i)?this.mouseHooks:Je.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new pe.Event(o),t=r.length;t--;)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||re),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,a.filter?a.filter(e,o):e},props:\"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,t){var n,r,i,o=t.button,a=t.fromElement;return null==e.pageX&&null!=t.clientX&&(r=e.target.ownerDocument||re,i=r.documentElement,n=r.body,e.pageX=t.clientX+(i&&i.scrollLeft||n&&n.scrollLeft||0)-(i&&i.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(i&&i.scrollTop||n&&n.scrollTop||0)-(i&&i.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?t.toElement:a),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==b()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){if(this===b()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(pe.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click)return this.click(),!1},_default:function(e){return pe.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n){var r=pe.extend(new pe.Event,n,{type:e,isSimulated:!0});pe.event.trigger(r,null,t),r.isDefaultPrevented()&&n.preventDefault()}},pe.removeEvent=re.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(\"undefined\"==typeof e[r]&&(e[r]=null),e.detachEvent(r,n))},pe.Event=function(e,t){return this instanceof pe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?v:x):this.type=e,t&&pe.extend(this,t),this.timeStamp=e&&e.timeStamp||pe.now(),void(this[pe.expando]=!0)):new pe.Event(e,t)},pe.Event.prototype={constructor:pe.Event,isDefaultPrevented:x,isPropagationStopped:x,isImmediatePropagationStopped:x,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=v,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=v,e&&!this.isSimulated&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=v,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},pe.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){pe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||pe.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),fe.submit||(pe.event.special.submit={setup:function(){return!pe.nodeName(this,\"form\")&&void pe.event.add(this,\"click._submit keypress._submit\",function(e){var t=e.target,n=pe.nodeName(t,\"input\")||pe.nodeName(t,\"button\")?pe.prop(t,\"form\"):void 0;n&&!pe._data(n,\"submit\")&&(pe.event.add(n,\"submit._submit\",function(e){e._submitBubble=!0}),pe._data(n,\"submit\",!0))})},postDispatch:function(e){e._submitBubble&&(delete e._submitBubble,this.parentNode&&!e.isTrigger&&pe.event.simulate(\"submit\",this.parentNode,e))},teardown:function(){return!pe.nodeName(this,\"form\")&&void pe.event.remove(this,\"._submit\")}}),fe.change||(pe.event.special.change={setup:function(){return Ye.test(this.nodeName)?(\"checkbox\"!==this.type&&\"radio\"!==this.type||(pe.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._justChanged=!0)}),pe.event.add(this,\"click._change\",function(e){this._justChanged&&!e.isTrigger&&(this._justChanged=!1),pe.event.simulate(\"change\",this,e)})),!1):void pe.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Ye.test(t.nodeName)&&!pe._data(t,\"change\")&&(pe.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||pe.event.simulate(\"change\",this.parentNode,e)}),pe._data(t,\"change\",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||\"radio\"!==t.type&&\"checkbox\"!==t.type)return e.handleObj.handler.apply(this,arguments)},teardown:function(){return pe.event.remove(this,\"._change\"),!Ye.test(this.nodeName)}}),fe.focusin||pe.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){pe.event.simulate(t,e.target,pe.event.fix(e))};pe.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=pe._data(r,t);i||r.addEventListener(e,n,!0),pe._data(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=pe._data(r,t)-1;i?pe._data(r,t,i):(r.removeEventListener(e,n,!0),pe._removeData(r,t))}}}),pe.fn.extend({on:function(e,t,n,r){return w(this,e,t,n,r)},one:function(e,t,n,r){return w(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,pe(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return t!==!1&&\"function\"!=typeof t||(n=t,t=void 0),n===!1&&(n=x),this.each(function(){pe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){pe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return pe.event.trigger(e,t,n,!0)}});var Ze=/ jQuery\\d+=\"(?:null|\\d+)\"/g,et=new RegExp(\"<(?:\"+ze+\")[\\\\s/>]\",\"i\"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,nt=/<script|<style|<link/i,rt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,it=/^true\\/(.*)/,ot=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,at=p(re),st=at.appendChild(re.createElement(\"div\"));pe.extend({htmlPrefilter:function(e){return e.replace(tt,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s,u=pe.contains(e.ownerDocument,e);if(fe.html5Clone||pe.isXMLDoc(e)||!et.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(st.innerHTML=e.outerHTML,st.removeChild(o=st.firstChild)),!(fe.noCloneEvent&&fe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||pe.isXMLDoc(e)))for(r=h(o),s=h(e),a=0;null!=(i=s[a]);++a)r[a]&&k(i,r[a]);if(t)if(n)for(s=s||h(e),r=r||h(o),a=0;null!=(i=s[a]);a++)N(i,r[a]);else N(e,o);return r=h(o,\"script\"),r.length>0&&g(r,!u&&h(e,\"script\")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=pe.expando,u=pe.cache,l=fe.attributes,c=pe.event.special;null!=(n=e[a]);a++)if((t||He(n))&&(i=n[s],o=i&&u[i])){if(o.events)for(r in o.events)c[r]?pe.event.remove(n,r):pe.removeEvent(n,r,o.handle);u[i]&&(delete u[i],l||\"undefined\"==typeof n.removeAttribute?n[s]=void 0:n.removeAttribute(s),ne.push(i))}}}),pe.fn.extend({domManip:S,detach:function(e){return A(this,e,!0)},remove:function(e){return A(this,e)},text:function(e){return Pe(this,function(e){return void 0===e?pe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||re).createTextNode(e))},null,e,arguments.length)},append:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.appendChild(e)}})},prepend:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&pe.cleanData(h(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&pe.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return pe.clone(this,e,t)})},html:function(e){return Pe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Ze,\"\"):void 0;if(\"string\"==typeof e&&!nt.test(e)&&(fe.htmlSerialize||!et.test(e))&&(fe.leadingWhitespace||!$e.test(e))&&!Xe[(We.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=pe.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(pe.cleanData(h(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return S(this,arguments,function(t){var n=this.parentNode;pe.inArray(this,e)<0&&(pe.cleanData(h(this)),\nn&&n.replaceChild(t,this))},e)}}),pe.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){pe.fn[e]=function(e){for(var n,r=0,i=[],o=pe(e),a=o.length-1;r<=a;r++)n=r===a?this:this.clone(!0),pe(o[r])[t](n),ae.apply(i,n.get());return this.pushStack(i)}});var ut,lt={HTML:\"block\",BODY:\"block\"},ct=/^margin/,ft=new RegExp(\"^(\"+Fe+\")(?!px)[a-z%]+$\",\"i\"),dt=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i},pt=re.documentElement;!function(){function t(){var t,c,f=re.documentElement;f.appendChild(u),l.style.cssText=\"-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",n=i=s=!1,r=a=!0,e.getComputedStyle&&(c=e.getComputedStyle(l),n=\"1%\"!==(c||{}).top,s=\"2px\"===(c||{}).marginLeft,i=\"4px\"===(c||{width:\"4px\"}).width,l.style.marginRight=\"50%\",r=\"4px\"===(c||{marginRight:\"4px\"}).marginRight,t=l.appendChild(re.createElement(\"div\")),t.style.cssText=l.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",t.style.marginRight=t.style.width=\"0\",l.style.width=\"1px\",a=!parseFloat((e.getComputedStyle(t)||{}).marginRight),l.removeChild(t)),l.style.display=\"none\",o=0===l.getClientRects().length,o&&(l.style.display=\"\",l.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",t=l.getElementsByTagName(\"td\"),t[0].style.cssText=\"margin:0;border:0;padding:0;display:none\",o=0===t[0].offsetHeight,o&&(t[0].style.display=\"\",t[1].style.display=\"none\",o=0===t[0].offsetHeight)),f.removeChild(u)}var n,r,i,o,a,s,u=re.createElement(\"div\"),l=re.createElement(\"div\");l.style&&(l.style.cssText=\"float:left;opacity:.5\",fe.opacity=\"0.5\"===l.style.opacity,fe.cssFloat=!!l.style.cssFloat,l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",fe.clearCloneStyle=\"content-box\"===l.style.backgroundClip,u=re.createElement(\"div\"),u.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",l.innerHTML=\"\",u.appendChild(l),fe.boxSizing=\"\"===l.style.boxSizing||\"\"===l.style.MozBoxSizing||\"\"===l.style.WebkitBoxSizing,pe.extend(fe,{reliableHiddenOffsets:function(){return null==n&&t(),o},boxSizingReliable:function(){return null==n&&t(),i},pixelMarginRight:function(){return null==n&&t(),r},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),a},reliableMarginLeft:function(){return null==n&&t(),s}}))}();var ht,gt,mt=/^(top|right|bottom|left)$/;e.getComputedStyle?(ht=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n.getPropertyValue(t)||n[t]:void 0,\"\"!==a&&void 0!==a||pe.contains(e.ownerDocument,e)||(a=pe.style(e,t)),n&&!fe.pixelMarginRight()&&ft.test(a)&&ct.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),void 0===a?a:a+\"\"}):pt.currentStyle&&(ht=function(e){return e.currentStyle},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),ft.test(a)&&!mt.test(t)&&(r=s.left,i=e.runtimeStyle,o=i&&i.left,o&&(i.left=e.currentStyle.left),s.left=\"fontSize\"===t?\"1em\":a,a=s.pixelLeft+\"px\",s.left=r,o&&(i.left=o)),void 0===a?a:a+\"\"||\"auto\"});var yt=/alpha\\([^)]*\\)/i,vt=/opacity\\s*=\\s*([^)]*)/i,xt=/^(none|table(?!-c[ea]).+)/,bt=new RegExp(\"^(\"+Fe+\")(.*)$\",\"i\"),wt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Tt={letterSpacing:\"0\",fontWeight:\"400\"},Ct=[\"Webkit\",\"O\",\"Moz\",\"ms\"],Et=re.createElement(\"div\").style;pe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=gt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":fe.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=pe.camelCase(t),u=e.style;if(t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:u[t];if(o=typeof n,\"string\"===o&&(i=Me.exec(n))&&i[1]&&(n=d(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(pe.cssNumber[s]?\"\":\"px\")),fe.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),!(a&&\"set\"in a&&void 0===(n=a.set(e,n,r)))))try{u[t]=n}catch(l){}}},css:function(e,t,n,r){var i,o,a,s=pe.camelCase(t);return t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],a&&\"get\"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=gt(e,t,r)),\"normal\"===o&&t in Tt&&(o=Tt[t]),\"\"===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),pe.each([\"height\",\"width\"],function(e,t){pe.cssHooks[t]={get:function(e,n,r){if(n)return xt.test(pe.css(e,\"display\"))&&0===e.offsetWidth?dt(e,wt,function(){return M(e,t,r)}):M(e,t,r)},set:function(e,n,r){var i=r&&ht(e);return _(e,n,r?F(e,t,r,fe.boxSizing&&\"border-box\"===pe.css(e,\"boxSizing\",!1,i),i):0)}}}),fe.opacity||(pe.cssHooks.opacity={get:function(e,t){return vt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=pe.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===pe.trim(o.replace(yt,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=yt.test(o)?o.replace(yt,i):o+\" \"+i)}}),pe.cssHooks.marginRight=L(fe.reliableMarginRight,function(e,t){if(t)return dt(e,{display:\"inline-block\"},gt,[e,\"marginRight\"])}),pe.cssHooks.marginLeft=L(fe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(gt(e,\"marginLeft\"))||(pe.contains(e.ownerDocument,e)?e.getBoundingClientRect().left-dt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}):0))+\"px\"}),pe.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){pe.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+Oe[r]+t]=o[r]||o[r-2]||o[0];return i}},ct.test(e)||(pe.cssHooks[e+t].set=_)}),pe.fn.extend({css:function(e,t){return Pe(this,function(e,t,n){var r,i,o={},a=0;if(pe.isArray(t)){for(r=ht(e),i=t.length;a<i;a++)o[t[a]]=pe.css(e,t[a],!1,r);return o}return void 0!==n?pe.style(e,t,n):pe.css(e,t)},e,t,arguments.length>1)},show:function(){return q(this,!0)},hide:function(){return q(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){Re(this)?pe(this).show():pe(this).hide()})}}),pe.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||pe.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(pe.cssNumber[n]?\"\":\"px\")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.options.duration?this.pos=t=pe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=pe.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){pe.fx.step[e.prop]?pe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[pe.cssProps[e.prop]]&&!pe.cssHooks[e.prop]?e.elem[e.prop]=e.now:pe.style(e.elem,e.prop,e.now+e.unit)}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},pe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},pe.fx=O.prototype.init,pe.fx.step={};var Nt,kt,St=/^(?:toggle|show|hide)$/,At=/queueHooks$/;pe.Animation=pe.extend($,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){pe.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(De);for(var n,r=0,i=e.length;r<i;r++)n=e[r],$.tweeners[n]=$.tweeners[n]||[],$.tweeners[n].unshift(t)},prefilters:[W],prefilter:function(e,t){t?$.prefilters.unshift(e):$.prefilters.push(e)}}),pe.speed=function(e,t,n){var r=e&&\"object\"==typeof e?pe.extend({},e):{complete:n||!n&&t||pe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!pe.isFunction(t)&&t};return r.duration=pe.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in pe.fx.speeds?pe.fx.speeds[r.duration]:pe.fx.speeds._default,null!=r.queue&&r.queue!==!0||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){pe.isFunction(r.old)&&r.old.call(this),r.queue&&pe.dequeue(this,r.queue)},r},pe.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Re).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=pe.isEmptyObject(e),o=pe.speed(t,n,r),a=function(){var t=$(this,pe.extend({},e),o);(i||pe._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=pe.timers,a=pe._data(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&At.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||pe.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=pe._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=pe.timers,a=r?r.length:0;for(n.finish=!0,pe.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),pe.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=pe.fn[t];pe.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(P(t,!0),e,r,i)}}),pe.each({slideDown:P(\"show\"),slideUp:P(\"hide\"),slideToggle:P(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){pe.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),pe.timers=[],pe.fx.tick=function(){var e,t=pe.timers,n=0;for(Nt=pe.now();n<t.length;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||pe.fx.stop(),Nt=void 0},pe.fx.timer=function(e){pe.timers.push(e),e()?pe.fx.start():pe.timers.pop()},pe.fx.interval=13,pe.fx.start=function(){kt||(kt=e.setInterval(pe.fx.tick,pe.fx.interval))},pe.fx.stop=function(){e.clearInterval(kt),kt=null},pe.fx.speeds={slow:600,fast:200,_default:400},pe.fn.delay=function(t,n){return t=pe.fx?pe.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e,t=re.createElement(\"input\"),n=re.createElement(\"div\"),r=re.createElement(\"select\"),i=r.appendChild(re.createElement(\"option\"));n=re.createElement(\"div\"),n.setAttribute(\"className\",\"t\"),n.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",e=n.getElementsByTagName(\"a\")[0],t.setAttribute(\"type\",\"checkbox\"),n.appendChild(t),e=n.getElementsByTagName(\"a\")[0],e.style.cssText=\"top:1px\",fe.getSetAttribute=\"t\"!==n.className,fe.style=/top/.test(e.getAttribute(\"style\")),fe.hrefNormalized=\"/a\"===e.getAttribute(\"href\"),fe.checkOn=!!t.value,fe.optSelected=i.selected,fe.enctype=!!re.createElement(\"form\").enctype,r.disabled=!0,fe.optDisabled=!i.disabled,t=re.createElement(\"input\"),t.setAttribute(\"value\",\"\"),fe.input=\"\"===t.getAttribute(\"value\"),t.value=\"t\",t.setAttribute(\"type\",\"radio\"),fe.radioValue=\"t\"===t.value}();var Dt=/\\r/g,jt=/[\\x20\\t\\r\\n\\f]+/g;pe.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=pe.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,pe(this).val()):e,null==i?i=\"\":\"number\"==typeof i?i+=\"\":pe.isArray(i)&&(i=pe.map(i,function(e){return null==e?\"\":e+\"\"})),t=pe.valHooks[this.type]||pe.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return t=pe.valHooks[i.type]||pe.valHooks[i.nodeName.toLowerCase()],t&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(Dt,\"\"):null==n?\"\":n)}}}),pe.extend({valHooks:{option:{get:function(e){var t=pe.find.attr(e,\"value\");return null!=t?t:pe.trim(pe.text(e)).replace(jt,\" \")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||i<0,a=o?null:[],s=o?i+1:r.length,u=i<0?s:o?i:0;u<s;u++)if(n=r[u],(n.selected||u===i)&&(fe.optDisabled?!n.disabled:null===n.getAttribute(\"disabled\"))&&(!n.parentNode.disabled||!pe.nodeName(n.parentNode,\"optgroup\"))){if(t=pe(n).val(),o)return t;a.push(t)}return a},set:function(e,t){for(var n,r,i=e.options,o=pe.makeArray(t),a=i.length;a--;)if(r=i[a],pe.inArray(pe.valHooks.option.get(r),o)>-1)try{r.selected=n=!0}catch(s){r.scrollHeight}else r.selected=!1;return n||(e.selectedIndex=-1),i}}}}),pe.each([\"radio\",\"checkbox\"],function(){pe.valHooks[this]={set:function(e,t){if(pe.isArray(t))return e.checked=pe.inArray(pe(e).val(),t)>-1}},fe.checkOn||(pe.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Lt,Ht,qt=pe.expr.attrHandle,_t=/^(?:checked|selected)$/i,Ft=fe.getSetAttribute,Mt=fe.input;pe.fn.extend({attr:function(e,t){return Pe(this,pe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){pe.removeAttr(this,e)})}}),pe.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?pe.prop(e,t,n):(1===o&&pe.isXMLDoc(e)||(t=t.toLowerCase(),i=pe.attrHooks[t]||(pe.expr.match.bool.test(t)?Ht:Lt)),void 0!==n?null===n?void pe.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:(r=pe.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!fe.radioValue&&\"radio\"===t&&pe.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(De);if(o&&1===e.nodeType)for(;n=o[i++];)r=pe.propFix[n]||n,pe.expr.match.bool.test(n)?Mt&&Ft||!_t.test(n)?e[r]=!1:e[pe.camelCase(\"default-\"+n)]=e[r]=!1:pe.attr(e,n,\"\"),e.removeAttribute(Ft?n:r)}}),Ht={set:function(e,t,n){return t===!1?pe.removeAttr(e,n):Mt&&Ft||!_t.test(n)?e.setAttribute(!Ft&&pe.propFix[n]||n,n):e[pe.camelCase(\"default-\"+n)]=e[n]=!0,n}},pe.each(pe.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=qt[t]||pe.find.attr;Mt&&Ft||!_t.test(t)?qt[t]=function(e,t,r){var i,o;return r||(o=qt[t],qt[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,qt[t]=o),i}:qt[t]=function(e,t,n){if(!n)return e[pe.camelCase(\"default-\"+t)]?t.toLowerCase():null}}),Mt&&Ft||(pe.attrHooks.value={set:function(e,t,n){return pe.nodeName(e,\"input\")?void(e.defaultValue=t):Lt&&Lt.set(e,t,n)}}),Ft||(Lt={set:function(e,t,n){var r=e.getAttributeNode(n);if(r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+=\"\",\"value\"===n||t===e.getAttribute(n))return t}},qt.id=qt.name=qt.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&\"\"!==r.value?r.value:null},pe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:Lt.set},pe.attrHooks.contenteditable={set:function(e,t,n){Lt.set(e,\"\"!==t&&t,n)}},pe.each([\"width\",\"height\"],function(e,t){pe.attrHooks[t]={set:function(e,n){if(\"\"===n)return e.setAttribute(t,\"auto\"),n}}})),fe.style||(pe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+\"\"}});var Ot=/^(?:input|select|textarea|button|object)$/i,Rt=/^(?:a|area)$/i;pe.fn.extend({prop:function(e,t){return Pe(this,pe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=pe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(t){}})}}),pe.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&pe.isXMLDoc(e)||(t=pe.propFix[t]||t,i=pe.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=pe.find.attr(e,\"tabindex\");return t?parseInt(t,10):Ot.test(e.nodeName)||Rt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),fe.hrefNormalized||pe.each([\"href\",\"src\"],function(e,t){pe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),fe.optSelected||(pe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),pe.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){pe.propFix[this.toLowerCase()]=this}),fe.enctype||(pe.propFix.enctype=\"encoding\");var Pt=/[\\t\\r\\n\\f]/g;pe.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).addClass(e.call(this,t,z(this)))});if(\"string\"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(Pt,\" \")){for(a=0;o=t[a++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");s=pe.trim(r),i!==s&&pe.attr(n,\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).removeClass(e.call(this,t,z(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(Pt,\" \")){for(a=0;o=t[a++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");s=pe.trim(r),i!==s&&pe.attr(n,\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):pe.isFunction(e)?this.each(function(n){pe(this).toggleClass(e.call(this,n,z(this),t),t)}):this.each(function(){var t,r,i,o;if(\"string\"===n)for(r=0,i=pe(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=z(this),t&&pe._data(this,\"__className__\",t),pe.attr(this,\"class\",t||e===!1?\"\":pe._data(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+z(n)+\" \").replace(Pt,\" \").indexOf(t)>-1)return!0;return!1}}),pe.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){pe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),pe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}});var Bt=e.location,Wt=pe.now(),It=/\\?/,$t=/(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;pe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+\"\");var n,r=null,i=pe.trim(t+\"\");return i&&!pe.trim(i.replace($t,function(e,t,i,o){return n&&t&&(r=0),0===r?e:(n=i||t,r+=!o-!i,\"\")}))?Function(\"return \"+i)():pe.error(\"Invalid JSON: \"+t)},pe.parseXML=function(t){var n,r;if(!t||\"string\"!=typeof t)return null;try{e.DOMParser?(r=new e.DOMParser,n=r.parseFromString(t,\"text/xml\")):(n=new e.ActiveXObject(\"Microsoft.XMLDOM\"),n.async=\"false\",n.loadXML(t))}catch(i){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName(\"parsererror\").length||pe.error(\"Invalid XML: \"+t),n};var zt=/#.*$/,Xt=/([?&])_=[^&]*/,Ut=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Vt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Yt=/^(?:GET|HEAD)$/,Jt=/^\\/\\//,Gt=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,Kt={},Qt={},Zt=\"*/\".concat(\"*\"),en=Bt.href,tn=Gt.exec(en.toLowerCase())||[];pe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:en,type:\"GET\",isLocal:Vt.test(tn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Zt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":pe.parseJSON,\"text xml\":pe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?V(V(e,pe.ajaxSettings),t):V(pe.ajaxSettings,e)},ajaxPrefilter:X(Kt),ajaxTransport:X(Qt),ajax:function(t,n){function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c=void 0,s=i||\"\",T.readyState=t>0?4:0,o=t>=200&&t<300||304===t,r&&(x=Y(d,T,r)),x=J(d,x,T,o),o?(d.ifModified&&(w=T.getResponseHeader(\"Last-Modified\"),w&&(pe.lastModified[a]=w),w=T.getResponseHeader(\"etag\"),w&&(pe.etag[a]=w)),204===t||\"HEAD\"===d.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=x.state,f=x.data,v=x.error,o=!v)):(v=C,!t&&C||(C=\"error\",t<0&&(t=0))),T.status=t,T.statusText=(n||C)+\"\",o?g.resolveWith(p,[f,C,T]):g.rejectWith(p,[T,C,v]),T.statusCode(y),y=void 0,l&&h.trigger(o?\"ajaxSuccess\":\"ajaxError\",[T,d,o?f:v]),m.fireWith(p,[T,C]),l&&(h.trigger(\"ajaxComplete\",[T,d]),--pe.active||pe.event.trigger(\"ajaxStop\")))}\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,d=pe.ajaxSetup({},n),p=d.context||d,h=d.context&&(p.nodeType||p.jquery)?pe(p):pe.event,g=pe.Deferred(),m=pe.Callbacks(\"once memory\"),y=d.statusCode||{},v={},x={},b=0,w=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!f)for(f={};t=Ut.exec(s);)f[t[1].toLowerCase()]=t[2];t=f[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=x[n]=x[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)y[t]=[y[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||w;return c&&c.abort(t),r(0,t),this}};if(g.promise(T).complete=m.add,T.success=T.done,T.error=T.fail,d.url=((t||d.url||en)+\"\").replace(zt,\"\").replace(Jt,tn[1]+\"//\"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=pe.trim(d.dataType||\"*\").toLowerCase().match(De)||[\"\"],null==d.crossDomain&&(i=Gt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===tn[1]&&i[2]===tn[2]&&(i[3]||(\"http:\"===i[1]?\"80\":\"443\"))===(tn[3]||(\"http:\"===tn[1]?\"80\":\"443\")))),d.data&&d.processData&&\"string\"!=typeof d.data&&(d.data=pe.param(d.data,d.traditional)),U(Kt,d,n,T),2===b)return T;l=pe.event&&d.global,l&&0===pe.active++&&pe.event.trigger(\"ajaxStart\"),d.type=d.type.toUpperCase(),d.hasContent=!Yt.test(d.type),a=d.url,d.hasContent||(d.data&&(a=d.url+=(It.test(a)?\"&\":\"?\")+d.data,delete d.data),d.cache===!1&&(d.url=Xt.test(a)?a.replace(Xt,\"$1_=\"+Wt++):a+(It.test(a)?\"&\":\"?\")+\"_=\"+Wt++)),d.ifModified&&(pe.lastModified[a]&&T.setRequestHeader(\"If-Modified-Since\",pe.lastModified[a]),pe.etag[a]&&T.setRequestHeader(\"If-None-Match\",pe.etag[a])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader(\"Content-Type\",d.contentType),T.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!==d.dataTypes[0]?\", \"+Zt+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(o in d.headers)T.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(p,T,d)===!1||2===b))return T.abort();w=\"abort\";for(o in{success:1,error:1,complete:1})T[o](d[o]);if(c=U(Qt,d,n,T)){if(T.readyState=1,l&&h.trigger(\"ajaxSend\",[T,d]),2===b)return T;d.async&&d.timeout>0&&(u=e.setTimeout(function(){T.abort(\"timeout\")},d.timeout));try{b=1,c.send(v,r)}catch(C){if(!(b<2))throw C;r(-1,C)}}else r(-1,\"No Transport\");return T},getJSON:function(e,t,n){return pe.get(e,t,n,\"json\")},getScript:function(e,t){return pe.get(e,void 0,t,\"script\")}}),pe.each([\"get\",\"post\"],function(e,t){pe[t]=function(e,n,r,i){return pe.isFunction(n)&&(i=i||r,r=n,n=void 0),pe.ajax(pe.extend({url:e,type:t,dataType:i,data:n,success:r},pe.isPlainObject(e)&&e))}}),pe._evalUrl=function(e){return pe.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},pe.fn.extend({wrapAll:function(e){if(pe.isFunction(e))return this.each(function(t){pe(this).wrapAll(e.call(this,t))});if(this[0]){var t=pe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return pe.isFunction(e)?this.each(function(t){pe(this).wrapInner(e.call(this,t))}):this.each(function(){var t=pe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=pe.isFunction(e);return this.each(function(n){pe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){pe.nodeName(this,\"body\")||pe(this).replaceWith(this.childNodes)}).end()}}),pe.expr.filters.hidden=function(e){return fe.reliableHiddenOffsets()?e.offsetWidth<=0&&e.offsetHeight<=0&&!e.getClientRects().length:K(e)},pe.expr.filters.visible=function(e){return!pe.expr.filters.hidden(e)};var nn=/%20/g,rn=/\\[\\]$/,on=/\\r?\\n/g,an=/^(?:submit|button|image|reset|file)$/i,sn=/^(?:input|select|textarea|keygen)/i;pe.param=function(e,t){var n,r=[],i=function(e,t){t=pe.isFunction(t)?t():null==t?\"\":t,r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(void 0===t&&(t=pe.ajaxSettings&&pe.ajaxSettings.traditional),pe.isArray(e)||e.jquery&&!pe.isPlainObject(e))pe.each(e,function(){i(this.name,this.value)});else for(n in e)Q(n,e[n],t,i);return r.join(\"&\").replace(nn,\"+\")},pe.fn.extend({serialize:function(){return pe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=pe.prop(this,\"elements\");return e?pe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!pe(this).is(\":disabled\")&&sn.test(this.nodeName)&&!an.test(e)&&(this.checked||!Be.test(e))}).map(function(e,t){var n=pe(this).val();return null==n?null:pe.isArray(n)?pe.map(n,function(e){return{name:t.name,value:e.replace(on,\"\\r\\n\")}}):{name:t.name,value:n.replace(on,\"\\r\\n\")}}).get()}}),pe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return this.isLocal?ee():re.documentMode>8?Z():/^(get|post|head|put|delete|options)$/i.test(this.type)&&Z()||ee()}:Z;var un=0,ln={},cn=pe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent(\"onunload\",function(){for(var e in ln)ln[e](void 0,!0)}),fe.cors=!!cn&&\"withCredentials\"in cn,cn=fe.ajax=!!cn,cn&&pe.ajaxTransport(function(t){if(!t.crossDomain||fe.cors){var n;return{send:function(r,i){var o,a=t.xhr(),s=++un;if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)a[o]=t.xhrFields[o];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||r[\"X-Requested-With\"]||(r[\"X-Requested-With\"]=\"XMLHttpRequest\");for(o in r)void 0!==r[o]&&a.setRequestHeader(o,r[o]+\"\");a.send(t.hasContent&&t.data||null),n=function(e,r){var o,u,l;if(n&&(r||4===a.readyState))if(delete ln[s],n=void 0,a.onreadystatechange=pe.noop,r)4!==a.readyState&&a.abort();else{l={},o=a.status,\"string\"==typeof a.responseText&&(l.text=a.responseText);try{u=a.statusText}catch(c){u=\"\"}o||!t.isLocal||t.crossDomain?1223===o&&(o=204):o=l.text?200:404}l&&i(o,u,l,a.getAllResponseHeaders())},t.async?4===a.readyState?e.setTimeout(n):a.onreadystatechange=ln[s]=n:n()},abort:function(){n&&n(void 0,!0)}}}}),pe.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return pe.globalEval(e),e}}}),pe.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),pe.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n=re.head||pe(\"head\")[0]||re.documentElement;return{send:function(r,i){t=re.createElement(\"script\"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,\"success\"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var fn=[],dn=/(=)\\?(?=&|$)|\\?\\?/;pe.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=fn.pop()||pe.expando+\"_\"+Wt++;return this[e]=!0,e}}),pe.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=t.jsonp!==!1&&(dn.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&dn.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=pe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(dn,\"$1\"+i):t.jsonp!==!1&&(t.url+=(It.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||pe.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?pe(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,fn.push(i)),a&&pe.isFunction(o)&&o(a[0]),a=o=void 0}),\"script\"}),pe.parseHTML=function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||re;var r=Te.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=y([e],t,i),i&&i.length&&pe(i).remove(),pe.merge([],r.childNodes))};var pn=pe.fn.load;return pe.fn.load=function(e,t,n){if(\"string\"!=typeof e&&pn)return pn.apply(this,arguments);var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=pe.trim(e.slice(s,e.length)),e=e.slice(0,s)),pe.isFunction(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&pe.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?pe(\"<div>\").append(pe.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},pe.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){pe.fn[t]=function(e){return this.on(t,e)}}),pe.expr.filters.animated=function(e){return pe.grep(pe.timers,function(t){return e===t.elem}).length},pe.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=pe.css(e,\"position\"),f=pe(e),d={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=pe.css(e,\"top\"),u=pe.css(e,\"left\"),l=(\"absolute\"===c||\"fixed\"===c)&&pe.inArray(\"auto\",[o,u])>-1,l?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),pe.isFunction(t)&&(t=t.call(e,n,pe.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+i),\"using\"in t?t.using.call(e,d):f.css(d)}},pe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){pe.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],o=i&&i.ownerDocument;if(o)return t=o.documentElement,pe.contains(t,i)?(\"undefined\"!=typeof i.getBoundingClientRect&&(r=i.getBoundingClientRect()),n=te(o),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===pe.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),pe.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=pe.css(e[0],\"borderTopWidth\",!0),n.left+=pe.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-pe.css(r,\"marginTop\",!0),left:t.left-n.left-pe.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){\nfor(var e=this.offsetParent;e&&!pe.nodeName(e,\"html\")&&\"static\"===pe.css(e,\"position\");)e=e.offsetParent;return e||pt})}}),pe.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=/Y/.test(t);pe.fn[e]=function(r){return Pe(this,function(e,r,i){var o=te(e);return void 0===i?o?t in o?o[t]:o.document.documentElement[r]:e[r]:void(o?o.scrollTo(n?pe(o).scrollLeft():i,n?i:pe(o).scrollTop()):e[r]=i)},e,r,arguments.length,null)}}),pe.each([\"top\",\"left\"],function(e,t){pe.cssHooks[t]=L(fe.pixelPosition,function(e,n){if(n)return n=gt(e,t),ft.test(n)?pe(e).position()[t]+\"px\":n})}),pe.each({Height:\"height\",Width:\"width\"},function(e,t){pe.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){pe.fn[r]=function(r,i){var o=arguments.length&&(n||\"boolean\"!=typeof r),a=n||(r===!0||i===!0?\"margin\":\"border\");return Pe(this,function(t,n,r){var i;return pe.isWindow(t)?t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===r?pe.css(t,n,a):pe.style(t,n,r,a)},t,o?r:void 0,o,null)}})}),pe.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),pe.fn.size=function(){return this.length},pe.fn.andSelf=pe.fn.addBack,layui.define(function(e){layui.$=pe,e(\"jquery\",pe)}),pe});"
  },
  {
    "path": "lib/layui/lay/modules/laydate.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;!function(){\"use strict\";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if(\"interactive\"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf(\"/\")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?\"getPropertyValue\":\"getAttribute\"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName(\"head\")[0],o=document.createElement(\"link\");\"string\"==typeof a&&(i=a);var s=(i||e).replace(/\\.|\\//g,\"\"),l=\"layuicss-\"+s,d=0;o.rel=\"stylesheet\",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),\"function\"==typeof a&&!function c(){return++d>80?window.console&&console.error(\"laydate.css: Invalid\"):void(1989===parseInt(t.getStyle(document.getElementById(l),\"width\"))?a():setTimeout(c,100))}()}}},n={v:\"5.0.9\",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i=\"laydate\",r=\"\",o=(e?\"modules/laydate/\":\"theme/\")+\"default/laydate.css?v=\"+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i=\"laydate\",r=\".layui-laydate\",o=\"layui-this\",s=\"laydate-disabled\",l=\"开始日期超出了结束日期<br>建议重新选择\",d=[100,2e5],c=\"layui-laydate-static\",m=\"layui-laydate-list\",u=\"laydate-selected\",h=\"layui-laydate-hint\",y=\"laydate-day-prev\",f=\"laydate-day-next\",p=\"layui-laydate-footer\",g=\".laydate-btns-confirm\",v=\"laydate-time-text\",D=\".laydate-btns-time\",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n=\"object\"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t<n.length;t++)this.push(n[t])};C.prototype=[],C.prototype.constructor=C,w.extend=function(){var e=1,t=arguments,n=function(e,t){e=e||(t.constructor===Array?[]:{});for(var a in t)e[a]=t[a]&&t[a].constructor===Object?n(e[a],t[a]):t[a];return e};for(t[0]=\"object\"==typeof t[0]?t[0]:{};e<t.length;e++)\"object\"==typeof t[e]&&n(t[0],t[e]);return t[0]},w.ie=function(){var e=navigator.userAgent.toLowerCase();return!!(window.ActiveXObject||\"ActiveXObject\"in window)&&((e.match(/msie\\s(\\d+)/)||[])[1]||\"11\")}(),w.stope=function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},w.each=function(e,t){var n,a=this;if(\"function\"!=typeof t)return a;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return a},w.digit=function(e,t,n){var a=\"\";e=String(e),t=t||2;for(var i=e.length;i<t;i++)a+=\"0\";return e<Math.pow(10,t)?a+(0|e):e},w.elem=function(e,t){var n=document.createElement(e);return w.each(t||{},function(e,t){n.setAttribute(e,t)}),n},C.addStr=function(e,t){return e=e.replace(/\\s+/,\" \"),t=t.replace(/\\s+/,\" \").split(\" \"),w.each(t,function(t,n){new RegExp(\"\\\\b\"+n+\"\\\\b\").test(e)||(e=e+\" \"+n)}),e.replace(/^\\s|\\s$/,\"\")},C.removeStr=function(e,t){return e=e.replace(/\\s+/,\" \"),t=t.replace(/\\s+/,\" \").split(\" \"),w.each(t,function(t,n){var a=new RegExp(\"\\\\b\"+n+\"\\\\b\");a.test(e)&&(e=e.replace(a,\"\"))}),e.replace(/\\s+/,\" \").replace(/^\\s|\\s$/,\"\")},C.prototype.find=function(e){var t=this,n=0,a=[],i=\"object\"==typeof e;return this.each(function(r,o){for(var s=i?[e]:o.querySelectorAll(e||null);n<s.length;n++)a.push(s[n]);t.shift()}),i||(t.selector=(t.selector?t.selector+\" \":\"\")+e),w.each(a,function(e,n){t.push(n)}),t},C.prototype.each=function(e){return w.each.call(this,this,e)},C.prototype.addClass=function(e,t){return this.each(function(n,a){a.className=C[t?\"removeStr\":\"addStr\"](a.className,e)})},C.prototype.removeClass=function(e){return this.addClass(e,!0)},C.prototype.hasClass=function(e){var t=!1;return this.each(function(n,a){new RegExp(\"\\\\b\"+e+\"\\\\b\").test(a.className)&&(t=!0)}),t},C.prototype.attr=function(e,t){var n=this;return void 0===t?function(){if(n.length>0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){\"object\"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent(\"on\"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent(\"on\"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:\"date\",range:!1,format:\"yyyy-MM-dd\",value:null,isInitValue:!0,min:\"1900-1-1\",max:\"2099-12-31\",trigger:\"focus\",show:!1,showBottom:!0,btns:[\"clear\",\"now\",\"confirm\"],lang:\"cn\",theme:\"default\",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],time:[\"时\",\"分\",\"秒\"],timeTips:\"选择时间\",startTime:\"开始时间\",endTime:\"结束时间\",dateTips:\"返回日期\",month:[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],tools:{confirm:\"确定\",clear:\"清空\",now:\"现在\"}},en:{weeks:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],time:[\"Hours\",\"Minutes\",\"Seconds\"],timeTips:\"Select Time\",startTime:\"Start Time\",endTime:\"End Time\",dateTips:\"Select Date\",month:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],tools:{confirm:\"Confirm\",clear:\"Clear\",now:\"Now\"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n=\"yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s\",a=\"static\"===t.position,i={year:\"yyyy\",month:\"yyyy-MM\",date:\"yyyy-MM-dd\",time:\"HH:mm:ss\",datetime:\"yyyy-MM-dd HH:mm:ss\"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range=\"-\"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+\"|.\",\"g\"))||[],e.EXP_IF=\"\",e.EXP_SPLIT=\"\",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?\"\\\\d{\"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||\"\")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?\"1,4\":/^y$/.test(a)?\"1,308\":\"1,2\"}()+\"}\":\"\\\\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+\"(\"+i+\")\"}),e.EXP_IF=new RegExp(\"^\"+(t.range?e.EXP_IF+\"\\\\s\\\\\"+t.range+\"\\\\s\"+e.EXP_IF:e.EXP_IF)+\"$\"),e.EXP_SPLIT=new RegExp(\"^\"+e.EXP_SPLIT+\"$\",\"\"),e.isInput(t.elem[0])||\"focus\"===t.trigger&&(t.trigger=\"click\"),t.elem.attr(\"lay-key\")||(t.elem.attr(\"lay-key\",e.index),t.eventElem.attr(\"lay-key\",e.index)),t.mark=w.extend({},t.calendar&&\"cn\"===t.lang?{\"0-1-1\":\"元旦\",\"0-2-14\":\"情人\",\"0-3-8\":\"妇女\",\"0-3-12\":\"植树\",\"0-4-1\":\"愚人\",\"0-5-1\":\"劳动\",\"0-5-4\":\"青年\",\"0-6-1\":\"儿童\",\"0-9-10\":\"教师\",\"0-9-18\":\"国耻\",\"0-10-1\":\"国庆\",\"0-12-25\":\"圣诞\"}:{},t.mark),w.each([\"min\",\"max\"],function(e,n){var a=[],i=[];if(\"number\"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r<s?o+r*s:r:o);a=[l.getFullYear(),l.getMonth()+1,l.getDate()],r<s||(i=[l.getHours(),l.getMinutes(),l.getSeconds()])}else a=(t[n].match(/\\d+-\\d+-\\d+/)||[\"\"])[0].split(\"-\"),i=(t[n].match(/\\d+:\\d+:\\d+/)||[\"\"])[0].split(\":\");t[n]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|i[0],minutes:0|i[1],seconds:0|i[2]}}),e.elemID=\"layui-laydate\"+t.elem.attr(\"lay-key\"),(t.show||a)&&e.render(),a||e.events(),t.value&&t.isInitValue&&(t.value.constructor===Date?e.setValue(e.parse(0,e.systemDate(t.value))):e.setValue(t.value)))},T.prototype.render=function(){var e=this,t=e.config,n=e.lang(),a=\"static\"===t.position,i=e.elem=w.elem(\"div\",{id:e.elemID,\"class\":[\"layui-laydate\",t.range?\" layui-laydate-range\":\"\",a?\" \"+c:\"\",t.theme&&\"default\"!==t.theme&&!/^#/.test(t.theme)?\" laydate-theme-\"+t.theme:\"\"].join(\"\")}),r=e.elemMain=[],o=e.elemHeader=[],s=e.elemCont=[],l=e.table=[],d=e.footer=w.elem(\"div\",{\"class\":p});if(t.zIndex&&(i.style.zIndex=t.zIndex),w.each(new Array(2),function(e){if(!t.range&&e>0)return!0;var a=w.elem(\"div\",{\"class\":\"layui-laydate-header\"}),i=[function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-prev-y\"});return e.innerHTML=\"&#xe65a;\",e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-prev-m\"});return e.innerHTML=\"&#xe603;\",e}(),function(){var e=w.elem(\"div\",{\"class\":\"laydate-set-ym\"}),t=w.elem(\"span\"),n=w.elem(\"span\");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-next-m\"});return e.innerHTML=\"&#xe602;\",e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-next-y\"});return e.innerHTML=\"&#xe65b;\",e}()],d=w.elem(\"div\",{\"class\":\"layui-laydate-content\"}),c=w.elem(\"table\"),m=w.elem(\"thead\"),u=w.elem(\"tr\");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem(\"th\");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem(\"div\",{\"class\":\"layui-laydate-main laydate-main-list-\"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return\"datetime\"===t.type&&e.push('<span lay-type=\"datetime\" class=\"laydate-btns-time\">'+n.timeTips+\"</span>\"),w.each(t.btns,function(e,r){var o=n.tools[r]||\"btn\";t.range&&\"now\"===r||(a&&\"clear\"===r&&(o=\"cn\"===t.lang?\"重置\":\"Reset\"),i.push('<span lay-type=\"'+r+'\" class=\"laydate-btns-'+r+'\">'+o+\"</span>\"))}),e.push('<div class=\"laydate-footer-btns\">'+i.join(\"\")+\"</div>\"),e.join(\"\")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem(\"style\"),u=[\"#{{id}} .layui-laydate-header{background-color:{{theme}};}\",\"#{{id}} .layui-this{background-color:{{theme}} !important;}\"].join(\"\").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);\"styleSheet\"in m?(m.setAttribute(\"type\",\"text/css\"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass(\"laydate-theme-molv\"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,\"function\"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w(\"#\"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?\"scrollLeft\":\"scrollTop\",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?\"clientWidth\":\"clientHeight\"]},l=5,d=a.left,c=a.bottom;d+i+l>s(\"width\")&&(d=s(\"width\")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+(\"fixed\"===t.position?0:o(1))+\"px\",e.elem.style.top=c+(\"fixed\"===t.position?0:o())+\"px\"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem(\"div\",{\"class\":h}));t.elem&&(n.innerHTML=e||\"\",w(t.elem).find(\".\"+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find(\".\"+h).remove()},3e3))},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?\"val\":\"html\",i.isInput(s)?s.value:\"static\"===r.position?\"\":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=[\"startTime\",\"endTime\"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length<l.length&&(a=!0),/yyyy|y/.test(l)?(c<d[0]&&(c=d[0],a=!0),e.year=c):/MM|M/.test(l)?(c<1&&(c=1,a=!0),e.month=c-1):/dd|d/.test(l)?(c<1&&(c=1,a=!0),e.date=c):/HH|H/.test(l)?(c<1&&(c=0,a=!0),e.hours=c,r.range&&(i[o[n]].hours=c)):/mm|m/.test(l)?(c<1&&(c=0,a=!0),e.minutes=c,r.range&&(i[o[n]].minutes=c)):/ss|s/.test(l)&&(c<1&&(c=0,a=!0),e.seconds=c,r.range&&(i[o[n]].seconds=c))}),c(e)};return\"limit\"===e?(c(o),i):(l=l||r.value,\"string\"==typeof l&&(l=l.replace(/\\s+/g,\" \").replace(/^\\s|\\s$/g,\"\")),i.startState&&!i.endState&&(delete i.startState,i.endState=!0),\"string\"==typeof l&&l?i.EXP_IF.test(l)?r.range?(l=l.split(\" \"+r.range+\" \"),i.startDate=i.startDate||i.systemDate(),i.endDate=i.endDate||i.systemDate(),r.dateTime=w.extend({},i.startDate),w.each([i.startDate,i.endDate],function(e,t){m(t,l[e],e)})):m(o,l):(i.hint(\"日期格式不合法<br>必须遵循下述格式：<br>\"+(r.range?r.format+\" \"+r.range+\" \"+r.format:r.format)+\"<br>已为你重置\"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():\"\":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split(\"-\");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html('<span class=\"laydate-day-mark\">'+n+\"</span>\"),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?\"endDate\":\"dateTime\"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.now<l.min||l.now>l.max,e&&e[i?\"addClass\":\"removeClass\"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u=\"date\"!==s.type&&\"datetime\"!==s.type,h=e?1:0,y=w(r.table[h]).find(\"td\"),f=w(r.elemHeader[h][2]).find(\"span\");if(l.year<d[0]&&(l.year=d[0],r.hint(\"最低只能支持到公元\"+d[0]+\"年\")),l.year>d[1]&&(l.year=d[1],r.hint(\"最高只能支持到公元\"+d[1]+\"年\")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr(\"class\"),e<t?(c=a-t+e,n.addClass(\"laydate-day-prev\"),d=r.getAsYM(l.year,l.month,\"sub\")):e>=t&&e<i+t?(c=e-t,s.range||c+1===l.date&&n.addClass(o)):(c=e-i-t,n.addClass(\"laydate-day-next\"),d=r.getAsYM(l.year,l.month)),d[1]++,d[2]=c+1,n.attr(\"lay-ymd\",d.join(\"-\")).html(d[2]),r.mark(n,d).limit(n,{year:d[0],month:d[1]-1,date:d[2]},e)}),w(f[0]).attr(\"lay-ym\",l.year+\"-\"+(l.month+1)),w(f[1]).attr(\"lay-ym\",l.year+\"-\"+(l.month+1)),\"cn\"===s.lang?(w(f[0]).attr(\"lay-type\",\"year\").html(l.year+\"年\"),w(f[1]).attr(\"lay-type\",\"month\").html(l.month+1+\"月\")):(w(f[0]).attr(\"lay-type\",\"month\").html(m.month[l.month]),w(f[1]).attr(\"lay-type\",\"year\").html(l.year)),u&&(s.range&&(e?r.endDate=r.endDate||{year:l.year+(\"year\"===s.type?1:0),month:l.month+(\"month\"===s.type?0:-1)}:r.startDate=r.startDate||{year:l.year,month:l.month},e&&(r.listYM=[[r.startDate.year,r.startDate.month+1],[r.endDate.year,r.endDate.month+1]],r.list(s.type,0).list(s.type,1),\"time\"===s.type?r.setBtnStatus(\"时间\",w.extend({},r.systemDate(),r.startTime),w.extend({},r.systemDate(),r.endTime)):r.setBtnStatus(!0))),s.range||(r.listYM=[[l.year,l.month+1]],r.list(s.type,0))),s.range&&!e){var p=r.getAsYM(l.year,l.month);r.calendar(w.extend({},l,{year:p[0],month:p[1]}))}return s.range||r.limit(w(r.footer).find(g),null,0,[\"hours\",\"minutes\",\"seconds\"]),s.range&&e&&!u&&r.stampRange(),r},T.prototype.list=function(e,t){var n=this,a=n.config,i=a.dateTime,r=n.lang(),l=a.range&&\"date\"!==a.type&&\"datetime\"!==a.type,d=w.elem(\"ul\",{\"class\":m+\" \"+{year:\"laydate-year-list\",month:\"laydate-month-list\",time:\"laydate-time-list\"}[e]}),c=n.elemHeader[t],u=w(c[2]).find(\"span\"),h=n.elemCont[t||0],y=w(h).find(\".\"+m)[0],f=\"cn\"===a.lang,p=f?\"年\":\"\",T=n.listYM[t]||{},C=[\"hours\",\"minutes\",\"seconds\"],x=[\"startTime\",\"endTime\"][t];if(T[0]<1&&(T[0]=1),\"year\"===e){var M,b=M=T[0]-7;b<1&&(b=M=1),w.each(new Array(15),function(e){var i=w.elem(\"li\",{\"lay-ym\":M}),r={year:M};M==T[0]&&w(i).addClass(o),i.innerHTML=M+p,d.appendChild(i),M<n.firstDate.year?(r.month=a.min.month,r.date=a.min.date):M>=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr(\"lay-ym\",M-8+\"-\"+T[1]).html(b+p+\" - \"+(M-1+p))}else if(\"month\"===e)w.each(new Array(12),function(e){var i=w.elem(\"li\",{\"lay-ym\":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?\"月\":\"\"),d.appendChild(i),T[0]<n.firstDate.year?s.date=a.min.date:T[0]>=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr(\"lay-ym\",T[0]+\"-\"+T[1]).html(T[0]+p);else if(\"time\"===e){var E=function(){w(d).find(\"ol\").each(function(e,a){w(a).find(\"li\").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[[\"hours\"],[\"hours\",\"minutes\"],[\"hours\",\"minutes\",\"seconds\"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,[\"hours\",\"minutes\",\"seconds\"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem(\"li\"),i=[\"<p>\"+r.time[e]+\"</p><ol>\"];w.each(new Array(t),function(t){i.push(\"<li\"+(n[x][C[e]]===t?' class=\"'+o+'\"':\"\")+\">\"+w.digit(t,2)+\"</li>\")}),a.innerHTML=i.join(\"\")+\"</ol>\",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),\"year\"===e||\"month\"===e)w(n.elemMain[t]).addClass(\"laydate-ym-show\"),w(d).find(\"li\").on(\"click\",function(){var r=0|w(this).attr(\"lay-ym\");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c=\"year\"===e?n.getAsYM(r,T[1]-1,\"sub\"):n.getAsYM(T[0],r,\"sub\");w.extend(i,{year:c[0],month:c[1]})}\"year\"===a.type||\"month\"===a.type?(w(d).find(\".\"+o).removeClass(o),w(this).addClass(o),\"month\"===a.type&&\"year\"===e&&(n.listYM[t][0]=r,l&&(n[[\"startDate\",\"endDate\"][t]].year=r),n.list(\"month\",t))):(n.checkDate(\"limit\").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,\"change\"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem(\"span\",{\"class\":v}),k=function(){w(d).find(\"ol\").each(function(e){var t=this,a=w(t).find(\"li\");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find(\".\"+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass(\"laydate-time-show\"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find(\"ol\").each(function(e){var t=this;w(t).find(\"li\").on(\"click\",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find(\".\"+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||\"time\"===a.type)&&n.done(null,\"change\"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find(\".\"+m).remove(),w(e.elemMain[t]).removeClass(\"laydate-ym-show laydate-time-show\")}),w(e.elem).find(\".\"+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&\"date\"!==r.type&&\"time\"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?\"addClass\":\"removeClass\"](s),e&&a&&i.hint(\"string\"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join(\"\")+\" \"+a.range+\" \"+n.parse(1):r.join(\"\")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?\"val\":\"html\";return\"static\"===n.position||w(a)[i](e||\"\"),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find(\"td\");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr(\"lay-ymd\").split(\"-\"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+\" \"+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s<t&&w(i).addClass(u)})},T.prototype.done=function(e,t){var n=this,a=n.config,i=w.extend({},n.startDate?w.extend(n.startDate,n.startTime):a.dateTime),r=w.extend({},w.extend(n.endDate,n.endTime));return w.each([i,r],function(e,t){\"month\"in t&&w.extend(t,{month:t.month+1})}),e=e||[n.parse(),i,r],\"function\"==typeof a[t||\"done\"]&&a[t||\"done\"].apply(a,e),n},T.prototype.choose=function(e){var t=this,n=t.config,a=n.dateTime,i=w(t.elem).find(\"td\"),r=e.attr(\"lay-ymd\").split(\"-\"),l=function(e){new Date;e&&w.extend(a,r),n.range&&(t.startDate?w.extend(t.startDate,r):t.startDate=w.extend({},r,t.startTime),t.startYMD=r)};if(r={year:0|r[0],month:(0|r[1])-1,date:0|r[2]},!e.hasClass(s))if(n.range){if(w.each([\"startTime\",\"endTime\"],function(e,n){t[n]=t[n]||{hours:0,minutes:0,seconds:0}}),t.endState)l(),delete t.endState,delete t.endDate,t.startState=!0,i.removeClass(o+\" \"+u),e.addClass(o);else if(t.startState){if(e.addClass(o),t.endDate?w.extend(t.endDate,r):t.endDate=w.extend({},r,t.endTime),t.newDate(r).getTime()<t.newDate(t.startYMD).getTime()){var d=w.extend({},t.endDate,{hours:t.startDate.hours,minutes:t.startDate.minutes,seconds:t.startDate.seconds});w.extend(t.endDate,t.startDate,{hours:t.endDate.hours,minutes:t.endDate.minutes,seconds:t.endDate.seconds}),t.startDate=d}n.showBottom||t.done(),t.stampRange(),t.endState=!0,t.done(null,\"change\")}else e.addClass(o),l(),t.startState=!0;w(t.footer).find(g)[t.endDate?\"removeClass\":\"addClass\"](s)}else\"static\"===n.position?(l(!0),t.calendar().done().done(null,\"change\")):\"date\"===n.type?(l(!0),t.setValue(t.parse()).remove().done()):\"datetime\"===n.type&&(l(!0),t.calendar().done(null,\"change\"))},T.prototype.tool=function(e,t){var n=this,a=n.config,i=a.dateTime,r=\"static\"===a.position,o={datetime:function(){w(e).hasClass(s)||(n.list(\"time\",0),a.range&&n.list(\"time\",1),w(e).attr(\"lay-type\",\"date\").html(n.lang().dateTips))},date:function(){n.closeList(),w(e).attr(\"lay-type\",\"datetime\").html(n.lang().timeTips)},clear:function(){n.setValue(\"\").remove(),r&&(w.extend(i,n.firstDate),n.calendar()),a.range&&(delete n.startState,delete n.endState,delete n.endDate,delete n.startTime,delete n.endTime),n.done([\"\",{},{}])},now:function(){var e=new Date;w.extend(i,n.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),n.setValue(n.parse()).remove(),r&&n.calendar(),n.done()},confirm:function(){if(a.range){if(!n.endDate)return n.hint(\"请先选择日期范围\");if(w(e).hasClass(s))return n.hint(\"time\"===a.type?l.replace(/日期/g,\"时间\"):l)}else if(w(e).hasClass(s))return n.hint(\"不在有效日期或时间范围内\");n.done(),n.setValue(n.parse()).remove()}};o[t]&&o[t]()},T.prototype.change=function(e){var t=this,n=t.config,a=n.dateTime,i=n.range&&(\"year\"===n.type||\"month\"===n.type),r=t.elemCont[e||0],o=t.listYM[e],s=function(s){var l=[\"startDate\",\"endDate\"][e],d=w(r).find(\".laydate-year-list\")[0],c=w(r).find(\".laydate-month-list\")[0];return d&&(o[0]=s?o[0]-15:o[0]+15,t.list(\"year\",e)),c&&(s?o[0]--:o[0]++,t.list(\"month\",e)),(d||c)&&(w.extend(a,{year:o[0]}),i&&(t[l].year=o[0]),n.range||t.done(null,\"change\"),t.setBtnStatus(),n.range||t.limit(w(t.footer).find(g),{year:o[0]})),d||c};return{prevYear:function(){s(\"sub\")||(a.year--,t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\"))},prevMonth:function(){var e=t.getAsYM(a.year,a.month,\"sub\");w.extend(a,{year:e[0],month:e[1]}),t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\")},nextMonth:function(){var e=t.getAsYM(a.year,a.month);w.extend(a,{year:e[0],month:e[1]}),t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\")},nextYear:function(){s()||(a.year++,t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\"))}}},T.prototype.changeEvent=function(){var e=this;e.config;w(e.elem).on(\"click\",function(e){w.stope(e)}),w.each(e.elemHeader,function(t,n){w(n[0]).on(\"click\",function(n){e.change(t).prevYear()}),w(n[1]).on(\"click\",function(n){e.change(t).prevMonth()}),w(n[2]).find(\"span\").on(\"click\",function(n){var a=w(this),i=a.attr(\"lay-ym\"),r=a.attr(\"lay-type\");i&&(i=i.split(\"-\"),e.listYM[t]=[0|i[0],0|i[1]],e.list(r,t),w(e.footer).find(D).addClass(s))}),w(n[3]).on(\"click\",function(n){e.change(t).nextMonth()}),w(n[4]).on(\"click\",function(n){e.change(t).nextYear()})}),w.each(e.table,function(t,n){var a=w(n).find(\"td\");a.on(\"click\",function(){e.choose(w(this))})}),w(e.footer).find(\"span\").on(\"click\",function(){var t=w(this).attr(\"lay-type\");e.tool(this,t)})},T.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())},T.prototype.events=function(){var e=this,t=e.config,n=function(n,a){n.on(t.trigger,function(){a&&(e.bindElem=this),e.render()})};t.elem[0]&&!t.elem[0].eventHandler&&(n(t.elem,\"bind\"),n(t.eventElem),w(document).on(\"click\",function(n){n.target!==t.elem[0]&&n.target!==t.eventElem[0]&&n.target!==w(t.closeStop)[0]&&e.remove()}).on(\"keydown\",function(t){13===t.keyCode&&w(\"#\"+e.elemID)[0]&&e.elemID===T.thisElem&&(t.preventDefault(),w(e.footer).find(g)[0].click())}),w(window).on(\"resize\",function(){return!(!e.elem||!w(r)[0])&&void e.position()}),t.elem[0].eventHandler=!0)},n.render=function(e){var t=new T(e);return a.call(t)},n.getEndDate=function(e,t){var n=new Date;return n.setFullYear(t||n.getFullYear(),e||n.getMonth()+1,1),new Date(n.getTime()-864e5).getDate()},window.lay=window.lay||w,e?(n.ready(),layui.define(function(e){n.path=layui.cache.dir,e(i,n)})):\"function\"==typeof define&&define.amd?define(function(){return n}):function(){n.ready(),window.laydate=n}()}();"
  },
  {
    "path": "lib/layui/lay/modules/layedit.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define([\"layer\",\"form\"],function(t){\"use strict\";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n=\"layedit\",o=\"layui-show\",r=\"layui-disabled\",c=function(){var t=this;t.index=0,t.config={tool:[\"strong\",\"italic\",\"underline\",\"del\",\"|\",\"left\",\"center\",\"right\",\"|\",\"link\",\"unlink\",\"face\",\"image\"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r=\"layui-layedit\",c=e(\"string\"==typeof t?\"#\"+t:t),u=\"LAY_layedit_\"+ ++a.index,d=c.next(\".\"+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join(\"\")}(),m=e(['<div class=\"'+r+'\">','<div class=\"layui-unselect layui-layedit-tool\">'+f+\"</div>\",'<div class=\"layui-layedit-iframe\">','<iframe id=\"'+u+'\" name=\"'+u+'\" textarea=\"'+t+'\" frameborder=\"0\"></iframe>',\"</div>\",\"</div>\"].join(\"\"));return l.ie&&l.ie<8?c.removeClass(\"layui-hide\").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass(\"layui-hide\").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e(\"#\"+i[1].attr(\"textarea\"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find(\"iframe\");n.css({height:a.height}).on(\"load\",function(){var o=n.contents(),r=n.prop(\"contentWindow\"),c=o.find(\"head\"),s=e([\"<style>\",\"*{margin: 0; padding: 0;}\",\"body{padding: 10px; line-height: 20px; overflow-x: hidden; word-wrap: break-word; font: 14px Helvetica Neue,Helvetica,PingFang SC,Microsoft YaHei,Tahoma,Arial,sans-serif; -webkit-box-sizing: border-box !important; -moz-box-sizing: border-box !important; box-sizing: border-box !important;}\",\"a{color:#01AAED; text-decoration:none;}a:hover{color:#c00}\",\"p{margin-bottom: 10px;}\",\"img{display: inline-block; border: none; vertical-align: middle;}\",\"pre{margin: 10px 0; padding: 10px; line-height: 20px; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}\",\"</style>\"].join(\"\")),u=o.find(\"body\");c.append(s),u.attr(\"contenteditable\",\"true\").css({\"min-height\":a.height}).html(i.value||\"\"),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e(\"#LAY_layedit_\"+t),a=i.prop(\"contentWindow\");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on(\"keydown\",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if(\"pre\"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg(\"请暂时用shift+enter\"),!1}r.execCommand(\"formatBlock\",!1,\"<p>\")}}),e(n).parents(\"form\").on(\"submit\",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on(\"paste\",function(e){r.execCommand(\"formatBlock\",!1,\"<p>\"),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find(\"*[style]\").each(function(){var t=this.style.textAlign;this.removeAttribute(\"style\"),e(this).css({\"text-align\":t||\"\"})}),t.find(\"table\").addClass(\"layui-table\"),t.find(\"script,link\").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute(\"text\"),l.selection){var r=a.text||i.text;if(\"a\"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop(\"outerHTML\")),a.select()}else{var r=a.toString()||i.text;if(\"a\"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l=\"layedit-tool-active\",n=p(m(a)),o=function(e){return t.find(\".layedit-tool-\"+e)};i&&i[i.hasClass(l)?\"removeClass\":\"addClass\"](l),t.find(\">i\").removeClass(l),o(\"unlink\").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;\"b\"!==t&&\"strong\"!==t||o(\"b\").addClass(l),\"i\"!==t&&\"em\"!==t||o(\"i\").addClass(l),\"u\"===t&&o(\"u\").addClass(l),\"strike\"===t&&o(\"d\").addClass(l),\"p\"===t&&(\"center\"===e?o(\"center\").addClass(l):\"right\"===e?o(\"right\").addClass(l):o(\"left\").addClass(l)),\"a\"===t&&(o(\"link\").addClass(l),o(\"unlink\").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr(\"href\"),target:l.attr(\"target\")},function(e){var a=l[0];\"A\"===a.tagName?a.href=e.url:v.call(t,\"a\",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand(\"unlink\")},face:function(e){x.call(this,function(i){v.call(t,\"img\",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use(\"upload\",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find(\"input\")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,\"img\",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||\"上传失败\")}})})},code:function(e){k.call(o,function(i){v.call(t,\"pre\",{text:i.code,\"lay-lang\":i.lang},e)})},help:function(){i.open({type:2,title:\"帮助\",area:[\"600px\",\"380px\"],shadeClose:!0,shade:.1,skin:\"layui-layer-msg\",content:[\"http://www.layui.com/about/layedit/help.html\",\"no\"]})}},s=a.find(\".layui-layedit-tool\"),u=function(){var i=e(this),a=i.attr(\"layedit-event\"),l=i.attr(\"lay-command\");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand(\"formatBlock\",!1,\"<p>\"),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(\">i\").on(\"mousedown\",function(){var t=e(this),i=t.attr(\"layedit-event\");d.test(i)||u.call(this)}).on(\"click\",function(){var t=e(this),i=t.attr(\"layedit-event\");d.test(i)&&u.call(this)}),o.on(\"click\",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:\"LAY_layedit_link\",area:\"350px\",shade:.05,shadeClose:!0,moveType:1,title:\"超链接\",skin:\"layui-layer-msg\",content:['<ul class=\"layui-form\" style=\"margin: 15px;\">','<li class=\"layui-form-item\">','<label class=\"layui-form-label\" style=\"width: 60px;\">URL</label>','<div class=\"layui-input-block\" style=\"margin-left: 90px\">','<input name=\"url\" lay-verify=\"url\" value=\"'+(t.href||\"\")+'\" autofocus=\"true\" autocomplete=\"off\" class=\"layui-input\">',\"</div>\",\"</li>\",'<li class=\"layui-form-item\">','<label class=\"layui-form-label\" style=\"width: 60px;\">打开方式</label>','<div class=\"layui-input-block\" style=\"margin-left: 90px\">','<input type=\"radio\" name=\"target\" value=\"_self\" class=\"layui-input\" title=\"当前窗口\"'+(\"_self\"!==t.target&&t.target?\"\":\"checked\")+\">\",'<input type=\"radio\" name=\"target\" value=\"_blank\" class=\"layui-input\" title=\"新窗口\" '+(\"_blank\"===t.target?\"checked\":\"\")+\">\",\"</div>\",\"</li>\",'<li class=\"layui-form-item\" style=\"text-align: center;\">','<button type=\"button\" lay-submit lay-filter=\"layedit-link-yes\" class=\"layui-btn\"> 确定 </button>','<button style=\"margin-left: 20px;\" type=\"button\" class=\"layui-btn layui-btn-primary\"> 取消 </button>',\"</li>\",\"</ul>\"].join(\"\"),success:function(t,n){var o=\"submit(layedit-link-yes)\";a.render(\"radio\"),t.find(\".layui-btn-primary\").on(\"click\",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=[\"[微笑]\",\"[嘻嘻]\",\"[哈哈]\",\"[可爱]\",\"[可怜]\",\"[挖鼻]\",\"[吃惊]\",\"[害羞]\",\"[挤眼]\",\"[闭嘴]\",\"[鄙视]\",\"[爱你]\",\"[泪]\",\"[偷笑]\",\"[亲亲]\",\"[生病]\",\"[太开心]\",\"[白眼]\",\"[右哼哼]\",\"[左哼哼]\",\"[嘘]\",\"[衰]\",\"[委屈]\",\"[吐]\",\"[哈欠]\",\"[抱抱]\",\"[怒]\",\"[疑问]\",\"[馋嘴]\",\"[拜拜]\",\"[思考]\",\"[汗]\",\"[困]\",\"[睡]\",\"[钱]\",\"[失望]\",\"[酷]\",\"[色]\",\"[哼]\",\"[鼓掌]\",\"[晕]\",\"[悲伤]\",\"[抓狂]\",\"[黑线]\",\"[阴险]\",\"[怒骂]\",\"[互粉]\",\"[心]\",\"[伤心]\",\"[猪头]\",\"[熊猫]\",\"[兔子]\",\"[ok]\",\"[耶]\",\"[good]\",\"[NO]\",\"[赞]\",\"[来]\",\"[弱]\",\"[草泥马]\",\"[神马]\",\"[囧]\",\"[浮云]\",\"[给力]\",\"[围观]\",\"[威武]\",\"[奥特曼]\",\"[礼物]\",\"[钟]\",\"[话筒]\",\"[蜡烛]\",\"[蛋糕]\"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+\"images/face/\"+t+\".gif\"}),e}();return x.hide=x.hide||function(t){\"face\"!==e(t.target).attr(\"layedit-event\")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('<li title=\"'+e+'\"><img src=\"'+i+'\" alt=\"'+e+'\"></li>')}),'<ul class=\"layui-clear\">'+t.join(\"\")+\"</ul>\"}(),this,{tips:1,time:0,skin:\"layui-box layui-util-face\",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(\".layui-clear>li\").on(\"click\",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off(\"click\",x.hide).on(\"click\",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:\"LAY_layedit_code\",area:\"550px\",shade:.05,shadeClose:!0,moveType:1,title:\"插入代码\",skin:\"layui-layer-msg\",content:['<ul class=\"layui-form layui-form-pane\" style=\"margin: 15px;\">','<li class=\"layui-form-item\">','<label class=\"layui-form-label\">请选择语言</label>','<div class=\"layui-input-block\">','<select name=\"lang\">','<option value=\"JavaScript\">JavaScript</option>','<option value=\"HTML\">HTML</option>','<option value=\"CSS\">CSS</option>','<option value=\"Java\">Java</option>','<option value=\"PHP\">PHP</option>','<option value=\"C#\">C#</option>','<option value=\"Python\">Python</option>','<option value=\"Ruby\">Ruby</option>','<option value=\"Go\">Go</option>',\"</select>\",\"</div>\",\"</li>\",'<li class=\"layui-form-item layui-form-text\">','<label class=\"layui-form-label\">代码</label>','<div class=\"layui-input-block\">','<textarea name=\"code\" lay-verify=\"required\" autofocus=\"true\" class=\"layui-textarea\" style=\"height: 200px;\"></textarea>',\"</div>\",\"</li>\",'<li class=\"layui-form-item\" style=\"text-align: center;\">','<button type=\"button\" lay-submit lay-filter=\"layedit-code-yes\" class=\"layui-btn\"> 确定 </button>','<button style=\"margin-left: 20px;\" type=\"button\" class=\"layui-btn layui-btn-primary\"> 取消 </button>',\"</li>\",\"</ul>\"].join(\"\"),success:function(l,n){var o=\"submit(layedit-code-yes)\";a.render(\"select\"),l.find(\".layui-btn-primary\").on(\"click\",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'<i class=\"layui-icon layedit-tool-html\" title=\"HTML源代码\" lay-command=\"html\" layedit-event=\"html\"\">&#xe64b;</i><span class=\"layedit-tool-mid\"></span>',strong:'<i class=\"layui-icon layedit-tool-b\" title=\"加粗\" lay-command=\"Bold\" layedit-event=\"b\"\">&#xe62b;</i>',italic:'<i class=\"layui-icon layedit-tool-i\" title=\"斜体\" lay-command=\"italic\" layedit-event=\"i\"\">&#xe644;</i>',underline:'<i class=\"layui-icon layedit-tool-u\" title=\"下划线\" lay-command=\"underline\" layedit-event=\"u\"\">&#xe646;</i>',del:'<i class=\"layui-icon layedit-tool-d\" title=\"删除线\" lay-command=\"strikeThrough\" layedit-event=\"d\"\">&#xe64f;</i>',\"|\":'<span class=\"layedit-tool-mid\"></span>',left:'<i class=\"layui-icon layedit-tool-left\" title=\"左对齐\" lay-command=\"justifyLeft\" layedit-event=\"left\"\">&#xe649;</i>',center:'<i class=\"layui-icon layedit-tool-center\" title=\"居中对齐\" lay-command=\"justifyCenter\" layedit-event=\"center\"\">&#xe647;</i>',right:'<i class=\"layui-icon layedit-tool-right\" title=\"右对齐\" lay-command=\"justifyRight\" layedit-event=\"right\"\">&#xe648;</i>',link:'<i class=\"layui-icon layedit-tool-link\" title=\"插入链接\" layedit-event=\"link\"\">&#xe64c;</i>',unlink:'<i class=\"layui-icon layedit-tool-unlink layui-disabled\" title=\"清除链接\" lay-command=\"unlink\" layedit-event=\"unlink\"\">&#xe64d;</i>',face:'<i class=\"layui-icon layedit-tool-face\" title=\"表情\" layedit-event=\"face\"\">&#xe650;</i>',image:'<i class=\"layui-icon layedit-tool-image\" title=\"图片\" layedit-event=\"image\">&#xe64a;<input type=\"file\" name=\"file\"></i>',code:'<i class=\"layui-icon layedit-tool-code\" title=\"插入代码\" layedit-event=\"code\">&#xe64e;</i>',help:'<i class=\"layui-icon layedit-tool-help\" title=\"帮助\" layedit-event=\"help\">&#xe607;</i>'},w=new c;t(n,w)});"
  },
  {
    "path": "lib/layui/lay/modules/layer.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;!function(e,t){\"use strict\";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if(\"interactive\"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf(\"/\")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],type:[\"dialog\",\"page\",\"iframe\",\"loading\",\"tips\"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?\"getPropertyValue\":\"getAttribute\"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName(\"head\")[0],s=document.createElement(\"link\");\"string\"==typeof i&&(n=i);var l=(n||t).replace(/\\.|\\//g,\"\"),f=\"layuicss-\"+l,c=0;s.rel=\"stylesheet\",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),\"function\"==typeof i&&!function u(){return++c>80?e.console&&console.error(\"layer.css: Invalid\"):void(1989===parseInt(o.getStyle(document.getElementById(f),\"width\"))?i():setTimeout(u,100))}()}}},r={v:\"3.1.1\",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||\"ActiveXObject\"in e)&&((t.match(/msie\\s(\\d+)/)||[])[1]||\"11\")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,\"string\"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss(\"modules/layer/\"+e.extend):o.link(\"theme/\"+e.extend),this):this},ready:function(e){var t=\"layer\",i=\"\",n=(a?\"modules/layer/\":\"theme/\")+\"default/layer.css?v=\"+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a=\"function\"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s=\"function\"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s=\"function\"==typeof n,f=o.config.skin,c=(f?f+\" \"+f+\"-msg\":\"\")||\"layui-layer-msg\",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+\" layui-layer-hui\",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+\" \"+(n.skin||\"layui-layer-hui\")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=[\"layui-layer\",\".layui-layer-title\",\".layui-layer-main\",\".layui-layer-dialog\",\"layui-layer-iframe\",\"layui-layer-content\",\"layui-layer-btn\",\"layui-layer-close\"];l.anim=[\"layer-anim-00\",\"layer-anim-01\",\"layer-anim-02\",\"layer-anim-03\",\"layer-anim-04\",\"layer-anim-05\",\"layer-anim-06\"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:\"&#x4FE1;&#x606F;\",offset:\"auto\",area:\"auto\",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f=\"object\"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'<div class=\"layui-layer-title\" style=\"'+(f?r.title[1]:\"\")+'\">'+(f?r.title[0]:r.title)+\"</div>\":\"\";return r.zIndex=s,t([r.shade?'<div class=\"layui-layer-shade\" id=\"layui-layer-shade'+a+'\" times=\"'+a+'\" style=\"'+(\"z-index:\"+(s-1)+\"; \")+'\"></div>':\"\",'<div class=\"'+l[0]+(\" layui-layer-\"+o.type[r.type])+(0!=r.type&&2!=r.type||r.shade?\"\":\" layui-layer-border\")+\" \"+(r.skin||\"\")+'\" id=\"'+l[0]+a+'\" type=\"'+o.type[r.type]+'\" times=\"'+a+'\" showtime=\"'+r.time+'\" conType=\"'+(e?\"object\":\"string\")+'\" style=\"z-index: '+s+\"; width:\"+r.area[0]+\";height:\"+r.area[1]+(r.fixed?\"\":\";position:absolute;\")+'\">'+(e&&2!=r.type?\"\":u)+'<div id=\"'+(r.id||\"\")+'\" class=\"layui-layer-content'+(0==r.type&&r.icon!==-1?\" layui-layer-padding\":\"\")+(3==r.type?\" layui-layer-loading\"+r.icon:\"\")+'\">'+(0==r.type&&r.icon!==-1?'<i class=\"layui-layer-ico layui-layer-ico'+r.icon+'\"></i>':\"\")+(1==r.type&&e?\"\":r.content||\"\")+'</div><span class=\"layui-layer-setwin\">'+function(){var e=c?'<a class=\"layui-layer-min\" href=\"javascript:;\"><cite></cite></a><a class=\"layui-layer-ico layui-layer-max\" href=\"javascript:;\"></a>':\"\";return r.closeBtn&&(e+='<a class=\"layui-layer-ico '+l[7]+\" \"+l[7]+(r.title?r.closeBtn:4==r.type?\"1\":\"2\")+'\" href=\"javascript:;\"></a>'),e}()+\"</span>\"+(r.btn?function(){var e=\"\";\"string\"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t<i;t++)e+='<a class=\"'+l[6]+t+'\">'+r.btn[t]+\"</a>\";return'<div class=\"'+l[6]+\" layui-layer-btn-\"+(r.btnAlign||\"\")+'\">'+e+\"</div>\"}():\"\")+(r.resize?'<span class=\"layui-layer-resize\"></span>':\"\")+\"</div>\"],u,i('<div class=\"layui-layer-move\"></div>')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f=\"object\"==typeof s,c=i(\"body\");if(!t.id||!i(\"#\"+t.id)[0]){switch(\"string\"==typeof t.area&&(t.area=\"auto\"===t.area?[\"\",\"\"]:[t.area,\"\"]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn=\"btn\"in t?t.btn:o.btn[0],r.closeAll(\"dialog\");break;case 2:var s=t.content=f?t.content:[t.content||\"\",\"auto\"];t.content='<iframe scrolling=\"'+(t.content[1]||\"auto\")+'\" allowtransparency=\"true\" id=\"'+l[4]+a+'\" name=\"'+l[4]+a+'\" onload=\"this.className=\\'\\';\" class=\"layui-layer-load\" frameborder=\"0\" src=\"'+t.content[0]+'\"></iframe>';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll(\"loading\");break;case 4:f||(t.content=[t.content,\"body\"]),t.follow=t.content[1],t.content=t.content[0]+'<i class=\"layui-layer-TipsG\"></i>',delete t.title,t.tips=\"object\"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll(\"tips\")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i(\"body\").append(n[1])}():function(){s.parents(\".\"+l[0])[0]||(s.data(\"display\",s.css(\"display\")).show().addClass(\"layui-layer-wrap\").wrap(n[1]),i(\"#\"+l[0]+a).find(\".\"+l[5]).before(r))}()}():c.append(n[1]),i(\".layui-layer-move\")[0]||c.append(o.moveElem=u),e.layero=i(\"#\"+l[0]+a),t.scrollbar||l.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",a)}).auto(a),i(\"#layui-layer-shade\"+e.index).css({\"background-color\":t.shade[1]||\"#000\",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find(\"iframe\").attr(\"src\",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on(\"resize\",function(){e.offset(),(/^\\d+%$/.test(t.area[0])||/^\\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u=\"layer-anim \"+l.anim[t.anim];e.layero.addClass(u).one(\"webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend\",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data(\"isOutAnim\",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i(\"#\"+l[0]+e);\"\"===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find(\".\"+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css(\"padding-top\"))))};switch(a.type){case 2:u(\"iframe\");break;default:\"\"===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u(\".\"+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u(\".\"+l[5])):u(\".\"+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o=\"object\"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):\"auto\"!==t.offset&&(\"t\"===t.offset?e.offsetTop=0:\"r\"===t.offset?e.offsetLeft=n.width()-a[0]:\"b\"===t.offset?e.offsetTop=n.height()-a[1]:\"l\"===t.offset?e.offsetLeft=0:\"lt\"===t.offset?(e.offsetTop=0,e.offsetLeft=0):\"lb\"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):\"rt\"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):\"rb\"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr(\"minLeft\")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css(\"left\")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i(\"body\"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(\".layui-layer-TipsG\"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:\"auto\"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass(\"layui-layer-TipsB\").addClass(\"layui-layer-TipsT\").css(\"border-right-color\",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass(\"layui-layer-TipsL\").addClass(\"layui-layer-TipsR\").css(\"border-bottom-color\",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass(\"layui-layer-TipsT\").addClass(\"layui-layer-TipsB\").css(\"border-right-color\",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass(\"layui-layer-TipsR\").addClass(\"layui-layer-TipsL\").css(\"border-bottom-color\",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find(\".\"+l[5]).css({\"background-color\":t.tips[1],\"padding-right\":t.closeBtn?\"30px\":\"\"}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(\".layui-layer-resize\"),c={};return t.move&&l.css(\"cursor\",\"move\"),l.on(\"mousedown\",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css(\"left\")),e.clientY-parseFloat(s.css(\"top\"))],o.moveElem.css(\"cursor\",\"move\").show())}),f.on(\"mousedown\",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css(\"cursor\",\"se-resize\").show()}),a.on(\"mousemove\",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l=\"fixed\"===s.css(\"position\");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;a<c.stX&&(a=c.stX),a>f&&(a=f),o<c.stY&&(o=c.stY),o>u&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on(\"mouseup\",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find(\"iframe\").on(\"load\",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find(\".\"+l[6]).children(\"a\").on(\"click\",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a[\"btn\"+(e+1)]&&a[\"btn\"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find(\".\"+l[7]).on(\"click\",e),a.shadeClose&&i(\"#layui-layer-shade\"+t.index).on(\"click\",function(){r.close(t.index)}),n.find(\".layui-layer-min\").on(\"click\",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(\".layui-layer-max\").on(\"click\",function(){i(this).hasClass(\"layui-layer-maxmin\")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i(\"select\"),function(e,t){var n=i(this);n.parents(\".\"+l[0])[0]||1==n.attr(\"layer\")&&i(\".\"+l[0]).length<1&&n.removeAttr(\"layer\").show(),n=null})},s.pt.IE6=function(e){i(\"select\").each(function(e,t){var n=i(this);n.parents(\".\"+l[0])[0]||\"none\"===n.css(\"display\")||n.attr({layer:\"1\"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css(\"z-index\",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on(\"mousedown\",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css(\"margin-left\"))];e.find(\".layui-layer-max\").addClass(\"layui-layer-maxmin\"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr(\"layer-full\")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty(\"overflow\"):l.html[0].style.removeAttribute(\"overflow\"),l.html.removeAttr(\"layer-full\"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i(\".\"+l[4]).attr(\"times\"),i(\"#\"+l[0]+t).find(\"iframe\").contents().find(e)},r.getFrameIndex=function(e){return i(\"#\"+e).parents(\".\"+l[4]).attr(\"times\")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame(\"html\",e).outerHeight(),n=i(\"#\"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find(\".\"+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find(\"iframe\").css({height:t})}},r.iframeSrc=function(e,t){i(\"#\"+l[0]+e).find(\"iframe\").attr(\"src\",t)},r.style=function(e,t,n){var a=i(\"#\"+l[0]+e),r=a.find(\".layui-layer-content\"),s=a.attr(\"type\"),f=a.find(l[1]).outerHeight()||0,c=a.find(\".\"+l[6]).outerHeight()||0;a.attr(\"minLeft\");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find(\".\"+l[6]).outerHeight(),s===o.type[2]?a.find(\"iframe\").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css(\"padding-top\"))-parseFloat(r.css(\"padding-bottom\"))}))},r.min=function(e,t){var a=i(\"#\"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr(\"minLeft\")||181*o.minIndex+\"px\",c=a.css(\"position\");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr(\"position\",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:\"fixed\",overflow:\"hidden\"},!0),a.find(\".layui-layer-min\").hide(),\"page\"===a.attr(\"type\")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr(\"minLeft\")||o.minIndex++,a.attr(\"minLeft\",f)},r.restore=function(e){var t=i(\"#\"+l[0]+e),n=t.attr(\"area\").split(\",\");t.attr(\"type\");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr(\"position\"),overflow:\"visible\"},!0),t.find(\".layui-layer-max\").removeClass(\"layui-layer-maxmin\"),t.find(\".layui-layer-min\").show(),\"page\"===t.attr(\"type\")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i(\"#\"+l[0]+e);o.record(a),l.html.attr(\"layer-full\")||l.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",e),clearTimeout(t),t=setTimeout(function(){var t=\"fixed\"===a.css(\"position\");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(\".layui-layer-min\").hide()},100)},r.title=function(e,t){var n=i(\"#\"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i(\"#\"+l[0]+e),n=t.attr(\"type\"),a=\"layer-anim-close\";if(t[0]){var s=\"layui-layer-wrap\",f=function(){if(n===o.type[1]&&\"object\"===t.attr(\"conType\")){t.children(\":not(.\"+l[5]+\")\").remove();for(var a=t.find(\".\"+s),r=0;r<2;r++)a.unwrap();a.css(\"display\",a.data(\"display\")).removeClass(s)}else{if(n===o.type[2])try{var f=i(\"#\"+l[4]+e)[0];f.contentWindow.document.write(\"\"),f.contentWindow.close(),t.find(\".\"+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML=\"\",t.remove()}\"function\"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data(\"isOutAnim\")&&t.addClass(\"layer-anim \"+a),i(\"#layui-layer-moves, #layui-layer-shade\"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr(\"minLeft\")&&(o.minIndex--,o.minLeft.push(t.attr(\"minLeft\"))),r.ie&&r.ie<10||!t.data(\"isOutAnim\")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i(\".\"+l[0]),function(){var t=i(this),n=e?t.attr(\"type\")===e:1;n&&r.close(t.attr(\"times\")),n=null})};var f=r.cache||{},c=function(e){return f.skin?\" \"+f.skin+\" \"+f.skin+\"-\"+e:\"\"};r.prompt=function(e,t){var a=\"\";if(e=e||{},\"function\"==typeof e&&(t=e),e.area){var o=e.area;a='style=\"width: '+o[0]+\"; height: \"+o[1]+';\"',delete e.area}var s,l=2==e.formType?'<textarea class=\"layui-layer-input\"'+a+\"></textarea>\":function(){return'<input type=\"'+(1==e.formType?\"password\":\"text\")+'\" class=\"layui-layer-input\">'}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],content:l,skin:\"layui-layer-prompt\"+c(\"prompt\"),maxWidth:n.width(),success:function(t){s=t.find(\".layui-layer-input\"),s.val(e.value||\"\").focus(),\"function\"==typeof f&&f(t)},resize:!1,yes:function(i){var n=s.val();\"\"===n?s.focus():n.length>(e.maxlength||500)?r.tips(\"&#x6700;&#x591A;&#x8F93;&#x5165;\"+(e.maxlength||500)+\"&#x4E2A;&#x5B57;&#x6570;\",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n=\"layui-this\",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:\"layui-layer-tab\"+c(\"tab\"),resize:!1,title:function(){var e=t.length,i=1,a=\"\";if(e>0)for(a='<span class=\"'+n+'\">'+t[0].title+\"</span>\";i<e;i++)a+=\"<span>\"+t[i].title+\"</span>\";return a}(),content:'<ul class=\"layui-layer-tabmain\">'+function(){var e=t.length,i=1,a=\"\";if(e>0)for(a='<li class=\"layui-layer-tabli '+n+'\">'+(t[0].content||\"no content\")+\"</li>\";i<e;i++)a+='<li class=\"layui-layer-tabli\">'+(t[i].content||\"no  content\")+\"</li>\";return a}()+\"</ul>\",success:function(t){var o=t.find(\".layui-layer-title\").children(),r=t.find(\".layui-layer-tabmain\").children();o.on(\"mousedown\",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),\"function\"==typeof e.change&&e.change(o)}),\"function\"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||\"img\";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg(\"&#x6CA1;&#x6709;&#x56FE;&#x7247;\")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr(\"layer-index\",e),u.push({alt:t.attr(\"alt\"),pid:t.attr(\"layer-pid\"),src:t.attr(\"layer-src\")||t.attr(\"src\"),thumb:t.attr(\"src\")})})};if(h(),0===u.length)return;if(n||p.on(\"click\",t.img,function(){var e=i(this),n=e.attr(\"layer-index\");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(\".layui-layer-imgprev\").on(\"click\",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(\".layui-layer-imgnext\").on(\"click\",function(e){e.preventDefault(),s.imgnext()}),i(document).on(\"keyup\",s.keyup)},s.loadi=r.load(1,{shade:!(\"shade\"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:\"layui-layer-photos\",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]<r[1]&&(a[0]=a[0]/r[1],a[1]=a[1]/r[1])}return[a[0]+\"px\",a[1]+\"px\"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:\".layui-layer-phimg img\",moveType:1,scrollbar:!1,moveOut:!0,isOutAnim:!1,skin:\"layui-layer-photos\"+c(\"photos\"),content:'<div class=\"layui-layer-phimg\"><img src=\"'+u[d].src+'\" alt=\"'+(u[d].alt||\"\")+'\" layer-pid=\"'+u[d].pid+'\"><div class=\"layui-layer-imgsee\">'+(u.length>1?'<span class=\"layui-layer-imguide\"><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgprev\"></a><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgnext\"></a></span>':\"\")+'<div class=\"layui-layer-imgbar\" style=\"display:'+(a?\"block\":\"\")+'\"><span class=\"layui-layer-imgtit\"><a href=\"javascript:;\">'+(u[d].alt||\"\")+\"</a><em>\"+s.imgIndex+\"/\"+u.length+\"</em></span></div></div></div>\",success:function(e,i){s.bigimg=e.find(\".layui-layer-phimg\"),s.imgsee=e.find(\".layui-layer-imguide,.layui-layer-imgbar\"),s.event(e),t.tab&&t.tab(u[d],e),\"function\"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off(\"keyup\",s.keyup)}},t))},function(){r.close(s.loadi),r.msg(\"&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;\",{time:3e4,btn:[\"&#x4E0B;&#x4E00;&#x5F20;\",\"&#x4E0D;&#x770B;&#x4E86;\"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i(\"html\"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define(\"jquery\",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t(\"layer\",r)})):\"function\"==typeof define&&define.amd?define([\"jquery\"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window);"
  },
  {
    "path": "lib/layui/lay/modules/laypage.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(function(e){\"use strict\";var a=document,t=\"getElementById\",n=\"getElementsByTagName\",i=\"laypage\",r=\"layui-disabled\",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if(\"object\"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups=\"groups\"in a?0|a.groups:5;a.layout=\"object\"==typeof a.layout?a.layout:[\"prev\",\"page\",\"next\"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits=\"object\"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev=\"prev\"in a?a.prev:\"&#x4E0A;&#x4E00;&#x9875;\",a.next=\"next\"in a?a.next:\"&#x4E0B;&#x4E00;&#x9875;\";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?'<a href=\"javascript:;\" class=\"layui-laypage-prev'+(1==a.curr?\" \"+r:\"\")+'\" data-page=\"'+(a.curr-1)+'\">'+a.prev+\"</a>\":\"\"}(),page:function(){var e=[];if(a.count<1)return\"\";n>1&&a.first!==!1&&0!==t&&e.push('<a href=\"javascript:;\" class=\"layui-laypage-first\" data-page=\"1\"  title=\"&#x9996;&#x9875;\">'+(a.first||1)+\"</a>\");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r<t-1&&(r=u-t+1),a.first!==!1&&r>2&&e.push('<span class=\"layui-laypage-spr\">&#x2026;</span>');r<=u;r++)r===a.curr?e.push('<span class=\"layui-laypage-curr\"><em class=\"layui-laypage-em\" '+(/^#/.test(a.theme)?'style=\"background-color:'+a.theme+';\"':\"\")+\"></em><em>\"+r+\"</em></span>\"):e.push('<a href=\"javascript:;\" data-page=\"'+r+'\">'+r+\"</a>\");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1<a.pages&&e.push('<span class=\"layui-laypage-spr\">&#x2026;</span>'),0!==t&&e.push('<a href=\"javascript:;\" class=\"layui-laypage-last\" title=\"&#x5C3E;&#x9875;\"  data-page=\"'+a.pages+'\">'+(a.last||a.pages)+\"</a>\")),e.join(\"\")}(),next:function(){return a.next?'<a href=\"javascript:;\" class=\"layui-laypage-next'+(a.curr==a.pages?\" \"+r:\"\")+'\" data-page=\"'+(a.curr+1)+'\">'+a.next+\"</a>\":\"\"}(),count:'<span class=\"layui-laypage-count\">共 '+a.count+\" 条</span>\",limit:function(){var e=['<span class=\"layui-laypage-limits\"><select lay-ignore>'];return layui.each(a.limits,function(t,n){e.push('<option value=\"'+n+'\"'+(n===a.limit?\"selected\":\"\")+\">\"+n+\" 条/页</option>\")}),e.join(\"\")+\"</select></span>\"}(),refresh:['<a href=\"javascript:;\" data-page=\"'+a.curr+'\" class=\"layui-laypage-refresh\">','<i class=\"layui-icon layui-icon-refresh\"></i>',\"</a>\"].join(\"\"),skip:function(){return['<span class=\"layui-laypage-skip\">&#x5230;&#x7B2C;','<input type=\"text\" min=\"1\" value=\"'+a.curr+'\" class=\"layui-input\">','&#x9875;<button type=\"button\" class=\"layui-laypage-btn\">&#x786e;&#x5b9a;</button>',\"</span>\"].join(\"\")}()};return['<div class=\"layui-box layui-laypage layui-laypage-'+(a.theme?/^#/.test(a.theme)?\"molv\":a.theme:\"default\")+'\" id=\"layui-laypage-'+a.index+'\">',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join(\"\")}(),\"</div>\"].join(\"\")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n](\"button\")[0],l=e[n](\"input\")[0],p=e[n](\"select\")[0],c=function(){var e=0|l.value.replace(/\\s|\\D/g,\"\");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;o<y;o++)\"a\"===r[o].nodeName.toLowerCase()&&s.on(r[o],\"click\",function(){var e=0|this.getAttribute(\"data-page\");e<1||e>i.pages||(i.curr=e,t.render())});p&&s.on(p,\"change\",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,\"click\",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n](\"input\")[0];t&&s.on(t,\"keyup\",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\\D/.test(n)&&(this.value=n.replace(/\\D/,\"\")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t](\"layui-laypage-\"+i.index);n.jump(s),i.hash&&!e&&(location.hash=\"!\"+i.hash+\"=\"+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent(\"on\"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)});"
  },
  {
    "path": "lib/layui/lay/modules/laytpl.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(function(e){\"use strict\";var r={open:\"{{\",close:\"}}\"},c={exp:function(e){return new RegExp(e,\"g\")},query:function(e,c,t){var o=[\"#([\\\\s\\\\S])+?\",\"([^{#}])*?\"][e||0];return n((c||\"\")+r.open+o+r.close+(t||\"\"))},escape:function(e){return String(e||\"\").replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")},error:function(e,r){var c=\"Laytpl Error：\";return\"object\"==typeof console&&console.error(c+e+\"\\n\"+(r||\"\")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n(\"^\"+r.open+\"#\",\"\"),l=n(r.close+\"$\",\"\");e=e.replace(/\\s+|\\r|\\t|\\n/g,\" \").replace(n(r.open+\"#\"),r.open+\"# \").replace(n(r.close+\"}\"),\"} \"+r.close).replace(/\\\\/g,\"\\\\\\\\\").replace(n(r.open+\"!(.+?)!\"+r.close),function(e){return e=e.replace(n(\"^\"+r.open+\"!\"),\"\").replace(n(\"!\"+r.close),\"\").replace(n(r.open+\"|\"+r.close),function(e){return e.replace(/(.)/g,\"\\\\$1\")})}).replace(/(?=\"|')/g,\"\\\\\").replace(c.query(),function(e){return e=e.replace(a,\"\").replace(l,\"\"),'\";'+e.replace(/\\\\/g,\"\")+';view+=\"'}).replace(c.query(1),function(e){var c='\"+(';return e.replace(/\\s/g,\"\")===r.open+r.close?\"\":(e=e.replace(n(r.open+\"|\"+r.close),\"\"),/^=/.test(e)&&(e=e.replace(/^=/,\"\"),c='\"+_escape_('),c+e.replace(/\\\\/g,\"\")+')+\"')}),e='\"use strict\";var view = \"'+e+'\";return view;';try{return o.cache=e=new Function(\"d, _escape_\",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error(\"no data\")};var o=function(e){return\"string\"!=typeof e?c.error(\"Template not found\"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v=\"1.2.0\",e(\"laytpl\",o)});"
  },
  {
    "path": "lib/layui/lay/modules/mobile.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(function(i){i(\"layui.mobile\",layui.v)});layui.define(function(e){\"use strict\";var r={open:\"{{\",close:\"}}\"},c={exp:function(e){return new RegExp(e,\"g\")},query:function(e,c,t){var o=[\"#([\\\\s\\\\S])+?\",\"([^{#}])*?\"][e||0];return n((c||\"\")+r.open+o+r.close+(t||\"\"))},escape:function(e){return String(e||\"\").replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")},error:function(e,r){var c=\"Laytpl Error：\";return\"object\"==typeof console&&console.error(c+e+\"\\n\"+(r||\"\")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n(\"^\"+r.open+\"#\",\"\"),l=n(r.close+\"$\",\"\");e=e.replace(/\\s+|\\r|\\t|\\n/g,\" \").replace(n(r.open+\"#\"),r.open+\"# \").replace(n(r.close+\"}\"),\"} \"+r.close).replace(/\\\\/g,\"\\\\\\\\\").replace(n(r.open+\"!(.+?)!\"+r.close),function(e){return e=e.replace(n(\"^\"+r.open+\"!\"),\"\").replace(n(\"!\"+r.close),\"\").replace(n(r.open+\"|\"+r.close),function(e){return e.replace(/(.)/g,\"\\\\$1\")})}).replace(/(?=\"|')/g,\"\\\\\").replace(c.query(),function(e){return e=e.replace(a,\"\").replace(l,\"\"),'\";'+e.replace(/\\\\/g,\"\")+';view+=\"'}).replace(c.query(1),function(e){var c='\"+(';return e.replace(/\\s/g,\"\")===r.open+r.close?\"\":(e=e.replace(n(r.open+\"|\"+r.close),\"\"),/^=/.test(e)&&(e=e.replace(/^=/,\"\"),c='\"+_escape_('),c+e.replace(/\\\\/g,\"\")+')+\"')}),e='\"use strict\";var view = \"'+e+'\";return view;';try{return o.cache=e=new Function(\"d, _escape_\",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error(\"no data\")};var o=function(e){return\"string\"!=typeof e?c.error(\"Template not found\"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v=\"1.2.0\",e(\"laytpl\",o)});layui.define(function(e){\"use strict\";var t=(window,document),i=\"querySelectorAll\",n=\"getElementsByClassName\",a=function(e){return t[i](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:\"scale\"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var i in e)t[i]=e[i];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener(\"click\",function(e){t.call(this,e)},!1)};var o=0,r=[\"layui-m-layer\"],d=function(e){var t=this;t.config=l.extend(e),t.view()};d.prototype.view=function(){var e=this,i=e.config,s=t.createElement(\"div\");e.id=s.id=r[0]+o,s.setAttribute(\"class\",r[0]+\" \"+r[0]+(i.type||0)),s.setAttribute(\"index\",o);var l=function(){var e=\"object\"==typeof i.title;return i.title?'<h3 style=\"'+(e?i.title[1]:\"\")+'\">'+(e?i.title[0]:i.title)+\"</h3>\":\"\"}(),d=function(){\"string\"==typeof i.btn&&(i.btn=[i.btn]);var e,t=(i.btn||[]).length;return 0!==t&&i.btn?(e='<span yes type=\"1\">'+i.btn[0]+\"</span>\",2===t&&(e='<span no type=\"0\">'+i.btn[1]+\"</span>\"+e),'<div class=\"layui-m-layerbtn\">'+e+\"</div>\"):\"\"}();if(i.fixed||(i.top=i.hasOwnProperty(\"top\")?i.top:100,i.style=i.style||\"\",i.style+=\" top:\"+(t.body.scrollTop+i.top)+\"px\"),2===i.type&&(i.content='<i></i><i class=\"layui-m-layerload\"></i><i></i><p>'+(i.content||\"\")+\"</p>\"),i.skin&&(i.anim=\"up\"),\"msg\"===i.skin&&(i.shade=!1),s.innerHTML=(i.shade?\"<div \"+(\"string\"==typeof i.shade?'style=\"'+i.shade+'\"':\"\")+' class=\"layui-m-layershade\"></div>':\"\")+'<div class=\"layui-m-layermain\" '+(i.fixed?\"\":'style=\"position:static;\"')+'><div class=\"layui-m-layersection\"><div class=\"layui-m-layerchild '+(i.skin?\"layui-m-layer-\"+i.skin+\" \":\"\")+(i.className?i.className:\"\")+\" \"+(i.anim?\"layui-m-anim-\"+i.anim:\"\")+'\" '+(i.style?'style=\"'+i.style+'\"':\"\")+\">\"+l+'<div class=\"layui-m-layercont\">'+i.content+\"</div>\"+d+\"</div></div></div>\",!i.type||2===i.type){var y=t[n](r[0]+i.type),u=y.length;u>=1&&c.close(y[0].getAttribute(\"index\"))}document.body.appendChild(s);var m=e.elem=a(\"#\"+e.id)[0];i.success&&i.success(m),e.index=o++,e.action(i,m)},d.prototype.action=function(e,t){var i=this;e.time&&(l.timer[i.index]=setTimeout(function(){c.close(i.index)},1e3*e.time));var a=function(){var t=this.getAttribute(\"type\");0==t?(e.no&&e.no(),c.close(i.index)):e.yes?e.yes(i.index):c.close(i.index)};if(e.btn)for(var s=t[n](\"layui-m-layerbtn\")[0].children,o=s.length,r=0;r<o;r++)l.touch(s[r],a);if(e.shade&&e.shadeClose){var d=t[n](\"layui-m-layershade\")[0];l.touch(d,function(){c.close(i.index,e.end)})}e.end&&(l.end[i.index]=e.end)};var c={v:\"2.0 m\",index:o,open:function(e){var t=new d(e||{});return t.index},close:function(e){var i=a(\"#\"+r[0]+e)[0];i&&(i.innerHTML=\"\",t.body.removeChild(i),clearTimeout(l.timer[e]),delete l.timer[e],\"function\"==typeof l.end[e]&&l.end[e](),delete l.end[e])},closeAll:function(){for(var e=t[n](r[0]),i=0,a=e.length;i<a;i++)c.close(0|e[0].getAttribute(\"index\"))}};e(\"layer-mobile\",c)});layui.define(function(t){var e=function(){function t(t){return null==t?String(t):J[W.call(t)]||\"object\"}function e(e){return\"function\"==t(e)}function n(t){return null!=t&&t==t.window}function r(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function i(e){return\"object\"==t(e)}function o(t){return i(t)&&!n(t)&&Object.getPrototypeOf(t)==Object.prototype}function a(t){var e=!!t&&\"length\"in t&&t.length,r=T.type(t);return\"function\"!=r&&!n(t)&&(\"array\"==r||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}function s(t){return A.call(t,function(t){return null!=t})}function u(t){return t.length>0?T.fn.concat.apply([],t):t}function c(t){return t.replace(/::/g,\"/\").replace(/([A-Z]+)([A-Z][a-z])/g,\"$1_$2\").replace(/([a-z\\d])([A-Z])/g,\"$1_$2\").replace(/_/g,\"-\").toLowerCase()}function l(t){return t in F?F[t]:F[t]=new RegExp(\"(^|\\\\s)\"+t+\"(\\\\s|$)\")}function f(t,e){return\"number\"!=typeof e||k[c(t)]?e:e+\"px\"}function h(t){var e,n;return $[t]||(e=L.createElement(t),L.body.appendChild(e),n=getComputedStyle(e,\"\").getPropertyValue(\"display\"),e.parentNode.removeChild(e),\"none\"==n&&(n=\"block\"),$[t]=n),$[t]}function p(t){return\"children\"in t?D.call(t.children):T.map(t.childNodes,function(t){if(1==t.nodeType)return t})}function d(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.length=r,this.selector=e||\"\"}function m(t,e,n){for(j in e)n&&(o(e[j])||Q(e[j]))?(o(e[j])&&!o(t[j])&&(t[j]={}),Q(e[j])&&!Q(t[j])&&(t[j]=[]),m(t[j],e[j],n)):e[j]!==E&&(t[j]=e[j])}function v(t,e){return null==e?T(t):T(t).filter(e)}function g(t,n,r,i){return e(n)?n.call(t,r,i):n}function y(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function x(t,e){var n=t.className||\"\",r=n&&n.baseVal!==E;return e===E?r?n.baseVal:n:void(r?n.baseVal=e:t.className=e)}function b(t){try{return t?\"true\"==t||\"false\"!=t&&(\"null\"==t?null:+t+\"\"==t?+t:/^[\\[\\{]/.test(t)?T.parseJSON(t):t):t}catch(e){return t}}function w(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)w(t.childNodes[n],e)}var E,j,T,S,C,N,O=[],P=O.concat,A=O.filter,D=O.slice,L=window.document,$={},F={},k={\"column-count\":1,columns:1,\"font-weight\":1,\"line-height\":1,opacity:1,\"z-index\":1,zoom:1},M=/^\\s*<(\\w+|!)[^>]*>/,R=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,Z=/^(?:body|html)$/i,q=/([A-Z])/g,H=[\"val\",\"css\",\"html\",\"text\",\"data\",\"width\",\"height\",\"offset\"],I=[\"after\",\"prepend\",\"before\",\"append\"],V=L.createElement(\"table\"),_=L.createElement(\"tr\"),B={tr:L.createElement(\"tbody\"),tbody:V,thead:V,tfoot:V,td:_,th:_,\"*\":L.createElement(\"div\")},U=/complete|loaded|interactive/,X=/^[\\w-]*$/,J={},W=J.toString,Y={},G=L.createElement(\"div\"),K={tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},Q=Array.isArray||function(t){return t instanceof Array};return Y.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=G).appendChild(t),r=~Y.qsa(i,e).indexOf(t),o&&G.removeChild(t),r},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():\"\"})},N=function(t){return A.call(t,function(e,n){return t.indexOf(e)==n})},Y.fragment=function(t,e,n){var r,i,a;return R.test(t)&&(r=T(L.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(z,\"<$1></$2>\")),e===E&&(e=M.test(t)&&RegExp.$1),e in B||(e=\"*\"),a=B[e],a.innerHTML=\"\"+t,r=T.each(D.call(a.childNodes),function(){a.removeChild(this)})),o(n)&&(i=T(r),T.each(n,function(t,e){H.indexOf(t)>-1?i[t](e):i.attr(t,e)})),r},Y.Z=function(t,e){return new d(t,e)},Y.isZ=function(t){return t instanceof Y.Z},Y.init=function(t,n){var r;if(!t)return Y.Z();if(\"string\"==typeof t)if(t=t.trim(),\"<\"==t[0]&&M.test(t))r=Y.fragment(t,RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=Y.qsa(L,t)}else{if(e(t))return T(L).ready(t);if(Y.isZ(t))return t;if(Q(t))r=s(t);else if(i(t))r=[t],t=null;else if(M.test(t))r=Y.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=Y.qsa(L,t)}}return Y.Z(r,t)},T=function(t,e){return Y.init(t,e)},T.extend=function(t){var e,n=D.call(arguments,1);return\"boolean\"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){m(t,n,e)}),t},Y.qsa=function(t,e){var n,r=\"#\"==e[0],i=!r&&\".\"==e[0],o=r||i?e.slice(1):e,a=X.test(o);return t.getElementById&&a&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:D.call(a&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},T.contains=L.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},T.type=t,T.isFunction=e,T.isWindow=n,T.isArray=Q,T.isPlainObject=o,T.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},T.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&\"boolean\"!=n&&(\"string\"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},T.inArray=function(t,e,n){return O.indexOf.call(e,t,n)},T.camelCase=C,T.trim=function(t){return null==t?\"\":String.prototype.trim.call(t)},T.uuid=0,T.support={},T.expr={},T.noop=function(){},T.map=function(t,e){var n,r,i,o=[];if(a(t))for(r=0;r<t.length;r++)n=e(t[r],r),null!=n&&o.push(n);else for(i in t)n=e(t[i],i),null!=n&&o.push(n);return u(o)},T.each=function(t,e){var n,r;if(a(t)){for(n=0;n<t.length;n++)if(e.call(t[n],n,t[n])===!1)return t}else for(r in t)if(e.call(t[r],r,t[r])===!1)return t;return t},T.grep=function(t,e){return A.call(t,e)},window.JSON&&(T.parseJSON=JSON.parse),T.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(t,e){J[\"[object \"+e+\"]\"]=e.toLowerCase()}),T.fn={constructor:Y.Z,length:0,forEach:O.forEach,reduce:O.reduce,push:O.push,sort:O.sort,splice:O.splice,indexOf:O.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=Y.isZ(e)?e.toArray():e;return P.apply(Y.isZ(this)?this.toArray():this,n)},map:function(t){return T(T.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return T(D.apply(this,arguments))},ready:function(t){return U.test(L.readyState)&&L.body?t(T):L.addEventListener(\"DOMContentLoaded\",function(){t(T)},!1),this},get:function(t){return t===E?D.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return O.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return e(t)?this.not(this.not(t)):T(A.call(this,function(e){return Y.matches(e,t)}))},add:function(t,e){return T(N(this.concat(T(t,e))))},is:function(t){return this.length>0&&Y.matches(this[0],t)},not:function(t){var n=[];if(e(t)&&t.call!==E)this.each(function(e){t.call(this,e)||n.push(this)});else{var r=\"string\"==typeof t?this.filter(t):a(t)&&e(t.item)?D.call(t):T(t);this.forEach(function(t){r.indexOf(t)<0&&n.push(t)})}return T(n)},has:function(t){return this.filter(function(){return i(t)?T.contains(this,t):T(this).find(t).size()})},eq:function(t){return t===-1?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!i(t)?t:T(t)},last:function(){var t=this[this.length-1];return t&&!i(t)?t:T(t)},find:function(t){var e,n=this;return e=t?\"object\"==typeof t?T(t).filter(function(){var t=this;return O.some.call(n,function(e){return T.contains(e,t)})}):1==this.length?T(Y.qsa(this[0],t)):this.map(function(){return Y.qsa(this,t)}):T()},closest:function(t,e){var n=[],i=\"object\"==typeof t&&T(t);return this.each(function(o,a){for(;a&&!(i?i.indexOf(a)>=0:Y.matches(a,t));)a=a!==e&&!r(a)&&a.parentNode;a&&n.indexOf(a)<0&&n.push(a)}),T(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=T.map(n,function(t){if((t=t.parentNode)&&!r(t)&&e.indexOf(t)<0)return e.push(t),t});return v(e,t)},parent:function(t){return v(N(this.pluck(\"parentNode\")),t)},children:function(t){return v(this.map(function(){return p(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||D.call(this.childNodes)})},siblings:function(t){return v(this.map(function(t,e){return A.call(p(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=\"\"})},pluck:function(t){return T.map(this,function(e){return e[t]})},show:function(){return this.each(function(){\"none\"==this.style.display&&(this.style.display=\"\"),\"none\"==getComputedStyle(this,\"\").getPropertyValue(\"display\")&&(this.style.display=h(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var n=e(t);if(this[0]&&!n)var r=T(t).get(0),i=r.parentNode||this.length>1;return this.each(function(e){T(this).wrapAll(n?t.call(this,e):i?r.cloneNode(!0):r)})},wrapAll:function(t){if(this[0]){T(this[0]).before(t=T(t));for(var e;(e=t.children()).length;)t=e.first();T(t).append(this)}return this},wrapInner:function(t){var n=e(t);return this.each(function(e){var r=T(this),i=r.contents(),o=n?t.call(this,e):t;i.length?i.wrapAll(o):r.append(o)})},unwrap:function(){return this.parent().each(function(){T(this).replaceWith(T(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css(\"display\",\"none\")},toggle:function(t){return this.each(function(){var e=T(this);(t===E?\"none\"==e.css(\"display\"):t)?e.show():e.hide()})},prev:function(t){return T(this.pluck(\"previousElementSibling\")).filter(t||\"*\")},next:function(t){return T(this.pluck(\"nextElementSibling\")).filter(t||\"*\")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;T(this).empty().append(g(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=g(this,t,e,this.textContent);this.textContent=null==n?\"\":\"\"+n}):0 in this?this.pluck(\"textContent\").join(\"\"):null},attr:function(t,e){var n;return\"string\"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(i(t))for(j in t)y(this,j,t[j]);else y(this,t,g(this,e,n,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:E},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(\" \").forEach(function(t){y(this,t)},this)})},prop:function(t,e){return t=K[t]||t,1 in arguments?this.each(function(n){this[t]=g(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=K[t]||t,this.each(function(){delete this[t]})},data:function(t,e){var n=\"data-\"+t.replace(q,\"-$1\").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?b(r):E},val:function(t){return 0 in arguments?(null==t&&(t=\"\"),this.each(function(e){this.value=g(this,t,e,this.value)})):this[0]&&(this[0].multiple?T(this[0]).find(\"option\").filter(function(){return this.selected}).pluck(\"value\"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var n=T(this),r=g(this,t,e,n.offset()),i=n.offsetParent().offset(),o={top:r.top-i.top,left:r.left-i.left};\"static\"==n.css(\"position\")&&(o.position=\"relative\"),n.css(o)});if(!this.length)return null;if(L.documentElement!==this[0]&&!T.contains(L.documentElement,this[0]))return{top:0,left:0};var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(e,n){if(arguments.length<2){var r=this[0];if(\"string\"==typeof e){if(!r)return;return r.style[C(e)]||getComputedStyle(r,\"\").getPropertyValue(e)}if(Q(e)){if(!r)return;var i={},o=getComputedStyle(r,\"\");return T.each(e,function(t,e){i[e]=r.style[C(e)]||o.getPropertyValue(e)}),i}}var a=\"\";if(\"string\"==t(e))n||0===n?a=c(e)+\":\"+f(e,n):this.each(function(){this.style.removeProperty(c(e))});else for(j in e)e[j]||0===e[j]?a+=c(j)+\":\"+f(j,e[j])+\";\":this.each(function(){this.style.removeProperty(c(j))});return this.each(function(){this.style.cssText+=\";\"+a})},index:function(t){return t?this.indexOf(T(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&O.some.call(this,function(t){return this.test(x(t))},l(t))},addClass:function(t){return t?this.each(function(e){if(\"className\"in this){S=[];var n=x(this),r=g(this,t,e,n);r.split(/\\s+/g).forEach(function(t){T(this).hasClass(t)||S.push(t)},this),S.length&&x(this,n+(n?\" \":\"\")+S.join(\" \"))}}):this},removeClass:function(t){return this.each(function(e){if(\"className\"in this){if(t===E)return x(this,\"\");S=x(this),g(this,t,e,S).split(/\\s+/g).forEach(function(t){S=S.replace(l(t),\" \")}),x(this,S.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var r=T(this),i=g(this,t,n,x(this));i.split(/\\s+/g).forEach(function(t){(e===E?!r.hasClass(t):e)?r.addClass(t):r.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e=\"scrollTop\"in this[0];return t===E?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e=\"scrollLeft\"in this[0];return t===E?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),r=Z.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(T(t).css(\"margin-top\"))||0,n.left-=parseFloat(T(t).css(\"margin-left\"))||0,r.top+=parseFloat(T(e[0]).css(\"border-top-width\"))||0,r.left+=parseFloat(T(e[0]).css(\"border-left-width\"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||L.body;t&&!Z.test(t.nodeName)&&\"static\"==T(t).css(\"position\");)t=t.offsetParent;return t})}},T.fn.detach=T.fn.remove,[\"width\",\"height\"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});T.fn[t]=function(i){var o,a=this[0];return i===E?n(a)?a[\"inner\"+e]:r(a)?a.documentElement[\"scroll\"+e]:(o=this.offset())&&o[t]:this.each(function(e){a=T(this),a.css(t,g(this,i,e,a[t]()))})}}),I.forEach(function(e,n){var r=n%2;T.fn[e]=function(){var e,i,o=T.map(arguments,function(n){var r=[];return e=t(n),\"array\"==e?(n.forEach(function(t){return t.nodeType!==E?r.push(t):T.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(Y.fragment(t)))}),r):\"object\"==e||null==n?n:Y.fragment(n)}),a=this.length>1;return o.length<1?this:this.each(function(t,e){i=r?e:e.parentNode,e=0==n?e.nextSibling:1==n?e.firstChild:2==n?e:null;var s=T.contains(L.documentElement,i);o.forEach(function(t){if(a)t=t.cloneNode(!0);else if(!i)return T(t).remove();i.insertBefore(t,e),s&&w(t,function(t){if(!(null==t.nodeName||\"SCRIPT\"!==t.nodeName.toUpperCase()||t.type&&\"text/javascript\"!==t.type||t.src)){var e=t.ownerDocument?t.ownerDocument.defaultView:window;e.eval.call(e,t.innerHTML)}})})})},T.fn[r?e+\"To\":\"insert\"+(n?\"Before\":\"After\")]=function(t){return T(t)[e](this),this}}),Y.Z.prototype=d.prototype=T.fn,Y.uniq=N,Y.deserializeValue=b,T.zepto=Y,T}();!function(t){function e(t){return t._zid||(t._zid=h++)}function n(t,n,o,a){if(n=r(n),n.ns)var s=i(n.ns);return(v[e(t)]||[]).filter(function(t){return t&&(!n.e||t.e==n.e)&&(!n.ns||s.test(t.ns))&&(!o||e(t.fn)===e(o))&&(!a||t.sel==a)})}function r(t){var e=(\"\"+t).split(\".\");return{e:e[0],ns:e.slice(1).sort().join(\" \")}}function i(t){return new RegExp(\"(?:^| )\"+t.replace(\" \",\" .* ?\")+\"(?: |$)\")}function o(t,e){return t.del&&!y&&t.e in x||!!e}function a(t){return b[t]||y&&x[t]||t}function s(n,i,s,u,l,h,p){var d=e(n),m=v[d]||(v[d]=[]);i.split(/\\s/).forEach(function(e){if(\"ready\"==e)return t(document).ready(s);var i=r(e);i.fn=s,i.sel=l,i.e in b&&(s=function(e){var n=e.relatedTarget;if(!n||n!==this&&!t.contains(this,n))return i.fn.apply(this,arguments)}),i.del=h;var d=h||s;i.proxy=function(t){if(t=c(t),!t.isImmediatePropagationStopped()){t.data=u;var e=d.apply(n,t._args==f?[t]:[t].concat(t._args));return e===!1&&(t.preventDefault(),t.stopPropagation()),e}},i.i=m.length,m.push(i),\"addEventListener\"in n&&n.addEventListener(a(i.e),i.proxy,o(i,p))})}function u(t,r,i,s,u){var c=e(t);(r||\"\").split(/\\s/).forEach(function(e){n(t,e,i,s).forEach(function(e){delete v[c][e.i],\"removeEventListener\"in t&&t.removeEventListener(a(e.e),e.proxy,o(e,u))})})}function c(e,n){return!n&&e.isDefaultPrevented||(n||(n=e),t.each(T,function(t,r){var i=n[t];e[t]=function(){return this[r]=w,i&&i.apply(n,arguments)},e[r]=E}),e.timeStamp||(e.timeStamp=Date.now()),(n.defaultPrevented!==f?n.defaultPrevented:\"returnValue\"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(e.isDefaultPrevented=w)),e}function l(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===f||(n[e]=t[e]);return c(n,t)}var f,h=1,p=Array.prototype.slice,d=t.isFunction,m=function(t){return\"string\"==typeof t},v={},g={},y=\"onfocusin\"in window,x={focus:\"focusin\",blur:\"focusout\"},b={mouseenter:\"mouseover\",mouseleave:\"mouseout\"};g.click=g.mousedown=g.mouseup=g.mousemove=\"MouseEvents\",t.event={add:s,remove:u},t.proxy=function(n,r){var i=2 in arguments&&p.call(arguments,2);if(d(n)){var o=function(){return n.apply(r,i?i.concat(p.call(arguments)):arguments)};return o._zid=e(n),o}if(m(r))return i?(i.unshift(n[r],n),t.proxy.apply(null,i)):t.proxy(n[r],n);throw new TypeError(\"expected function\")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var w=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,T={preventDefault:\"isDefaultPrevented\",stopImmediatePropagation:\"isImmediatePropagationStopped\",stopPropagation:\"isPropagationStopped\"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,n,r,i,o){var a,c,h=this;return e&&!m(e)?(t.each(e,function(t,e){h.on(t,n,r,e,o)}),h):(m(n)||d(i)||i===!1||(i=r,r=n,n=f),i!==f&&r!==!1||(i=r,r=f),i===!1&&(i=E),h.each(function(f,h){o&&(a=function(t){return u(h,t.type,i),i.apply(this,arguments)}),n&&(c=function(e){var r,o=t(e.target).closest(n,h).get(0);if(o&&o!==h)return r=t.extend(l(e),{currentTarget:o,liveFired:h}),(a||i).apply(o,[r].concat(p.call(arguments,1)))}),s(h,e,i,r,n,c||a)}))},t.fn.off=function(e,n,r){var i=this;return e&&!m(e)?(t.each(e,function(t,e){i.off(t,n,e)}),i):(m(n)||d(r)||r===!1||(r=n,n=f),r===!1&&(r=E),i.each(function(){u(this,e,r,n)}))},t.fn.trigger=function(e,n){return e=m(e)||t.isPlainObject(e)?t.Event(e):c(e),e._args=n,this.each(function(){e.type in x&&\"function\"==typeof this[e.type]?this[e.type]():\"dispatchEvent\"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,r){var i,o;return this.each(function(a,s){i=l(m(e)?t.Event(e):e),i._args=r,i.target=s,t.each(n(s,e.type||e),function(t,e){if(o=e.proxy(i),i.isImmediatePropagationStopped())return!1})}),o},\"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error\".split(\" \").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){m(t)||(e=t,t=e.type);var n=document.createEvent(g[t]||\"Events\"),r=!0;if(e)for(var i in e)\"bubbles\"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),c(n)}}(e),function(t){function e(e,n,r){var i=t.Event(n);return t(e).trigger(i,r),!i.isDefaultPrevented()}function n(t,n,r,i){if(t.global)return e(n||x,r,i)}function r(e){e.global&&0===t.active++&&n(e,null,\"ajaxStart\")}function i(e){e.global&&!--t.active&&n(e,null,\"ajaxStop\")}function o(t,e){var r=e.context;return e.beforeSend.call(r,t,e)!==!1&&n(e,r,\"ajaxBeforeSend\",[t,e])!==!1&&void n(e,r,\"ajaxSend\",[t,e])}function a(t,e,r,i){var o=r.context,a=\"success\";r.success.call(o,t,a,e),i&&i.resolveWith(o,[t,a,e]),n(r,o,\"ajaxSuccess\",[e,r,t]),u(a,e,r)}function s(t,e,r,i,o){var a=i.context;i.error.call(a,r,e,t),o&&o.rejectWith(a,[r,e,t]),n(i,a,\"ajaxError\",[r,i,t||e]),u(e,r,i)}function u(t,e,r){var o=r.context;r.complete.call(o,e,t),n(r,o,\"ajaxComplete\",[e,r]),i(r)}function c(t,e,n){if(n.dataFilter==l)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function l(){}function f(t){return t&&(t=t.split(\";\",2)[0]),t&&(t==T?\"html\":t==j?\"json\":w.test(t)?\"script\":E.test(t)&&\"xml\")||\"text\"}function h(t,e){return\"\"==e?t:(t+\"&\"+e).replace(/[&?]{1,2}/,\"?\")}function p(e){e.processData&&e.data&&\"string\"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&\"GET\"!=e.type.toUpperCase()&&\"jsonp\"!=e.dataType||(e.url=h(e.url,e.data),e.data=void 0)}function d(e,n,r,i){return t.isFunction(n)&&(i=r,r=n,n=void 0),t.isFunction(r)||(i=r,r=void 0),{url:e,data:n,success:r,dataType:i}}function m(e,n,r,i){var o,a=t.isArray(n),s=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),i&&(n=r?i:i+\"[\"+(s||\"object\"==o||\"array\"==o?n:\"\")+\"]\"),!i&&a?e.add(u.name,u.value):\"array\"==o||!r&&\"object\"==o?m(e,u,r,n):e.add(n,u)})}var v,g,y=+new Date,x=window.document,b=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,w=/^(?:text|application)\\/javascript/i,E=/^(?:text|application)\\/xml/i,j=\"application/json\",T=\"text/html\",S=/^\\s*$/,C=x.createElement(\"a\");C.href=window.location.href,t.active=0,t.ajaxJSONP=function(e,n){if(!(\"type\"in e))return t.ajax(e);var r,i,u=e.jsonpCallback,c=(t.isFunction(u)?u():u)||\"Zepto\"+y++,l=x.createElement(\"script\"),f=window[c],h=function(e){t(l).triggerHandler(\"error\",e||\"abort\")},p={abort:h};return n&&n.promise(p),t(l).on(\"load error\",function(o,u){clearTimeout(i),t(l).off().remove(),\"error\"!=o.type&&r?a(r[0],p,e,n):s(null,u||\"error\",p,e,n),window[c]=f,r&&t.isFunction(f)&&f(r[0]),f=r=void 0}),o(p,e)===!1?(h(\"abort\"),p):(window[c]=function(){r=arguments},l.src=e.url.replace(/\\?(.+)=\\?/,\"?$1=\"+c),x.head.appendChild(l),e.timeout>0&&(i=setTimeout(function(){h(\"timeout\")},e.timeout)),p)},t.ajaxSettings={type:\"GET\",beforeSend:l,success:l,error:l,complete:l,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:\"text/javascript, application/javascript, application/x-javascript\",json:j,xml:\"application/xml, text/xml\",html:T,text:\"text/plain\"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:l},t.ajax=function(e){var n,i,u=t.extend({},e||{}),d=t.Deferred&&t.Deferred();for(v in t.ajaxSettings)void 0===u[v]&&(u[v]=t.ajaxSettings[v]);r(u),u.crossDomain||(n=x.createElement(\"a\"),n.href=u.url,n.href=n.href,u.crossDomain=C.protocol+\"//\"+C.host!=n.protocol+\"//\"+n.host),u.url||(u.url=window.location.toString()),(i=u.url.indexOf(\"#\"))>-1&&(u.url=u.url.slice(0,i)),p(u);var m=u.dataType,y=/\\?.+=\\?/.test(u.url);if(y&&(m=\"jsonp\"),u.cache!==!1&&(e&&e.cache===!0||\"script\"!=m&&\"jsonp\"!=m)||(u.url=h(u.url,\"_=\"+Date.now())),\"jsonp\"==m)return y||(u.url=h(u.url,u.jsonp?u.jsonp+\"=?\":u.jsonp===!1?\"\":\"callback=?\")),t.ajaxJSONP(u,d);var b,w=u.accepts[m],E={},j=function(t,e){E[t.toLowerCase()]=[t,e]},T=/^([\\w-]+:)\\/\\//.test(u.url)?RegExp.$1:window.location.protocol,N=u.xhr(),O=N.setRequestHeader;if(d&&d.promise(N),u.crossDomain||j(\"X-Requested-With\",\"XMLHttpRequest\"),j(\"Accept\",w||\"*/*\"),(w=u.mimeType||w)&&(w.indexOf(\",\")>-1&&(w=w.split(\",\",2)[0]),N.overrideMimeType&&N.overrideMimeType(w)),(u.contentType||u.contentType!==!1&&u.data&&\"GET\"!=u.type.toUpperCase())&&j(\"Content-Type\",u.contentType||\"application/x-www-form-urlencoded\"),u.headers)for(g in u.headers)j(g,u.headers[g]);if(N.setRequestHeader=j,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=l,clearTimeout(b);var e,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&\"file:\"==T){if(m=m||f(u.mimeType||N.getResponseHeader(\"content-type\")),\"arraybuffer\"==N.responseType||\"blob\"==N.responseType)e=N.response;else{e=N.responseText;try{e=c(e,m,u),\"script\"==m?(0,eval)(e):\"xml\"==m?e=N.responseXML:\"json\"==m&&(e=S.test(e)?null:t.parseJSON(e))}catch(r){n=r}if(n)return s(n,\"parsererror\",N,u,d)}a(e,N,u,d)}else s(N.statusText||null,N.status?\"error\":\"abort\",N,u,d)}},o(N,u)===!1)return N.abort(),s(null,\"abort\",N,u,d),N;var P=!(\"async\"in u)||u.async;if(N.open(u.type,u.url,P,u.username,u.password),u.xhrFields)for(g in u.xhrFields)N[g]=u.xhrFields[g];for(g in E)O.apply(N,E[g]);return u.timeout>0&&(b=setTimeout(function(){N.onreadystatechange=l,N.abort(),s(null,\"timeout\",N,u,d)},u.timeout)),N.send(u.data?u.data:null),N},t.get=function(){return t.ajax(d.apply(null,arguments))},t.post=function(){var e=d.apply(null,arguments);return e.type=\"POST\",t.ajax(e)},t.getJSON=function(){var e=d.apply(null,arguments);return e.dataType=\"json\",t.ajax(e)},t.fn.load=function(e,n,r){if(!this.length)return this;var i,o=this,a=e.split(/\\s/),s=d(e,n,r),u=s.success;return a.length>1&&(s.url=a[0],i=a[1]),s.success=function(e){o.html(i?t(\"<div>\").html(e.replace(b,\"\")).find(i):e),u&&u.apply(o,arguments)},t.ajax(s),this};var N=encodeURIComponent;t.param=function(e,n){var r=[];return r.add=function(e,n){t.isFunction(n)&&(n=n()),null==n&&(n=\"\"),this.push(N(e)+\"=\"+N(n))},m(r,e,n),r.join(\"&\").replace(/%20/g,\"+\")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&\"fieldset\"!=o.nodeName.toLowerCase()&&!o.disabled&&\"submit\"!=n&&\"reset\"!=n&&\"button\"!=n&&\"file\"!=n&&(\"radio\"!=n&&\"checkbox\"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+\"=\"+encodeURIComponent(e.value))}),t.join(\"&\")},t.fn.submit=function(e){if(0 in arguments)this.bind(\"submit\",e);else if(this.length){var n=t.Event(\"submit\");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(t){var e=getComputedStyle;window.getComputedStyle=function(t,n){try{return e(t,n)}catch(r){return null}}}}(),t(\"zepto\",e)});layui.define([\"layer-mobile\",\"zepto\"],function(e){\"use strict\";var t=layui.zepto,a=layui[\"layer-mobile\"],i=(layui.device(),\"layui-upload-enter\"),n=\"layui-upload-iframe\",r={icon:2,shift:6},o={file:\"文件\",video:\"视频\",audio:\"音频\"};a.msg=function(e){return a.open({content:e||\"\",skin:\"msg\",time:2})};var s=function(e){this.options=e};s.prototype.init=function(){var e=this,a=e.options,r=t(\"body\"),s=t(a.elem||\".layui-upload-file\"),u=t('<iframe id=\"'+n+'\" class=\"'+n+'\" name=\"'+n+'\"></iframe>');return t(\"#\"+n)[0]||r.append(u),s.each(function(r,s){s=t(s);var u='<form target=\"'+n+'\" method=\"'+(a.method||\"post\")+'\" key=\"set-mine\" enctype=\"multipart/form-data\" action=\"'+(a.url||\"\")+'\"></form>',l=s.attr(\"lay-type\")||a.type;a.unwrap||(u='<div class=\"layui-box layui-upload-button\">'+u+'<span class=\"layui-upload-icon\"><i class=\"layui-icon\">&#xe608;</i>'+(s.attr(\"lay-title\")||a.title||\"上传\"+(o[l]||\"图片\"))+\"</span></div>\"),u=t(u),a.unwrap||u.on(\"dragover\",function(e){e.preventDefault(),t(this).addClass(i)}).on(\"dragleave\",function(){t(this).removeClass(i)}).on(\"drop\",function(){t(this).removeClass(i)}),s.parent(\"form\").attr(\"target\")===n&&(a.unwrap?s.unwrap():(s.parent().next().remove(),s.unwrap().unwrap())),s.wrap(u),s.off(\"change\").on(\"change\",function(){e.action(this,l)})})},s.prototype.action=function(e,i){var o=this,s=o.options,u=e.value,l=t(e),p=l.attr(\"lay-ext\")||s.ext||\"\";if(u){switch(i){case\"file\":if(p&&!RegExp(\"\\\\w\\\\.(\"+p+\")$\",\"i\").test(escape(u)))return a.msg(\"不支持该文件格式\",r),e.value=\"\";break;case\"video\":if(!RegExp(\"\\\\w\\\\.(\"+(p||\"avi|mp4|wma|rmvb|rm|flash|3gp|flv\")+\")$\",\"i\").test(escape(u)))return a.msg(\"不支持该视频格式\",r),e.value=\"\";break;case\"audio\":if(!RegExp(\"\\\\w\\\\.(\"+(p||\"mp3|wav|mid\")+\")$\",\"i\").test(escape(u)))return a.msg(\"不支持该音频格式\",r),e.value=\"\";break;default:if(!RegExp(\"\\\\w\\\\.(\"+(p||\"jpg|png|gif|bmp|jpeg\")+\")$\",\"i\").test(escape(u)))return a.msg(\"不支持该图片格式\",r),e.value=\"\"}s.before&&s.before(e),l.parent().submit();var c=t(\"#\"+n),f=setInterval(function(){var t;try{t=c.contents().find(\"body\").text()}catch(i){a.msg(\"上传接口存在跨域\",r),clearInterval(f)}if(t){clearInterval(f),c.contents().find(\"body\").html(\"\");try{t=JSON.parse(t)}catch(i){return t={},a.msg(\"请对上传接口返回JSON字符\",r)}\"function\"==typeof s.success&&s.success(t,e)}},30);e.value=\"\"}},e(\"upload-mobile\",function(e){var t=new s(e=e||{});t.init()})});layui.define(function(i){i(\"layim-mobile\",layui.v)});layui[\"layui.mobile\"]||layui.config({base:layui.cache.dir+\"lay/modules/mobile/\"}).extend({\"layer-mobile\":\"layer-mobile\",zepto:\"zepto\",\"upload-mobile\":\"upload-mobile\",\"layim-mobile\":\"layim-mobile\"}),layui.define([\"layer-mobile\",\"zepto\",\"layim-mobile\"],function(l){l(\"mobile\",{layer:layui[\"layer-mobile\"],layim:layui[\"layim-mobile\"]})});"
  },
  {
    "path": "lib/layui/lay/modules/rate.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n=\"rate\",t=\"layui-rate\",o=\"layui-icon-rate\",s=\"layui-icon-rate-solid\",u=\"layui-icon-rate-half\",r=\"layui-icon-rate-solid layui-icon-rate-half\",c=\"layui-icon-rate-solid layui-icon-rate\",f=\"layui-icon-rate layui-icon-rate-half\",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:\"\"},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style=\"color: '+i.theme+';\"':\"\";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='<ul class=\"layui-rate\" '+(i.readonly?\"readonly\":\"\")+\">\",u=1;u<=i.length;u++){var r='<li class=\"layui-inline\"><i class=\"layui-icon '+(u>Math.floor(i.value)?o:s)+'\" '+l+\"></i></li>\";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'<li><i class=\"layui-icon layui-icon-rate-half\" '+l+\"></i></li>\":n+=r}n+=\"</ul>\"+(i.text?'<span class=\"layui-inline\">'+i.value+\"星\":\"\")+\"</span>\";var c=i.elem,f=c.next(\".\"+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next(\"span\"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass(\"layui-inline\"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find(\"i\").width();l.children(\"li\").each(function(e){var t=e+1,v=a(this);v.on(\"click\",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next(\"span\").text(i.value+\"星\"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on(\"mousemove\",function(e){if(l.find(\"i\").each(function(){a(this).addClass(o).removeClass(r)}),l.find(\"i:lt(\"+t+\")\").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children(\"i\").addClass(u).removeClass(s)}}),v.on(\"mouseleave\",function(){l.find(\"i\").each(function(){a(this).addClass(o).removeClass(r)}),l.find(\"i:lt(\"+Math.floor(i.value)+\")\").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children(\"li:eq(\"+Math.floor(i.value)+\")\").children(\"i\").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});"
  },
  {
    "path": "lib/layui/lay/modules/slider.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(i,t){return e.slide(\"set\",i,t||0)},config:i}},n=\"slider\",l=\"layui-disabled\",s=\"layui-slider\",r=\"layui-slider-bar\",o=\"layui-slider-wrap\",u=\"layui-slider-wrap-btn\",d=\"layui-slider-tips\",v=\"layui-slider-input\",c=\"layui-slider-input-txt\",m=\"layui-slider-input-btn\",p=\"layui-slider-hover\",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:\"default\",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:\"#009688\"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.max<t.min&&(t.max=t.min+t.step),t.range){t.value=\"object\"==typeof t.value?t.value:[t.min,t.value];var a=Math.min(t.value[0],t.value[1]),n=Math.max(t.value[0],t.value[1]);t.value[0]=a>t.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),m=v-r+\"%\";r+=\"%\",v+=\"%\"}else{\"object\"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.value<t.min&&(t.value=t.min),t.value>t.max&&(t.value=t.max);var m=Math.floor((t.value-t.min)/(t.max-t.min)*100)+\"%\"}var p=t.disabled?\"#c2c2c2\":t.theme,f='<div class=\"layui-slider '+(\"vertical\"===t.type?\"layui-slider-vertical\":\"\")+'\">'+(t.tips?'<div class=\"layui-slider-tips\"></div>':\"\")+'<div class=\"layui-slider-bar\" style=\"background:'+p+\"; \"+(\"vertical\"===t.type?\"height\":\"width\")+\":\"+m+\";\"+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+(r||0)+';\"></div><div class=\"layui-slider-wrap\" style=\"'+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+(r||m)+';\"><div class=\"layui-slider-wrap-btn\" style=\"border: 2px solid '+p+';\"></div></div>'+(t.range?'<div class=\"layui-slider-wrap\" style=\"'+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+v+';\"><div class=\"layui-slider-wrap-btn\" style=\"border: 2px solid '+p+';\"></div></div>':\"\")+\"</div>\",h=i(t.elem),y=h.next(\".\"+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find(\".\"+o).eq(0).data(\"value\",t.value[0]),e.elemTemp.find(\".\"+o).eq(1).data(\"value\",t.value[1])):e.elemTemp.find(\".\"+o).data(\"value\",t.value),h.html(e.elemTemp),\"vertical\"===t.type&&e.elemTemp.height(t.height+\"px\"),t.showstep){for(var g=(t.max-t.min)/t.step,b=\"\",x=1;x<g+1;x++){var T=100*x/g;T<100&&(b+='<div class=\"layui-slider-step\" style=\"'+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+T+'%\"></div>')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('<div class=\"layui-slider-input layui-input\"><div class=\"layui-slider-input-txt\"><input type=\"text\" class=\"layui-input\"></div><div class=\"layui-slider-input-btn\"><i class=\"layui-icon layui-icon-up\"></i><i class=\"layui-icon layui-icon-down\"></i></div></div>');h.css(\"position\",\"relative\"),h.append(w),h.find(\".\"+c).children(\"input\").val(t.value),\"vertical\"===t.type?w.css({left:0,top:-48}):e.elemTemp.css(\"margin-right\",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find(\".\"+u).addClass(l)):e.slide(),e.elemTemp.find(\".\"+u).on(\"mouseover\",function(){var a=\"vertical\"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find(\".\"+o),l=\"vertical\"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data(\"value\"),u=t.setTips?t.setTips(r):r;e.elemTemp.find(\".\"+d).html(u),\"vertical\"===t.type?e.elemTemp.find(\".\"+d).css({bottom:s+\"%\",\"margin-bottom\":\"20px\",display:\"inline-block\"}):e.elemTemp.find(\".\"+d).css({left:s+\"%\",display:\"inline-block\"})}).on(\"mouseout\",function(){e.elemTemp.find(\".\"+d).css(\"display\",\"none\")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return\"vertical\"===l.type?l.height:s[0].offsetWidth},h=s.find(\".\"+o),y=s.next(\".\"+v),g=y.children(\".\"+c).children(\"input\").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css(\"vertical\"===l.type?\"bottom\":\"left\",e+\"%\");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;\"vertical\"===l.type?(s.find(\".\"+d).css({bottom:e+\"%\",\"margin-bottom\":\"20px\"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find(\".\"+d).css(\"left\",e+\"%\"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);\"vertical\"===l.type?s.find(\".\"+r).css({height:o+\"%\",bottom:n+\"%\"}):s.find(\".\"+r).css({width:o+\"%\",left:n+\"%\"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children(\".\"+c).children(\"input\").val(g),h.eq(i).data(\"value\",u),u=l.setTips?l.setTips(u):u,s.find(\".\"+d).html(u),l.range){var v=[h.eq(0).data(\"value\"),h.eq(1).data(\"value\")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['<div class=\"layui-auxiliar-moving\" id=\"LAY-slider-moving\"></div'].join(\"\")),M=function(e,t){var a=function(){t&&t(),w.remove()};i(\"#LAY-slider-moving\")[0]||i(\"body\").append(w),w.on(\"mousemove\",e),w.on(\"mouseup\",a).on(\"mouseleave\",a)};if(\"set\"===e)return x(t,a);s.find(\".\"+u).each(function(e){var t=i(this);t.on(\"mousedown\",function(i){i=i||window.event;var a=t.parent()[0].offsetLeft,n=i.clientX;\"vertical\"===l.type&&(a=f()-t.parent()[0].offsetTop-h.height(),n=i.clientY);var r=function(i){i=i||window.event;var r=a+(\"vertical\"===l.type?n-i.clientY:i.clientX-n);r<0&&(r=0),r>f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(p),s.find(\".\"+d).show(),i.preventDefault()},o=function(){t.removeClass(p),s.find(\".\"+d).hide()};M(r,o)})}),s.on(\"click\",function(e){var t=i(\".\"+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n=\"vertical\"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?\"vertical\"===l.type?Math.abs(n-parseInt(i(h[0]).css(\"bottom\")))>Math.abs(n-parseInt(i(h[1]).css(\"bottom\")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.hover(function(){var e=i(this);e.children(\".\"+m).fadeIn(\"fast\")},function(){var e=i(this);e.children(\".\"+m).fadeOut(\"fast\")}),y.children(\".\"+m).children(\"i\").each(function(e){i(this).on(\"click\",function(){g=1==e?g-l.step<l.min?l.min:Number(g)-l.step:Number(g)+l.step>l.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=e<l.min?l.min:e,e=e>l.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children(\".\"+c).children(\"input\").on(\"keydown\",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on(\"change\",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)});"
  },
  {
    "path": "lib/layui/lay/modules/table.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define([\"laytpl\",\"laypage\",\"layer\",\"form\",\"util\"],function(e){\"use strict\";var t=layui.$,i=layui.laytpl,a=layui.laypage,l=layui.layer,n=layui.form,o=(layui.util,layui.hint()),r=layui.device(),d={config:{checkName:\"LAY_CHECKED\",indexName:\"LAY_TABLE_INDEX\"},cache:{},index:layui.table?layui.table.index+1e4:0,set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,y,e,t)}},c=function(){var e=this,t=e.config,i=t.id||t.index;return i&&(c.that[i]=e,c.config[i]=t),{config:t,reload:function(t){e.reload.call(e,t)},setColsWidth:function(){e.setColsWidth.call(e)},resize:function(){e.resize.call(e)}}},s=function(e){var t=c.config[e];return t||o.error(\"The ID option was not found in the table instance\"),t||null},u=function(e,a,l,n){var o=e.templet?function(){return\"function\"==typeof e.templet?e.templet(l):i(t(e.templet).html()||String(a)).render(l)}():a;return n?t(\"<div>\"+o+\"</div>\").text():o},y=\"table\",h=\".layui-table\",f=\"layui-hide\",p=\"layui-none\",v=\"layui-table-view\",m=\".layui-table-tool\",g=\".layui-table-box\",b=\".layui-table-init\",x=\".layui-table-header\",k=\".layui-table-body\",C=\".layui-table-main\",w=\".layui-table-fixed\",T=\".layui-table-fixed-l\",A=\".layui-table-fixed-r\",L=\".layui-table-total\",N=\".layui-table-page\",S=\".layui-table-sort\",W=\"layui-table-edit\",_=\"layui-table-hover\",E=function(e){var t='{{#if(item2.colspan){}} colspan=\"{{item2.colspan}}\"{{#} if(item2.rowspan){}} rowspan=\"{{item2.rowspan}}\"{{#}}}';return e=e||{},['<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"layui-table\" ','{{# if(d.data.skin){ }}lay-skin=\"{{d.data.skin}}\"{{# } }} {{# if(d.data.size){ }}lay-size=\"{{d.data.size}}\"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>',\"<thead>\",\"{{# layui.each(d.data.cols, function(i1, item1){ }}\",\"<tr>\",\"{{# layui.each(item1, function(i2, item2){ }}\",'{{# if(item2.fixed && item2.fixed !== \"right\"){ left = true; } }}','{{# if(item2.fixed === \"right\"){ right = true; } }}',function(){return e.fixed&&\"right\"!==e.fixed?'{{# if(item2.fixed && item2.fixed !== \"right\"){ }}':\"right\"===e.fixed?'{{# if(item2.fixed === \"right\"){ }}':\"\"}(),\"{{# var isSort = !(item2.colGroup) && item2.sort; }}\",'<th data-field=\"{{ item2.field||i2 }}\" data-key=\"{{d.index}}-{{i1}}-{{i2}}\" {{# if( item2.parentKey){ }}data-parentkey=\"{{ item2.parentKey }}\"{{# } }} {{# if(item2.minWidth){ }}data-minwidth=\"{{item2.minWidth}}\"{{# } }} '+t+' {{# if(item2.unresize || item2.colGroup){ }}data-unresize=\"true\"{{# } }} class=\"{{# if(item2.hide){ }}layui-hide{{# } }}{{# if(isSort){ }} layui-unselect{{# } }}{{# if(!item2.field){ }} layui-table-col-special{{# } }}\">','<div class=\"layui-table-cell laytable-cell-',\"{{# if(item2.colGroup){ }}\",\"group\",\"{{# } else { }}\",\"{{d.index}}-{{i1}}-{{i2}}\",'{{# if(item2.type !== \"normal\"){ }}',\" laytable-cell-{{ item2.type }}\",\"{{# } }}\",\"{{# } }}\",'\" {{#if(item2.align){}}align=\"{{item2.align}}\"{{#}}}>','{{# if(item2.type === \"checkbox\"){ }}','<input type=\"checkbox\" name=\"layTableCheckbox\" lay-skin=\"primary\" lay-filter=\"layTableAllChoose\" {{# if(item2[d.data.checkName]){ }}checked{{# }; }}>',\"{{# } else { }}\",'<span>{{item2.title||\"\"}}</span>',\"{{# if(isSort){ }}\",'<span class=\"layui-table-sort layui-inline\"><i class=\"layui-edge layui-table-sort-asc\" title=\"升序\"></i><i class=\"layui-edge layui-table-sort-desc\" title=\"降序\"></i></span>',\"{{# } }}\",\"{{# } }}\",\"</div>\",\"</th>\",e.fixed?\"{{# }; }}\":\"\",\"{{# }); }}\",\"</tr>\",\"{{# }); }}\",\"</thead>\",\"</table>\"].join(\"\")},z=['<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"layui-table\" ','{{# if(d.data.skin){ }}lay-skin=\"{{d.data.skin}}\"{{# } }} {{# if(d.data.size){ }}lay-size=\"{{d.data.size}}\"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>',\"<tbody></tbody>\",\"</table>\"].join(\"\"),H=['<div class=\"layui-form layui-border-box {{d.VIEW_CLASS}}\" lay-filter=\"LAY-table-{{d.index}}\" lay-id=\"{{ d.data.id }}\" style=\"{{# if(d.data.width){ }}width:{{d.data.width}}px;{{# } }} {{# if(d.data.height){ }}height:{{d.data.height}}px;{{# } }}\">',\"{{# if(d.data.toolbar){ }}\",'<div class=\"layui-table-tool\">','<div class=\"layui-table-tool-temp\"></div>','<div class=\"layui-table-tool-self\"></div>',\"</div>\",\"{{# } }}\",'<div class=\"layui-table-box\">',\"{{# if(d.data.loading){ }}\",'<div class=\"layui-table-init\" style=\"background-color: #fff;\">','<i class=\"layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop\"></i>',\"</div>\",\"{{# } }}\",\"{{# var left, right; }}\",'<div class=\"layui-table-header\">',E(),\"</div>\",'<div class=\"layui-table-body layui-table-main\">',z,\"</div>\",\"{{# if(left){ }}\",'<div class=\"layui-table-fixed layui-table-fixed-l\">','<div class=\"layui-table-header\">',E({fixed:!0}),\"</div>\",'<div class=\"layui-table-body\">',z,\"</div>\",\"</div>\",\"{{# }; }}\",\"{{# if(right){ }}\",'<div class=\"layui-table-fixed layui-table-fixed-r\">','<div class=\"layui-table-header\">',E({fixed:\"right\"}),'<div class=\"layui-table-mend\"></div>',\"</div>\",'<div class=\"layui-table-body\">',z,\"</div>\",\"</div>\",\"{{# }; }}\",\"</div>\",\"{{# if(d.data.totalRow){ }}\",'<div class=\"layui-table-total\">','<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"layui-table\" ','{{# if(d.data.skin){ }}lay-skin=\"{{d.data.skin}}\"{{# } }} {{# if(d.data.size){ }}lay-size=\"{{d.data.size}}\"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>','<tbody><tr><td><div class=\"layui-table-cell\" style=\"visibility: hidden;\">Total</div></td></tr></tbody>',\"</table>\",\"</div>\",\"{{# } }}\",\"{{# if(d.data.page){ }}\",'<div class=\"layui-table-page\">','<div id=\"layui-table-page{{d.index}}\"></div>',\"</div>\",\"{{# } }}\",\"<style>\",\"{{# layui.each(d.data.cols, function(i1, item1){\",\"layui.each(item1, function(i2, item2){ }}\",\".laytable-cell-{{d.index}}-{{i1}}-{{i2}}{ \",\"{{# if(item2.width){ }}\",\"width: {{item2.width}}px;\",\"{{# } }}\",\" }\",\"{{# });\",\"}); }}\",\"</style>\",\"</div>\"].join(\"\"),R=t(window),F=t(document),I=function(e){var i=this;i.index=++d.index,i.config=t.extend({},i.config,d.config,e),i.render()};I.prototype.config={limit:10,loading:!0,cellMinWidth:60,defaultToolbar:[\"filter\",\"exports\",\"print\"],autoSort:!0,text:{none:\"无数据\"}},I.prototype.render=function(){var e=this,a=e.config;if(a.elem=t(a.elem),a.where=a.where||{},a.id=a.id||a.elem.attr(\"id\")||e.index,a.request=t.extend({pageName:\"page\",limitName:\"limit\"},a.request),a.response=t.extend({statusName:\"code\",statusCode:0,msgName:\"msg\",dataName:\"data\",countName:\"count\"},a.response),\"object\"==typeof a.page&&(a.limit=a.page.limit||a.limit,a.limits=a.page.limits||a.limits,e.page=a.page.curr=a.page.curr||1,delete a.page.elem,delete a.page.jump),!a.elem[0])return e;a.height&&/^full-\\d+$/.test(a.height)&&(e.fullHeightGap=a.height.split(\"-\")[1],a.height=R.height()-e.fullHeightGap),e.setInit();var l=a.elem,n=l.next(\".\"+v),o=e.elem=t(i(H).render({VIEW_CLASS:v,data:a,index:e.index}));if(a.index=e.index,e.key=a.id||a.index,n[0]&&n.remove(),l.after(o),e.layTool=o.find(m),e.layBox=o.find(g),e.layHeader=o.find(x),e.layMain=o.find(C),e.layBody=o.find(k),e.layFixed=o.find(w),e.layFixLeft=o.find(T),e.layFixRight=o.find(A),e.layTotal=o.find(L),e.layPage=o.find(N),e.renderToolbar(),e.fullSize(),a.cols.length>1){var r=e.layFixed.find(x).find(\"th\");r.height(e.layHeader.height()-1-parseFloat(r.css(\"padding-top\"))-parseFloat(r.css(\"padding-bottom\")))}e.pullData(e.page),e.events()},I.prototype.initOpts=function(e){var t=this,i=(t.config,{checkbox:48,radio:48,space:15,numbers:40});e.checkbox&&(e.type=\"checkbox\"),e.space&&(e.type=\"space\"),e.type||(e.type=\"normal\"),\"normal\"!==e.type&&(e.unresize=!0,e.width=e.width||i[e.type])},I.prototype.setInit=function(e){var t=this,i=t.config;return i.clientWidth=i.width||function(){var e=function(t){var a,l;t=t||i.elem.parent(),a=t.width();try{l=\"none\"===t.css(\"display\")}catch(n){}return!t[0]||a&&!l?a:e(t.parent())};return e()}(),\"width\"===e?i.clientWidth:void layui.each(i.cols,function(e,a){layui.each(a,function(l,n){if(!n)return void a.splice(l,1);if(n.key=e+\"-\"+l,n.hide=n.hide||!1,n.colGroup||n.colspan>1){var o=0;layui.each(i.cols[e+1],function(t,i){i.HAS_PARENT||o>1&&o==n.colspan||(i.HAS_PARENT=!0,i.parentKey=e+\"-\"+l,o+=parseInt(i.colspan>1?i.colspan:1))}),n.colGroup=!0}t.initOpts(n)})})},I.prototype.renderToolbar=function(){var e=this,a=e.config,l=['<div class=\"layui-inline\" lay-event=\"add\"><i class=\"layui-icon layui-icon-add-1\"></i></div>','<div class=\"layui-inline\" lay-event=\"update\"><i class=\"layui-icon layui-icon-edit\"></i></div>','<div class=\"layui-inline\" lay-event=\"delete\"><i class=\"layui-icon layui-icon-delete\"></i></div>'].join(\"\"),n=e.layTool.find(\".layui-table-tool-temp\");if(\"default\"===a.toolbar)n.html(l);else if(\"string\"==typeof a.toolbar){var o=t(a.toolbar).html()||\"\";o&&n.html(i(o).render(a))}var r={filter:{title:\"筛选列\",layEvent:\"LAYTABLE_COLS\",icon:\"layui-icon-cols\"},exports:{title:\"导出\",layEvent:\"LAYTABLE_EXPORT\",icon:\"layui-icon-export\"},print:{title:\"打印\",layEvent:\"LAYTABLE_PRINT\",icon:\"layui-icon-print\"}},d=[];\"object\"==typeof a.defaultToolbar&&layui.each(a.defaultToolbar,function(e,t){var i=r[t];i&&d.push('<div class=\"layui-inline\" title=\"'+i.title+'\" lay-event=\"'+i.layEvent+'\"><i class=\"layui-icon '+i.icon+'\"></i></div>')}),e.layTool.find(\".layui-table-tool-self\").html(d.join(\"\"))},I.prototype.setParentCol=function(e,t){var i=this,a=i.config,l=i.layHeader.find('th[data-key=\"'+a.index+\"-\"+t+'\"]'),n=parseInt(l.attr(\"colspan\"))||0;if(l[0]){var o=t.split(\"-\"),r=a.cols[o[0]][o[1]];e?n--:n++,l.attr(\"colspan\",n),l[n<1?\"addClass\":\"removeClass\"](f),r.colspan=n,r.hide=n<1;var d=l.data(\"parentkey\");d&&i.setParentCol(e,d)}},I.prototype.setColsPatch=function(){var e=this,t=e.config;layui.each(t.cols,function(t,i){layui.each(i,function(t,i){i.hide&&e.setParentCol(i.hide,i.parentKey)})})},I.prototype.setColsWidth=function(){var e=this,t=e.config,i=0,a=0,l=0,n=0,o=e.setInit(\"width\");e.eachCols(function(e,t){t.hide||i++}),o=o-function(){return\"line\"===t.skin||\"nob\"===t.skin?2:i+1}()-e.getScrollWidth(e.layMain[0])-1;var r=function(e){layui.each(t.cols,function(i,r){layui.each(r,function(i,d){var c=0,s=d.minWidth||t.cellMinWidth;return d?void(d.colGroup||d.hide||(e?l&&l<s&&(a--,c=s):(c=d.width||0,/\\d+%$/.test(c)?(c=Math.floor(parseFloat(c)/100*o),c<s&&(c=s)):c||(d.width=c=0,a++)),d.hide&&(c=0),n+=c)):void r.splice(i,1)})}),o>n&&a&&(l=(o-n)/a)};r(),r(!0),e.autoColNums=a,e.eachCols(function(i,a){var n=a.minWidth||t.cellMinWidth;a.colGroup||a.hide||(0===a.width?e.getCssRule(t.index+\"-\"+a.key,function(e){e.style.width=Math.floor(l>=n?l:n)+\"px\"}):/\\d+%$/.test(a.width)&&e.getCssRule(t.index+\"-\"+a.key,function(e){e.style.width=Math.floor(parseFloat(a.width)/100*o)+\"px\"}))});var d=e.layMain.width()-e.getScrollWidth(e.layMain[0])-e.layMain.children(\"table\").outerWidth();if(e.autoColNums&&d>=-i&&d<=i){var c=function(t){var i;return t=t||e.layHeader.eq(0).find(\"thead th:last-child\"),i=t.data(\"field\"),!i&&t.prev()[0]?c(t.prev()):t},s=c(),u=s.data(\"key\");e.getCssRule(u,function(t){var i=t.style.width||s.outerWidth();t.style.width=parseFloat(i)+d+\"px\",e.layMain.height()-e.layMain.prop(\"clientHeight\")>0&&(t.style.width=parseFloat(t.style.width)-1+\"px\")})}e.loading(!0)},I.prototype.resize=function(){var e=this;e.fullSize(),e.setColsWidth(),e.scrollPatch()},I.prototype.reload=function(e){var i=this;e=e||{},delete i.haveInit,e.data&&e.data.constructor===Array&&delete i.config.data,i.config=t.extend(!0,{},i.config,e),i.render()},I.prototype.errorView=function(e){var i=this,a=i.layMain.find(\".\"+p),l=t('<div class=\"'+p+'\">'+(e||\"Error\")+\"</div>\");a[0]&&(i.layNone.remove(),a.remove()),i.layFixed.addClass(f),i.layMain.find(\"tbody\").html(\"\"),i.layMain.append(i.layNone=l),d.cache[i.key]=[]},I.prototype.page=1,I.prototype.pullData=function(e){var i=this,a=i.config,l=a.request,n=a.response,o=function(){\"object\"==typeof a.initSort&&i.sort(a.initSort.field,a.initSort.type)};if(i.startTime=(new Date).getTime(),a.url){var r={};r[l.pageName]=e,r[l.limitName]=a.limit;var d=t.extend(r,a.where);a.contentType&&0==a.contentType.indexOf(\"application/json\")&&(d=JSON.stringify(d)),i.loading(),t.ajax({type:a.method||\"get\",url:a.url,contentType:a.contentType,data:d,dataType:\"json\",headers:a.headers||{},success:function(t){\"function\"==typeof a.parseData&&(t=a.parseData(t)||t),t[n.statusName]!=n.statusCode?(i.renderForm(),i.errorView(t[n.msgName]||'返回的数据不符合规范，正确的成功状态码应为：\"'+n.statusName+'\": '+n.statusCode)):(i.renderData(t,e,t[n.countName]),o(),a.time=(new Date).getTime()-i.startTime+\" ms\"),i.setColsWidth(),\"function\"==typeof a.done&&a.done(t,e,t[n.countName])},error:function(e,t){i.errorView(\"数据接口请求异常：\"+t),i.renderForm(),i.setColsWidth()}})}else if(a.data&&a.data.constructor===Array){var c={},s=e*a.limit-a.limit;c[n.dataName]=a.data.concat().splice(s,a.limit),c[n.countName]=a.data.length,i.renderData(c,e,c[n.countName]),o(),i.setColsWidth(),\"function\"==typeof a.done&&a.done(c,e,c[n.countName])}},I.prototype.eachCols=function(e){var t=this;return d.eachCols(null,e,t.config.cols),t},I.prototype.renderData=function(e,n,o,r){var c=this,s=c.config,y=e[s.response.dataName]||[],h=[],v=[],m=[],g=function(){var e;return!r&&c.sortKey?c.sort(c.sortKey.field,c.sortKey.sort,!0):(layui.each(y,function(a,l){var o=[],y=[],p=[],g=a+s.limit*(n-1)+1;0!==l.length&&(r||(l[d.config.indexName]=a),c.eachCols(function(n,r){var c=r.field||n,h=s.index+\"-\"+r.key,v=l[c];if(void 0!==v&&null!==v||(v=\"\"),!r.colGroup){var m=['<td data-field=\"'+c+'\" data-key=\"'+h+'\" '+function(){var e=[];return r.edit&&e.push('data-edit=\"'+r.edit+'\"'),r.align&&e.push('align=\"'+r.align+'\"'),r.templet&&e.push('data-content=\"'+v+'\"'),r.toolbar&&e.push('data-off=\"true\"'),r.event&&e.push('lay-event=\"'+r.event+'\"'),r.style&&e.push('style=\"'+r.style+'\"'),r.minWidth&&e.push('data-minwidth=\"'+r.minWidth+'\"'),e.join(\" \")}()+' class=\"'+function(){var e=[];return r.hide&&e.push(f),r.field||e.push(\"layui-table-col-special\"),e.join(\" \")}()+'\">','<div class=\"layui-table-cell laytable-cell-'+function(){return\"normal\"===r.type?h:h+\" laytable-cell-\"+r.type}()+'\">'+function(){var n=t.extend(!0,{LAY_INDEX:g},l),o=d.config.checkName;switch(r.type){case\"checkbox\":return'<input type=\"checkbox\" name=\"layTableCheckbox\" lay-skin=\"primary\" '+function(){return r[o]?(l[o]=r[o],r[o]?\"checked\":\"\"):n[o]?\"checked\":\"\"}()+\">\";case\"radio\":return n[o]&&(e=a),'<input type=\"radio\" name=\"layTableRadio_'+s.index+'\" '+(n[o]?\"checked\":\"\")+' lay-type=\"layTableRadio\">';case\"numbers\":return g}return r.toolbar?i(t(r.toolbar).html()||\"\").render(n):u(r,v,n)}(),\"</div></td>\"].join(\"\");o.push(m),r.fixed&&\"right\"!==r.fixed&&y.push(m),\"right\"===r.fixed&&p.push(m)}}),h.push('<tr data-index=\"'+a+'\">'+o.join(\"\")+\"</tr>\"),v.push('<tr data-index=\"'+a+'\">'+y.join(\"\")+\"</tr>\"),m.push('<tr data-index=\"'+a+'\">'+p.join(\"\")+\"</tr>\"))}),c.layBody.scrollTop(0),c.layMain.find(\".\"+p).remove(),c.layMain.find(\"tbody\").html(h.join(\"\")),c.layFixLeft.find(\"tbody\").html(v.join(\"\")),c.layFixRight.find(\"tbody\").html(m.join(\"\")),c.renderForm(),\"number\"==typeof e&&c.setThisRowChecked(e),c.syncCheckAll(),c.haveInit?c.scrollPatch():setTimeout(function(){c.scrollPatch()},50),c.haveInit=!0,l.close(c.tipsIndex),s.HAS_SET_COLS_PATCH||c.setColsPatch(),void(s.HAS_SET_COLS_PATCH=!0))};return d.cache[c.key]=y,c.layPage[0==o||0===y.length&&1==n?\"addClass\":\"removeClass\"](f),r?g():0===y.length?(c.renderForm(),c.errorView(s.text.none)):(c.layFixed.removeClass(f),g(),c.renderTotal(y),void(s.page&&(s.page=t.extend({elem:\"layui-table-page\"+s.index,count:o,limit:s.limit,limits:s.limits||[10,20,30,40,50,60,70,80,90],groups:3,layout:[\"prev\",\"page\",\"next\",\"skip\",\"count\",\"limit\"],prev:'<i class=\"layui-icon\">&#xe603;</i>',next:'<i class=\"layui-icon\">&#xe602;</i>',jump:function(e,t){t||(c.page=e.curr,s.limit=e.limit,c.pullData(e.curr))}},s.page),s.page.count=o,a.render(s.page))))},I.prototype.renderTotal=function(e){var t=this,i=t.config,a={};if(i.totalRow){layui.each(e,function(e,i){0!==i.length&&t.eachCols(function(e,t){var l=t.field||e,n=i[l];t.totalRow&&(a[l]=(a[l]||0)+(parseFloat(n)||0))})});var l=[];t.eachCols(function(e,t){var n=t.field||e,o=['<td data-field=\"'+n+'\" data-key=\"'+i.index+\"-\"+t.key+'\" '+function(){var e=[];return t.align&&e.push('align=\"'+t.align+'\"'),t.style&&e.push('style=\"'+t.style+'\"'),t.minWidth&&e.push('data-minwidth=\"'+t.minWidth+'\"'),e.join(\" \")}()+' class=\"'+function(){var e=[];return t.hide&&e.push(f),t.field||e.push(\"layui-table-col-special\"),e.join(\" \")}()+'\">','<div class=\"layui-table-cell laytable-cell-'+function(){var e=i.index+\"-\"+t.key;return\"normal\"===t.type?e:e+\" laytable-cell-\"+t.type}()+'\">'+function(){var e=t.totalRowText||\"\";return t.totalRow?parseFloat(a[n]).toFixed(2)||e:e}(),\"</div></td>\"].join(\"\");l.push(o)}),t.layTotal.find(\"tbody\").html(\"<tr>\"+l.join(\"\")+\"</tr>\")}},I.prototype.getColElem=function(e,t){var i=this,a=i.config;return e.eq(0).find(\".laytable-cell-\"+(a.index+\"-\"+t)+\":eq(0)\")},I.prototype.renderForm=function(e){n.render(e,\"LAY-table-\"+this.index)},I.prototype.setThisRowChecked=function(e){var t=this,i=(t.config,\"layui-table-click\"),a=t.layBody.find('tr[data-index=\"'+e+'\"]');a.addClass(i).siblings(\"tr\").removeClass(i)},I.prototype.sort=function(e,i,a,l){var n,r,c=this,s={},u=c.config,h=u.elem.attr(\"lay-filter\"),f=d.cache[c.key];\"string\"==typeof e&&c.layHeader.find(\"th\").each(function(i,a){var l=t(this),o=l.data(\"field\");if(o===e)return e=l,n=o,!1});try{var n=n||e.data(\"field\"),p=e.data(\"key\");if(c.sortKey&&!a&&n===c.sortKey.field&&i===c.sortKey.sort)return;var v=c.layHeader.find(\"th .laytable-cell-\"+p).find(S);c.layHeader.find(\"th\").find(S).removeAttr(\"lay-sort\"),v.attr(\"lay-sort\",i||null),c.layFixed.find(\"th\")}catch(m){return o.error(\"Table modules: Did not match to field\")}c.sortKey={field:n,sort:i},u.autoSort&&(\"asc\"===i?r=layui.sort(f,n):\"desc\"===i?r=layui.sort(f,n,!0):(r=layui.sort(f,d.config.indexName),delete c.sortKey)),s[u.response.dataName]=r||f,c.renderData(s,c.page,c.count,!0),l&&layui.event.call(e,y,\"sort(\"+h+\")\",{field:n,type:i})},I.prototype.loading=function(e){var i=this,a=i.config;a.loading&&(e?(i.layInit&&i.layInit.remove(),delete i.layInit,i.layBox.find(b).remove()):(i.layInit=t(['<div class=\"layui-table-init\">','<i class=\"layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop\"></i>',\"</div>\"].join(\"\")),i.layBox.append(i.layInit)))},I.prototype.setCheckData=function(e,t){var i=this,a=i.config,l=d.cache[i.key];l[e]&&l[e].constructor!==Array&&(l[e][a.checkName]=t)},I.prototype.syncCheckAll=function(){var e=this,t=e.config,i=e.layHeader.find('input[name=\"layTableCheckbox\"]'),a=function(i){return e.eachCols(function(e,a){\"checkbox\"===a.type&&(a[t.checkName]=i)}),i};i[0]&&(d.checkStatus(e.key).isAll?(i[0].checked||(i.prop(\"checked\",!0),e.renderForm(\"checkbox\")),a(!0)):(i[0].checked&&(i.prop(\"checked\",!1),e.renderForm(\"checkbox\")),a(!1)))},I.prototype.getCssRule=function(e,t){var i=this,a=i.elem.find(\"style\")[0],l=a.sheet||a.styleSheet||{},n=l.cssRules||l.rules;layui.each(n,function(i,a){if(a.selectorText===\".laytable-cell-\"+e)return t(a),!0})},I.prototype.fullSize=function(){var e,t=this,i=t.config,a=i.height;t.fullHeightGap&&(a=R.height()-t.fullHeightGap,a<135&&(a=135),t.elem.css(\"height\",a)),a&&(e=parseFloat(a)-(t.layHeader.outerHeight()||38),i.toolbar&&(e-=t.layTool.outerHeight()||50),i.totalRow&&(e-=t.layTotal.outerHeight()||40),i.page&&(e-=t.layPage.outerHeight()||41),t.layMain.css(\"height\",e-2))},I.prototype.getScrollWidth=function(e){var t=0;return e?t=e.offsetWidth-e.clientWidth:(e=document.createElement(\"div\"),e.style.width=\"100px\",e.style.height=\"100px\",e.style.overflowY=\"scroll\",document.body.appendChild(e),t=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),t},I.prototype.scrollPatch=function(){var e=this,i=e.layMain.children(\"table\"),a=e.layMain.width()-e.layMain.prop(\"clientWidth\"),l=e.layMain.height()-e.layMain.prop(\"clientHeight\"),n=(e.getScrollWidth(e.layMain[0]),i.outerWidth()-e.layMain.width()),o=function(e){if(a&&l){if(e=e.eq(0),!e.find(\".layui-table-patch\")[0]){var i=t('<th class=\"layui-table-patch\"><div class=\"layui-table-cell\"></div></th>');i.find(\"div\").css({width:a}),e.find(\"tr\").append(i)}}else e.find(\".layui-table-patch\").remove()};o(e.layHeader),o(e.layTotal);var r=e.layMain.height(),d=r-l;e.layFixed.find(k).css(\"height\",i.height()>=d?d:\"auto\"),e.layFixRight[n>0?\"removeClass\":\"addClass\"](f),e.layFixRight.css(\"right\",a-1)},I.prototype.events=function(){var e,a=this,o=a.config,c=t(\"body\"),s={},u=a.layHeader.find(\"th\"),h=\".layui-table-cell\",p=o.elem.attr(\"lay-filter\");a.layTool.on(\"click\",\"*[lay-event]\",function(e){var i=t(this),c=i.attr(\"lay-event\"),s=function(e){var l=t(e.list),n=t('<ul class=\"layui-table-tool-panel\"></ul>');n.html(l),o.height&&n.css(\"max-height\",o.height-(a.layTool.outerHeight()||50)),i.find(\".layui-table-tool-panel\")[0]||i.append(n),a.renderForm(),n.on(\"click\",function(e){layui.stope(e)}),e.done&&e.done(n,l)};switch(layui.stope(e),F.trigger(\"table.tool.panel.remove\"),l.close(a.tipsIndex),c){case\"LAYTABLE_COLS\":s({list:function(){var e=[];return a.eachCols(function(t,i){i.field&&\"normal\"==i.type&&e.push('<li><input type=\"checkbox\" name=\"'+i.field+'\" data-key=\"'+i.key+'\" data-parentkey=\"'+(i.parentKey||\"\")+'\" lay-skin=\"primary\" '+(i.hide?\"\":\"checked\")+' title=\"'+(i.title||i.field)+'\" lay-filter=\"LAY_TABLE_TOOL_COLS\"></li>')}),e.join(\"\")}(),done:function(){n.on(\"checkbox(LAY_TABLE_TOOL_COLS)\",function(e){var i=t(e.elem),l=this.checked,n=i.data(\"key\"),r=i.data(\"parentkey\");layui.each(o.cols,function(e,t){layui.each(t,function(t,i){if(e+\"-\"+t===n){var d=i.hide;i.hide=!l,a.elem.find('*[data-key=\"'+o.index+\"-\"+n+'\"]')[l?\"removeClass\":\"addClass\"](f),d!=i.hide&&a.setParentCol(!l,r),a.resize()}})})})}});break;case\"LAYTABLE_EXPORT\":r.ie?l.tips(\"导出功能不支持 IE，请用 Chrome 等高级浏览器导出\",this,{tips:3}):s({list:function(){return['<li data-type=\"csv\">导出到 Csv 文件</li>','<li data-type=\"xls\">导出到 Excel 文件</li>'].join(\"\")}(),done:function(e,i){i.on(\"click\",function(){var e=t(this).data(\"type\");d.exportFile(o.id,null,e)})}});break;case\"LAYTABLE_PRINT\":var u=window.open(\"打印窗口\",\"_blank\"),h=[\"<style>\",\"body{font-size: 12px; color: #666;}\",\"table{width: 100%; border-collapse: collapse; border-spacing: 0;}\",\"th,td{line-height: 20px; padding: 9px 15px; border: 1px solid #ccc; text-align: left; font-size: 12px; color: #666;}\",\"a{color: #666; text-decoration:none;}\",\"*.layui-hide{display: none}\",\"</style>\"].join(\"\"),v=t(a.layHeader.html());v.append(a.layMain.find(\"table\").html()),v.append(a.layTotal.find(\"table\").html()),v.find(\"th.layui-table-patch\").remove(),v.find(\".layui-table-col-special\").remove(),u.document.write(h+v.prop(\"outerHTML\")),u.document.close(),u.print(),u.close()}layui.event.call(this,y,\"toolbar(\"+p+\")\",t.extend({event:c,config:o},{}))}),u.on(\"mousemove\",function(e){var i=t(this),a=i.offset().left,l=e.clientX-a;i.data(\"unresize\")||s.resizeStart||(s.allowResize=i.width()-l<=10,c.css(\"cursor\",s.allowResize?\"col-resize\":\"\"))}).on(\"mouseleave\",function(){t(this);s.resizeStart||c.css(\"cursor\",\"\")}).on(\"mousedown\",function(e){var i=t(this);if(s.allowResize){var l=i.data(\"key\");e.preventDefault(),s.resizeStart=!0,s.offset=[e.clientX,e.clientY],a.getCssRule(l,function(e){var t=e.style.width||i.outerWidth();s.rule=e,s.ruleWidth=parseFloat(t),s.minWidth=i.data(\"minwidth\")||o.cellMinWidth})}}),F.on(\"mousemove\",function(t){if(s.resizeStart){if(t.preventDefault(),s.rule){var i=s.ruleWidth+t.clientX-s.offset[0];i<s.minWidth&&(i=s.minWidth),s.rule.style.width=i+\"px\",l.close(a.tipsIndex)}e=1}}).on(\"mouseup\",function(t){s.resizeStart&&(s={},c.css(\"cursor\",\"\"),a.scrollPatch()),2===e&&(e=null)}),u.on(\"click\",function(i){var l,n=t(this),o=n.find(S),r=o.attr(\"lay-sort\");return o[0]&&1!==e?(l=\"asc\"===r?\"desc\":\"desc\"===r?null:\"asc\",void a.sort(n,l,null,!0)):e=2}).find(S+\" .layui-edge \").on(\"click\",function(e){var i=t(this),l=i.index(),n=i.parents(\"th\").eq(0).data(\"field\");layui.stope(e),0===l?a.sort(n,\"asc\",null,!0):a.sort(n,\"desc\",null,!0)});var v=function(e){var l=t(this),n=l.parents(\"tr\").eq(0).data(\"index\"),o=a.layBody.find('tr[data-index=\"'+n+'\"]'),r=d.cache[a.key]||[];return r=r[n]||{},t.extend({tr:o,data:d.clearCacheKey(r),del:function(){d.cache[a.key][n]=[],o.remove(),a.scrollPatch()},update:function(e){e=e||{},layui.each(e,function(e,l){if(e in r){var n,d=o.children('td[data-field=\"'+e+'\"]');r[e]=l,a.eachCols(function(t,i){i.field==e&&i.templet&&(n=i.templet)}),d.children(h).html(function(){return n?function(){return\"function\"==typeof n?n(r):i(t(n).html()||l).render(r)}():l}()),d.data(\"content\",l)}})}},e)};a.elem.on(\"click\",'input[name=\"layTableCheckbox\"]+',function(){var e=t(this).prev(),i=a.layBody.find('input[name=\"layTableCheckbox\"]'),l=e.parents(\"tr\").eq(0).data(\"index\"),n=e[0].checked,o=\"layTableAllChoose\"===e.attr(\"lay-filter\");o?(i.each(function(e,t){t.checked=n,a.setCheckData(e,n)}),a.syncCheckAll(),a.renderForm(\"checkbox\")):(a.setCheckData(l,n),a.syncCheckAll()),layui.event.call(e[0],y,\"checkbox(\"+p+\")\",v.call(e[0],{checked:n,type:o?\"all\":\"one\"}))}),a.elem.on(\"click\",'input[lay-type=\"layTableRadio\"]+',function(){var e=t(this).prev(),i=e[0].checked,l=d.cache[a.key],n=e.parents(\"tr\").eq(0).data(\"index\");layui.each(l,function(e,t){n===e?t.LAY_CHECKED=!0:delete t.LAY_CHECKED}),a.setThisRowChecked(n),layui.event.call(this,y,\"radio(\"+p+\")\",v.call(this,{checked:i}))}),a.layBody.on(\"mouseenter\",\"tr\",function(){var e=t(this),i=e.index();e.data(\"off\")||a.layBody.find(\"tr:eq(\"+i+\")\").addClass(_)}).on(\"mouseleave\",\"tr\",function(){var e=t(this),i=e.index();e.data(\"off\")||a.layBody.find(\"tr:eq(\"+i+\")\").removeClass(_)}).on(\"click\",\"tr\",function(){m.call(this,\"row\")}).on(\"dblclick\",\"tr\",function(){m.call(this,\"rowDouble\")});var m=function(e){var i=t(this);i.data(\"off\")||layui.event.call(this,y,e+\"(\"+p+\")\",v.call(i.children(\"td\")[0]))};a.layBody.on(\"change\",\".\"+W,function(){var e=t(this),i=this.value,l=e.parent().data(\"field\"),n=e.parents(\"tr\").eq(0).data(\"index\"),o=d.cache[a.key][n];o[l]=i,layui.event.call(this,y,\"edit(\"+p+\")\",v.call(this,{value:i,field:l}))}).on(\"blur\",\".\"+W,function(){var e,l=t(this),n=this,o=l.parent().data(\"field\"),r=l.parents(\"tr\").eq(0).data(\"index\"),c=d.cache[a.key][r];a.eachCols(function(t,i){i.field==o&&i.templet&&(e=i.templet)}),l.siblings(h).html(function(a){return e?function(){return\"function\"==typeof e?e(c):i(t(e).html()||n.value).render(c)}():a}(n.value)),l.parent().data(\"content\",n.value),l.remove()}),a.layBody.on(\"click\",\"td\",function(e){var i=t(this),a=(i.data(\"field\"),i.data(\"edit\")),l=i.children(h);if(!i.data(\"off\")&&a){var n=t('<input class=\"layui-input '+W+'\">');return n[0].value=i.data(\"content\")||l.text(),i.find(\".\"+W)[0]||i.append(n),n.focus(),void layui.stope(e)}}).on(\"mouseenter\",\"td\",function(){b.call(this)}).on(\"mouseleave\",\"td\",function(){b.call(this,\"hide\")});var g=\"layui-table-grid-down\",b=function(e){var i=t(this),a=i.children(h);if(!i.data(\"off\"))if(e)i.find(\".layui-table-grid-down\").remove();else if(a.prop(\"scrollWidth\")>a.outerWidth()){if(a.find(\".\"+g)[0])return;i.append('<div class=\"'+g+'\"><i class=\"layui-icon layui-icon-down\"></i></div>')}};a.layBody.on(\"click\",\".\"+g,function(e){var i=t(this),n=i.parent(),d=n.children(h);a.tipsIndex=l.tips(['<div class=\"layui-table-tips-main\" style=\"margin-top: -'+(d.height()+16)+\"px;\"+function(){return\"sm\"===o.size?\"padding: 4px 15px; font-size: 12px;\":\"lg\"===o.size?\"padding: 14px 15px;\":\"\"}()+'\">',d.html(),\"</div>\",'<i class=\"layui-icon layui-table-tips-c layui-icon-close\"></i>'].join(\"\"),d[0],{tips:[3,\"\"],time:-1,anim:-1,maxWidth:r.ios||r.android?300:a.elem.width()/2,isOutAnim:!1,skin:\"layui-table-tips\",success:function(e,t){e.find(\".layui-table-tips-c\").on(\"click\",function(){l.close(t)})}}),layui.stope(e)}),a.layBody.on(\"click\",\"*[lay-event]\",function(){var e=t(this),i=e.parents(\"tr\").eq(0).data(\"index\");layui.event.call(this,y,\"tool(\"+p+\")\",v.call(this,{event:e.attr(\"lay-event\")})),a.setThisRowChecked(i)}),a.layMain.on(\"scroll\",function(){var e=t(this),i=e.scrollLeft(),n=e.scrollTop();a.layHeader.scrollLeft(i),a.layTotal.scrollLeft(i),a.layFixed.find(k).scrollTop(n),l.close(a.tipsIndex)}),F.on(\"click\",function(){F.trigger(\"table.remove.tool.panel\")}),F.on(\"table.remove.tool.panel\",function(){t(\".layui-table-tool-panel\").remove()}),R.on(\"resize\",function(){a.resize()})},d.init=function(e,i){i=i||{};var a=this,l=t(e?'table[lay-filter=\"'+e+'\"]':h+\"[lay-data]\"),n=\"Table element property lay-data configuration item has a syntax error: \";return l.each(function(){var a=t(this),l=a.attr(\"lay-data\");try{l=new Function(\"return \"+l)()}catch(r){o.error(n+l)}var c=[],s=t.extend({elem:this,cols:[],data:[],skin:a.attr(\"lay-skin\"),size:a.attr(\"lay-size\"),even:\"string\"==typeof a.attr(\"lay-even\")},d.config,i,l);e&&a.hide(),a.find(\"thead>tr\").each(function(e){s.cols[e]=[],t(this).children().each(function(i){var a=t(this),l=a.attr(\"lay-data\");try{l=new Function(\"return \"+l)()}catch(r){return o.error(n+l)}var d=t.extend({title:a.text(),colspan:a.attr(\"colspan\")||0,rowspan:a.attr(\"rowspan\")||0},l);d.colspan<2&&c.push(d),s.cols[e].push(d)})}),a.find(\"tbody>tr\").each(function(e){var i=t(this),a={};i.children(\"td\").each(function(e,i){var l=t(this),n=l.data(\"field\");if(n)return a[n]=l.html()}),layui.each(c,function(e,t){var l=i.children(\"td\").eq(e);a[t.field]=l.html()}),s.data[e]=a}),d.render(s)}),a},c.that={},c.config={},d.eachCols=function(e,i,a){var l=c.config[e]||{},n=[],o=0;a=t.extend(!0,[],a||l.cols),layui.each(a,function(e,t){layui.each(t,function(t,i){if(i.colGroup){var l=0;o++,i.CHILD_COLS=[],layui.each(a[e+1],function(e,t){t.PARENT_COL_INDEX||l>1&&l==i.colspan||(t.PARENT_COL_INDEX=o,i.CHILD_COLS.push(t),l+=parseInt(t.colspan>1?t.colspan:1))})}i.PARENT_COL_INDEX||n.push(i)})});var r=function(e){layui.each(e||n,function(e,t){return t.CHILD_COLS?r(t.CHILD_COLS):void(\"function\"==typeof i&&i(e,t))})};r()},d.checkStatus=function(e){var t=0,i=0,a=[],l=d.cache[e]||[];return layui.each(l,function(e,l){return l.constructor===Array?void i++:void(l[d.config.checkName]&&(t++,a.push(d.clearCacheKey(l))))}),{data:a,isAll:!!l.length&&t===l.length-i}},d.exportFile=function(e,t,i){t=t||d.clearCacheKey(d.cache[e]),i=i||\"csv\";var a=c.config[e]||{},l={csv:\"text/csv\",xls:\"application/vnd.ms-excel\"}[i],n=document.createElement(\"a\");return r.ie?o.error(\"IE_NOT_SUPPORT_EXPORTS\"):(n.href=\"data:\"+l+\";charset=utf-8,\\ufeff\"+encodeURIComponent(function(){var i=[],a=[];return layui.each(t,function(t,l){var n=[];\"object\"==typeof e?(layui.each(e,function(e,a){0==t&&i.push(a||\"\")}),layui.each(d.clearCacheKey(l),function(e,t){n.push('\"'+(t||\"\")+'\"')})):d.eachCols(e,function(e,a){a.field&&\"normal\"==a.type&&!a.hide&&(0==t&&i.push(a.title||\"\"),n.push('\"'+u(a,l[a.field],l,\"text\")+'\"'))}),a.push(n.join(\",\"))}),i.join(\",\")+\"\\r\\n\"+a.join(\"\\r\\n\")}()),n.download=(a.title||\"table_\"+(a.index||\"\"))+\".\"+i,document.body.appendChild(n),n.click(),void document.body.removeChild(n))},d.resize=function(e){if(e){var t=s(e);if(!t)return;c.that[e].resize()}else layui.each(c.that,function(){this.resize()})},d.reload=function(e,t){var i=s(e);if(i){var a=c.that[e];return a.reload(t),c.call(a)}},d.render=function(e){var t=new I(e);return c.call(t)},d.clearCacheKey=function(e){return e=t.extend({},e),delete e[d.config.checkName],delete e[d.config.indexName],e},d.init(),e(y,d)});"
  },
  {
    "path": "lib/layui/lay/modules/transfer.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define([\"laytpl\",\"form\"],function(e){\"use strict\";var a=layui.$,t=layui.laytpl,n=layui.form,i=\"transfer\",l={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,i,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c=\"layui-hide\",o=\"layui-btn-disabled\",d=\"layui-none\",s=\"layui-transfer-box\",u=\"layui-transfer-header\",h=\"layui-transfer-search\",f=\"layui-transfer-active\",y=\"layui-transfer-data\",p=function(e){return e=e||{},['<div class=\"layui-transfer-box\" data-index=\"'+e.index+'\">','<div class=\"layui-transfer-header\">','<input type=\"checkbox\" name=\"'+e.checkAllName+'\" lay-filter=\"layTransferCheckbox\" lay-type=\"all\" lay-skin=\"primary\" title=\"{{ d.data.title['+e.index+\"] || 'list\"+(e.index+1)+\"' }}\\\">\",\"</div>\",\"{{# if(d.data.showSearch){ }}\",'<div class=\"layui-transfer-search\">','<i class=\"layui-icon layui-icon-search\"></i>','<input type=\"input\" class=\"layui-input\" placeholder=\"关键词搜索\">',\"</div>\",\"{{# } }}\",'<ul class=\"layui-transfer-data\"></ul>',\"</div>\"].join(\"\")},v=['<div class=\"layui-transfer layui-form layui-border-box\" lay-filter=\"LAY-transfer-{{ d.index }}\">',p({index:0,checkAllName:\"layTransferLeftCheckAll\"}),'<div class=\"layui-transfer-active\">','<button type=\"button\" class=\"layui-btn layui-btn-sm layui-btn-primary layui-btn-disabled\" data-index=\"0\">','<i class=\"layui-icon layui-icon-next\"></i>',\"</button>\",'<button type=\"button\" class=\"layui-btn layui-btn-sm layui-btn-primary layui-btn-disabled\" data-index=\"1\">','<i class=\"layui-icon layui-icon-prev\"></i>',\"</button>\",\"</div>\",p({index:1,checkAllName:\"layTransferRightCheckAll\"}),\"</div>\"].join(\"\"),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:[\"列表一\",\"列表二\"],width:200,height:360,data:[],value:[],showSearch:!1,id:\"\",text:{none:\"无数据\",searchNone:\"无匹配数据\"}},x.prototype.reload=function(e){var t=this;layui.each(e,function(e,a){a.constructor===Array&&delete t.config[e]}),t.config=a.extend(!0,{},t.config,e),t.render()},x.prototype.render=function(){var e=this,n=e.config,i=e.elem=a(t(v).render({data:n,index:e.index})),l=n.elem=a(n.elem);l[0]&&(n.data=n.data||[],n.value=n.value||[],e.key=n.id||e.index,l.html(e.elem),e.layBox=e.elem.find(\".\"+s),e.layHeader=e.elem.find(\".\"+u),e.laySearch=e.elem.find(\".\"+h),e.layData=i.find(\".\"+y),e.layBtn=i.find(\".\"+f+\" .layui-btn\"),e.layBox.css({width:n.width,height:n.height}),e.layData.css({height:function(){return n.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:\"layTransferLeftCheck\",views:[]},{checkName:\"layTransferRightCheck\",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,n=[\"<li>\",'<input type=\"checkbox\" name=\"'+a[t].checkName+'\" lay-skin=\"primary\" lay-filter=\"layTransferCheckbox\" title=\"'+e.title+'\"'+(e.disabled?\" disabled\":\"\")+(e.checked?\" checked\":\"\")+' value=\"'+e.value+'\">',\"</li>\"].join(\"\");a[t].views.push(n),delete e.selected}),e.layData.eq(0).html(a[0].views.join(\"\")),e.layData.eq(1).html(a[1].views.join(\"\")),e.renderCheckBtn()},x.prototype.renderForm=function(e){n.render(e,\"LAY-transfer-\"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,n=t.config;e=e||{},t.layBox.each(function(i){var l=a(this),r=l.find(\".\"+y),d=l.find(\".\"+u).find('input[type=\"checkbox\"]'),s=r.find('input[type=\"checkbox\"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data(\"hide\");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop(\"checked\",f&&h===s.length),t.layBtn.eq(i)[f?\"removeClass\":\"addClass\"](o),!e.stopNone){var p=r.children(\"li:not(.\"+c+\")\").length;t.noneView(r,p?\"\":n.text.none)}}),t.renderForm(\"checkbox\")},x.prototype.noneView=function(e,t){var n=a('<p class=\"layui-none\">'+(t||\"\")+\"</p>\");e.find(\".\"+d)[0]&&e.find(\".\"+d).remove(),t.replace(/\\s/g,\"\")&&e.append(n)},x.prototype.setValue=function(){var e=this,t=e.config,n=[];return e.layBox.eq(1).find(\".\"+y+' input[type=\"checkbox\"]').each(function(){var e=a(this).data(\"hide\");e||n.push(this.value)}),t.value=n,e},x.prototype.parseData=function(e){var t=this,n=t.config,i=[];return layui.each(n.data,function(t,l){l=(\"function\"==typeof n.parseData?n.parseData(l):l)||l,i.push(l=a.extend({},l)),layui.each(n.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),n.data=i,t},x.prototype.getData=function(e){var a=this,t=a.config,n=[];return layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&n.push(t)})}),n},x.prototype.events=function(){var e=this,t=e.config;e.elem.on(\"click\",'input[lay-filter=\"layTransferCheckbox\"]+',function(){var t=a(this).prev(),n=t[0].checked,i=t.parents(\".\"+s).eq(0).find(\".\"+y);t[0].disabled||(\"all\"===t.attr(\"lay-type\")&&i.find('input[type=\"checkbox\"]').each(function(){this.disabled||(this.checked=n)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on(\"click\",function(){var n=a(this),i=n.data(\"index\"),l=e.layBox.eq(i),r=[];if(!n.hasClass(o)){e.layBox.eq(i).each(function(t){var n=a(this),i=n.find(\".\"+y);i.children(\"li\").each(function(){var t=a(this),n=t.find('input[type=\"checkbox\"]'),i=n.data(\"hide\");n[0].checked&&!i&&(n[0].checked=!1,l.siblings(\".\"+s).find(\".\"+y).append(t.clone()),t.remove(),r.push(n[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings(\".\"+s).find(\".\"+h+\" input\");\"\"===c.val()||c.trigger(\"keyup\"),t.onchange&&t.onchange(e.getData(r),i)}}),e.laySearch.find(\"input\").on(\"keyup\",function(){var n=this.value,i=a(this).parents(\".\"+h).eq(0).siblings(\".\"+y),l=i.children(\"li\");l.each(function(){var e=a(this),t=e.find('input[type=\"checkbox\"]'),i=t[0].title.indexOf(n)!==-1;e[i?\"removeClass\":\"addClass\"](c),t.data(\"hide\",!i)}),e.renderCheckBtn();var r=l.length===i.children(\"li.\"+c).length;e.noneView(i,r?t.text.searchNone:\"\")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(i,l)});"
  },
  {
    "path": "lib/layui/lay/modules/tree.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"form\",function(e){\"use strict\";var i=layui.$,a=layui.form,n=\"tree\",r={config:{},index:layui[n]?layui[n].index+1e4:0,set:function(e){var a=this;return a.config=i.extend({},a.config,e),a},on:function(e,i){return layui.onevent.call(this,n,e,i)}},l=function(){var e=this,i=e.config,a=i.id||e.index;return l.that[a]=e,l.config[a]=i,{config:i,reload:function(i){e.reload.call(e,i)},getChecked:function(){return e.getChecked.call(e)},setChecked:function(i){return e.setChecked.call(e,i)}}},t=\"layui-hide\",d=\"layui-disabled\",s=\"layui-tree-set\",c=\"layui-tree-iconClick\",o=\"layui-icon-addition\",h=\"layui-icon-subtraction\",u=\"layui-tree-entry\",f=\"layui-tree-main\",p=\"layui-tree-txt\",y=\"layui-tree-pack\",v=\"layui-tree-spread\",C=\"layui-tree-setLineShort\",m=\"layui-tree-showLine\",k=\"layui-tree-lineExtend\",g=function(e){var a=this;a.index=++r.index,a.config=i.extend({},a.config,r.config,e),a.render()};g.prototype.config={data:[],showCheckbox:!1,showLine:!0,accordion:!1,onlyIconControl:!1,isJump:!1,edit:!1,text:{defaultNodeName:\"未命名\",none:\"无数据\"}},g.prototype.reload=function(e){var a=this;layui.each(e,function(e,i){i.constructor===Array&&delete a.config[e]}),a.config=i.extend(!0,{},a.config,e),a.render()},g.prototype.render=function(){var e=this,a=e.config,n=i('<div class=\"layui-tree'+(a.showCheckbox?\" layui-form\":\"\")+(a.showLine?\" layui-tree-line\":\"\")+'\" lay-filter=\"LAY-tree-'+e.index+'\"></div>');e.tree(n);var r=a.elem=i(a.elem);if(r[0]){if(a.showSearch&&n.prepend('<input type=\"text\" class=\"layui-input layui-tree-search\" placeholder=\"请输入关键字进行过滤\">'),e.key=a.id||e.index,e.elem=n,e.elemNone=i('<div class=\"layui-tree-emptyText\">'+a.text.none+\"</div>\"),r.html(e.elem),0==e.elem.find(\".layui-tree-set\").length)return e.elem.append(e.elemNone);a.drag&&e.drag(),a.showCheckbox&&e.renderForm(\"checkbox\"),e.elem.find(\".layui-tree-set\").each(function(){var e=i(this);e.parent(\".layui-tree-pack\")[0]||e.addClass(\"layui-tree-setHide\"),!e.next()[0]&&e.parents(\".layui-tree-pack\").eq(1).hasClass(\"layui-tree-lineExtend\")&&e.addClass(C),e.next()[0]||e.parents(\".layui-tree-set\").eq(0).next()[0]||e.addClass(C)}),e.events()}},g.prototype.renderForm=function(e){a.render(e,\"LAY-tree-\"+this.index)},g.prototype.tree=function(e,a){var n=this,r=n.config,l=a||r.data;layui.each(l,function(a,l){var c=l.children&&l.children.length>0,o=i('<div class=\"layui-tree-pack\" '+(l.spread?'style=\"display: block;\"':\"\")+'\"></div>'),h=i(['<div data-id=\"'+l.id+'\" class=\"layui-tree-set'+(l.spread?\" layui-tree-spread\":\"\")+(l.checked?\" layui-tree-checkedFirst\":\"\")+'\">',\"<div \"+(r.drag&&!l.fixed?'draggable=\"true\"':\"\")+' class=\"layui-tree-entry\">','<div class=\"layui-tree-main\">',function(){return r.showLine?c?'<span class=\"layui-tree-iconClick layui-tree-icon\"><i class=\"layui-icon '+(l.spread?\"layui-icon-subtraction\":\"layui-icon-addition\")+'\"></i></span>':'<span class=\"layui-tree-iconClick\"><i class=\"layui-icon layui-icon-file\"></i></span>':'<span class=\"layui-tree-iconClick\"><i class=\"layui-tree-iconArrow '+(c?\"\":t)+'\"></i></span>'}(),function(){return r.showCheckbox?'<input type=\"checkbox\" name=\"layuiTreeCheck\" lay-skin=\"primary\" '+(l.disabled?\"disabled\":\"\")+'  value=\"'+l.id+'\">':\"\"}(),function(){return r.isJump&&l.href?'<a href=\"'+l.href+'\" target=\"_blank\" class=\"'+p+'\">'+(l.title||l.label||r.text.defaultNodeName)+\"</a>\":'<span class=\"'+p+(l.disabled?\" \"+d:\"\")+'\">'+(l.title||l.label||r.text.defaultNodeName)+\"</span>\"}(),\"</div>\",function(){if(!r.edit)return\"\";var e={add:'<i class=\"layui-icon layui-icon-add-1\"  data-type=\"add\"></i>',update:'<i class=\"layui-icon layui-icon-edit\" data-type=\"update\"></i>',del:'<i class=\"layui-icon layui-icon-delete\" data-type=\"del\"></i>'},i=['<div class=\"layui-btn-group layui-tree-btnGroup\">'];return r.edit===!0&&(r.edit=[\"update\",\"del\"]),\"object\"==typeof r.edit?(layui.each(r.edit,function(a,n){i.push(e[n]||\"\")}),i.join(\"\")+\"</div>\"):void 0}(),\"</div></div>\"].join(\"\"));c&&(h.append(o),n.tree(o,l.children)),e.append(h),h.prev(\".\"+s)[0]&&h.prev().children(\".layui-tree-pack\").addClass(\"layui-tree-showLine\"),c||h.parent(\".layui-tree-pack\").addClass(\"layui-tree-lineExtend\"),n.spread(h,l),r.showCheckbox&&n.checkClick(h,l),r.edit&&n.operate(h,l)})},g.prototype.spread=function(e,a){var n=this,r=n.config,l=e.children(\".\"+u),t=l.children(\".\"+f),C=l.find(\".\"+c),m=l.find(\".\"+p),k=r.onlyIconControl?C:t,g=\"\";k.on(\"click\",function(i){var a=e.children(\".\"+y),n=k.children(\".layui-icon\")[0]?k.children(\".layui-icon\"):k.find(\".layui-tree-icon\").children(\".layui-icon\");if(a[0]){if(e.hasClass(v))e.removeClass(v),a.slideUp(200),n.removeClass(h).addClass(o);else if(e.addClass(v),a.slideDown(200),n.addClass(h).removeClass(o),r.accordion){var l=e.siblings(\".\"+s);l.removeClass(v),l.children(\".\"+y).slideUp(200),l.find(\".layui-tree-icon\").children(\".layui-icon\").removeClass(h).addClass(o)}}else g=\"normal\"}),m.on(\"click\",function(){var n=i(this);n.hasClass(d)||(g=e.hasClass(v)?r.onlyIconControl?\"open\":\"close\":r.onlyIconControl?\"close\":\"open\",r.click&&r.click({elem:e,state:g,data:a}))})},g.prototype.setCheckbox=function(e,i,a){var n=this,r=(n.config,a.prop(\"checked\"));if(\"object\"==typeof i.children||e.find(\".\"+y)[0]){var l=e.find(\".\"+y).find('input[name=\"layuiTreeCheck\"]');l.each(function(){this.disabled||(this.checked=r)})}var t=function(e){if(e.parents(\".\"+s)[0]){var i,a=e.parent(\".\"+y),n=a.parent(),l=a.prev().find('input[name=\"layuiTreeCheck\"]');r?l.prop(\"checked\",r):(a.find('input[name=\"layuiTreeCheck\"]').each(function(){this.checked&&(i=!0)}),i||l.prop(\"checked\",!1)),t(n)}};t(e),n.renderForm(\"checkbox\")},g.prototype.checkClick=function(e,a){var n=this,r=n.config,l=e.children(\".\"+u),t=l.children(\".\"+f);t.on(\"click\",'input[name=\"layuiTreeCheck\"]+',function(l){layui.stope(l);var t=i(this).prev(),d=t.prop(\"checked\");t.prop(\"disabled\")||(n.setCheckbox(e,a,t),r.oncheck&&r.oncheck({elem:e,checked:d,data:a}))})},g.prototype.operate=function(e,a){var n=this,r=n.config,l=e.children(\".\"+u),d=l.children(\".\"+f);l.children(\".layui-tree-btnGroup\").on(\"click\",\".layui-icon\",function(l){layui.stope(l);var f=i(this).data(\"type\"),g=e.children(\".\"+y),x={data:a,type:f,elem:e};if(\"add\"==f){g[0]||(r.showLine?(d.find(\".\"+c).addClass(\"layui-tree-icon\"),d.find(\".\"+c).children(\".layui-icon\").addClass(o).removeClass(\"layui-icon-file\")):d.find(\".layui-tree-iconArrow\").removeClass(t),e.append('<div class=\"layui-tree-pack\"></div>'));var b=r.operate&&r.operate(x),w={};if(w.title=r.text.defaultNodeName,w.id=b,n.tree(e.children(\".\"+y),[w]),r.showLine)if(g[0])g.hasClass(k)||g.addClass(k),e.find(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)}),g.children(\".\"+s).last().prev().hasClass(C)?g.children(\".\"+s).last().prev().removeClass(C):g.children(\".\"+s).last().removeClass(C),!e.parent(\".\"+y)[0]&&e.next()[0]&&g.children(\".\"+s).last().removeClass(C);else{var T=e.siblings(\".\"+s),L=1,N=e.parent(\".\"+y);layui.each(T,function(e,a){i(a).children(\".\"+y)[0]||(L=0)}),1==L?(T.children(\".\"+y).addClass(m),T.children(\".\"+y).children(\".\"+s).removeClass(C),e.children(\".\"+y).addClass(m),N.removeClass(k),N.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C)):e.children(\".\"+y).children(\".\"+s).addClass(C)}if(!r.showCheckbox)return;if(d.find('input[name=\"layuiTreeCheck\"]')[0].checked){var A=e.children(\".\"+y).children(\".\"+s).last();A.find('input[name=\"layuiTreeCheck\"]')[0].checked=!0}n.renderForm(\"checkbox\")}else if(\"update\"==f){var q=d.children(\".\"+p).html();d.children(\".\"+p).html(\"\"),d.append('<input type=\"text\" class=\"layui-tree-editInput\">'),d.children(\".layui-tree-editInput\").val(q).focus();var F=function(e){var i=e.val().trim();i=i?i:r.text.defaultNodeName,e.remove(),d.children(\".\"+p).html(i),x.data.title=i,r.operate&&r.operate(x)};d.children(\".layui-tree-editInput\").blur(function(){F(i(this))}),d.children(\".layui-tree-editInput\").on(\"keydown\",function(e){13===e.keyCode&&(e.preventDefault(),F(i(this)))})}else{if(r.operate&&r.operate(x),x.status=\"remove\",!e.prev(\".\"+s)[0]&&!e.next(\".\"+s)[0]&&!e.parent(\".\"+y)[0])return e.remove(),void n.elem.append(n.elemNone);if(e.siblings(\".\"+s).children(\".\"+u)[0]){if(r.showCheckbox){var I=function(e){if(e.parents(\".\"+s)[0]){var a=e.siblings(\".\"+s).children(\".\"+u),r=e.parent(\".\"+y).prev(),l=r.find('input[name=\"layuiTreeCheck\"]')[0],t=1,d=0;0==l.checked&&(a.each(function(e,a){var n=i(a).find('input[name=\"layuiTreeCheck\"]')[0];0!=n.checked||n.disabled||(t=0),n.disabled||(d=1)}),1==t&&1==d&&(l.checked=!0,n.renderForm(\"checkbox\"),I(r.parent(\".\"+s))))}};I(e)}if(r.showLine){var T=e.siblings(\".\"+s),L=1,N=e.parent(\".\"+y);layui.each(T,function(e,a){i(a).children(\".\"+y)[0]||(L=0)}),1==L?(g[0]||(N.removeClass(k),T.children(\".\"+y).addClass(m),T.children(\".\"+y).children(\".\"+s).removeClass(C)),e.next()[0]?N.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C):e.prev().children(\".\"+y).children(\".\"+s).last().addClass(C),e.next()[0]||e.parents(\".\"+s)[1]||e.parents(\".\"+s).eq(0).next()[0]||e.prev(\".\"+s).addClass(C)):!e.next()[0]&&e.hasClass(C)&&e.prev().addClass(C)}}else{var H=e.parent(\".\"+y).prev();if(r.showLine){H.find(\".\"+c).removeClass(\"layui-tree-icon\"),H.find(\".\"+c).children(\".layui-icon\").removeClass(h).addClass(\"layui-icon-file\");var S=H.parents(\".\"+y).eq(0);S.addClass(k),S.children(\".\"+s).each(function(){i(this).children(\".\"+y).children(\".\"+s).last().addClass(C)})}else H.find(\".layui-tree-iconArrow\").addClass(t);e.parents(\".\"+s).eq(0).removeClass(v),e.parent(\".\"+y).remove()}e.remove()}})},g.prototype.drag=function(){var e=this,a=e.config;e.elem.on(\"dragstart\",\".\"+u,function(){var e=i(this).parent(\".\"+s),n=e.parents(\".\"+s)[0]?e.parents(\".\"+s).eq(0):\"未找到父节点\";a.dragstart&&a.dragstart(e,n)}),e.elem.on(\"dragend\",\".\"+u,function(n){var n=n||event,r=n.clientY,l=i(this),d=l.parent(\".\"+s),f=d.height(),p=d.offset().top,g=e.elem.find(\".\"+s),x=e.elem.height(),b=e.elem.offset().top,w=x+b-13,T=d.parents(\".\"+s)[0],L=d.next()[0];if(T)var N=d.parent(\".\"+y),A=d.parents(\".\"+s).eq(0),q=A.parent(\".\"+y),F=A.offset().top,I=d.siblings(),H=A.children(\".\"+y).children(\".\"+s).length;var S=function(n){if(T||L||e.elem.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C),!T)return void d.removeClass(\"layui-tree-setHide\");if(1==H)a.showLine?(n.find(\".\"+c).removeClass(\"layui-tree-icon\"),n.find(\".\"+c).children(\".layui-icon\").removeClass(h).addClass(\"layui-icon-file\"),q.addClass(k),q.children(\".\"+s).children(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)})):n.find(\".layui-tree-iconArrow\").addClass(t),n.children(\".\"+y).remove(),n.removeClass(v);else{if(a.showLine){var r=1;layui.each(I,function(e,a){i(a).children(\".\"+y)[0]||(r=0)}),1==r?(d.children(\".\"+y)[0]||(N.removeClass(k),I.children(\".\"+y).addClass(m),I.children(\".\"+y).children(\".\"+s).removeClass(C)),N.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C),L||n.parents(\".\"+s)[0]||n.next()[0]||N.children(\".\"+s).last().addClass(C)):!L&&d.hasClass(C)&&N.children(\".\"+s).last().addClass(C)}if(a.showCheckbox){var l=function(a){if(a){if(!a.parents(\".\"+s)[0])return}else if(!n[0])return;var r=a?a.siblings().children(\".\"+u):I.children(\".\"+u),t=a?a.parent(\".\"+y).prev():N.prev(),d=t.find('input[name=\"layuiTreeCheck\"]')[0],c=1,o=0;0==d.checked&&(r.each(function(e,a){var n=i(a).find('input[name=\"layuiTreeCheck\"]')[0];0!=n.checked||n.disabled||(c=0),n.disabled||(o=1)}),1==c&&1==o&&(d.checked=!0,e.renderForm(\"checkbox\"),l(t.parent(\".\"+s)||n)))};l()}}};g.each(function(){if(0!=i(this).height()){if(r>p&&r<p+f)return void(a.dragend&&a.dragend(\"drag error\"));if(1==H&&r>F&&r<p+f)return void(a.dragend&&a.dragend(\"drag error\"));var n=i(this).offset().top;if(r>n&&r<n+15){if(i(this).children(\".\"+y)[0]||(a.showLine?(i(this).find(\".\"+c).eq(0).addClass(\"layui-tree-icon\"),i(this).find(\".\"+c).eq(0).children(\".layui-icon\").addClass(o).removeClass(\"layui-icon-file\")):i(this).find(\".layui-tree-iconArrow\").removeClass(t),i(this).append('<div class=\"layui-tree-pack\"></div>')),i(this).children(\".\"+y).append(d),S(A),a.showLine){var l=i(this).children(\".\"+y).children(\".\"+s);if(d.children(\".\"+y).children(\".\"+s).last().addClass(C),1==l.length){var h=i(this).siblings(\".\"+s),v=1,g=i(this).parent(\".\"+y);layui.each(h,function(e,a){i(a).children(\".\"+y)[0]||(v=0)}),1==v?(h.children(\".\"+y).addClass(m),h.children(\".\"+y).children(\".\"+s).removeClass(C),i(this).children(\".\"+y).addClass(m),g.removeClass(k),g.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C).removeClass(\"layui-tree-setHide\")):i(this).children(\".\"+y).children(\".\"+s).addClass(C).removeClass(\"layui-tree-setHide\")}else d.prev(\".\"+s).hasClass(C)?(d.prev(\".\"+s).removeClass(C),d.addClass(C)):(d.removeClass(\"layui-tree-setLineShort layui-tree-setHide\"),d.children(\".\"+y)[0]?d.prev(\".\"+s).children(\".\"+y).children(\".\"+s).last().removeClass(C):d.siblings(\".\"+s).find(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)})),i(this).next()[0]||d.addClass(C)}if(a.showCheckbox&&i(this).children(\".\"+u).find('input[name=\"layuiTreeCheck\"]')[0].checked){var x=d.children(\".\"+u);x.find('input[name=\"layuiTreeCheck\"]+').click()}return a.dragend&&a.dragend(\"drag success\",d,i(this)),!1}if(r<n){if(i(this).before(d),S(A),a.showLine){var b=d.children(\".\"+y),T=i(this).parents(\".\"+s).eq(0),L=T.children(\".\"+y).children(\".\"+s).last();if(b[0]){d.removeClass(C),b.children(\".\"+s).last().removeClass(C);var h=d.siblings(\".\"+s),v=1;layui.each(h,function(e,a){i(a).children(\".\"+y)[0]||(v=0)}),1==v?T[0]&&(h.children(\".\"+y).addClass(m),h.children(\".\"+y).children(\".\"+s).removeClass(C),L.children(\".\"+y).children(\".\"+s).last().addClass(C).removeClass(m)):d.children(\".\"+y).children(\".\"+s).last().addClass(C),!T.parent(\".\"+y)[0]&&T.next()[0]&&L.removeClass(C)}else T.hasClass(k)||T.addClass(k),T.find(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)});T[0]||(d.addClass(\"layui-tree-setHide\"),d.children(\".\"+y).children(\".\"+s).last().removeClass(C))}if(T[0]&&a.showCheckbox&&T.children(\".\"+u).find('input[name=\"layuiTreeCheck\"]')[0].checked){var x=d.children(\".\"+u);x.find('input[name=\"layuiTreeCheck\"]+').click()}return a.dragend&&a.dragend(\"拖拽成功，插入目标节点上方\",d,i(this)),!1}if(r>w)return e.elem.children(\".\"+s).last().children(\".\"+y).addClass(m),e.elem.append(d),S(A),d.prev().children(\".\"+y).children(\".\"+s).last().removeClass(C),d.addClass(\"layui-tree-setHide\"),d.children(\".\"+y).children(\".\"+s).last().addClass(C),a.dragend&&a.dragend(\"拖拽成功，插入最外层节点\",d,e.elem),!1}})})},g.prototype.events=function(){var e=this,a=e.config,n=e.elem.find(\".layui-tree-checkedFirst\");layui.each(n,function(e,a){i(a).children(\".\"+u).find('input[name=\"layuiTreeCheck\"]+').trigger(\"click\")}),e.elem.find(\".layui-tree-search\").on(\"keyup\",function(){var n=i(this),r=n.val(),l=n.nextAll(),d=[];l.find(\".\"+p).each(function(){var e=i(this).parents(\".\"+u);if(i(this).html().indexOf(r)!=-1){d.push(i(this).parent());var a=function(e){e.addClass(\"layui-tree-searchShow\"),e.parent(\".\"+y)[0]&&a(e.parent(\".\"+y).parent(\".\"+s))};a(e.parent(\".\"+s))}}),l.find(\".\"+u).each(function(){var e=i(this).parent(\".\"+s);e.hasClass(\"layui-tree-searchShow\")||e.addClass(t)}),0==l.find(\".layui-tree-searchShow\").length&&e.elem.append(e.elemNone),a.onsearch&&a.onsearch({elem:d})}),e.elem.find(\".layui-tree-search\").on(\"keydown\",function(){i(this).nextAll().find(\".\"+u).each(function(){var e=i(this).parent(\".\"+s);e.removeClass(\"layui-tree-searchShow \"+t)}),i(\".layui-tree-emptyText\")[0]&&i(\".layui-tree-emptyText\").remove()})},g.prototype.getChecked=function(){var e=this,a=e.config,n=[],r=[];e.elem.find(\".layui-form-checked\").each(function(){n.push(i(this).prev()[0].value)});var l=function(e,a){layui.each(e,function(e,r){layui.each(n,function(e,n){if(r.id==n){var t=i.extend({},r);return delete t.children,a.push(t),r.children&&(t.children=[],l(r.children,t.children)),!0}})})};return l(i.extend({},a.data),r),r},g.prototype.setChecked=function(e){var a=this;a.config;a.elem.find(\".\"+s).each(function(a,n){var r=i(this).data(\"id\"),l=i(n).children(\".\"+u).find('input[name=\"layuiTreeCheck\"]'),t=l.next();if(\"number\"==typeof e){if(r==e)return l[0].checked||t.click(),!1}else i.inArray(r,e)!=-1&&(l[0].checked||t.click())})},l.that={},l.config={},r.reload=function(e,i){var a=l.that[e];return a.reload(i),l.call(a)},r.getChecked=function(e){var i=l.that[e];return i.getChecked()},r.setChecked=function(e,i){var a=l.that[e];return a.setChecked(i)},r.render=function(e){var i=new g(e);return l.call(i)},e(n,r)});"
  },
  {
    "path": "lib/layui/lay/modules/upload.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"layer\",function(e){\"use strict\";var t=layui.$,i=layui.layer,n=layui.hint(),a=layui.device(),o={config:{},set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,r,e,t)}},l=function(){var e=this;return{upload:function(t){e.upload.call(e,t)},reload:function(t){e.reload.call(e,t)},config:e.config}},r=\"upload\",u=\"layui-upload-file\",c=\"layui-upload-form\",f=\"layui-upload-iframe\",s=\"layui-upload-choose\",p=function(e){var i=this;i.config=t.extend({},i.config,o.config,e),i.render()};p.prototype.config={accept:\"images\",exts:\"\",auto:!0,bindAction:\"\",url:\"\",field:\"file\",acceptMime:\"\",method:\"post\",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var i=this,e=i.config;e.elem=t(e.elem),e.bindAction=t(e.bindAction),i.file(),i.events()},p.prototype.file=function(){var e=this,i=e.config,n=e.elemFile=t(['<input class=\"'+u+'\" type=\"file\" accept=\"'+i.acceptMime+'\" name=\"'+i.field+'\"',i.multiple?\" multiple\":\"\",\">\"].join(\"\")),o=i.elem.next();(o.hasClass(u)||o.hasClass(c))&&o.remove(),a.ie&&a.ie<10&&i.elem.wrap('<div class=\"layui-upload-wrap\"></div>'),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n),a.ie&&a.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,i=e.config,n=t('<iframe id=\"'+f+'\" class=\"'+f+'\" name=\"'+f+'\" frameborder=\"0\"></iframe>'),a=t(['<form target=\"'+f+'\" class=\"'+c+'\" method=\"post\" key=\"set-mine\" enctype=\"multipart/form-data\" action=\"'+i.url+'\">',\"</form>\"].join(\"\"));t(\"#\"+f)[0]||t(\"body\").append(n),i.elem.next().hasClass(c)||(e.elemFile.wrap(a),i.elem.next(\".\"+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i=\"function\"==typeof i?i():i,e.push('<input type=\"hidden\" name=\"'+t+'\" value=\"'+i+'\">')}),e.join(\"\")}()))},p.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return\"input\"===e.tagName.toLocaleLowerCase()&&\"file\"===e.type},p.prototype.preview=function(e){var t=this;window.FileReader&&layui.each(t.chooseFiles,function(t,i){var n=new FileReader;n.readAsDataURL(i),n.onload=function(){e&&e(t,i,this.result)}})},p.prototype.upload=function(e,i){var n,o=this,l=o.config,r=o.elemFile[0],u=function(){var i=0,n=0,a=e||o.files||o.chooseFiles||r.files,u=function(){l.multiple&&i+n===o.fileLength&&\"function\"==typeof l.allDone&&l.allDone({total:o.fileLength,successful:i,aborted:n})};layui.each(a,function(e,a){var r=new FormData;r.append(l.field,a),layui.each(l.data,function(e,t){t=\"function\"==typeof t?t():t,r.append(e,t)}),t.ajax({url:l.url,type:\"post\",data:r,contentType:!1,processData:!1,dataType:\"json\",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,o.msg(\"请求上传接口出现异常\"),m(e),u()}})})},c=function(){var e=t(\"#\"+f);o.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var t,i=e.contents().find(\"body\");try{t=i.text()}catch(n){o.msg(\"获取上传后的响应信息出现异常\"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(\"\"),d(0,t))},30)},d=function(e,t){if(o.elemFile.next(\".\"+s).remove(),r.value=\"\",\"object\"!=typeof t)try{t=JSON.parse(t)}catch(i){return t={},o.msg(\"请对上传接口返回有效JSON\")}\"function\"==typeof l.done&&l.done(t,e||0,function(e){o.upload(e)})},m=function(e){l.auto&&(r.value=\"\"),\"function\"==typeof l.error&&l.error(e||0,function(e){o.upload(e)})},h=l.exts,v=function(){var t=[];return layui.each(e||o.chooseFiles,function(e,i){t.push(i.name)}),t}(),g={preview:function(e){o.preview(e)},upload:function(e,t){var i={};i[e]=t,o.upload(i)},pushFile:function(){return o.files=o.files||{},layui.each(o.chooseFiles,function(e,t){o.files[e]=t}),o.files},resetFile:function(e,t,i){var n=new File([t],i);o.files=o.files||{},o.files[e]=n}},y=function(){if(\"choose\"!==i&&!l.auto||(l.choose&&l.choose(g),\"choose\"!==i))return l.before&&l.before(g),a.ie?a.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\\/\\\\]+\\..+/g)||[]||\"\":v,0!==v.length){switch(l.accept){case\"file\":if(h&&!RegExp(\"\\\\w\\\\.(\"+h+\")$\",\"i\").test(escape(v)))return o.msg(\"选择的文件中包含不支持的格式\"),r.value=\"\";break;case\"video\":if(!RegExp(\"\\\\w\\\\.(\"+(h||\"avi|mp4|wma|rmvb|rm|flash|3gp|flv\")+\")$\",\"i\").test(escape(v)))return o.msg(\"选择的视频中包含不支持的格式\"),r.value=\"\";break;case\"audio\":if(!RegExp(\"\\\\w\\\\.(\"+(h||\"mp3|wav|mid\")+\")$\",\"i\").test(escape(v)))return o.msg(\"选择的音频中包含不支持的格式\"),r.value=\"\";break;default:if(layui.each(v,function(e,t){RegExp(\"\\\\w\\\\.(\"+(h||\"jpg|png|gif|bmp|jpeg$\")+\")\",\"i\").test(escape(t))||(n=!0)}),n)return o.msg(\"选择的图片中包含不支持的格式\"),r.value=\"\"}if(o.fileLength=function(){var t=0,i=e||o.files||o.chooseFiles||r.files;return layui.each(i,function(){t++}),t}(),l.number&&o.fileLength>l.number)return o.msg(\"同时最多只能上传的数量为：\"+l.number);if(l.size>0&&!(a.ie&&a.ie<10)){var F;if(layui.each(o.chooseFiles,function(e,t){if(t.size>1024*l.size){var i=l.size/1024;i=i>=1?i.toFixed(2)+\"MB\":l.size+\"KB\",r.value=\"\",F=i}}),F)return o.msg(\"文件不能超过\"+F)}y()}},p.prototype.reload=function(e){e=e||{},delete e.elem,delete e.bindAction;var i=this,e=i.config=t.extend({},i.config,o.config,e),n=e.elem.next();n.attr({name:e.name,accept:e.acceptMime,multiple:e.multiple})},p.prototype.events=function(){var e=this,i=e.config,o=function(t){e.chooseFiles={},layui.each(t,function(t,i){var n=(new Date).getTime();e.chooseFiles[n+\"-\"+t]=i})},l=function(t,n){var a=e.elemFile,o=t.length>1?t.length+\"个文件\":(t[0]||{}).name||a[0].value.match(/[^\\/\\\\]+\\..+/g)||[]||\"\";a.next().hasClass(s)&&a.next().remove(),e.upload(null,\"choose\"),e.isFile()||i.choose||a.after('<span class=\"layui-inline '+s+'\">'+o+\"</span>\")};i.elem.off(\"upload.start\").on(\"upload.start\",function(){var a=t(this),o=a.attr(\"lay-data\");if(o)try{o=new Function(\"return \"+o)(),e.config=t.extend({},i,o)}catch(l){n.error(\"Upload element property lay-data configuration item has a syntax error: \"+o)}e.config.item=a,e.elemFile[0].click()}),a.ie&&a.ie<10||i.elem.off(\"upload.over\").on(\"upload.over\",function(){var e=t(this);e.attr(\"lay-over\",\"\")}).off(\"upload.leave\").on(\"upload.leave\",function(){var e=t(this);e.removeAttr(\"lay-over\")}).off(\"upload.drop\").on(\"upload.drop\",function(n,a){var r=t(this),u=a.originalEvent.dataTransfer.files||[];r.removeAttr(\"lay-over\"),o(u),i.auto?e.upload(u):l(u)}),e.elemFile.off(\"upload.change\").on(\"upload.change\",function(){var t=this.files||[];o(t),i.auto?e.upload():l(t)}),i.bindAction.off(\"upload.action\").on(\"upload.action\",function(){e.upload()}),i.elem.data(\"haveEvents\")||(e.elemFile.on(\"change\",function(){t(this).trigger(\"upload.change\")}),i.elem.on(\"click\",function(){e.isFile()||t(this).trigger(\"upload.start\")}),i.drag&&i.elem.on(\"dragover\",function(e){e.preventDefault(),t(this).trigger(\"upload.over\")}).on(\"dragleave\",function(e){t(this).trigger(\"upload.leave\")}).on(\"drop\",function(e){e.preventDefault(),t(this).trigger(\"upload.drop\",e)}),i.bindAction.on(\"click\",function(){t(this).trigger(\"upload.action\")}),i.elem.data(\"haveEvents\",!0))},o.render=function(e){var t=new p(e);return l.call(t)},e(r,o)});"
  },
  {
    "path": "lib/layui/lay/modules/util.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;layui.define(\"jquery\",function(t){\"use strict\";var e=layui.$,i={fixbar:function(t){var i,n,a=\"layui-fixbar\",o=\"layui-fixbar-top\",r=e(document),l=e(\"body\");t=e.extend({showHeight:200},t),t.bar1=t.bar1===!0?\"&#xe606;\":t.bar1,t.bar2=t.bar2===!0?\"&#xe607;\":t.bar2,t.bgcolor=t.bgcolor?\"background-color:\"+t.bgcolor:\"\";var c=[t.bar1,t.bar2,\"&#xe604;\"],g=e(['<ul class=\"'+a+'\">',t.bar1?'<li class=\"layui-icon\" lay-type=\"bar1\" style=\"'+t.bgcolor+'\">'+c[0]+\"</li>\":\"\",t.bar2?'<li class=\"layui-icon\" lay-type=\"bar2\" style=\"'+t.bgcolor+'\">'+c[1]+\"</li>\":\"\",'<li class=\"layui-icon '+o+'\" lay-type=\"top\" style=\"'+t.bgcolor+'\">'+c[2]+\"</li>\",\"</ul>\"].join(\"\")),s=g.find(\".\"+o),u=function(){var e=r.scrollTop();e>=t.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};e(\".\"+a)[0]||(\"object\"==typeof t.css&&g.css(t.css),l.append(g),u(),g.find(\"li\").on(\"click\",function(){var i=e(this),n=i.attr(\"lay-type\");\"top\"===n&&e(\"html,body\").animate({scrollTop:0},200),t.click&&t.click.call(this,n)}),r.on(\"scroll\",function(){clearTimeout(n),n=setTimeout(function(){u()},100)}))},countdown:function(t,e,i){var n=this,a=\"function\"==typeof e,o=new Date(t).getTime(),r=new Date(!e||a?(new Date).getTime():e).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=e);var g=setTimeout(function(){n.countdown(t,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],e,g),l<=0&&clearTimeout(g),g},timeAgo:function(t,e){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(t).getTime();return a>6912e5?(a=new Date(t),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),e||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join(\"-\")+\" \"+n[1].join(\":\")):a>=864e5?(a/1e3/60/60/24|0)+\"天前\":a>=36e5?(a/1e3/60/60|0)+\"小时前\":a>=12e4?(a/1e3/60|0)+\"分钟前\":a<0?\"未来\":\"刚刚\"},digit:function(t,e){var i=\"\";t=String(t),e=e||2;for(var n=t.length;n<e;n++)i+=\"0\";return t<Math.pow(10,e)?i+(0|t):t},toDateString:function(t,e){var i=this,n=new Date(t||new Date),a=[i.digit(n.getFullYear(),4),i.digit(n.getMonth()+1),i.digit(n.getDate())],o=[i.digit(n.getHours()),i.digit(n.getMinutes()),i.digit(n.getSeconds())];return e=e||\"yyyy-MM-dd HH:mm:ss\",e.replace(/yyyy/g,a[0]).replace(/MM/g,a[1]).replace(/dd/g,a[2]).replace(/HH/g,o[0]).replace(/mm/g,o[1]).replace(/ss/g,o[2])},escape:function(t){return String(t||\"\").replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")},event:function(t,n,a){n=i.event[t]=e.extend(!0,i.event[t],n)||{},e(\"body\").on(a||\"click\",\"*[\"+t+\"]\",function(){var i=e(this),a=i.attr(t);n[a]&&n[a].call(this,i)})}};!function(t,e,i){\"$:nomunge\";function n(){a=e[l](function(){o.each(function(){var e=t(this),i=e.width(),n=e.height(),a=t.data(this,g);(i!==a.w||n!==a.h)&&e.trigger(c,[a.w=i,a.h=n])}),n()},r[s])}var a,o=t([]),r=t.resize=t.extend(t.resize,{}),l=\"setTimeout\",c=\"resize\",g=c+\"-special-event\",s=\"delay\",u=\"throttleWindow\";r[s]=250,r[u]=!0,t.event.special[c]={setup:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.add(e),t.data(this,g,{w:e.width(),h:e.height()}),1===o.length&&n()},teardown:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.not(e),e.removeData(g),o.length||clearTimeout(a)},add:function(e){function n(e,n,o){var r=t(this),l=t.data(this,g)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[u]&&this[l])return!1;var a;return t.isFunction(e)?(a=e,n):(a=e.handler,void(e.handler=n))}}}(e,window),t(\"util\",i)});"
  },
  {
    "path": "lib/layui/lay/okmodules/okLayer.js",
    "content": "\"use strict\";\nlayui.define([\"layer\"], function (exports) {\n    var okLayer = {\n        /**\n         * confirm()函数二次封装\n         * @param content\n         * @param yesFunction\n         */\n        confirm: function (content, yesFunction) {\n            var options = {skin: okLayer.skinChoose(), icon: 3, title: \"提示\", anim: okLayer.animChoose()};\n            layer.confirm(content, options, yesFunction);\n        },\n        /**\n         * open()函数二次封装,支持在table页面和普通页面打开\n         * @param title\n         * @param content\n         * @param width\n         * @param height\n         * @param successFunction\n\t\t * @param endFunction\n         */\n        open: function (title, content, width, height, successFunction, endFunction) {\n            layer.open({\n                title: title,\n                type: 2,\n                maxmin: true,\n                shade: 0.5,\n                anim: okLayer.animChoose(),\n                area: [width, height],\n                content: content,\n                zIndex: layer.zIndex,\n                skin: okLayer.skinChoose(),\n\t\t\t\tsuccess: successFunction,\n                end: endFunction\n            });\n        },\n        /**\n         * msg()函数二次封装\n         */\n        msg: {\n            // msg弹窗默认消失时间\n            time: 1000,\n            // 绿色勾\n            greenTick: function (content, callbackFunction) {\n                var options = {icon: 1, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            },\n            // 红色叉\n            redCross: function (content, callbackFunction) {\n                var options = {icon: 2, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            },\n            // 黄色问号\n            yellowQuestion: function (content, callbackFunction) {\n                var options = {icon: 3, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            },\n            // 灰色锁\n            grayLock: function (content, callbackFunction) {\n                var options = {icon: 4, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            },\n            // 红色哭脸\n            redCry: function (content, callbackFunction) {\n                var options = {icon: 5, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            },\n            // 绿色笑脸\n            greenLaugh: function (content, callbackFunction) {\n                var options = {icon: 6, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            },\n            // 黄色感叹号\n            yellowSigh: function (content, callbackFunction) {\n                var options = {icon: 7, time: okLayer.msg.time, anim: okLayer.animChoose()};\n                layer.msg(content, options, callbackFunction);\n            }\n        },\n        /**\n         * 皮肤选择\n         * @returns {string}\n         */\n        skinChoose: function () {\n\t\t\tvar storage = window.localStorage;\n\t\t\tvar skin = storage.getItem(\"skin\");\n            if (skin == 1) {\n                // 灰白色\n                return \"\";\n            } else if (skin == 2) {\n                // 墨绿色\n                return \"layui-layer-molv\";\n            } else if (skin == 3) {\n                // 蓝色\n                return \"layui-layer-lan\";\n            } else if (!skin || skin == 4) {\n                // 随机颜色\n\t\t\t\tvar skinArray = [\"\", \"layui-layer-molv\", \"layui-layer-lan\"];\n                return skinArray[Math.floor(Math.random() * skinArray.length)];\n            }\n        },\n        /**\n         * 动画选择\n         * @returns {number}\n         */\n        animChoose: function () {\n\t\t\tvar storage = window.localStorage;\n\t\t\tvar anim = storage.getItem(\"anim\");\n\t\t\tvar animArray = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\"];\n            if (animArray.indexOf(anim) > -1) {\n\t\t\t\t// 用户选择的动画\n                return anim;\n            } else if (!anim || anim == 7) {\n                // 随机动画\n                return Math.floor(Math.random() * animArray.length);\n            }\n        }\n    }\n\n    exports(\"okLayer\", okLayer);\n});\n"
  },
  {
    "path": "lib/layui/lay/okmodules/okMenu.js",
    "content": "\"use strict\";\nlayui.define([\"element\", \"okUtils\"], function (exports) {\n    var element = layui.element;\n    var okUtils = layui.okUtils;\n    var $ = layui.jquery;\n\n    var okMenu = {\n        generatorMenu: function (url, method) {\n            okUtils.ajax(url, method).done(function (response) {\n                var html = \"\";\n                for (var i = 0; i < response.length; i++) {\n                    var d = response[i];\n                    html += okMenu.liHtml(d);\n                    html += \"<a href='javascript:;'>\"\n                    html += okMenu.iconHtml(d) + \" \" + response[i].title;\n                    html += \"</a>\"\n                    var temp = okMenu.createMenu(d.children);\n                    html += temp;\n                    html += \"</li>\";\n                }\n                $(\".layui-nav-tree\").html(html);\n                element.render(\"nav\");\n            }).fail(function (error) {\n                console.log(error)\n            });\n        },\n        liHtml: function (obj) {\n            var html = \"\";\n            if (obj.spread) {\n                html += \"<li class='layui-nav-item layui-nav-itemed'>\";\n            } else {\n                html += \"<li class='layui-nav-item'>\";\n            }\n            return html;\n        },\n        iconHtml: function (obj) {\n            var html = \"\";\n            if (obj.icon) {\n                if (obj.font == \"iconfont\") {\n                    html += \"<i class='iconfont'>\" + obj.icon + \"</i>\";\n                } else if (obj.font == \"layui-icon\") {\n                    html += \"<i class='layui-icon'> \" + obj.icon + \"</i>\";\n                } else {\n                    html += \"<i class='iconfont'>\" + obj.icon + \"</i>\";\n                }\n            } else {\n                console.warn(obj.title, \"icon未定义\");\n            }\n            return html;\n        },\n        createMenu: function (obj) {\n            var html = \"\";\n            if (obj != undefined && obj.length > 0) {\n                html += \"<dl class='layui-nav-child'>\"\n                for (var i = 0; i < obj.length; i++) {\n                    html += \"<dd>\";\n                    html += \"<a href='javascript:;' path='\" + obj[i].path + \"'>\" + okMenu.iconHtml(obj[i]) + \" \" + obj[i].title + \"</a>\";\n                    var children = obj[i].children;\n                    if (children != undefined && children.length > 0) {\n                        html += okMenu.createMenu(children);\n                    }\n                    html += \"</dd>\";\n                }\n                html += \"</dl>\"\n            }\n            return html;\n        }\n    }\n\n    exports(\"okMenu\", okMenu);\n});\n"
  },
  {
    "path": "lib/layui/lay/okmodules/okProgress/nprogress.css",
    "content": "/* Make clicks pass-through */\n#nprogress {\n  pointer-events: none;\n}\n\n#nprogress .bar {\n  background: #29d;\n\n  position: fixed;\n  z-index: 1031;\n  top: 0;\n  left: 0;\n\n  width: 100%;\n  height: 2px;\n}\n\n/* Fancy blur effect */\n#nprogress .peg {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #29d, 0 0 5px #29d;\n  opacity: 1.0;\n\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n      -ms-transform: rotate(3deg) translate(0px, -4px);\n          transform: rotate(3deg) translate(0px, -4px);\n}\n\n/* Remove these to get rid of the spinner */\n#nprogress .spinner {\n  display: block;\n  position: fixed;\n  z-index: 1031;\n  top: 15px;\n  right: 15px;\n}\n\n#nprogress .spinner-icon {\n  width: 18px;\n  height: 18px;\n  box-sizing: border-box;\n\n  border: solid 2px transparent;\n  border-top-color: #29d;\n  border-left-color: #29d;\n  border-radius: 50%;\n\n  -webkit-animation: nprogress-spinner 400ms linear infinite;\n          animation: nprogress-spinner 400ms linear infinite;\n}\n\n.nprogress-custom-parent {\n  overflow: hidden;\n  position: relative;\n}\n\n.nprogress-custom-parent #nprogress .spinner,\n.nprogress-custom-parent #nprogress .bar {\n  position: absolute;\n}\n\n@-webkit-keyframes nprogress-spinner {\n  0%   { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); }\n}\n@keyframes nprogress-spinner {\n  0%   { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n\n"
  },
  {
    "path": "lib/layui/lay/okmodules/okProgress/nprogress.js",
    "content": "layui.define(function (exports) {\n\n    /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n     * @license MIT */\n\n    var obj = (function (root, factory) {\n\n        if (typeof define === 'function' && define.amd) {\n            define(factory);\n        } else if (typeof exports === 'object') {\n            module.exports = factory();\n        } else {\n            root.NProgress = factory();\n        }\n\n    })(this, function () {\n        var NProgress = {};\n\n        NProgress.version = '0.2.0';\n\n        var Settings = NProgress.settings = {\n            minimum: 0.08,\n            easing: 'linear',\n            positionUsing: '',\n            speed: 200,\n            trickle: true,\n            trickleSpeed: 200,\n            showSpinner: true,\n            barSelector: '[role=\"bar\"]',\n            spinnerSelector: '[role=\"spinner\"]',\n            parent: 'body',\n            template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n        };\n\n        /**\n         * Updates configuration.\n         *\n         *     NProgress.configure({\n         *       minimum: 0.1\n         *     });\n         */\n        NProgress.configure = function (options) {\n            var key, value;\n            for (key in options) {\n                value = options[key];\n                if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n            }\n\n            return this;\n        };\n\n        /**\n         * Last number.\n         */\n\n        NProgress.status = null;\n\n        /**\n         * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n         *\n         *     NProgress.set(0.4);\n         *     NProgress.set(1.0);\n         */\n\n        NProgress.set = function (n) {\n            var started = NProgress.isStarted();\n\n            n = clamp(n, Settings.minimum, 1);\n            NProgress.status = (n === 1 ? null : n);\n\n            var progress = NProgress.render(!started),\n                bar = progress.querySelector(Settings.barSelector),\n                speed = Settings.speed,\n                ease = Settings.easing;\n\n            progress.offsetWidth; /* Repaint */\n\n            queue(function (next) {\n                // Set positionUsing if it hasn't already been set\n                if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n                // Add transition\n                css(bar, barPositionCSS(n, speed, ease));\n\n                if (n === 1) {\n                    // Fade out\n                    css(progress, {\n                        transition: 'none',\n                        opacity: 1\n                    });\n                    progress.offsetWidth; /* Repaint */\n\n                    setTimeout(function () {\n                        css(progress, {\n                            transition: 'all ' + speed + 'ms linear',\n                            opacity: 0\n                        });\n                        setTimeout(function () {\n                            NProgress.remove();\n                            next();\n                        }, speed);\n                    }, speed);\n                } else {\n                    setTimeout(next, speed);\n                }\n            });\n\n            return this;\n        };\n\n        NProgress.isStarted = function () {\n            return typeof NProgress.status === 'number';\n        };\n\n        /**\n         * Shows the progress bar.\n         * This is the same as setting the status to 0%, except that it doesn't go backwards.\n         *\n         *     NProgress.start();\n         *\n         */\n        NProgress.start = function () {\n            if (!NProgress.status) NProgress.set(0);\n\n            var work = function () {\n                setTimeout(function () {\n                    if (!NProgress.status) return;\n                    NProgress.trickle();\n                    work();\n                }, Settings.trickleSpeed);\n            };\n\n            if (Settings.trickle) work();\n\n            return this;\n        };\n\n        /**\n         * Hides the progress bar.\n         * This is the *sort of* the same as setting the status to 100%, with the\n         * difference being `done()` makes some placebo effect of some realistic motion.\n         *\n         *     NProgress.done();\n         *\n         * If `true` is passed, it will show the progress bar even if its hidden.\n         *\n         *     NProgress.done(true);\n         */\n\n        NProgress.done = function (force) {\n            if (!force && !NProgress.status) return this;\n\n            return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n        };\n\n        /**\n         * Increments by a random amount.\n         */\n\n        NProgress.inc = function (amount) {\n            var n = NProgress.status;\n\n            if (!n) {\n                return NProgress.start();\n            } else if (n > 1) {\n                return;\n            } else {\n                if (typeof amount !== 'number') {\n                    if (n >= 0 && n < 0.2) {\n                        amount = 0.1;\n                    } else if (n >= 0.2 && n < 0.5) {\n                        amount = 0.04;\n                    } else if (n >= 0.5 && n < 0.8) {\n                        amount = 0.02;\n                    } else if (n >= 0.8 && n < 0.99) {\n                        amount = 0.005;\n                    } else {\n                        amount = 0;\n                    }\n                }\n\n                n = clamp(n + amount, 0, 0.994);\n                return NProgress.set(n);\n            }\n        };\n\n        NProgress.trickle = function () {\n            return NProgress.inc();\n        };\n\n        /**\n         * Waits for all supplied jQuery promises and\n         * increases the progress as the promises resolve.\n         *\n         * @param $promise jQUery Promise\n         */\n        (function () {\n            var initial = 0, current = 0;\n\n            NProgress.promise = function ($promise) {\n                if (!$promise || $promise.state() === \"resolved\") {\n                    return this;\n                }\n\n                if (current === 0) {\n                    NProgress.start();\n                }\n\n                initial++;\n                current++;\n\n                $promise.always(function () {\n                    current--;\n                    if (current === 0) {\n                        initial = 0;\n                        NProgress.done();\n                    } else {\n                        NProgress.set((initial - current) / initial);\n                    }\n                });\n\n                return this;\n            };\n\n        })();\n\n        /**\n         * (Internal) renders the progress bar markup based on the `template`\n         * setting.\n         */\n\n        NProgress.render = function (fromStart) {\n            if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n            addClass(document.documentElement, 'nprogress-busy');\n\n            var progress = document.createElement('div');\n            progress.id = 'nprogress';\n            progress.innerHTML = Settings.template;\n\n            var bar = progress.querySelector(Settings.barSelector),\n                perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n                parent = document.querySelector(Settings.parent),\n                spinner;\n\n            css(bar, {\n                transition: 'all 0 linear',\n                transform: 'translate3d(' + perc + '%,0,0)'\n            });\n\n            if (!Settings.showSpinner) {\n                spinner = progress.querySelector(Settings.spinnerSelector);\n                spinner && removeElement(spinner);\n            }\n\n            if (parent != document.body) {\n                addClass(parent, 'nprogress-custom-parent');\n            }\n\n            parent.appendChild(progress);\n            return progress;\n        };\n\n        /**\n         * Removes the element. Opposite of render().\n         */\n\n        NProgress.remove = function () {\n            removeClass(document.documentElement, 'nprogress-busy');\n            removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n            var progress = document.getElementById('nprogress');\n            progress && removeElement(progress);\n        };\n\n        /**\n         * Checks if the progress bar is rendered.\n         */\n\n        NProgress.isRendered = function () {\n            return !!document.getElementById('nprogress');\n        };\n\n        /**\n         * Determine which positioning CSS rule to use.\n         */\n\n        NProgress.getPositioningCSS = function () {\n            // Sniff on document.body.style\n            var bodyStyle = document.body.style;\n\n            // Sniff prefixes\n            var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n                ('MozTransform' in bodyStyle) ? 'Moz' :\n                    ('msTransform' in bodyStyle) ? 'ms' :\n                        ('OTransform' in bodyStyle) ? 'O' : '';\n\n            if (vendorPrefix + 'Perspective' in bodyStyle) {\n                // Modern browsers with 3D support, e.g. Webkit, IE10\n                return 'translate3d';\n            } else if (vendorPrefix + 'Transform' in bodyStyle) {\n                // Browsers without 3D support, e.g. IE9\n                return 'translate';\n            } else {\n                // Browsers without translate() support, e.g. IE7-8\n                return 'margin';\n            }\n        };\n\n        /**\n         * Helpers\n         */\n\n        function clamp(n, min, max) {\n            if (n < min) return min;\n            if (n > max) return max;\n            return n;\n        }\n\n        /**\n         * (Internal) converts a percentage (`0..1`) to a bar translateX\n         * percentage (`-100%..0%`).\n         */\n\n        function toBarPerc(n) {\n            return (-1 + n) * 100;\n        }\n\n\n        /**\n         * (Internal) returns the correct CSS for changing the bar's\n         * position given an n percentage, and speed and ease from Settings\n         */\n\n        function barPositionCSS(n, speed, ease) {\n            var barCSS;\n\n            if (Settings.positionUsing === 'translate3d') {\n                barCSS = {transform: 'translate3d(' + toBarPerc(n) + '%,0,0)'};\n            } else if (Settings.positionUsing === 'translate') {\n                barCSS = {transform: 'translate(' + toBarPerc(n) + '%,0)'};\n            } else {\n                barCSS = {'margin-left': toBarPerc(n) + '%'};\n            }\n\n            barCSS.transition = 'all ' + speed + 'ms ' + ease;\n\n            return barCSS;\n        }\n\n        /**\n         * (Internal) Queues a function to be executed.\n         */\n\n        var queue = (function () {\n            var pending = [];\n\n            function next() {\n                var fn = pending.shift();\n                if (fn) {\n                    fn(next);\n                }\n            }\n\n            return function (fn) {\n                pending.push(fn);\n                if (pending.length == 1) next();\n            };\n        })();\n\n        /**\n         * (Internal) Applies css properties to an element, similar to the jQuery\n         * css method.\n         *\n         * While this helper does assist with vendor prefixed property names, it\n         * does not perform any manipulation of values prior to setting styles.\n         */\n\n        var css = (function () {\n            var cssPrefixes = ['Webkit', 'O', 'Moz', 'ms'],\n                cssProps = {};\n\n            function camelCase(string) {\n                return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function (match, letter) {\n                    return letter.toUpperCase();\n                });\n            }\n\n            function getVendorProp(name) {\n                var style = document.body.style;\n                if (name in style) return name;\n\n                var i = cssPrefixes.length,\n                    capName = name.charAt(0).toUpperCase() + name.slice(1),\n                    vendorName;\n                while (i--) {\n                    vendorName = cssPrefixes[i] + capName;\n                    if (vendorName in style) return vendorName;\n                }\n\n                return name;\n            }\n\n            function getStyleProp(name) {\n                name = camelCase(name);\n                return cssProps[name] || (cssProps[name] = getVendorProp(name));\n            }\n\n            function applyCss(element, prop, value) {\n                prop = getStyleProp(prop);\n                element.style[prop] = value;\n            }\n\n            return function (element, properties) {\n                var args = arguments,\n                    prop,\n                    value;\n\n                if (args.length == 2) {\n                    for (prop in properties) {\n                        value = properties[prop];\n                        if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n                    }\n                } else {\n                    applyCss(element, args[1], args[2]);\n                }\n            }\n        })();\n\n        /**\n         * (Internal) Determines if an element or space separated list of class names contains a class name.\n         */\n\n        function hasClass(element, name) {\n            var list = typeof element == 'string' ? element : classList(element);\n            return list.indexOf(' ' + name + ' ') >= 0;\n        }\n\n        /**\n         * (Internal) Adds a class to an element.\n         */\n\n        function addClass(element, name) {\n            var oldList = classList(element),\n                newList = oldList + name;\n\n            if (hasClass(oldList, name)) return;\n\n            // Trim the opening space.\n            element.className = newList.substring(1);\n        }\n\n        /**\n         * (Internal) Removes a class from an element.\n         */\n\n        function removeClass(element, name) {\n            var oldList = classList(element),\n                newList;\n\n            if (!hasClass(element, name)) return;\n\n            // Replace the class name.\n            newList = oldList.replace(' ' + name + ' ', ' ');\n\n            // Trim the opening and closing spaces.\n            element.className = newList.substring(1, newList.length - 1);\n        }\n\n        /**\n         * (Internal) Gets a space separated list of the class names on the element.\n         * The list is wrapped with a single space on each end to facilitate finding\n         * matches within the list.\n         */\n\n        function classList(element) {\n            return (' ' + (element && element.className || '') + ' ').replace(/\\s+/gi, ' ');\n        }\n\n        /**\n         * (Internal) Removes an element from the DOM.\n         */\n\n        function removeElement(element) {\n            element && element.parentNode && element.parentNode.removeChild(element);\n        }\n\n        return NProgress;\n    });\n\n    // layui.link(\"https://cdn.bootcss.com/nprogress/0.2.0/nprogress.css\");\n    layui.link(\"../../lib/layui/lay/okmodules/okProgress/nprogress.css\");\n    exports(\"nprogress\", obj);\n});\n"
  },
  {
    "path": "lib/layui/lay/okmodules/okProgress/okProgress.js",
    "content": "layui.config({\n    base: \"../../lib/layui/lay/okmodules/\"\n}).extend({\n    nprogress: \"okProgress/nprogress\"\n}).define([\"nprogress\"], function (exports) {\n    \"use strict\";\n\n    // 顶部进度条\n    // NProgress.start();\n    // window.onload = function () {\n    //     NProgress.done();\n    // }\n\n    NProgress.start();\n    if (document.readyState == \"complete\" || document.readyState == \"interactive\") {\n        NProgress.done();\n    }\n\n    exports(\"okProgress\");\n});\n"
  },
  {
    "path": "lib/layui/lay/okmodules/okTab.js",
    "content": "\"use strict\";\nlayui.define([\"element\", \"okUtils\"], function (exports) {\n    var element = window.top.layui.element;\n    var okUtils = layui.okUtils;\n    var $ = layui.jquery;\n\n    var okTab = {\n        add: function (title, path) {\n            // 参数校验\n            if (!okTab.parameterCheck(title, path)) {\n                return false;\n            }\n            // 根据path自动生成tabId值\n            var tabId = okUtils.string.hash(path)\n            // 去重复选项卡\n            var okFrame = $(\".ok-frame\", window.top.document);\n            for (var i = 0; i < okFrame.length; i++) {\n                var _tabId = okFrame.eq(i).attr(\"tab-id\");\n                if (_tabId == tabId) {\n                    element.tabChange(\"ok-tab\", tabId);\n                    event.stopPropagation();\n                    return;\n                }\n            }\n            // 添加选项卡\n            element.tabAdd(\"ok-tab\", {\n                title: title,\n                content: \"<iframe src='\" + path + \"' tab-id='\" + tabId + \"' class='ok-frame' frameborder='0' scrolling='yes' width='100%' height='100%'></iframe>\",\n                id: tabId\n            });\n            // 切换选项卡\n            element.tabChange(\"ok-tab\", tabId);\n        },\n        /**\n         * 参数校验\n         * @param title\n         * @param path\n         * @param tabId\n         * @returns {boolean}\n         */\n        parameterCheck: function (title, path) {\n            if (title == undefined || title == \"\") {\n                console.error(\"title未定义\")\n                return false;\n            }\n            if (path == undefined || path == \"\") {\n                console.error(\"path未定义\")\n                return false;\n            }\n            return true;\n        }\n    }\n\n    exports(\"okTab\", okTab);\n});\n"
  },
  {
    "path": "lib/layui/lay/okmodules/okUtils.js",
    "content": "\"use strict\";\nlayui.define(\"layer\", function (exports) {\n    var $ = layui.jquery;\n    var okUtils = {\n        isFrontendBackendSeparate: false,\n        baseUrl: \"http://rap2api.taobao.org/app/mock/233042\",\n        /**\n         * ajax()函数二次封装\n         * @param url\n         * @param type\n         * @param param\n         * @returns {*|*|*}\n         */\n        ajax: function (uri, type, param) {\n            var deferred = $.Deferred();\n            var loadIndex;\n            $.ajax({\n                url: okUtils.isFrontendBackendSeparate ? okUtils.baseUrl + uri : uri,\n                type: type || \"get\",\n                data: param || {},\n                dataType: \"json\",\n                beforeSend: function () {\n                    loadIndex = layer.load(0, {shade: false});\n                },\n                success: function (data) {\n                    if (data.code == 0) {\n                        // 业务正常\n                        deferred.resolve(data.data)\n                    } else {\n                        // 业务异常\n                        layer.msg(data.msg, {icon: 7, time: 2000});\n                        deferred.reject(\"okUtils.ajax warn: \" + data.msg);\n                    }\n                },\n                complete: function () {\n                    layer.close(loadIndex);\n                },\n                error: function () {\n                    layer.close(loadIndex);\n                    layer.msg(\"服务器错误\", {icon: 2, time: 2000});\n                    deferred.reject(\"okUtils.ajax error: 服务器错误\");\n                }\n            });\n            return deferred.promise();\n        },\n        table: {\n            /**\n             * 主要用于针对表格批量操作操作之前的检查\n             * @param table\n             * @returns {string}\n             */\n            batchCheck: function (table) {\n                var checkStatus = table.checkStatus(\"tableId\");\n                var rows = checkStatus.data.length;\n                if (rows > 0) {\n                    var idsStr = \"\";\n                    for (var i = 0; i < checkStatus.data.length; i++) {\n                        idsStr += checkStatus.data[i].id + \",\";\n                    }\n                    return idsStr;\n                } else {\n                    layer.msg(\"未选择有效数据\", {offset: \"t\", anim: 6});\n                }\n            },\n            /**\n             * 在表格页面操作成功后弹窗提示\n             * @param content\n             */\n            successMsg: function (content) {\n                layer.msg(content, {icon: 1, time: 1000}, function () {\n                    // 刷新当前页table数据\n                    $(\".layui-laypage-btn\")[0].click();\n                });\n            }\n        },\n        date: {\n            /**\n             * 格式化日期时间\n             * @param date\n             * @param fmt\n             * @returns {*}\n             */\n            dateFormat: function (date, fmt) {\n                var o = {\n                    \"M+\": date.getMonth() + 1,\n                    \"d+\": date.getDate(),\n                    \"h+\": date.getHours(),\n                    \"m+\": date.getMinutes(),\n                    \"s+\": date.getSeconds(),\n                    \"q+\": Math.floor((date.getMonth() + 3) / 3),\n                    \"S\": date.getMilliseconds()\n                };\n                if (/(y+)/.test(fmt))\n                    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n                for (var k in o)\n                    if (new RegExp(\"(\" + k + \")\").test(fmt))\n                        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\n                return fmt;\n            }\n        },\n        string: {\n            /**\n             * 为字符串生成hash值\n             * @param value\n             * @returns {number}\n             */\n            hash: function (value) {\n                var hash = 1315423911, i, ch;\n                for (i = value.length - 1; i >= 0; i--) {\n                    ch = value.charCodeAt(i);\n                    hash ^= ((hash << 5) + ch + (hash >> 2));\n                }\n                return (hash & 0x7FFFFFFF);\n            }\n        },\n        number: {\n            /**\n             * 判断是否为一个正常的数字\n             * @param num\n             */\n            isNumber: function (num) {\n                if (num && !isNaN(num)) {\n                    return true;\n                }\n                return false;\n            },\n            /**\n             * 判断一个数字是否包括在某个范围\n             * @param num\n             * @param begin\n             * @param end\n             */\n            isNumberWith: function (num, begin, end) {\n                if (this.isNumber(num)) {\n                    if (num >= begin && num <= end) {\n                        return true;\n                    }\n                    return false;\n                }\n            },\n        },\n        mockApi: {\n            login: \"http://rap2api.taobao.org/app/mock/233042/login\",\n            menu: {\n                list: \"http://rap2api.taobao.org/app/mock/233042/menu/list\"\n            },\n            user: {\n                list: \"http://rap2api.taobao.org/app/mock/233042/user/list\",\n                update: \"http://rap2api.taobao.org/app/mock/233042/user/update\",\n                add: \"http://rap2api.taobao.org/app/mock/233042/user/add\",\n                delete: \"http://rap2api.taobao.org/app/mock/233042/user/delete\",\n                startOrStop: \"http://rap2api.taobao.org/app/mock/233042/user/start-or-stop\",\n            },\n            role: {\n                list: \"http://rap2api.taobao.org/app/mock/233042/role/list\"\n            },\n            permission: {\n                list: \"http://rap2api.taobao.org/app/mock/233042/permission/list\"\n            },\n            article: {\n                list: \"http://rap2api.taobao.org/app/mock/233042/article/list\"\n            },\n            log: {\n                list: \"http://rap2api.taobao.org/app/mock/233042/log/list\"\n            },\n            message: {\n                list: \"https://easy-mock.com/mock/5d0ce725424f15399a6c2068/okadmin/message/list\"\n            }\n        }\n    }\n\n    exports(\"okUtils\", okUtils);\n});\n"
  },
  {
    "path": "lib/layui/lay/okmodules/treetable/treetable.css",
    "content": ".treeTable-empty {\n    width: 20px;\n    display: inline-block;\n}\n\n.treeTable-icon {\n    cursor: pointer;\n}\n\n.treeTable-icon .layui-icon-triangle-d:before {\n    content: \"\\e623\";\n}\n\n.treeTable-icon.open .layui-icon-triangle-d:before {\n    content: \"\\e625\";\n    background-color: transparent;\n}\n\n"
  },
  {
    "path": "lib/layui/lay/okmodules/treetable/treetable.js",
    "content": "layui.define(['layer', 'table'], function (exports) {\n    var $ = layui.jquery;\n    var layer = layui.layer;\n    var table = layui.table;\n\n    var treetable = {\n        // 渲染树形表格\n        render: function (param) {\n            // 检查参数\n            if (!treetable.checkParam(param)) {\n                return;\n            }\n            // 获取数据\n            if (param.data) {\n                treetable.init(param, param.data);\n            } else {\n                $.getJSON(param.url, param.where, function (res) {\n                    treetable.init(param, res.data);\n                });\n            }\n        },\n        // 渲染表格\n        init: function (param, data) {\n            var mData = [];\n            var doneCallback = param.done;\n            var tNodes = data;\n            // 补上id和pid字段\n            for (var i = 0; i < tNodes.length; i++) {\n                var tt = tNodes[i];\n                if (!tt.id) {\n                    if (!param.treeIdName) {\n                        layer.msg('参数treeIdName不能为空', {icon: 5});\n                        return;\n                    }\n                    tt.id = tt[param.treeIdName];\n                }\n                if (!tt.pid) {\n                    if (!param.treePidName) {\n                        layer.msg('参数treePidName不能为空', {icon: 5});\n                        return;\n                    }\n                    tt.pid = tt[param.treePidName];\n                }\n            }\n\n            // 对数据进行排序\n            var sort = function (s_pid, data) {\n                for (var i = 0; i < data.length; i++) {\n                    if (data[i].pid == s_pid) {\n                        var len = mData.length;\n                        if (len > 0 && mData[len - 1].id == s_pid) {\n                            mData[len - 1].isParent = true;\n                        }\n                        mData.push(data[i]);\n                        sort(data[i].id, data);\n                    }\n                }\n            };\n            sort(param.treeSpid, tNodes);\n\n            // 重写参数\n            param.url = undefined;\n            param.data = mData;\n            param.page = {\n                count: param.data.length,\n                limit: param.data.length\n            };\n            param.cols[0][param.treeColIndex].templet = function (d) {\n                var mId = d.id;\n                var mPid = d.pid;\n                var isDir = d.isParent;\n                var emptyNum = treetable.getEmptyNum(mPid, mData);\n                var iconHtml = '';\n                for (var i = 0; i < emptyNum; i++) {\n                    iconHtml += '<span class=\"treeTable-empty\"></span>';\n                }\n                if (isDir) {\n                    iconHtml += '<i class=\"layui-icon layui-icon-triangle-d\"></i> <i class=\"layui-icon layui-icon-layer\"></i>';\n                } else {\n                    iconHtml += '<i class=\"layui-icon layui-icon-file\"></i>';\n                }\n                iconHtml += '&nbsp;&nbsp;';\n                var ttype = isDir ? 'dir' : 'file';\n                var vg = '<span class=\"treeTable-icon open\" lay-tid=\"' + mId + '\" lay-tpid=\"' + mPid + '\" lay-ttype=\"' + ttype + '\">';\n                return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '</span>'\n            };\n\n            param.done = function (res, curr, count) {\n                $(param.elem).next().addClass('treeTable');\n                $('.treeTable .layui-table-page').css('display', 'none');\n                $(param.elem).next().attr('treeLinkage', param.treeLinkage);\n                // 绑定事件换成对body绑定\n                /*$('.treeTable .treeTable-icon').click(function () {\n                    treetable.toggleRows($(this), param.treeLinkage);\n                });*/\n                if (param.treeDefaultClose) {\n                    treetable.foldAll(param.elem);\n                }\n                if (doneCallback) {\n                    doneCallback(res, curr, count);\n                }\n            };\n\n            // 渲染表格\n            table.render(param);\n        },\n        // 计算缩进的数量\n        getEmptyNum: function (pid, data) {\n            var num = 0;\n            if (!pid) {\n                return num;\n            }\n            var tPid;\n            for (var i = 0; i < data.length; i++) {\n                if (pid == data[i].id) {\n                    num += 1;\n                    tPid = data[i].pid;\n                    break;\n                }\n            }\n            return num + treetable.getEmptyNum(tPid, data);\n        },\n        // 展开/折叠行\n        toggleRows: function ($dom, linkage) {\n            var type = $dom.attr('lay-ttype');\n            if ('file' == type) {\n                return;\n            }\n            var mId = $dom.attr('lay-tid');\n            var isOpen = $dom.hasClass('open');\n            if (isOpen) {\n                $dom.removeClass('open');\n            } else {\n                $dom.addClass('open');\n            }\n            $dom.closest('tbody').find('tr').each(function () {\n                var $ti = $(this).find('.treeTable-icon');\n                var pid = $ti.attr('lay-tpid');\n                var ttype = $ti.attr('lay-ttype');\n                var tOpen = $ti.hasClass('open');\n                if (mId == pid) {\n                    if (isOpen) {\n                        $(this).hide();\n                        if ('dir' == ttype && tOpen == isOpen) {\n                            $ti.trigger('click');\n                        }\n                    } else {\n                        $(this).show();\n                        if (linkage && 'dir' == ttype && tOpen == isOpen) {\n                            $ti.trigger('click');\n                        }\n                    }\n                }\n            });\n        },\n        // 检查参数\n        checkParam: function (param) {\n            if (!param.treeSpid && param.treeSpid != 0) {\n                layer.msg('参数treeSpid不能为空', {icon: 5});\n                return false;\n            }\n\n            if (!param.treeColIndex && param.treeColIndex != 0) {\n                layer.msg('参数treeColIndex不能为空', {icon: 5});\n                return false;\n            }\n            return true;\n        },\n        // 展开所有\n        expandAll: function (dom) {\n            $(dom).next('.treeTable').find('.layui-table-body tbody tr').each(function () {\n                var $ti = $(this).find('.treeTable-icon');\n                var ttype = $ti.attr('lay-ttype');\n                var tOpen = $ti.hasClass('open');\n                if ('dir' == ttype && !tOpen) {\n                    $ti.trigger('click');\n                }\n            });\n        },\n        // 折叠所有\n        foldAll: function (dom) {\n            $(dom).next('.treeTable').find('.layui-table-body tbody tr').each(function () {\n                var $ti = $(this).find('.treeTable-icon');\n                var ttype = $ti.attr('lay-ttype');\n                var tOpen = $ti.hasClass('open');\n                if ('dir' == ttype && tOpen) {\n                    $ti.trigger('click');\n                }\n            });\n        }\n    };\n\n    layui.link('../../lib/layui/lay/okmodules/treetable/treetable.css');\n\n    // 给图标列绑定事件\n    $('body').on('click', '.treeTable .treeTable-icon', function () {\n        var treeLinkage = $(this).parents('.treeTable').attr('treeLinkage');\n        if ('true' == treeLinkage) {\n            treetable.toggleRows($(this), true);\n        } else {\n            treetable.toggleRows($(this), false);\n        }\n    });\n\n    exports('treetable', treetable);\n});\n"
  },
  {
    "path": "lib/layui/layui.all.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */\n ;!function(e){\"use strict\";var t=document,o={modules:{},status:{},timeout:10,event:{}},n=function(){this.v=\"2.5.4\"},r=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,o=t.scripts,n=o.length-1,r=n;r>0;r--)if(\"interactive\"===o[r].readyState){e=o[r].src;break}return e||o[n].src}();return e.substring(0,e.lastIndexOf(\"/\")+1)}(),i=function(t){e.console&&console.error&&console.error(\"Layui hint: \"+t)},a=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),u={layer:\"modules/layer\",laydate:\"modules/laydate\",laypage:\"modules/laypage\",laytpl:\"modules/laytpl\",layim:\"modules/layim\",layedit:\"modules/layedit\",form:\"modules/form\",upload:\"modules/upload\",transfer:\"modules/transfer\",tree:\"modules/tree\",table:\"modules/table\",element:\"modules/element\",rate:\"modules/rate\",colorpicker:\"modules/colorpicker\",slider:\"modules/slider\",carousel:\"modules/carousel\",flow:\"modules/flow\",util:\"modules/util\",code:\"modules/code\",jquery:\"modules/jquery\",mobile:\"modules/mobile\",\"layui.all\":\"../layui.all\"};n.prototype.cache=o,n.prototype.define=function(e,t){var n=this,r=\"function\"==typeof e,i=function(){var e=function(e,t){layui[e]=t,o.status[e]=!0};return\"function\"==typeof t&&t(function(n,r){e(n,r),o.callback[n]=function(){t(e)}}),this};return r&&(t=e,e=[]),!layui[\"layui.all\"]&&layui[\"layui.mobile\"]?i.call(n):(n.use(e,i),n)},n.prototype.use=function(e,n,l){function s(e,t){var n=\"PLaySTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/;(\"load\"===e.type||n.test((e.currentTarget||e.srcElement).readyState))&&(o.modules[f]=t,d.removeChild(v),function r(){return++m>1e3*o.timeout/4?i(f+\" is not a valid module\"):void(o.status[f]?c():setTimeout(r,4))}())}function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),n,l):\"function\"==typeof n&&n.apply(layui,l)}var y=this,p=o.dir=o.dir?o.dir:r,d=t.getElementsByTagName(\"head\")[0];e=\"string\"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,o){\"jquery\"===o&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var f=e[0],m=0;if(l=l||[],o.host=o.host||(p.match(/\\/\\/([\\s\\S]+?)\\//)||[\"//\"+location.host+\"/\"])[0],0===e.length||layui[\"layui.all\"]&&u[f]||!layui[\"layui.all\"]&&layui[\"layui.mobile\"]&&u[f])return c(),y;if(o.modules[f])!function g(){return++m>1e3*o.timeout/4?i(f+\" is not a valid module\"):void(\"string\"==typeof o.modules[f]&&o.status[f]?c():setTimeout(g,4))}();else{var v=t.createElement(\"script\"),h=(u[f]?p+\"lay/\":/^\\{\\/\\}/.test(y.modules[f])?\"\":o.base||\"\")+(y.modules[f]||f)+\".js\";h=h.replace(/^\\{\\/\\}/,\"\"),v.async=!0,v.charset=\"utf-8\",v.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||\"\";return e?\"?v=\"+e:\"\"}(),d.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf(\"[native code\")<0||a?v.addEventListener(\"load\",function(e){s(e,h)},!1):v.attachEvent(\"onreadystatechange\",function(e){s(e,h)}),o.modules[f]=h}return y},n.prototype.getStyle=function(t,o){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?\"getPropertyValue\":\"getAttribute\"](o)},n.prototype.link=function(e,n,r){var a=this,u=t.createElement(\"link\"),l=t.getElementsByTagName(\"head\")[0];\"string\"==typeof n&&(r=n);var s=(r||e).replace(/\\.|\\//g,\"\"),c=u.id=\"layuicss-\"+s,y=0;return u.rel=\"stylesheet\",u.href=e+(o.debug?\"?v=\"+(new Date).getTime():\"\"),u.media=\"all\",t.getElementById(c)||l.appendChild(u),\"function\"!=typeof n?a:(function p(){return++y>1e3*o.timeout/100?i(e+\" timeout\"):void(1989===parseInt(a.getStyle(t.getElementById(c),\"width\"))?function(){n()}():setTimeout(p,100))}(),a)},o.callback={},n.prototype.factory=function(e){if(layui[e])return\"function\"==typeof o.callback[e]?o.callback[e]:null},n.prototype.addcss=function(e,t,n){return layui.link(o.dir+\"css/\"+e,t,n)},n.prototype.img=function(e,t,o){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,\"function\"==typeof t&&t(n)},void(n.onerror=function(e){n.onerror=null,\"function\"==typeof o&&o(e)}))},n.prototype.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},n.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),n.prototype.extend=function(e){var t=this;e=e||{};for(var o in e)t[o]||t.modules[o]?i(\"模块名 \"+o+\" 已被占用\"):t.modules[o]=e[o];return t},n.prototype.router=function(e){var t=this,e=e||location.hash,o={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||\"\"};return/^#\\//.test(e)?(e=e.replace(/^#\\//,\"\"),o.href=\"/\"+e,e=e.replace(/([^#])(#.*$)/,\"$1\").split(\"/\")||[],t.each(e,function(e,t){/^\\w+=/.test(t)?function(){t=t.split(\"=\"),o.search[t[0]]=t[1]}():o.path.push(t)}),o):o},n.prototype.data=function(t,o,n){if(t=t||\"layui\",n=n||localStorage,e.JSON&&e.JSON.parse){if(null===o)return delete n[t];o=\"object\"==typeof o?o:{key:o};try{var r=JSON.parse(n[t])}catch(i){var r={}}return\"value\"in o&&(r[o.key]=o.value),o.remove&&delete r[o.key],n[t]=JSON.stringify(r),o.key?r[o.key]:r}},n.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},n.prototype.device=function(t){var o=navigator.userAgent.toLowerCase(),n=function(e){var t=new RegExp(e+\"/([^\\\\s\\\\_\\\\-]+)\");return e=(o.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(o)?\"windows\":/linux/.test(o)?\"linux\":/iphone|ipod|ipad|ios/.test(o)?\"ios\":/mac/.test(o)?\"mac\":void 0}(),ie:function(){return!!(e.ActiveXObject||\"ActiveXObject\"in e)&&((o.match(/msie\\s(\\d+)/)||[])[1]||\"11\")}(),weixin:n(\"micromessenger\")};return t&&!r[t]&&(r[t]=n(t)),r.android=/android/.test(o),r.ios=\"ios\"===r.os,r},n.prototype.hint=function(){return{error:i}},n.prototype.each=function(e,t){var o,n=this;if(\"function\"!=typeof t)return n;if(e=e||[],e.constructor===Object){for(o in e)if(t.call(e[o],o,e[o]))break}else for(o=0;o<e.length&&!t.call(e[o],o,e[o]);o++);return n},n.prototype.sort=function(e,t,o){var n=JSON.parse(JSON.stringify(e||[]));return t?(n.sort(function(e,o){var n=/^-?\\d+$/,r=e[t],i=o[t];return n.test(r)&&(r=parseFloat(r)),n.test(i)&&(i=parseFloat(i)),r&&!i?1:!r&&i?-1:r>i?1:r<i?-1:0}),o&&n.reverse(),n):n},n.prototype.stope=function(t){t=t||e.event;try{t.stopPropagation()}catch(o){t.cancelBubble=!0}},n.prototype.onevent=function(e,t,o){return\"string\"!=typeof e||\"function\"!=typeof o?this:n.event(e,t,null,o)},n.prototype.event=n.event=function(e,t,n,r){var i=this,a=null,u=t.match(/\\((.*)\\)$/)||[],l=(e+\".\"+t).replace(u[0],\"\"),s=u[1]||\"\",c=function(e,t){var o=t&&t.call(i,n);o===!1&&null===a&&(a=!1)};return r?(o.event[l]=o.event[l]||{},o.event[l][s]=[r],this):(layui.each(o.event[l],function(e,t){return\"{*}\"===s?void layui.each(t,c):(\"\"===e&&layui.each(t,c),void(s&&e===s&&layui.each(t,c)))}),a)},e.layui=new n}(window);layui.define(function(a){var i=layui.cache;layui.config({dir:i.dir.replace(/lay\\/dest\\/$/,\"\")}),a(\"layui.all\",layui.v)});layui.define(function(e){\"use strict\";var r={open:\"{{\",close:\"}}\"},c={exp:function(e){return new RegExp(e,\"g\")},query:function(e,c,t){var o=[\"#([\\\\s\\\\S])+?\",\"([^{#}])*?\"][e||0];return n((c||\"\")+r.open+o+r.close+(t||\"\"))},escape:function(e){return String(e||\"\").replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")},error:function(e,r){var c=\"Laytpl Error：\";return\"object\"==typeof console&&console.error(c+e+\"\\n\"+(r||\"\")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n(\"^\"+r.open+\"#\",\"\"),l=n(r.close+\"$\",\"\");e=e.replace(/\\s+|\\r|\\t|\\n/g,\" \").replace(n(r.open+\"#\"),r.open+\"# \").replace(n(r.close+\"}\"),\"} \"+r.close).replace(/\\\\/g,\"\\\\\\\\\").replace(n(r.open+\"!(.+?)!\"+r.close),function(e){return e=e.replace(n(\"^\"+r.open+\"!\"),\"\").replace(n(\"!\"+r.close),\"\").replace(n(r.open+\"|\"+r.close),function(e){return e.replace(/(.)/g,\"\\\\$1\")})}).replace(/(?=\"|')/g,\"\\\\\").replace(c.query(),function(e){return e=e.replace(a,\"\").replace(l,\"\"),'\";'+e.replace(/\\\\/g,\"\")+';view+=\"'}).replace(c.query(1),function(e){var c='\"+(';return e.replace(/\\s/g,\"\")===r.open+r.close?\"\":(e=e.replace(n(r.open+\"|\"+r.close),\"\"),/^=/.test(e)&&(e=e.replace(/^=/,\"\"),c='\"+_escape_('),c+e.replace(/\\\\/g,\"\")+')+\"')}),e='\"use strict\";var view = \"'+e+'\";return view;';try{return o.cache=e=new Function(\"d, _escape_\",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error(\"no data\")};var o=function(e){return\"string\"!=typeof e?c.error(\"Template not found\"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v=\"1.2.0\",e(\"laytpl\",o)});layui.define(function(e){\"use strict\";var a=document,t=\"getElementById\",n=\"getElementsByTagName\",i=\"laypage\",r=\"layui-disabled\",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if(\"object\"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups=\"groups\"in a?0|a.groups:5;a.layout=\"object\"==typeof a.layout?a.layout:[\"prev\",\"page\",\"next\"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits=\"object\"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev=\"prev\"in a?a.prev:\"&#x4E0A;&#x4E00;&#x9875;\",a.next=\"next\"in a?a.next:\"&#x4E0B;&#x4E00;&#x9875;\";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?'<a href=\"javascript:;\" class=\"layui-laypage-prev'+(1==a.curr?\" \"+r:\"\")+'\" data-page=\"'+(a.curr-1)+'\">'+a.prev+\"</a>\":\"\"}(),page:function(){var e=[];if(a.count<1)return\"\";n>1&&a.first!==!1&&0!==t&&e.push('<a href=\"javascript:;\" class=\"layui-laypage-first\" data-page=\"1\"  title=\"&#x9996;&#x9875;\">'+(a.first||1)+\"</a>\");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r<t-1&&(r=u-t+1),a.first!==!1&&r>2&&e.push('<span class=\"layui-laypage-spr\">&#x2026;</span>');r<=u;r++)r===a.curr?e.push('<span class=\"layui-laypage-curr\"><em class=\"layui-laypage-em\" '+(/^#/.test(a.theme)?'style=\"background-color:'+a.theme+';\"':\"\")+\"></em><em>\"+r+\"</em></span>\"):e.push('<a href=\"javascript:;\" data-page=\"'+r+'\">'+r+\"</a>\");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1<a.pages&&e.push('<span class=\"layui-laypage-spr\">&#x2026;</span>'),0!==t&&e.push('<a href=\"javascript:;\" class=\"layui-laypage-last\" title=\"&#x5C3E;&#x9875;\"  data-page=\"'+a.pages+'\">'+(a.last||a.pages)+\"</a>\")),e.join(\"\")}(),next:function(){return a.next?'<a href=\"javascript:;\" class=\"layui-laypage-next'+(a.curr==a.pages?\" \"+r:\"\")+'\" data-page=\"'+(a.curr+1)+'\">'+a.next+\"</a>\":\"\"}(),count:'<span class=\"layui-laypage-count\">共 '+a.count+\" 条</span>\",limit:function(){var e=['<span class=\"layui-laypage-limits\"><select lay-ignore>'];return layui.each(a.limits,function(t,n){e.push('<option value=\"'+n+'\"'+(n===a.limit?\"selected\":\"\")+\">\"+n+\" 条/页</option>\")}),e.join(\"\")+\"</select></span>\"}(),refresh:['<a href=\"javascript:;\" data-page=\"'+a.curr+'\" class=\"layui-laypage-refresh\">','<i class=\"layui-icon layui-icon-refresh\"></i>',\"</a>\"].join(\"\"),skip:function(){return['<span class=\"layui-laypage-skip\">&#x5230;&#x7B2C;','<input type=\"text\" min=\"1\" value=\"'+a.curr+'\" class=\"layui-input\">','&#x9875;<button type=\"button\" class=\"layui-laypage-btn\">&#x786e;&#x5b9a;</button>',\"</span>\"].join(\"\")}()};return['<div class=\"layui-box layui-laypage layui-laypage-'+(a.theme?/^#/.test(a.theme)?\"molv\":a.theme:\"default\")+'\" id=\"layui-laypage-'+a.index+'\">',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join(\"\")}(),\"</div>\"].join(\"\")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n](\"button\")[0],l=e[n](\"input\")[0],p=e[n](\"select\")[0],c=function(){var e=0|l.value.replace(/\\s|\\D/g,\"\");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;o<y;o++)\"a\"===r[o].nodeName.toLowerCase()&&s.on(r[o],\"click\",function(){var e=0|this.getAttribute(\"data-page\");e<1||e>i.pages||(i.curr=e,t.render())});p&&s.on(p,\"change\",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,\"click\",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n](\"input\")[0];t&&s.on(t,\"keyup\",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\\D/.test(n)&&(this.value=n.replace(/\\D/,\"\")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t](\"layui-laypage-\"+i.index);n.jump(s),i.hash&&!e&&(location.hash=\"!\"+i.hash+\"=\"+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent(\"on\"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)});!function(){\"use strict\";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if(\"interactive\"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf(\"/\")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?\"getPropertyValue\":\"getAttribute\"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName(\"head\")[0],o=document.createElement(\"link\");\"string\"==typeof a&&(i=a);var s=(i||e).replace(/\\.|\\//g,\"\"),l=\"layuicss-\"+s,d=0;o.rel=\"stylesheet\",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),\"function\"==typeof a&&!function c(){return++d>80?window.console&&console.error(\"laydate.css: Invalid\"):void(1989===parseInt(t.getStyle(document.getElementById(l),\"width\"))?a():setTimeout(c,100))}()}}},n={v:\"5.0.9\",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i=\"laydate\",r=\"\",o=(e?\"modules/laydate/\":\"theme/\")+\"default/laydate.css?v=\"+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i=\"laydate\",r=\".layui-laydate\",o=\"layui-this\",s=\"laydate-disabled\",l=\"开始日期超出了结束日期<br>建议重新选择\",d=[100,2e5],c=\"layui-laydate-static\",m=\"layui-laydate-list\",u=\"laydate-selected\",h=\"layui-laydate-hint\",y=\"laydate-day-prev\",f=\"laydate-day-next\",p=\"layui-laydate-footer\",g=\".laydate-btns-confirm\",v=\"laydate-time-text\",D=\".laydate-btns-time\",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n=\"object\"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t<n.length;t++)this.push(n[t])};C.prototype=[],C.prototype.constructor=C,w.extend=function(){var e=1,t=arguments,n=function(e,t){e=e||(t.constructor===Array?[]:{});for(var a in t)e[a]=t[a]&&t[a].constructor===Object?n(e[a],t[a]):t[a];return e};for(t[0]=\"object\"==typeof t[0]?t[0]:{};e<t.length;e++)\"object\"==typeof t[e]&&n(t[0],t[e]);return t[0]},w.ie=function(){var e=navigator.userAgent.toLowerCase();return!!(window.ActiveXObject||\"ActiveXObject\"in window)&&((e.match(/msie\\s(\\d+)/)||[])[1]||\"11\")}(),w.stope=function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},w.each=function(e,t){var n,a=this;if(\"function\"!=typeof t)return a;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return a},w.digit=function(e,t,n){var a=\"\";e=String(e),t=t||2;for(var i=e.length;i<t;i++)a+=\"0\";return e<Math.pow(10,t)?a+(0|e):e},w.elem=function(e,t){var n=document.createElement(e);return w.each(t||{},function(e,t){n.setAttribute(e,t)}),n},C.addStr=function(e,t){return e=e.replace(/\\s+/,\" \"),t=t.replace(/\\s+/,\" \").split(\" \"),w.each(t,function(t,n){new RegExp(\"\\\\b\"+n+\"\\\\b\").test(e)||(e=e+\" \"+n)}),e.replace(/^\\s|\\s$/,\"\")},C.removeStr=function(e,t){return e=e.replace(/\\s+/,\" \"),t=t.replace(/\\s+/,\" \").split(\" \"),w.each(t,function(t,n){var a=new RegExp(\"\\\\b\"+n+\"\\\\b\");a.test(e)&&(e=e.replace(a,\"\"))}),e.replace(/\\s+/,\" \").replace(/^\\s|\\s$/,\"\")},C.prototype.find=function(e){var t=this,n=0,a=[],i=\"object\"==typeof e;return this.each(function(r,o){for(var s=i?[e]:o.querySelectorAll(e||null);n<s.length;n++)a.push(s[n]);t.shift()}),i||(t.selector=(t.selector?t.selector+\" \":\"\")+e),w.each(a,function(e,n){t.push(n)}),t},C.prototype.each=function(e){return w.each.call(this,this,e)},C.prototype.addClass=function(e,t){return this.each(function(n,a){a.className=C[t?\"removeStr\":\"addStr\"](a.className,e)})},C.prototype.removeClass=function(e){return this.addClass(e,!0)},C.prototype.hasClass=function(e){var t=!1;return this.each(function(n,a){new RegExp(\"\\\\b\"+e+\"\\\\b\").test(a.className)&&(t=!0)}),t},C.prototype.attr=function(e,t){var n=this;return void 0===t?function(){if(n.length>0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){\"object\"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent(\"on\"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent(\"on\"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:\"date\",range:!1,format:\"yyyy-MM-dd\",value:null,isInitValue:!0,min:\"1900-1-1\",max:\"2099-12-31\",trigger:\"focus\",show:!1,showBottom:!0,btns:[\"clear\",\"now\",\"confirm\"],lang:\"cn\",theme:\"default\",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],time:[\"时\",\"分\",\"秒\"],timeTips:\"选择时间\",startTime:\"开始时间\",endTime:\"结束时间\",dateTips:\"返回日期\",month:[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],tools:{confirm:\"确定\",clear:\"清空\",now:\"现在\"}},en:{weeks:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],time:[\"Hours\",\"Minutes\",\"Seconds\"],timeTips:\"Select Time\",startTime:\"Start Time\",endTime:\"End Time\",dateTips:\"Select Date\",month:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],tools:{confirm:\"Confirm\",clear:\"Clear\",now:\"Now\"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n=\"yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s\",a=\"static\"===t.position,i={year:\"yyyy\",month:\"yyyy-MM\",date:\"yyyy-MM-dd\",time:\"HH:mm:ss\",datetime:\"yyyy-MM-dd HH:mm:ss\"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range=\"-\"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+\"|.\",\"g\"))||[],e.EXP_IF=\"\",e.EXP_SPLIT=\"\",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?\"\\\\d{\"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||\"\")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?\"1,4\":/^y$/.test(a)?\"1,308\":\"1,2\"}()+\"}\":\"\\\\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+\"(\"+i+\")\"}),e.EXP_IF=new RegExp(\"^\"+(t.range?e.EXP_IF+\"\\\\s\\\\\"+t.range+\"\\\\s\"+e.EXP_IF:e.EXP_IF)+\"$\"),e.EXP_SPLIT=new RegExp(\"^\"+e.EXP_SPLIT+\"$\",\"\"),e.isInput(t.elem[0])||\"focus\"===t.trigger&&(t.trigger=\"click\"),t.elem.attr(\"lay-key\")||(t.elem.attr(\"lay-key\",e.index),t.eventElem.attr(\"lay-key\",e.index)),t.mark=w.extend({},t.calendar&&\"cn\"===t.lang?{\"0-1-1\":\"元旦\",\"0-2-14\":\"情人\",\"0-3-8\":\"妇女\",\"0-3-12\":\"植树\",\"0-4-1\":\"愚人\",\"0-5-1\":\"劳动\",\"0-5-4\":\"青年\",\"0-6-1\":\"儿童\",\"0-9-10\":\"教师\",\"0-9-18\":\"国耻\",\"0-10-1\":\"国庆\",\"0-12-25\":\"圣诞\"}:{},t.mark),w.each([\"min\",\"max\"],function(e,n){var a=[],i=[];if(\"number\"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r<s?o+r*s:r:o);a=[l.getFullYear(),l.getMonth()+1,l.getDate()],r<s||(i=[l.getHours(),l.getMinutes(),l.getSeconds()])}else a=(t[n].match(/\\d+-\\d+-\\d+/)||[\"\"])[0].split(\"-\"),i=(t[n].match(/\\d+:\\d+:\\d+/)||[\"\"])[0].split(\":\");t[n]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|i[0],minutes:0|i[1],seconds:0|i[2]}}),e.elemID=\"layui-laydate\"+t.elem.attr(\"lay-key\"),(t.show||a)&&e.render(),a||e.events(),t.value&&t.isInitValue&&(t.value.constructor===Date?e.setValue(e.parse(0,e.systemDate(t.value))):e.setValue(t.value)))},T.prototype.render=function(){var e=this,t=e.config,n=e.lang(),a=\"static\"===t.position,i=e.elem=w.elem(\"div\",{id:e.elemID,\"class\":[\"layui-laydate\",t.range?\" layui-laydate-range\":\"\",a?\" \"+c:\"\",t.theme&&\"default\"!==t.theme&&!/^#/.test(t.theme)?\" laydate-theme-\"+t.theme:\"\"].join(\"\")}),r=e.elemMain=[],o=e.elemHeader=[],s=e.elemCont=[],l=e.table=[],d=e.footer=w.elem(\"div\",{\"class\":p});if(t.zIndex&&(i.style.zIndex=t.zIndex),w.each(new Array(2),function(e){if(!t.range&&e>0)return!0;var a=w.elem(\"div\",{\"class\":\"layui-laydate-header\"}),i=[function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-prev-y\"});return e.innerHTML=\"&#xe65a;\",e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-prev-m\"});return e.innerHTML=\"&#xe603;\",e}(),function(){var e=w.elem(\"div\",{\"class\":\"laydate-set-ym\"}),t=w.elem(\"span\"),n=w.elem(\"span\");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-next-m\"});return e.innerHTML=\"&#xe602;\",e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-next-y\"});return e.innerHTML=\"&#xe65b;\",e}()],d=w.elem(\"div\",{\"class\":\"layui-laydate-content\"}),c=w.elem(\"table\"),m=w.elem(\"thead\"),u=w.elem(\"tr\");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem(\"th\");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem(\"div\",{\"class\":\"layui-laydate-main laydate-main-list-\"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return\"datetime\"===t.type&&e.push('<span lay-type=\"datetime\" class=\"laydate-btns-time\">'+n.timeTips+\"</span>\"),w.each(t.btns,function(e,r){var o=n.tools[r]||\"btn\";t.range&&\"now\"===r||(a&&\"clear\"===r&&(o=\"cn\"===t.lang?\"重置\":\"Reset\"),i.push('<span lay-type=\"'+r+'\" class=\"laydate-btns-'+r+'\">'+o+\"</span>\"))}),e.push('<div class=\"laydate-footer-btns\">'+i.join(\"\")+\"</div>\"),e.join(\"\")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem(\"style\"),u=[\"#{{id}} .layui-laydate-header{background-color:{{theme}};}\",\"#{{id}} .layui-this{background-color:{{theme}} !important;}\"].join(\"\").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);\"styleSheet\"in m?(m.setAttribute(\"type\",\"text/css\"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass(\"laydate-theme-molv\"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,\"function\"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w(\"#\"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?\"scrollLeft\":\"scrollTop\",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?\"clientWidth\":\"clientHeight\"]},l=5,d=a.left,c=a.bottom;d+i+l>s(\"width\")&&(d=s(\"width\")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+(\"fixed\"===t.position?0:o(1))+\"px\",e.elem.style.top=c+(\"fixed\"===t.position?0:o())+\"px\"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem(\"div\",{\"class\":h}));t.elem&&(n.innerHTML=e||\"\",w(t.elem).find(\".\"+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find(\".\"+h).remove()},3e3))},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?\"val\":\"html\",i.isInput(s)?s.value:\"static\"===r.position?\"\":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=[\"startTime\",\"endTime\"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length<l.length&&(a=!0),/yyyy|y/.test(l)?(c<d[0]&&(c=d[0],a=!0),e.year=c):/MM|M/.test(l)?(c<1&&(c=1,a=!0),e.month=c-1):/dd|d/.test(l)?(c<1&&(c=1,a=!0),e.date=c):/HH|H/.test(l)?(c<1&&(c=0,a=!0),e.hours=c,r.range&&(i[o[n]].hours=c)):/mm|m/.test(l)?(c<1&&(c=0,a=!0),e.minutes=c,r.range&&(i[o[n]].minutes=c)):/ss|s/.test(l)&&(c<1&&(c=0,a=!0),e.seconds=c,r.range&&(i[o[n]].seconds=c))}),c(e)};return\"limit\"===e?(c(o),i):(l=l||r.value,\"string\"==typeof l&&(l=l.replace(/\\s+/g,\" \").replace(/^\\s|\\s$/g,\"\")),i.startState&&!i.endState&&(delete i.startState,i.endState=!0),\"string\"==typeof l&&l?i.EXP_IF.test(l)?r.range?(l=l.split(\" \"+r.range+\" \"),i.startDate=i.startDate||i.systemDate(),i.endDate=i.endDate||i.systemDate(),r.dateTime=w.extend({},i.startDate),w.each([i.startDate,i.endDate],function(e,t){m(t,l[e],e)})):m(o,l):(i.hint(\"日期格式不合法<br>必须遵循下述格式：<br>\"+(r.range?r.format+\" \"+r.range+\" \"+r.format:r.format)+\"<br>已为你重置\"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():\"\":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split(\"-\");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html('<span class=\"laydate-day-mark\">'+n+\"</span>\"),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?\"endDate\":\"dateTime\"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.now<l.min||l.now>l.max,e&&e[i?\"addClass\":\"removeClass\"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u=\"date\"!==s.type&&\"datetime\"!==s.type,h=e?1:0,y=w(r.table[h]).find(\"td\"),f=w(r.elemHeader[h][2]).find(\"span\");if(l.year<d[0]&&(l.year=d[0],r.hint(\"最低只能支持到公元\"+d[0]+\"年\")),l.year>d[1]&&(l.year=d[1],r.hint(\"最高只能支持到公元\"+d[1]+\"年\")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr(\"class\"),e<t?(c=a-t+e,n.addClass(\"laydate-day-prev\"),d=r.getAsYM(l.year,l.month,\"sub\")):e>=t&&e<i+t?(c=e-t,s.range||c+1===l.date&&n.addClass(o)):(c=e-i-t,n.addClass(\"laydate-day-next\"),d=r.getAsYM(l.year,l.month)),d[1]++,d[2]=c+1,n.attr(\"lay-ymd\",d.join(\"-\")).html(d[2]),r.mark(n,d).limit(n,{year:d[0],month:d[1]-1,date:d[2]},e)}),w(f[0]).attr(\"lay-ym\",l.year+\"-\"+(l.month+1)),w(f[1]).attr(\"lay-ym\",l.year+\"-\"+(l.month+1)),\"cn\"===s.lang?(w(f[0]).attr(\"lay-type\",\"year\").html(l.year+\"年\"),w(f[1]).attr(\"lay-type\",\"month\").html(l.month+1+\"月\")):(w(f[0]).attr(\"lay-type\",\"month\").html(m.month[l.month]),w(f[1]).attr(\"lay-type\",\"year\").html(l.year)),u&&(s.range&&(e?r.endDate=r.endDate||{year:l.year+(\"year\"===s.type?1:0),month:l.month+(\"month\"===s.type?0:-1)}:r.startDate=r.startDate||{year:l.year,month:l.month},e&&(r.listYM=[[r.startDate.year,r.startDate.month+1],[r.endDate.year,r.endDate.month+1]],r.list(s.type,0).list(s.type,1),\"time\"===s.type?r.setBtnStatus(\"时间\",w.extend({},r.systemDate(),r.startTime),w.extend({},r.systemDate(),r.endTime)):r.setBtnStatus(!0))),s.range||(r.listYM=[[l.year,l.month+1]],r.list(s.type,0))),s.range&&!e){var p=r.getAsYM(l.year,l.month);r.calendar(w.extend({},l,{year:p[0],month:p[1]}))}return s.range||r.limit(w(r.footer).find(g),null,0,[\"hours\",\"minutes\",\"seconds\"]),s.range&&e&&!u&&r.stampRange(),r},T.prototype.list=function(e,t){var n=this,a=n.config,i=a.dateTime,r=n.lang(),l=a.range&&\"date\"!==a.type&&\"datetime\"!==a.type,d=w.elem(\"ul\",{\"class\":m+\" \"+{year:\"laydate-year-list\",month:\"laydate-month-list\",time:\"laydate-time-list\"}[e]}),c=n.elemHeader[t],u=w(c[2]).find(\"span\"),h=n.elemCont[t||0],y=w(h).find(\".\"+m)[0],f=\"cn\"===a.lang,p=f?\"年\":\"\",T=n.listYM[t]||{},C=[\"hours\",\"minutes\",\"seconds\"],x=[\"startTime\",\"endTime\"][t];if(T[0]<1&&(T[0]=1),\"year\"===e){var M,b=M=T[0]-7;b<1&&(b=M=1),w.each(new Array(15),function(e){var i=w.elem(\"li\",{\"lay-ym\":M}),r={year:M};M==T[0]&&w(i).addClass(o),i.innerHTML=M+p,d.appendChild(i),M<n.firstDate.year?(r.month=a.min.month,r.date=a.min.date):M>=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr(\"lay-ym\",M-8+\"-\"+T[1]).html(b+p+\" - \"+(M-1+p))}else if(\"month\"===e)w.each(new Array(12),function(e){var i=w.elem(\"li\",{\"lay-ym\":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?\"月\":\"\"),d.appendChild(i),T[0]<n.firstDate.year?s.date=a.min.date:T[0]>=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr(\"lay-ym\",T[0]+\"-\"+T[1]).html(T[0]+p);else if(\"time\"===e){var E=function(){w(d).find(\"ol\").each(function(e,a){w(a).find(\"li\").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[[\"hours\"],[\"hours\",\"minutes\"],[\"hours\",\"minutes\",\"seconds\"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,[\"hours\",\"minutes\",\"seconds\"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem(\"li\"),i=[\"<p>\"+r.time[e]+\"</p><ol>\"];w.each(new Array(t),function(t){i.push(\"<li\"+(n[x][C[e]]===t?' class=\"'+o+'\"':\"\")+\">\"+w.digit(t,2)+\"</li>\")}),a.innerHTML=i.join(\"\")+\"</ol>\",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),\"year\"===e||\"month\"===e)w(n.elemMain[t]).addClass(\"laydate-ym-show\"),w(d).find(\"li\").on(\"click\",function(){var r=0|w(this).attr(\"lay-ym\");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c=\"year\"===e?n.getAsYM(r,T[1]-1,\"sub\"):n.getAsYM(T[0],r,\"sub\");w.extend(i,{year:c[0],month:c[1]})}\"year\"===a.type||\"month\"===a.type?(w(d).find(\".\"+o).removeClass(o),w(this).addClass(o),\"month\"===a.type&&\"year\"===e&&(n.listYM[t][0]=r,l&&(n[[\"startDate\",\"endDate\"][t]].year=r),n.list(\"month\",t))):(n.checkDate(\"limit\").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,\"change\"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem(\"span\",{\"class\":v}),k=function(){w(d).find(\"ol\").each(function(e){var t=this,a=w(t).find(\"li\");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find(\".\"+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass(\"laydate-time-show\"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find(\"ol\").each(function(e){var t=this;w(t).find(\"li\").on(\"click\",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find(\".\"+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||\"time\"===a.type)&&n.done(null,\"change\"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find(\".\"+m).remove(),w(e.elemMain[t]).removeClass(\"laydate-ym-show laydate-time-show\")}),w(e.elem).find(\".\"+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&\"date\"!==r.type&&\"time\"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?\"addClass\":\"removeClass\"](s),e&&a&&i.hint(\"string\"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join(\"\")+\" \"+a.range+\" \"+n.parse(1):r.join(\"\")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?\"val\":\"html\";return\"static\"===n.position||w(a)[i](e||\"\"),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find(\"td\");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr(\"lay-ymd\").split(\"-\"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+\" \"+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s<t&&w(i).addClass(u)})},T.prototype.done=function(e,t){var n=this,a=n.config,i=w.extend({},n.startDate?w.extend(n.startDate,n.startTime):a.dateTime),r=w.extend({},w.extend(n.endDate,n.endTime));return w.each([i,r],function(e,t){\"month\"in t&&w.extend(t,{month:t.month+1})}),e=e||[n.parse(),i,r],\"function\"==typeof a[t||\"done\"]&&a[t||\"done\"].apply(a,e),n},T.prototype.choose=function(e){var t=this,n=t.config,a=n.dateTime,i=w(t.elem).find(\"td\"),r=e.attr(\"lay-ymd\").split(\"-\"),l=function(e){new Date;e&&w.extend(a,r),n.range&&(t.startDate?w.extend(t.startDate,r):t.startDate=w.extend({},r,t.startTime),t.startYMD=r)};if(r={year:0|r[0],month:(0|r[1])-1,date:0|r[2]},!e.hasClass(s))if(n.range){if(w.each([\"startTime\",\"endTime\"],function(e,n){t[n]=t[n]||{hours:0,minutes:0,seconds:0}}),t.endState)l(),delete t.endState,delete t.endDate,t.startState=!0,i.removeClass(o+\" \"+u),e.addClass(o);else if(t.startState){if(e.addClass(o),t.endDate?w.extend(t.endDate,r):t.endDate=w.extend({},r,t.endTime),t.newDate(r).getTime()<t.newDate(t.startYMD).getTime()){var d=w.extend({},t.endDate,{hours:t.startDate.hours,minutes:t.startDate.minutes,seconds:t.startDate.seconds});w.extend(t.endDate,t.startDate,{hours:t.endDate.hours,minutes:t.endDate.minutes,seconds:t.endDate.seconds}),t.startDate=d}n.showBottom||t.done(),t.stampRange(),t.endState=!0,t.done(null,\"change\")}else e.addClass(o),l(),t.startState=!0;w(t.footer).find(g)[t.endDate?\"removeClass\":\"addClass\"](s)}else\"static\"===n.position?(l(!0),t.calendar().done().done(null,\"change\")):\"date\"===n.type?(l(!0),t.setValue(t.parse()).remove().done()):\"datetime\"===n.type&&(l(!0),t.calendar().done(null,\"change\"))},T.prototype.tool=function(e,t){var n=this,a=n.config,i=a.dateTime,r=\"static\"===a.position,o={datetime:function(){w(e).hasClass(s)||(n.list(\"time\",0),a.range&&n.list(\"time\",1),w(e).attr(\"lay-type\",\"date\").html(n.lang().dateTips))},date:function(){n.closeList(),w(e).attr(\"lay-type\",\"datetime\").html(n.lang().timeTips)},clear:function(){n.setValue(\"\").remove(),r&&(w.extend(i,n.firstDate),n.calendar()),a.range&&(delete n.startState,delete n.endState,delete n.endDate,delete n.startTime,delete n.endTime),n.done([\"\",{},{}])},now:function(){var e=new Date;w.extend(i,n.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),n.setValue(n.parse()).remove(),r&&n.calendar(),n.done()},confirm:function(){if(a.range){if(!n.endDate)return n.hint(\"请先选择日期范围\");if(w(e).hasClass(s))return n.hint(\"time\"===a.type?l.replace(/日期/g,\"时间\"):l)}else if(w(e).hasClass(s))return n.hint(\"不在有效日期或时间范围内\");n.done(),n.setValue(n.parse()).remove()}};o[t]&&o[t]()},T.prototype.change=function(e){var t=this,n=t.config,a=n.dateTime,i=n.range&&(\"year\"===n.type||\"month\"===n.type),r=t.elemCont[e||0],o=t.listYM[e],s=function(s){var l=[\"startDate\",\"endDate\"][e],d=w(r).find(\".laydate-year-list\")[0],c=w(r).find(\".laydate-month-list\")[0];return d&&(o[0]=s?o[0]-15:o[0]+15,t.list(\"year\",e)),c&&(s?o[0]--:o[0]++,t.list(\"month\",e)),(d||c)&&(w.extend(a,{year:o[0]}),i&&(t[l].year=o[0]),n.range||t.done(null,\"change\"),t.setBtnStatus(),n.range||t.limit(w(t.footer).find(g),{year:o[0]})),d||c};return{prevYear:function(){s(\"sub\")||(a.year--,t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\"))},prevMonth:function(){var e=t.getAsYM(a.year,a.month,\"sub\");w.extend(a,{year:e[0],month:e[1]}),t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\")},nextMonth:function(){var e=t.getAsYM(a.year,a.month);w.extend(a,{year:e[0],month:e[1]}),t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\")},nextYear:function(){s()||(a.year++,t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\"))}}},T.prototype.changeEvent=function(){var e=this;e.config;w(e.elem).on(\"click\",function(e){w.stope(e)}),w.each(e.elemHeader,function(t,n){w(n[0]).on(\"click\",function(n){e.change(t).prevYear()}),w(n[1]).on(\"click\",function(n){e.change(t).prevMonth()}),w(n[2]).find(\"span\").on(\"click\",function(n){var a=w(this),i=a.attr(\"lay-ym\"),r=a.attr(\"lay-type\");i&&(i=i.split(\"-\"),e.listYM[t]=[0|i[0],0|i[1]],e.list(r,t),w(e.footer).find(D).addClass(s))}),w(n[3]).on(\"click\",function(n){e.change(t).nextMonth()}),w(n[4]).on(\"click\",function(n){e.change(t).nextYear()})}),w.each(e.table,function(t,n){var a=w(n).find(\"td\");a.on(\"click\",function(){e.choose(w(this))})}),w(e.footer).find(\"span\").on(\"click\",function(){var t=w(this).attr(\"lay-type\");e.tool(this,t)})},T.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())},T.prototype.events=function(){var e=this,t=e.config,n=function(n,a){n.on(t.trigger,function(){a&&(e.bindElem=this),e.render()})};t.elem[0]&&!t.elem[0].eventHandler&&(n(t.elem,\"bind\"),n(t.eventElem),w(document).on(\"click\",function(n){n.target!==t.elem[0]&&n.target!==t.eventElem[0]&&n.target!==w(t.closeStop)[0]&&e.remove()}).on(\"keydown\",function(t){13===t.keyCode&&w(\"#\"+e.elemID)[0]&&e.elemID===T.thisElem&&(t.preventDefault(),w(e.footer).find(g)[0].click())}),w(window).on(\"resize\",function(){return!(!e.elem||!w(r)[0])&&void e.position()}),t.elem[0].eventHandler=!0)},n.render=function(e){var t=new T(e);return a.call(t)},n.getEndDate=function(e,t){var n=new Date;return n.setFullYear(t||n.getFullYear(),e||n.getMonth()+1,1),new Date(n.getTime()-864e5).getDate()},window.lay=window.lay||w,e?(n.ready(),layui.define(function(e){n.path=layui.cache.dir,e(i,n)})):\"function\"==typeof define&&define.amd?define(function(){return n}):function(){n.ready(),window.laydate=n}()}();!function(e,t){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&\"length\"in e&&e.length,n=pe.type(e);return\"function\"!==n&&!pe.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(Ce.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener(\"DOMContentLoaded\",s),e.removeEventListener(\"load\",s)):(re.detachEvent(\"onreadystatechange\",s),e.detachEvent(\"onload\",s))}function s(){(re.addEventListener||\"load\"===e.event.type||\"complete\"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r=\"data-\"+t.replace(_e,\"-$1\").toLowerCase();if(n=e.getAttribute(r),\"string\"==typeof n){try{n=\"true\"===n||\"false\"!==n&&(\"null\"===n?null:+n+\"\"===n?+n:qe.test(n)?pe.parseJSON(n):n)}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if((\"data\"!==t||!pe.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||\"string\"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),\"object\"!=typeof t&&\"function\"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),\"string\"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):fe.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,\"\")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?\"\":\"px\"),c=(pe.cssNumber[t]||\"px\"!==l&&+u)&&Me.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||\".5\",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,\"globalEval\",!t||pe._data(t[r],\"globalEval\"))}function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x<d;x++)if(a=e[x],a||0===a)if(\"object\"===pe.type(a))pe.merge(v,a.nodeType?[a]:a);else if(Ue.test(a)){for(u=u||y.appendChild(t.createElement(\"div\")),l=(We.exec(a)||[\"\",\"\"])[1].toLowerCase(),f=Xe[l]||Xe._default,u.innerHTML=f[1]+pe.htmlPrefilter(a)+f[2],o=f[0];o--;)u=u.lastChild;if(!fe.leadingWhitespace&&$e.test(a)&&v.push(t.createTextNode($e.exec(a)[0])),!fe.tbody)for(a=\"table\"!==l||Ve.test(a)?\"<table>\"!==f[1]||Ve.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],\"tbody\")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(v,u.childNodes),u.textContent=\"\";u.firstChild;)u.removeChild(u.firstChild);u=y.lastChild}else v.push(t.createTextNode(a));for(u&&y.removeChild(u),fe.appendChecked||pe.grep(h(v,\"input\"),m),x=0;a=v[x++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(y.appendChild(a),\"script\"),s&&g(u),n)for(o=0;a=u[o++];)Ie.test(a.type||\"\")&&n.push(a);return u=null,y}function v(){return!0}function x(){return!1}function b(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,\"table\")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function C(e){return e.type=(null!==pe.find.attr(e,\"type\"))+\"/\"+e.type,e}function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;r<i;r++)pe.event.add(t,n,s[n][r])}a.data&&(a.data=pe.extend({},a.data))}}function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!fe.noCloneEvent&&t[pe.expando]){i=pe._data(t);for(r in i.events)pe.removeEvent(t,r,i.handle);t.removeAttribute(pe.expando)}\"script\"===n&&t.text!==e.text?(C(t).text=e.text,E(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),fe.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Be.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}}function S(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,f=e.length,d=f-1,p=t[0],g=pe.isFunction(p);if(g||f>1&&\"string\"==typeof p&&!fe.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);g&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(f&&(l=y(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,\"script\"),C),a=s.length;c<f;c++)o=l,c!==d&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,\"script\"))),n.call(e[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,pe.map(s,E),c=0;c<a;c++)o=s[c],Ie.test(o.type||\"\")&&!pe._data(o,\"globalEval\")&&pe.contains(u,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||\"\").replace(ot,\"\")));l=i=null}return e}function A(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||pe.cleanData(h(r)),r.parentNode&&(n&&pe.contains(r.ownerDocument,r)&&g(h(r,\"script\")),r.parentNode.removeChild(r));return e}function D(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n[0],\"display\");return n.detach(),r}function j(e){var t=re,n=lt[e];return n||(n=D(e,t),\"none\"!==n&&n||(ut=(ut||pe(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(t.documentElement),t=(ut[0].contentWindow||ut[0].contentDocument).document,t.write(),t.close(),n=D(e,t),ut.detach()),lt[e]=n),n}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Ct.length;n--;)if(e=Ct[n]+t,e in Et)return e}function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a<s;a++)r=e[a],r.style&&(o[a]=pe._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&Re(r)&&(o[a]=pe._data(r,\"olddisplay\",j(r.nodeName)))):(i=Re(r),(n&&\"none\"!==n||!i)&&pe._data(r,\"olddisplay\",i?n:pe.css(r,\"display\"))));for(a=0;a<s;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}function _(e,t,n){var r=bt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function F(e,t,n,r,i){for(var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;o<4;o+=2)\"margin\"===n&&(a+=pe.css(e,n+Oe[o],!0,i)),r?(\"content\"===n&&(a-=pe.css(e,\"padding\"+Oe[o],!0,i)),\"margin\"!==n&&(a-=pe.css(e,\"border\"+Oe[o]+\"Width\",!0,i))):(a+=pe.css(e,\"padding\"+Oe[o],!0,i),\"padding\"!==n&&(a+=pe.css(e,\"border\"+Oe[o]+\"Width\",!0,i)));return a}function M(t,n,r){var i=!0,o=\"width\"===n?t.offsetWidth:t.offsetHeight,a=ht(t),s=fe.boxSizing&&\"border-box\"===pe.css(t,\"boxSizing\",!1,a);if(re.msFullscreenElement&&e.top!==e&&t.getClientRects().length&&(o=Math.round(100*t.getBoundingClientRect()[n])),o<=0||null==o){if(o=gt(t,n,a),(o<0||null==o)&&(o=t.style[n]),ft.test(o))return o;i=s&&(fe.boxSizingReliable()||o===t.style[n]),o=parseFloat(o)||0}return o+F(t,n,r||(s?\"border\":\"content\"),i,a)+\"px\"}function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}function R(){return e.setTimeout(function(){Nt=void 0}),Nt=pe.now()}function P(e,t){var n,r={height:e},i=0;for(t=t?1:0;i<4;i+=2-t)n=Oe[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}function B(e,t,n){for(var r,i=($.tweeners[t]||[]).concat($.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function W(e,t,n){var r,i,o,a,s,u,l,c,f=this,d={},p=e.style,h=e.nodeType&&Re(e),g=pe._data(e,\"fxshow\");n.queue||(s=pe._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,u=s.empty.fire,s.empty.fire=function(){s.unqueued||u()}),s.unqueued++,f.always(function(){f.always(function(){s.unqueued--,pe.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],l=pe.css(e,\"display\"),c=\"none\"===l?pe._data(e,\"olddisplay\")||j(e.nodeName):l,\"inline\"===c&&\"none\"===pe.css(e,\"float\")&&(fe.inlineBlockNeedsLayout&&\"inline\"!==j(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",fe.shrinkWrapBlocks()||f.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],St.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(h?\"hide\":\"show\")){if(\"show\"!==i||!g||void 0===g[r])continue;h=!0}d[r]=g&&g[r]||pe.style(e,r)}else l=void 0;if(pe.isEmptyObject(d))\"inline\"===(\"none\"===l?j(e.nodeName):l)&&(p.display=l);else{g?\"hidden\"in g&&(h=g.hidden):g=pe._data(e,\"fxshow\",{}),o&&(g.hidden=!h),h?pe(e).show():f.done(function(){pe(e).hide()}),f.done(function(){var t;pe._removeData(e,\"fxshow\");for(t in d)pe.style(e,t,d[t])});for(r in d)a=B(h?g[r]:0,r,f),r in g||(g[r]=a.start,h&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function I(e,t){var n,r,i,o,a;for(n in e)if(r=pe.camelCase(n),i=t[r],o=e[n],pe.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=pe.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function $(e,t,n){var r,i,o=0,a=$.prefilters.length,s=pe.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Nt||R(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;a<u;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),o<1&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:pe.extend({},t),opts:pe.extend(!0,{specialEasing:{},easing:pe.easing._default},n),originalProperties:t,originalOptions:n,startTime:Nt||R(),duration:n.duration,tweens:[],createTween:function(t,n){var r=pe.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(I(c,l.opts.specialEasing);o<a;o++)if(r=$.prefilters[o].call(l,e,c,l.opts))return pe.isFunction(r.stop)&&(pe._queueHooks(l.elem,l.opts.queue).stop=pe.proxy(r.stop,r)),r;return pe.map(c,B,l),pe.isFunction(l.opts.start)&&l.opts.start.call(e,l),pe.fx.timer(pe.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function z(e){return pe.attr(e,\"class\")||\"\"}function X(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(De)||[];if(pe.isFunction(n))for(;r=o[i++];)\"+\"===r.charAt(0)?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function U(e,t,n,r){function i(s){var u;return o[s]=!0,pe.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||a||o[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),i(l),!1)}),u}var o={},a=e===Qt;return i(t.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function V(e,t){var n,r,i=pe.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((i[r]?e:n||(n={}))[r]=t[r]);return n&&pe.extend(!0,e,n),e}function Y(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(i)for(a in s)if(s[a]&&s[a].test(i)){u.unshift(a);break}if(u[0]in n)o=u[0];else{for(a in n){if(!u[0]||e.converters[a+\" \"+u[0]]){o=a;break}r||(r=a)}o=o||r}if(o)return o!==u[0]&&u.unshift(o),n[o]}function J(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(a=l[u+\" \"+o]||l[\"* \"+o],!a)for(i in l)if(s=i.split(\" \"),s[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){a===!0?a=l[i]:l[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(f){return{state:\"parsererror\",error:a?f:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}function G(e){return e.style&&e.style.display||pe.css(e,\"display\")}function K(e){for(;e&&1===e.nodeType;){if(\"none\"===G(e)||\"hidden\"===e.type)return!0;e=e.parentNode}return!1}function Q(e,t,n,r){var i;if(pe.isArray(t))pe.each(t,function(t,i){n||rn.test(e)?r(e,i):Q(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==pe.type(t))r(e,t);else for(i in t)Q(e+\"[\"+i+\"]\",t[i],n,r)}function Z(){try{return new e.XMLHttpRequest}catch(t){}}function ee(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var ne=[],re=e.document,ie=ne.slice,oe=ne.concat,ae=ne.push,se=ne.indexOf,ue={},le=ue.toString,ce=ue.hasOwnProperty,fe={},de=\"1.12.3\",pe=function(e,t){return new pe.fn.init(e,t)},he=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,ge=/^-ms-/,me=/-([\\da-z])/gi,ye=function(e,t){return t.toUpperCase()};pe.fn=pe.prototype={jquery:de,constructor:pe,selector:\"\",length:0,toArray:function(){return ie.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:ie.call(this)},pushStack:function(e){var t=pe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return pe.each(this,e)},map:function(e){return this.pushStack(pe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ie.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ae,sort:ne.sort,splice:ne.splice},pe.extend=pe.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||pe.isFunction(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(i=arguments[s]))for(r in i)e=a[r],n=i[r],a!==n&&(l&&n&&(pe.isPlainObject(n)||(t=pe.isArray(n)))?(t?(t=!1,o=e&&pe.isArray(e)?e:[]):o=e&&pe.isPlainObject(e)?e:{},a[r]=pe.extend(l,o,n)):void 0!==n&&(a[r]=n));return a},pe.extend({expando:\"jQuery\"+(de+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===pe.type(e)},isArray:Array.isArray||function(e){return\"array\"===pe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){var t=e&&e.toString();return!pe.isArray(e)&&t-parseFloat(t)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||\"object\"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,\"constructor\")&&!ce.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(n){return!1}if(!fe.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?ue[le.call(e)]||\"object\":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ge,\"ms-\").replace(me,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var r,i=0;if(n(e))for(r=e.length;i<r&&t.call(e[i],i,e[i])!==!1;i++);else for(i in e)if(t.call(e[i],i,e[i])===!1)break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(he,\"\")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?pe.merge(r,\"string\"==typeof e?[e]:e):ae.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(se)return se.call(t,e,n);for(r=t.length,n=n?n<0?Math.max(0,r+n):n:0;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;)e[i++]=t[r++];if(n!==n)for(;void 0!==t[r];)e[i++]=t[r++];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)r=!t(e[o],o),r!==s&&i.push(e[o]);return i},map:function(e,t,r){var i,o,a=0,s=[];if(n(e))for(i=e.length;a<i;a++)o=t(e[a],a,r),null!=o&&s.push(o);else for(a in e)o=t(e[a],a,r),null!=o&&s.push(o);return oe.apply([],s)},guid:1,proxy:function(e,t){var n,r,i;if(\"string\"==typeof t&&(i=e[t],t=e,e=i),pe.isFunction(e))return n=ie.call(arguments,2),r=function(){return e.apply(t||this,n.concat(ie.call(arguments)))},r.guid=e.guid=e.guid||pe.guid++,r},now:function(){return+new Date},support:fe}),\"function\"==typeof Symbol&&(pe.fn[Symbol.iterator]=ne[Symbol.iterator]),pe.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){ue[\"[object \"+t+\"]\"]=t.toLowerCase()});var ve=function(e){function t(e,t,n,r){var i,o,a,s,u,l,f,p,h=t&&t.ownerDocument,g=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==g&&9!==g&&11!==g)return n;if(!r&&((t?t.ownerDocument||t:B)!==H&&L(t),t=t||H,_)){if(11!==g&&(l=ye.exec(e)))if(i=l[1]){if(9===g){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(h&&(a=h.getElementById(i))&&R(t,a)&&a.id===i)return n.push(a),n}else{if(l[2])return Q.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Q.apply(n,t.getElementsByClassName(i)),n}if(w.qsa&&!X[e+\" \"]&&(!F||!F.test(e))){if(1!==g)h=t,p=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((s=t.getAttribute(\"id\"))?s=s.replace(xe,\"\\\\$&\"):t.setAttribute(\"id\",s=P),f=N(e),o=f.length,u=de.test(s)?\"#\"+s:\"[id='\"+s+\"']\";o--;)f[o]=u+\" \"+d(f[o]);p=f.join(\",\"),h=ve.test(e)&&c(t.parentNode)||t}if(p)try{return Q.apply(n,h.querySelectorAll(p)),n}catch(m){}finally{s===P&&t.removeAttribute(\"id\")}}}return S(e.replace(se,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>T.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=H.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||V)-(~e.sourceIndex||V);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function f(){}function d(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=n&&\"parentNode\"===r,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=[W,o];if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(l=t[P]||(t[P]={}),u=l[t.uniqueID]||(l[t.uniqueID]={}),(s=u[r])&&s[0]===W&&s[1]===o)return c[2]=s[2];if(u[r]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function m(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function y(e,t,n,i,o,a){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,a)),r(function(r,a,s,u){var l,c,f,d=[],p=[],h=a.length,y=r||g(t||\"*\",s.nodeType?[s]:s,[]),v=!e||!r&&t?y:m(y,d,e,s,u),x=n?o||(r?e:h||i)?[]:a:v;if(n&&n(v,x,s,u),i)for(l=m(x,p),i(l,[],s,u),c=l.length;c--;)(f=l[c])&&(x[p[c]]=!(v[p[c]]=f));if(r){if(o||e){if(o){for(l=[],c=x.length;c--;)(f=x[c])&&l.push(v[c]=f);o(null,x=[],l,u)}for(c=x.length;c--;)(f=x[c])&&(l=o?ee(r,f):d[c])>-1&&(r[l]=!(a[l]=f))}}else x=m(x===a?x.splice(h,x.length):x),o?o(null,a,x,u):Q.apply(a,x)})}function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.relative[\" \"],s=o?1:0,u=p(function(e){return e===t},a,!0),l=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];s<i;s++)if(n=T.relative[e[s].type])c=[p(h(c),n)];else{if(n=T.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;r<i&&!T.relative[e[r].type];r++);return y(s>1&&h(c),s>1&&d(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(se,\"$1\"),n,s<r&&v(e.slice(s,r)),r<i&&v(e=e.slice(r)),r<i&&d(e))}c.push(n)}return h(c)}function x(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,u,l){var c,f,d,p=0,h=\"0\",g=r&&[],y=[],v=A,x=r||o&&T.find.TAG(\"*\",l),b=W+=null==v?1:Math.random()||.1,w=x.length;for(l&&(A=a===H||a||l);h!==w&&null!=(c=x[h]);h++){if(o&&c){for(f=0,a||c.ownerDocument===H||(L(c),s=!_);d=e[f++];)if(d(c,a||H,s)){u.push(c);break}l&&(W=b)}i&&((c=!d&&c)&&p--,r&&g.push(c))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,y,a,s);if(r){if(p>0)for(;h--;)g[h]||y[h]||(y[h]=G.call(u));y=m(y)}Q.apply(u,y),l&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(W=b,A=v),g};return i?r(a):a}var b,w,T,C,E,N,k,S,A,D,j,L,H,q,_,F,M,O,R,P=\"sizzle\"+1*new Date,B=e.document,W=0,I=0,$=n(),z=n(),X=n(),U=function(e,t){return e===t&&(j=!0),0},V=1<<31,Y={}.hasOwnProperty,J=[],G=J.pop,K=J.push,Q=J.push,Z=J.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ne=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",re=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ie=\"\\\\[\"+ne+\"*(\"+re+\")(?:\"+ne+\"*([*^$|!~]?=)\"+ne+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+re+\"))|)\"+ne+\"*\\\\]\",oe=\":(\"+re+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ie+\")*)|.*)\\\\)|)\",ae=new RegExp(ne+\"+\",\"g\"),se=new RegExp(\"^\"+ne+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ne+\"+$\",\"g\"),ue=new RegExp(\"^\"+ne+\"*,\"+ne+\"*\"),le=new RegExp(\"^\"+ne+\"*([>+~]|\"+ne+\")\"+ne+\"*\"),ce=new RegExp(\"=\"+ne+\"*([^\\\\]'\\\"]*?)\"+ne+\"*\\\\]\",\"g\"),fe=new RegExp(oe),de=new RegExp(\"^\"+re+\"$\"),pe={ID:new RegExp(\"^#(\"+re+\")\"),CLASS:new RegExp(\"^\\\\.(\"+re+\")\"),TAG:new RegExp(\"^(\"+re+\"|[*])\"),ATTR:new RegExp(\"^\"+ie),PSEUDO:new RegExp(\"^\"+oe),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ne+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ne+\"*(?:([+-]|)\"+ne+\"*(\\\\d+)|))\"+ne+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+te+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ne+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ne+\"*((?:-\\\\d)?\\\\d*)\"+ne+\"*\\\\)|)(?=[^-]|$)\",\"i\")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\\d$/i,me=/^[^{]+\\{\\s*\\[native \\w/,ye=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ve=/[+~]/,xe=/'|\\\\/g,be=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ne+\"?|(\"+ne+\")|.)\",\"ig\"),we=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Te=function(){L()};try{Q.apply(J=Z.call(B.childNodes),B.childNodes),J[B.childNodes.length].nodeType}catch(Ce){Q={apply:J.length?function(e,t){K.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==H&&9===r.nodeType&&r.documentElement?(H=r,q=H.documentElement,_=!E(H),(n=H.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",Te,!1):n.attachEvent&&n.attachEvent(\"onunload\",Te)),w.attributes=i(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),w.getElementsByTagName=i(function(e){return e.appendChild(H.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),w.getElementsByClassName=me.test(H.getElementsByClassName),w.getById=i(function(e){return q.appendChild(e).id=P,!H.getElementsByName||!H.getElementsByName(P).length}),w.getById?(T.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&_){var n=t.getElementById(e);return n?[n]:[]}},T.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute(\"id\")===t}}):(delete T.find.ID,T.filter.ID=function(e){var t=e.replace(be,we);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}}),T.find.TAG=w.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},T.find.CLASS=w.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&_)return t.getElementsByClassName(e)},M=[],F=[],(w.qsa=me.test(H.querySelectorAll))&&(i(function(e){q.appendChild(e).innerHTML=\"<a id='\"+P+\"'></a><select id='\"+P+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&F.push(\"[*^$]=\"+ne+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||F.push(\"\\\\[\"+ne+\"*(?:value|\"+te+\")\"),e.querySelectorAll(\"[id~=\"+P+\"-]\").length||F.push(\"~=\"),e.querySelectorAll(\":checked\").length||F.push(\":checked\"),e.querySelectorAll(\"a#\"+P+\"+*\").length||F.push(\".#.+[+~]\")}),i(function(e){var t=H.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&F.push(\"name\"+ne+\"*[*^$|!~]?=\"),e.querySelectorAll(\":enabled\").length||F.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),F.push(\",.*:\")})),(w.matchesSelector=me.test(O=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&i(function(e){w.disconnectedMatch=O.call(e,\"div\"),O.call(e,\"[s!='']:x\"),M.push(\"!=\",oe)}),F=F.length&&new RegExp(F.join(\"|\")),M=M.length&&new RegExp(M.join(\"|\")),t=me.test(q.compareDocumentPosition),R=t||me.test(q.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===H||e.ownerDocument===B&&R(B,e)?-1:t===H||t.ownerDocument===B&&R(B,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===H?-1:t===H?1:i?-1:o?1:D?ee(D,e)-ee(D,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===B?-1:u[r]===B?1:0},H):H},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==H&&L(e),n=n.replace(ce,\"='$1']\"),w.matchesSelector&&_&&!X[n+\" \"]&&(!M||!M.test(n))&&(!F||!F.test(n)))try{var r=O.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return t(n,H,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==H&&L(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==H&&L(e);var n=T.attrHandle[t.toLowerCase()],r=n&&Y.call(T.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==r?r:w.attributes||!_?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!w.detectDuplicates,D=!w.sortStable&&e.slice(0),e.sort(U),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return D=null,e},C=t.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||\"\").replace(be,we),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&fe.test(n)&&(t=N(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=$[e+\" \"];return t||(t=new RegExp(\"(^|\"+ne+\")\"+e+\"(\"+ne+\"|$)\"))&&$(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(ae,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s,x=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(d=m,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),\nl=c[e]||[],p=l[0]===W&&l[1],x=p&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){c[e]=[W,p,x];break}}else if(v&&(d=t,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===W&&l[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++x||(v&&(f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return o[P]?o(n):o.length>1?(i=[e,e,\"\",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=k(e.replace(se,\"$1\"));return i[P]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(be,we).toLowerCase(),function(t){var n;do if(n=_?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===q},focus:function(e){return e===H.activeElement&&(!H.hasFocus||H.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:l(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:l(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},T.pseudos.nth=T.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})T.pseudos[b]=s(b);for(b in{submit:!0,reset:!0})T.pseudos[b]=u(b);return f.prototype=T.filters=T.pseudos,T.setFilters=new f,N=t.tokenize=function(e,n){var r,i,o,a,s,u,l,c=z[e+\" \"];if(c)return n?0:c.slice(0);for(s=e,u=[],l=T.preFilter;s;){r&&!(i=ue.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),r=!1,(i=le.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(se,\" \")}),s=s.slice(r.length));for(a in T.filter)!(i=pe[a].exec(s))||l[a]&&!(i=l[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):z(e,u).slice(0)},k=t.compile=function(e,t){var n,r=[],i=[],o=X[e+\" \"];if(!o){for(t||(t=N(e)),n=t.length;n--;)o=v(t[n]),o[P]?r.push(o):i.push(o);o=X(e,x(i,r)),o.selector=e}return o},S=t.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,f=!r&&N(e=l.selector||e);if(n=n||[],1===f.length){if(o=f[0]=f[0].slice(0),o.length>2&&\"ID\"===(a=o[0]).type&&w.getById&&9===t.nodeType&&_&&T.relative[o[1].type]){if(t=(T.find.ID(a.matches[0].replace(be,we),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(be,we),ve.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Q.apply(n,r),n;break}}return(l||k(e,f))(r,t,!_,n,!t||ve.test(e)&&c(t.parentNode)||t),n},w.sortStable=P.split(\"\").sort(U).join(\"\")===P,w.detectDuplicates=!!j,L(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(H.createElement(\"div\"))}),i(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||o(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute(\"disabled\")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=ve,pe.expr=ve.selectors,pe.expr[\":\"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ve.uniqueSort,pe.text=ve.getText,pe.isXMLDoc=ve.isXML,pe.contains=ve.contains;var xe=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&pe(e).is(n))break;r.push(e)}return r},be=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Te=/^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,Ce=/^.[^:#\\[\\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;t<i;t++)if(pe.contains(r[t],this))return!0}));for(t=0;t<i;t++)pe.find(e,r[t],n);return n=this.pushStack(i>1?pe.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,\"string\"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var Ee,Ne=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,ke=pe.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ee,\"string\"==typeof e){if(r=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),Te.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if(i=re.getElementById(r[2]),i&&i.parentNode){if(i.id!==r[2])return Ee.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?\"undefined\"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};ke.prototype=pe.fn,Ee=pe(re);var Se=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(pe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=we.test(e)||\"string\"!=typeof e?pe(e,t||this.context):0;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,\"parentNode\")},parentsUntil:function(e,t,n){return xe(e,\"parentNode\",n)},next:function(e){return i(e,\"nextSibling\")},prev:function(e){return i(e,\"previousSibling\")},nextAll:function(e){return xe(e,\"nextSibling\")},prevAll:function(e){return xe(e,\"previousSibling\")},nextUntil:function(e,t,n){return xe(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return xe(e,\"previousSibling\",n)},siblings:function(e){return be((e.parentNode||{}).firstChild,e)},children:function(e){return be(e.firstChild)},contents:function(e){return pe.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var i=pe.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=pe.filter(r,i)),this.length>1&&(Ae[e]||(i=pe.uniqueSort(i)),Se.test(e)&&(i=i.reverse())),this.pushStack(i)}});var De=/\\S+/g;pe.Callbacks=function(e){e=\"string\"==typeof e?o(e):pe.extend({},e);var t,n,r,i,a=[],s=[],u=-1,l=function(){for(i=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u<a.length;)a[u].apply(n[0],n[1])===!1&&e.stopOnFalse&&(u=a.length,n=!1);e.memory||(n=!1),t=!1,i&&(a=n?[]:\"\")},c={add:function(){return a&&(n&&!t&&(u=a.length-1,s.push(n)),function r(t){pe.each(t,function(t,n){pe.isFunction(n)?e.unique&&c.has(n)||a.push(n):n&&n.length&&\"string\"!==pe.type(n)&&r(n)})}(arguments),n&&!t&&l()),this},remove:function(){return pe.each(arguments,function(e,t){for(var n;(n=pe.inArray(t,a,n))>-1;)a.splice(n,1),n<=u&&u--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n=\"\",this},disabled:function(){return!a},lock:function(){return i=!0,n||c.disable(),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},pe.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",pe.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",pe.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",pe.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+\"With\"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,r):r}},i={};return r.pipe=r.then,pe.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ie.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,u=1===s?e:pe.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ie.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);i<a;i++)o[i]&&pe.isFunction(o[i].promise)?o[i].promise().progress(l(i,n,t)).done(l(i,r,o)).fail(u.reject):--s;return s||u.resolveWith(r,o),u.promise()}});var je;pe.fn.ready=function(e){return pe.ready.promise().done(e),this},pe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?pe.readyWait++:pe.ready(!0)},ready:function(e){(e===!0?--pe.readyWait:pe.isReady)||(pe.isReady=!0,e!==!0&&--pe.readyWait>0||(je.resolveWith(re,[pe]),pe.fn.triggerHandler&&(pe(re).triggerHandler(\"ready\"),pe(re).off(\"ready\"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),\"complete\"===re.readyState||\"loading\"!==re.readyState&&!re.documentElement.doScroll)e.setTimeout(pe.ready);else if(re.addEventListener)re.addEventListener(\"DOMContentLoaded\",s),e.addEventListener(\"load\",s);else{re.attachEvent(\"onreadystatechange\",s),e.attachEvent(\"onload\",s);var n=!1;try{n=null==e.frameElement&&re.documentElement}catch(r){}n&&n.doScroll&&!function i(){if(!pe.isReady){try{n.doScroll(\"left\")}catch(t){return e.setTimeout(i,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var Le;for(Le in pe(fe))break;fe.ownFirst=\"0\"===Le,fe.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,r;n=re.getElementsByTagName(\"body\")[0],n&&n.style&&(t=re.createElement(\"div\"),r=re.createElement(\"div\"),r.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",n.appendChild(r).appendChild(t),\"undefined\"!=typeof t.style.zoom&&(t.style.cssText=\"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\",fe.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=re.createElement(\"div\");fe.deleteExpando=!0;try{delete e.test}catch(t){fe.deleteExpando=!1}e=null}();var He=function(e){var t=pe.noData[(e.nodeName+\" \").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute(\"classid\")===t)},qe=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,_e=/([A-Z])/g;pe.extend({cache:{},noData:{\"applet \":!0,\"embed \":!0,\"object \":\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!l(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return f(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return f(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=pe.data(o),1===o.nodeType&&!pe._data(o,\"parsedAttrs\"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf(\"data-\")&&(r=pe.camelCase(r.slice(5)),u(o,r,i[r])));pe._data(o,\"parsedAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?u(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=pe._data(e,t),n&&(!r||pe.isArray(n)?r=pe._data(e,t,pe.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=pe.queue(e,t),r=n.length,i=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks(\"once memory\").add(function(){pe._removeData(e,t+\"queue\"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?pe.queue(this[0],e):void 0===t?this:this.each(function(){var n=pe.queue(this,e,t);pe._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&pe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){pe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=pe.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";a--;)n=pe._data(o[a],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}}),function(){var e;fe.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,r;return n=re.getElementsByTagName(\"body\")[0],n&&n.style?(t=re.createElement(\"div\"),r=re.createElement(\"div\"),r.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",n.appendChild(r).appendChild(t),\"undefined\"!=typeof t.style.zoom&&(t.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1\",t.appendChild(re.createElement(\"div\")).style.width=\"5px\",e=3!==t.offsetWidth),n.removeChild(r),e):void 0}}();var Fe=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Me=new RegExp(\"^(?:([+-])=|)(\"+Fe+\")([a-z%]*)$\",\"i\"),Oe=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Re=function(e,t){return e=t||e,\"none\"===pe.css(e,\"display\")||!pe.contains(e.ownerDocument,e)},Pe=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===pe.type(n)){i=!0;for(s in n)Pe(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,pe.isFunction(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(pe(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},Be=/^(?:checkbox|radio)$/i,We=/<([\\w:-]+)/,Ie=/^$|\\/(?:java|ecma)script/i,$e=/^\\s+/,ze=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video\";!function(){var e=re.createElement(\"div\"),t=re.createDocumentFragment(),n=re.createElement(\"input\");e.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",fe.leadingWhitespace=3===e.firstChild.nodeType,fe.tbody=!e.getElementsByTagName(\"tbody\").length,fe.htmlSerialize=!!e.getElementsByTagName(\"link\").length,fe.html5Clone=\"<:nav></:nav>\"!==re.createElement(\"nav\").cloneNode(!0).outerHTML,n.type=\"checkbox\",n.checked=!0,t.appendChild(n),fe.appendChecked=n.checked,e.innerHTML=\"<textarea>x</textarea>\",fe.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=re.createElement(\"input\"),n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),e.appendChild(n),fe.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,fe.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:fe.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ue=/<|&#?\\w+;/,Ve=/<tbody/i;!function(){var t,n,r=re.createElement(\"div\");for(t in{submit:!0,change:!0,focusin:!0})n=\"on\"+t,(fe[t]=n in e)||(r.setAttribute(n,\"t\"),fe[t]=r.attributes[n].expando===!1);r=null}();var Ye=/^(?:input|select|textarea)$/i,Je=/^key/,Ge=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ke=/^(?:focusinfocus|focusoutblur)$/,Qe=/^([^.]*)(?:\\.(.+)|)/;pe.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=pe._data(e);if(m){for(n.handler&&(u=n,n=u.handler,i=u.selector),n.guid||(n.guid=pe.guid++),(a=m.events)||(a=m.events={}),(c=m.handle)||(c=m.handle=function(e){return\"undefined\"==typeof pe||e&&pe.event.triggered===e.type?void 0:pe.event.dispatch.apply(c.elem,arguments)},c.elem=e),t=(t||\"\").match(De)||[\"\"],s=t.length;s--;)o=Qe.exec(t[s])||[],p=g=o[1],h=(o[2]||\"\").split(\".\").sort(),p&&(l=pe.event.special[p]||{},p=(i?l.delegateType:l.bindType)||p,l=pe.event.special[p]||{},f=pe.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&pe.expr.match.needsContext.test(i),namespace:h.join(\".\")},u),(d=a[p])||(d=a[p]=[],d.delegateCount=0,l.setup&&l.setup.call(e,r,h,c)!==!1||(e.addEventListener?e.addEventListener(p,c,!1):e.attachEvent&&e.attachEvent(\"on\"+p,c))),l.add&&(l.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,f):d.push(f),pe.event.global[p]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=pe.hasData(e)&&pe._data(e);if(m&&(c=m.events)){for(t=(t||\"\").match(De)||[\"\"],l=t.length;l--;)if(s=Qe.exec(t[l])||[],p=g=s[1],h=(s[2]||\"\").split(\".\").sort(),p){for(f=pe.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=c[p]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),u=o=d.length;o--;)a=d[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(d.splice(o,1),a.selector&&d.delegateCount--,f.remove&&f.remove.call(e,a));u&&!d.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||pe.removeEvent(e,p,m.handle),delete c[p])}else for(p in c)pe.event.remove(e,p+t[l],n,r,!0);pe.isEmptyObject(c)&&(delete m.handle,pe._removeData(e,\"events\"))}},trigger:function(t,n,r,i){var o,a,s,u,l,c,f,d=[r||re],p=ce.call(t,\"type\")?t.type:t,h=ce.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=c=r=r||re,3!==r.nodeType&&8!==r.nodeType&&!Ke.test(p+pe.event.triggered)&&(p.indexOf(\".\")>-1&&(h=p.split(\".\"),p=h.shift(),h.sort()),a=p.indexOf(\":\")<0&&\"on\"+p,t=t[pe.expando]?t:new pe.Event(p,\"object\"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),l=pe.event.special[p]||{},i||!l.trigger||l.trigger.apply(r,n)!==!1)){if(!i&&!l.noBubble&&!pe.isWindow(r)){for(u=l.delegateType||p,Ke.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),c=s;c===(r.ownerDocument||re)&&d.push(c.defaultView||c.parentWindow||e)}for(f=0;(s=d[f++])&&!t.isPropagationStopped();)t.type=f>1?u:l.bindType||p,o=(pe._data(s,\"events\")||{})[t.type]&&pe._data(s,\"handle\"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&He(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&He(r)&&a&&r[p]&&!pe.isWindow(r)){c=r[a],c&&(r[a]=null),pe.event.triggered=p;try{r[p]()}catch(g){}pe.event.triggered=void 0,c&&(r[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,r,i,o,a=[],s=ie.call(arguments),u=(pe._data(this,\"events\")||{})[e.type]||[],l=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,u),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((pe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&(\"click\"!==e.type||isNaN(e.button)||e.button<1))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(r=[],n=0;n<s;n++)o=t[n],i=o.selector+\" \",void 0===r[i]&&(r[i]=o.needsContext?pe(i,this).index(u)>-1:pe.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s<t.length&&a.push({elem:this,handlers:t.slice(s)}),a},fix:function(e){if(e[pe.expando])return e;var t,n,r,i=e.type,o=e,a=this.fixHooks[i];for(a||(this.fixHooks[i]=a=Ge.test(i)?this.mouseHooks:Je.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new pe.Event(o),t=r.length;t--;)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||re),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,a.filter?a.filter(e,o):e},props:\"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,t){var n,r,i,o=t.button,a=t.fromElement;return null==e.pageX&&null!=t.clientX&&(r=e.target.ownerDocument||re,i=r.documentElement,n=r.body,e.pageX=t.clientX+(i&&i.scrollLeft||n&&n.scrollLeft||0)-(i&&i.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(i&&i.scrollTop||n&&n.scrollTop||0)-(i&&i.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?t.toElement:a),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==b()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){if(this===b()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(pe.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click)return this.click(),!1},_default:function(e){return pe.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n){var r=pe.extend(new pe.Event,n,{type:e,isSimulated:!0});pe.event.trigger(r,null,t),r.isDefaultPrevented()&&n.preventDefault()}},pe.removeEvent=re.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(\"undefined\"==typeof e[r]&&(e[r]=null),e.detachEvent(r,n))},pe.Event=function(e,t){return this instanceof pe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?v:x):this.type=e,t&&pe.extend(this,t),this.timeStamp=e&&e.timeStamp||pe.now(),void(this[pe.expando]=!0)):new pe.Event(e,t)},pe.Event.prototype={constructor:pe.Event,isDefaultPrevented:x,isPropagationStopped:x,isImmediatePropagationStopped:x,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=v,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=v,e&&!this.isSimulated&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=v,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},pe.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){pe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||pe.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),fe.submit||(pe.event.special.submit={setup:function(){return!pe.nodeName(this,\"form\")&&void pe.event.add(this,\"click._submit keypress._submit\",function(e){var t=e.target,n=pe.nodeName(t,\"input\")||pe.nodeName(t,\"button\")?pe.prop(t,\"form\"):void 0;n&&!pe._data(n,\"submit\")&&(pe.event.add(n,\"submit._submit\",function(e){e._submitBubble=!0}),pe._data(n,\"submit\",!0))})},postDispatch:function(e){e._submitBubble&&(delete e._submitBubble,this.parentNode&&!e.isTrigger&&pe.event.simulate(\"submit\",this.parentNode,e))},teardown:function(){return!pe.nodeName(this,\"form\")&&void pe.event.remove(this,\"._submit\")}}),fe.change||(pe.event.special.change={setup:function(){return Ye.test(this.nodeName)?(\"checkbox\"!==this.type&&\"radio\"!==this.type||(pe.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._justChanged=!0)}),pe.event.add(this,\"click._change\",function(e){this._justChanged&&!e.isTrigger&&(this._justChanged=!1),pe.event.simulate(\"change\",this,e)})),!1):void pe.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Ye.test(t.nodeName)&&!pe._data(t,\"change\")&&(pe.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||pe.event.simulate(\"change\",this.parentNode,e)}),pe._data(t,\"change\",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||\"radio\"!==t.type&&\"checkbox\"!==t.type)return e.handleObj.handler.apply(this,arguments)},teardown:function(){return pe.event.remove(this,\"._change\"),!Ye.test(this.nodeName)}}),fe.focusin||pe.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){pe.event.simulate(t,e.target,pe.event.fix(e))};pe.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=pe._data(r,t);i||r.addEventListener(e,n,!0),pe._data(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=pe._data(r,t)-1;i?pe._data(r,t,i):(r.removeEventListener(e,n,!0),pe._removeData(r,t))}}}),pe.fn.extend({on:function(e,t,n,r){return w(this,e,t,n,r)},one:function(e,t,n,r){return w(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,pe(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return t!==!1&&\"function\"!=typeof t||(n=t,t=void 0),n===!1&&(n=x),this.each(function(){pe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){pe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return pe.event.trigger(e,t,n,!0)}});var Ze=/ jQuery\\d+=\"(?:null|\\d+)\"/g,et=new RegExp(\"<(?:\"+ze+\")[\\\\s/>]\",\"i\"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,nt=/<script|<style|<link/i,rt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,it=/^true\\/(.*)/,ot=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,at=p(re),st=at.appendChild(re.createElement(\"div\"));pe.extend({htmlPrefilter:function(e){return e.replace(tt,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s,u=pe.contains(e.ownerDocument,e);if(fe.html5Clone||pe.isXMLDoc(e)||!et.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(st.innerHTML=e.outerHTML,st.removeChild(o=st.firstChild)),!(fe.noCloneEvent&&fe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||pe.isXMLDoc(e)))for(r=h(o),s=h(e),a=0;null!=(i=s[a]);++a)r[a]&&k(i,r[a]);if(t)if(n)for(s=s||h(e),r=r||h(o),a=0;null!=(i=s[a]);a++)N(i,r[a]);else N(e,o);return r=h(o,\"script\"),r.length>0&&g(r,!u&&h(e,\"script\")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=pe.expando,u=pe.cache,l=fe.attributes,c=pe.event.special;null!=(n=e[a]);a++)if((t||He(n))&&(i=n[s],o=i&&u[i])){if(o.events)for(r in o.events)c[r]?pe.event.remove(n,r):pe.removeEvent(n,r,o.handle);u[i]&&(delete u[i],l||\"undefined\"==typeof n.removeAttribute?n[s]=void 0:n.removeAttribute(s),ne.push(i))}}}),pe.fn.extend({domManip:S,detach:function(e){return A(this,e,!0)},remove:function(e){return A(this,e)},text:function(e){return Pe(this,function(e){return void 0===e?pe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||re).createTextNode(e))},null,e,arguments.length)},append:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.appendChild(e)}})},prepend:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&pe.cleanData(h(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&pe.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return pe.clone(this,e,t)})},html:function(e){return Pe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Ze,\"\"):void 0;if(\"string\"==typeof e&&!nt.test(e)&&(fe.htmlSerialize||!et.test(e))&&(fe.leadingWhitespace||!$e.test(e))&&!Xe[(We.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=pe.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(pe.cleanData(h(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return S(this,arguments,function(t){var n=this.parentNode;pe.inArray(this,e)<0&&(pe.cleanData(h(this)),\nn&&n.replaceChild(t,this))},e)}}),pe.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){pe.fn[e]=function(e){for(var n,r=0,i=[],o=pe(e),a=o.length-1;r<=a;r++)n=r===a?this:this.clone(!0),pe(o[r])[t](n),ae.apply(i,n.get());return this.pushStack(i)}});var ut,lt={HTML:\"block\",BODY:\"block\"},ct=/^margin/,ft=new RegExp(\"^(\"+Fe+\")(?!px)[a-z%]+$\",\"i\"),dt=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i},pt=re.documentElement;!function(){function t(){var t,c,f=re.documentElement;f.appendChild(u),l.style.cssText=\"-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",n=i=s=!1,r=a=!0,e.getComputedStyle&&(c=e.getComputedStyle(l),n=\"1%\"!==(c||{}).top,s=\"2px\"===(c||{}).marginLeft,i=\"4px\"===(c||{width:\"4px\"}).width,l.style.marginRight=\"50%\",r=\"4px\"===(c||{marginRight:\"4px\"}).marginRight,t=l.appendChild(re.createElement(\"div\")),t.style.cssText=l.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",t.style.marginRight=t.style.width=\"0\",l.style.width=\"1px\",a=!parseFloat((e.getComputedStyle(t)||{}).marginRight),l.removeChild(t)),l.style.display=\"none\",o=0===l.getClientRects().length,o&&(l.style.display=\"\",l.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",t=l.getElementsByTagName(\"td\"),t[0].style.cssText=\"margin:0;border:0;padding:0;display:none\",o=0===t[0].offsetHeight,o&&(t[0].style.display=\"\",t[1].style.display=\"none\",o=0===t[0].offsetHeight)),f.removeChild(u)}var n,r,i,o,a,s,u=re.createElement(\"div\"),l=re.createElement(\"div\");l.style&&(l.style.cssText=\"float:left;opacity:.5\",fe.opacity=\"0.5\"===l.style.opacity,fe.cssFloat=!!l.style.cssFloat,l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",fe.clearCloneStyle=\"content-box\"===l.style.backgroundClip,u=re.createElement(\"div\"),u.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",l.innerHTML=\"\",u.appendChild(l),fe.boxSizing=\"\"===l.style.boxSizing||\"\"===l.style.MozBoxSizing||\"\"===l.style.WebkitBoxSizing,pe.extend(fe,{reliableHiddenOffsets:function(){return null==n&&t(),o},boxSizingReliable:function(){return null==n&&t(),i},pixelMarginRight:function(){return null==n&&t(),r},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),a},reliableMarginLeft:function(){return null==n&&t(),s}}))}();var ht,gt,mt=/^(top|right|bottom|left)$/;e.getComputedStyle?(ht=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n.getPropertyValue(t)||n[t]:void 0,\"\"!==a&&void 0!==a||pe.contains(e.ownerDocument,e)||(a=pe.style(e,t)),n&&!fe.pixelMarginRight()&&ft.test(a)&&ct.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),void 0===a?a:a+\"\"}):pt.currentStyle&&(ht=function(e){return e.currentStyle},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),ft.test(a)&&!mt.test(t)&&(r=s.left,i=e.runtimeStyle,o=i&&i.left,o&&(i.left=e.currentStyle.left),s.left=\"fontSize\"===t?\"1em\":a,a=s.pixelLeft+\"px\",s.left=r,o&&(i.left=o)),void 0===a?a:a+\"\"||\"auto\"});var yt=/alpha\\([^)]*\\)/i,vt=/opacity\\s*=\\s*([^)]*)/i,xt=/^(none|table(?!-c[ea]).+)/,bt=new RegExp(\"^(\"+Fe+\")(.*)$\",\"i\"),wt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Tt={letterSpacing:\"0\",fontWeight:\"400\"},Ct=[\"Webkit\",\"O\",\"Moz\",\"ms\"],Et=re.createElement(\"div\").style;pe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=gt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":fe.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=pe.camelCase(t),u=e.style;if(t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:u[t];if(o=typeof n,\"string\"===o&&(i=Me.exec(n))&&i[1]&&(n=d(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(pe.cssNumber[s]?\"\":\"px\")),fe.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),!(a&&\"set\"in a&&void 0===(n=a.set(e,n,r)))))try{u[t]=n}catch(l){}}},css:function(e,t,n,r){var i,o,a,s=pe.camelCase(t);return t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],a&&\"get\"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=gt(e,t,r)),\"normal\"===o&&t in Tt&&(o=Tt[t]),\"\"===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),pe.each([\"height\",\"width\"],function(e,t){pe.cssHooks[t]={get:function(e,n,r){if(n)return xt.test(pe.css(e,\"display\"))&&0===e.offsetWidth?dt(e,wt,function(){return M(e,t,r)}):M(e,t,r)},set:function(e,n,r){var i=r&&ht(e);return _(e,n,r?F(e,t,r,fe.boxSizing&&\"border-box\"===pe.css(e,\"boxSizing\",!1,i),i):0)}}}),fe.opacity||(pe.cssHooks.opacity={get:function(e,t){return vt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=pe.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===pe.trim(o.replace(yt,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=yt.test(o)?o.replace(yt,i):o+\" \"+i)}}),pe.cssHooks.marginRight=L(fe.reliableMarginRight,function(e,t){if(t)return dt(e,{display:\"inline-block\"},gt,[e,\"marginRight\"])}),pe.cssHooks.marginLeft=L(fe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(gt(e,\"marginLeft\"))||(pe.contains(e.ownerDocument,e)?e.getBoundingClientRect().left-dt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}):0))+\"px\"}),pe.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){pe.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+Oe[r]+t]=o[r]||o[r-2]||o[0];return i}},ct.test(e)||(pe.cssHooks[e+t].set=_)}),pe.fn.extend({css:function(e,t){return Pe(this,function(e,t,n){var r,i,o={},a=0;if(pe.isArray(t)){for(r=ht(e),i=t.length;a<i;a++)o[t[a]]=pe.css(e,t[a],!1,r);return o}return void 0!==n?pe.style(e,t,n):pe.css(e,t)},e,t,arguments.length>1)},show:function(){return q(this,!0)},hide:function(){return q(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){Re(this)?pe(this).show():pe(this).hide()})}}),pe.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||pe.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(pe.cssNumber[n]?\"\":\"px\")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.options.duration?this.pos=t=pe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=pe.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){pe.fx.step[e.prop]?pe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[pe.cssProps[e.prop]]&&!pe.cssHooks[e.prop]?e.elem[e.prop]=e.now:pe.style(e.elem,e.prop,e.now+e.unit)}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},pe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},pe.fx=O.prototype.init,pe.fx.step={};var Nt,kt,St=/^(?:toggle|show|hide)$/,At=/queueHooks$/;pe.Animation=pe.extend($,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){pe.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(De);for(var n,r=0,i=e.length;r<i;r++)n=e[r],$.tweeners[n]=$.tweeners[n]||[],$.tweeners[n].unshift(t)},prefilters:[W],prefilter:function(e,t){t?$.prefilters.unshift(e):$.prefilters.push(e)}}),pe.speed=function(e,t,n){var r=e&&\"object\"==typeof e?pe.extend({},e):{complete:n||!n&&t||pe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!pe.isFunction(t)&&t};return r.duration=pe.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in pe.fx.speeds?pe.fx.speeds[r.duration]:pe.fx.speeds._default,null!=r.queue&&r.queue!==!0||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){pe.isFunction(r.old)&&r.old.call(this),r.queue&&pe.dequeue(this,r.queue)},r},pe.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Re).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=pe.isEmptyObject(e),o=pe.speed(t,n,r),a=function(){var t=$(this,pe.extend({},e),o);(i||pe._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=pe.timers,a=pe._data(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&At.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||pe.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=pe._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=pe.timers,a=r?r.length:0;for(n.finish=!0,pe.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),pe.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=pe.fn[t];pe.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(P(t,!0),e,r,i)}}),pe.each({slideDown:P(\"show\"),slideUp:P(\"hide\"),slideToggle:P(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){pe.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),pe.timers=[],pe.fx.tick=function(){var e,t=pe.timers,n=0;for(Nt=pe.now();n<t.length;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||pe.fx.stop(),Nt=void 0},pe.fx.timer=function(e){pe.timers.push(e),e()?pe.fx.start():pe.timers.pop()},pe.fx.interval=13,pe.fx.start=function(){kt||(kt=e.setInterval(pe.fx.tick,pe.fx.interval))},pe.fx.stop=function(){e.clearInterval(kt),kt=null},pe.fx.speeds={slow:600,fast:200,_default:400},pe.fn.delay=function(t,n){return t=pe.fx?pe.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e,t=re.createElement(\"input\"),n=re.createElement(\"div\"),r=re.createElement(\"select\"),i=r.appendChild(re.createElement(\"option\"));n=re.createElement(\"div\"),n.setAttribute(\"className\",\"t\"),n.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",e=n.getElementsByTagName(\"a\")[0],t.setAttribute(\"type\",\"checkbox\"),n.appendChild(t),e=n.getElementsByTagName(\"a\")[0],e.style.cssText=\"top:1px\",fe.getSetAttribute=\"t\"!==n.className,fe.style=/top/.test(e.getAttribute(\"style\")),fe.hrefNormalized=\"/a\"===e.getAttribute(\"href\"),fe.checkOn=!!t.value,fe.optSelected=i.selected,fe.enctype=!!re.createElement(\"form\").enctype,r.disabled=!0,fe.optDisabled=!i.disabled,t=re.createElement(\"input\"),t.setAttribute(\"value\",\"\"),fe.input=\"\"===t.getAttribute(\"value\"),t.value=\"t\",t.setAttribute(\"type\",\"radio\"),fe.radioValue=\"t\"===t.value}();var Dt=/\\r/g,jt=/[\\x20\\t\\r\\n\\f]+/g;pe.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=pe.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,pe(this).val()):e,null==i?i=\"\":\"number\"==typeof i?i+=\"\":pe.isArray(i)&&(i=pe.map(i,function(e){return null==e?\"\":e+\"\"})),t=pe.valHooks[this.type]||pe.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return t=pe.valHooks[i.type]||pe.valHooks[i.nodeName.toLowerCase()],t&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(Dt,\"\"):null==n?\"\":n)}}}),pe.extend({valHooks:{option:{get:function(e){var t=pe.find.attr(e,\"value\");return null!=t?t:pe.trim(pe.text(e)).replace(jt,\" \")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||i<0,a=o?null:[],s=o?i+1:r.length,u=i<0?s:o?i:0;u<s;u++)if(n=r[u],(n.selected||u===i)&&(fe.optDisabled?!n.disabled:null===n.getAttribute(\"disabled\"))&&(!n.parentNode.disabled||!pe.nodeName(n.parentNode,\"optgroup\"))){if(t=pe(n).val(),o)return t;a.push(t)}return a},set:function(e,t){for(var n,r,i=e.options,o=pe.makeArray(t),a=i.length;a--;)if(r=i[a],pe.inArray(pe.valHooks.option.get(r),o)>-1)try{r.selected=n=!0}catch(s){r.scrollHeight}else r.selected=!1;return n||(e.selectedIndex=-1),i}}}}),pe.each([\"radio\",\"checkbox\"],function(){pe.valHooks[this]={set:function(e,t){if(pe.isArray(t))return e.checked=pe.inArray(pe(e).val(),t)>-1}},fe.checkOn||(pe.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Lt,Ht,qt=pe.expr.attrHandle,_t=/^(?:checked|selected)$/i,Ft=fe.getSetAttribute,Mt=fe.input;pe.fn.extend({attr:function(e,t){return Pe(this,pe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){pe.removeAttr(this,e)})}}),pe.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?pe.prop(e,t,n):(1===o&&pe.isXMLDoc(e)||(t=t.toLowerCase(),i=pe.attrHooks[t]||(pe.expr.match.bool.test(t)?Ht:Lt)),void 0!==n?null===n?void pe.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:(r=pe.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!fe.radioValue&&\"radio\"===t&&pe.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(De);if(o&&1===e.nodeType)for(;n=o[i++];)r=pe.propFix[n]||n,pe.expr.match.bool.test(n)?Mt&&Ft||!_t.test(n)?e[r]=!1:e[pe.camelCase(\"default-\"+n)]=e[r]=!1:pe.attr(e,n,\"\"),e.removeAttribute(Ft?n:r)}}),Ht={set:function(e,t,n){return t===!1?pe.removeAttr(e,n):Mt&&Ft||!_t.test(n)?e.setAttribute(!Ft&&pe.propFix[n]||n,n):e[pe.camelCase(\"default-\"+n)]=e[n]=!0,n}},pe.each(pe.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=qt[t]||pe.find.attr;Mt&&Ft||!_t.test(t)?qt[t]=function(e,t,r){var i,o;return r||(o=qt[t],qt[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,qt[t]=o),i}:qt[t]=function(e,t,n){if(!n)return e[pe.camelCase(\"default-\"+t)]?t.toLowerCase():null}}),Mt&&Ft||(pe.attrHooks.value={set:function(e,t,n){return pe.nodeName(e,\"input\")?void(e.defaultValue=t):Lt&&Lt.set(e,t,n)}}),Ft||(Lt={set:function(e,t,n){var r=e.getAttributeNode(n);if(r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+=\"\",\"value\"===n||t===e.getAttribute(n))return t}},qt.id=qt.name=qt.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&\"\"!==r.value?r.value:null},pe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:Lt.set},pe.attrHooks.contenteditable={set:function(e,t,n){Lt.set(e,\"\"!==t&&t,n)}},pe.each([\"width\",\"height\"],function(e,t){pe.attrHooks[t]={set:function(e,n){if(\"\"===n)return e.setAttribute(t,\"auto\"),n}}})),fe.style||(pe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+\"\"}});var Ot=/^(?:input|select|textarea|button|object)$/i,Rt=/^(?:a|area)$/i;pe.fn.extend({prop:function(e,t){return Pe(this,pe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=pe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(t){}})}}),pe.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&pe.isXMLDoc(e)||(t=pe.propFix[t]||t,i=pe.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=pe.find.attr(e,\"tabindex\");return t?parseInt(t,10):Ot.test(e.nodeName)||Rt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),fe.hrefNormalized||pe.each([\"href\",\"src\"],function(e,t){pe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),fe.optSelected||(pe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),pe.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){pe.propFix[this.toLowerCase()]=this}),fe.enctype||(pe.propFix.enctype=\"encoding\");var Pt=/[\\t\\r\\n\\f]/g;pe.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).addClass(e.call(this,t,z(this)))});if(\"string\"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(Pt,\" \")){for(a=0;o=t[a++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");s=pe.trim(r),i!==s&&pe.attr(n,\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).removeClass(e.call(this,t,z(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(Pt,\" \")){for(a=0;o=t[a++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");s=pe.trim(r),i!==s&&pe.attr(n,\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):pe.isFunction(e)?this.each(function(n){pe(this).toggleClass(e.call(this,n,z(this),t),t)}):this.each(function(){var t,r,i,o;if(\"string\"===n)for(r=0,i=pe(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=z(this),t&&pe._data(this,\"__className__\",t),pe.attr(this,\"class\",t||e===!1?\"\":pe._data(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+z(n)+\" \").replace(Pt,\" \").indexOf(t)>-1)return!0;return!1}}),pe.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){pe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),pe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}});var Bt=e.location,Wt=pe.now(),It=/\\?/,$t=/(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;pe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+\"\");var n,r=null,i=pe.trim(t+\"\");return i&&!pe.trim(i.replace($t,function(e,t,i,o){return n&&t&&(r=0),0===r?e:(n=i||t,r+=!o-!i,\"\")}))?Function(\"return \"+i)():pe.error(\"Invalid JSON: \"+t)},pe.parseXML=function(t){var n,r;if(!t||\"string\"!=typeof t)return null;try{e.DOMParser?(r=new e.DOMParser,n=r.parseFromString(t,\"text/xml\")):(n=new e.ActiveXObject(\"Microsoft.XMLDOM\"),n.async=\"false\",n.loadXML(t))}catch(i){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName(\"parsererror\").length||pe.error(\"Invalid XML: \"+t),n};var zt=/#.*$/,Xt=/([?&])_=[^&]*/,Ut=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Vt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Yt=/^(?:GET|HEAD)$/,Jt=/^\\/\\//,Gt=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,Kt={},Qt={},Zt=\"*/\".concat(\"*\"),en=Bt.href,tn=Gt.exec(en.toLowerCase())||[];pe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:en,type:\"GET\",isLocal:Vt.test(tn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Zt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":pe.parseJSON,\"text xml\":pe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?V(V(e,pe.ajaxSettings),t):V(pe.ajaxSettings,e)},ajaxPrefilter:X(Kt),ajaxTransport:X(Qt),ajax:function(t,n){function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c=void 0,s=i||\"\",T.readyState=t>0?4:0,o=t>=200&&t<300||304===t,r&&(x=Y(d,T,r)),x=J(d,x,T,o),o?(d.ifModified&&(w=T.getResponseHeader(\"Last-Modified\"),w&&(pe.lastModified[a]=w),w=T.getResponseHeader(\"etag\"),w&&(pe.etag[a]=w)),204===t||\"HEAD\"===d.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=x.state,f=x.data,v=x.error,o=!v)):(v=C,!t&&C||(C=\"error\",t<0&&(t=0))),T.status=t,T.statusText=(n||C)+\"\",o?g.resolveWith(p,[f,C,T]):g.rejectWith(p,[T,C,v]),T.statusCode(y),y=void 0,l&&h.trigger(o?\"ajaxSuccess\":\"ajaxError\",[T,d,o?f:v]),m.fireWith(p,[T,C]),l&&(h.trigger(\"ajaxComplete\",[T,d]),--pe.active||pe.event.trigger(\"ajaxStop\")))}\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,d=pe.ajaxSetup({},n),p=d.context||d,h=d.context&&(p.nodeType||p.jquery)?pe(p):pe.event,g=pe.Deferred(),m=pe.Callbacks(\"once memory\"),y=d.statusCode||{},v={},x={},b=0,w=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!f)for(f={};t=Ut.exec(s);)f[t[1].toLowerCase()]=t[2];t=f[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=x[n]=x[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)y[t]=[y[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||w;return c&&c.abort(t),r(0,t),this}};if(g.promise(T).complete=m.add,T.success=T.done,T.error=T.fail,d.url=((t||d.url||en)+\"\").replace(zt,\"\").replace(Jt,tn[1]+\"//\"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=pe.trim(d.dataType||\"*\").toLowerCase().match(De)||[\"\"],null==d.crossDomain&&(i=Gt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===tn[1]&&i[2]===tn[2]&&(i[3]||(\"http:\"===i[1]?\"80\":\"443\"))===(tn[3]||(\"http:\"===tn[1]?\"80\":\"443\")))),d.data&&d.processData&&\"string\"!=typeof d.data&&(d.data=pe.param(d.data,d.traditional)),U(Kt,d,n,T),2===b)return T;l=pe.event&&d.global,l&&0===pe.active++&&pe.event.trigger(\"ajaxStart\"),d.type=d.type.toUpperCase(),d.hasContent=!Yt.test(d.type),a=d.url,d.hasContent||(d.data&&(a=d.url+=(It.test(a)?\"&\":\"?\")+d.data,delete d.data),d.cache===!1&&(d.url=Xt.test(a)?a.replace(Xt,\"$1_=\"+Wt++):a+(It.test(a)?\"&\":\"?\")+\"_=\"+Wt++)),d.ifModified&&(pe.lastModified[a]&&T.setRequestHeader(\"If-Modified-Since\",pe.lastModified[a]),pe.etag[a]&&T.setRequestHeader(\"If-None-Match\",pe.etag[a])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader(\"Content-Type\",d.contentType),T.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!==d.dataTypes[0]?\", \"+Zt+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(o in d.headers)T.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(p,T,d)===!1||2===b))return T.abort();w=\"abort\";for(o in{success:1,error:1,complete:1})T[o](d[o]);if(c=U(Qt,d,n,T)){if(T.readyState=1,l&&h.trigger(\"ajaxSend\",[T,d]),2===b)return T;d.async&&d.timeout>0&&(u=e.setTimeout(function(){T.abort(\"timeout\")},d.timeout));try{b=1,c.send(v,r)}catch(C){if(!(b<2))throw C;r(-1,C)}}else r(-1,\"No Transport\");return T},getJSON:function(e,t,n){return pe.get(e,t,n,\"json\")},getScript:function(e,t){return pe.get(e,void 0,t,\"script\")}}),pe.each([\"get\",\"post\"],function(e,t){pe[t]=function(e,n,r,i){return pe.isFunction(n)&&(i=i||r,r=n,n=void 0),pe.ajax(pe.extend({url:e,type:t,dataType:i,data:n,success:r},pe.isPlainObject(e)&&e))}}),pe._evalUrl=function(e){return pe.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},pe.fn.extend({wrapAll:function(e){if(pe.isFunction(e))return this.each(function(t){pe(this).wrapAll(e.call(this,t))});if(this[0]){var t=pe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return pe.isFunction(e)?this.each(function(t){pe(this).wrapInner(e.call(this,t))}):this.each(function(){var t=pe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=pe.isFunction(e);return this.each(function(n){pe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){pe.nodeName(this,\"body\")||pe(this).replaceWith(this.childNodes)}).end()}}),pe.expr.filters.hidden=function(e){return fe.reliableHiddenOffsets()?e.offsetWidth<=0&&e.offsetHeight<=0&&!e.getClientRects().length:K(e)},pe.expr.filters.visible=function(e){return!pe.expr.filters.hidden(e)};var nn=/%20/g,rn=/\\[\\]$/,on=/\\r?\\n/g,an=/^(?:submit|button|image|reset|file)$/i,sn=/^(?:input|select|textarea|keygen)/i;pe.param=function(e,t){var n,r=[],i=function(e,t){t=pe.isFunction(t)?t():null==t?\"\":t,r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(void 0===t&&(t=pe.ajaxSettings&&pe.ajaxSettings.traditional),pe.isArray(e)||e.jquery&&!pe.isPlainObject(e))pe.each(e,function(){i(this.name,this.value)});else for(n in e)Q(n,e[n],t,i);return r.join(\"&\").replace(nn,\"+\")},pe.fn.extend({serialize:function(){return pe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=pe.prop(this,\"elements\");return e?pe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!pe(this).is(\":disabled\")&&sn.test(this.nodeName)&&!an.test(e)&&(this.checked||!Be.test(e))}).map(function(e,t){var n=pe(this).val();return null==n?null:pe.isArray(n)?pe.map(n,function(e){return{name:t.name,value:e.replace(on,\"\\r\\n\")}}):{name:t.name,value:n.replace(on,\"\\r\\n\")}}).get()}}),pe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return this.isLocal?ee():re.documentMode>8?Z():/^(get|post|head|put|delete|options)$/i.test(this.type)&&Z()||ee()}:Z;var un=0,ln={},cn=pe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent(\"onunload\",function(){for(var e in ln)ln[e](void 0,!0)}),fe.cors=!!cn&&\"withCredentials\"in cn,cn=fe.ajax=!!cn,cn&&pe.ajaxTransport(function(t){if(!t.crossDomain||fe.cors){var n;return{send:function(r,i){var o,a=t.xhr(),s=++un;if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)a[o]=t.xhrFields[o];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||r[\"X-Requested-With\"]||(r[\"X-Requested-With\"]=\"XMLHttpRequest\");for(o in r)void 0!==r[o]&&a.setRequestHeader(o,r[o]+\"\");a.send(t.hasContent&&t.data||null),n=function(e,r){var o,u,l;if(n&&(r||4===a.readyState))if(delete ln[s],n=void 0,a.onreadystatechange=pe.noop,r)4!==a.readyState&&a.abort();else{l={},o=a.status,\"string\"==typeof a.responseText&&(l.text=a.responseText);try{u=a.statusText}catch(c){u=\"\"}o||!t.isLocal||t.crossDomain?1223===o&&(o=204):o=l.text?200:404}l&&i(o,u,l,a.getAllResponseHeaders())},t.async?4===a.readyState?e.setTimeout(n):a.onreadystatechange=ln[s]=n:n()},abort:function(){n&&n(void 0,!0)}}}}),pe.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return pe.globalEval(e),e}}}),pe.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),pe.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n=re.head||pe(\"head\")[0]||re.documentElement;return{send:function(r,i){t=re.createElement(\"script\"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,\"success\"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var fn=[],dn=/(=)\\?(?=&|$)|\\?\\?/;pe.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=fn.pop()||pe.expando+\"_\"+Wt++;return this[e]=!0,e}}),pe.ajaxPrefilter(\"json jsonp\",function(t,n,r){var i,o,a,s=t.jsonp!==!1&&(dn.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&dn.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=pe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(dn,\"$1\"+i):t.jsonp!==!1&&(t.url+=(It.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||pe.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?pe(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,fn.push(i)),a&&pe.isFunction(o)&&o(a[0]),a=o=void 0}),\"script\"}),pe.parseHTML=function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||re;var r=Te.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=y([e],t,i),i&&i.length&&pe(i).remove(),pe.merge([],r.childNodes))};var pn=pe.fn.load;return pe.fn.load=function(e,t,n){if(\"string\"!=typeof e&&pn)return pn.apply(this,arguments);var r,i,o,a=this,s=e.indexOf(\" \");return s>-1&&(r=pe.trim(e.slice(s,e.length)),e=e.slice(0,s)),pe.isFunction(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),a.length>0&&pe.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?pe(\"<div>\").append(pe.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},pe.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){pe.fn[t]=function(e){return this.on(t,e)}}),pe.expr.filters.animated=function(e){return pe.grep(pe.timers,function(t){return e===t.elem}).length},pe.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=pe.css(e,\"position\"),f=pe(e),d={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),o=pe.css(e,\"top\"),u=pe.css(e,\"left\"),l=(\"absolute\"===c||\"fixed\"===c)&&pe.inArray(\"auto\",[o,u])>-1,l?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),pe.isFunction(t)&&(t=t.call(e,n,pe.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+i),\"using\"in t?t.using.call(e,d):f.css(d)}},pe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){pe.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],o=i&&i.ownerDocument;if(o)return t=o.documentElement,pe.contains(t,i)?(\"undefined\"!=typeof i.getBoundingClientRect&&(r=i.getBoundingClientRect()),n=te(o),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===pe.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),pe.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=pe.css(e[0],\"borderTopWidth\",!0),n.left+=pe.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-pe.css(r,\"marginTop\",!0),left:t.left-n.left-pe.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){\nfor(var e=this.offsetParent;e&&!pe.nodeName(e,\"html\")&&\"static\"===pe.css(e,\"position\");)e=e.offsetParent;return e||pt})}}),pe.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=/Y/.test(t);pe.fn[e]=function(r){return Pe(this,function(e,r,i){var o=te(e);return void 0===i?o?t in o?o[t]:o.document.documentElement[r]:e[r]:void(o?o.scrollTo(n?pe(o).scrollLeft():i,n?i:pe(o).scrollTop()):e[r]=i)},e,r,arguments.length,null)}}),pe.each([\"top\",\"left\"],function(e,t){pe.cssHooks[t]=L(fe.pixelPosition,function(e,n){if(n)return n=gt(e,t),ft.test(n)?pe(e).position()[t]+\"px\":n})}),pe.each({Height:\"height\",Width:\"width\"},function(e,t){pe.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){pe.fn[r]=function(r,i){var o=arguments.length&&(n||\"boolean\"!=typeof r),a=n||(r===!0||i===!0?\"margin\":\"border\");return Pe(this,function(t,n,r){var i;return pe.isWindow(t)?t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===r?pe.css(t,n,a):pe.style(t,n,r,a)},t,o?r:void 0,o,null)}})}),pe.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),pe.fn.size=function(){return this.length},pe.fn.andSelf=pe.fn.addBack,layui.define(function(e){layui.$=pe,e(\"jquery\",pe)}),pe});!function(e,t){\"use strict\";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if(\"interactive\"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf(\"/\")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],type:[\"dialog\",\"page\",\"iframe\",\"loading\",\"tips\"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?\"getPropertyValue\":\"getAttribute\"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName(\"head\")[0],s=document.createElement(\"link\");\"string\"==typeof i&&(n=i);var l=(n||t).replace(/\\.|\\//g,\"\"),f=\"layuicss-\"+l,c=0;s.rel=\"stylesheet\",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),\"function\"==typeof i&&!function u(){return++c>80?e.console&&console.error(\"layer.css: Invalid\"):void(1989===parseInt(o.getStyle(document.getElementById(f),\"width\"))?i():setTimeout(u,100))}()}}},r={v:\"3.1.1\",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||\"ActiveXObject\"in e)&&((t.match(/msie\\s(\\d+)/)||[])[1]||\"11\")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,\"string\"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss(\"modules/layer/\"+e.extend):o.link(\"theme/\"+e.extend),this):this},ready:function(e){var t=\"layer\",i=\"\",n=(a?\"modules/layer/\":\"theme/\")+\"default/layer.css?v=\"+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a=\"function\"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s=\"function\"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s=\"function\"==typeof n,f=o.config.skin,c=(f?f+\" \"+f+\"-msg\":\"\")||\"layui-layer-msg\",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+\" layui-layer-hui\",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+\" \"+(n.skin||\"layui-layer-hui\")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=[\"layui-layer\",\".layui-layer-title\",\".layui-layer-main\",\".layui-layer-dialog\",\"layui-layer-iframe\",\"layui-layer-content\",\"layui-layer-btn\",\"layui-layer-close\"];l.anim=[\"layer-anim-00\",\"layer-anim-01\",\"layer-anim-02\",\"layer-anim-03\",\"layer-anim-04\",\"layer-anim-05\",\"layer-anim-06\"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:\"&#x4FE1;&#x606F;\",offset:\"auto\",area:\"auto\",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f=\"object\"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'<div class=\"layui-layer-title\" style=\"'+(f?r.title[1]:\"\")+'\">'+(f?r.title[0]:r.title)+\"</div>\":\"\";return r.zIndex=s,t([r.shade?'<div class=\"layui-layer-shade\" id=\"layui-layer-shade'+a+'\" times=\"'+a+'\" style=\"'+(\"z-index:\"+(s-1)+\"; \")+'\"></div>':\"\",'<div class=\"'+l[0]+(\" layui-layer-\"+o.type[r.type])+(0!=r.type&&2!=r.type||r.shade?\"\":\" layui-layer-border\")+\" \"+(r.skin||\"\")+'\" id=\"'+l[0]+a+'\" type=\"'+o.type[r.type]+'\" times=\"'+a+'\" showtime=\"'+r.time+'\" conType=\"'+(e?\"object\":\"string\")+'\" style=\"z-index: '+s+\"; width:\"+r.area[0]+\";height:\"+r.area[1]+(r.fixed?\"\":\";position:absolute;\")+'\">'+(e&&2!=r.type?\"\":u)+'<div id=\"'+(r.id||\"\")+'\" class=\"layui-layer-content'+(0==r.type&&r.icon!==-1?\" layui-layer-padding\":\"\")+(3==r.type?\" layui-layer-loading\"+r.icon:\"\")+'\">'+(0==r.type&&r.icon!==-1?'<i class=\"layui-layer-ico layui-layer-ico'+r.icon+'\"></i>':\"\")+(1==r.type&&e?\"\":r.content||\"\")+'</div><span class=\"layui-layer-setwin\">'+function(){var e=c?'<a class=\"layui-layer-min\" href=\"javascript:;\"><cite></cite></a><a class=\"layui-layer-ico layui-layer-max\" href=\"javascript:;\"></a>':\"\";return r.closeBtn&&(e+='<a class=\"layui-layer-ico '+l[7]+\" \"+l[7]+(r.title?r.closeBtn:4==r.type?\"1\":\"2\")+'\" href=\"javascript:;\"></a>'),e}()+\"</span>\"+(r.btn?function(){var e=\"\";\"string\"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t<i;t++)e+='<a class=\"'+l[6]+t+'\">'+r.btn[t]+\"</a>\";return'<div class=\"'+l[6]+\" layui-layer-btn-\"+(r.btnAlign||\"\")+'\">'+e+\"</div>\"}():\"\")+(r.resize?'<span class=\"layui-layer-resize\"></span>':\"\")+\"</div>\"],u,i('<div class=\"layui-layer-move\"></div>')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f=\"object\"==typeof s,c=i(\"body\");if(!t.id||!i(\"#\"+t.id)[0]){switch(\"string\"==typeof t.area&&(t.area=\"auto\"===t.area?[\"\",\"\"]:[t.area,\"\"]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn=\"btn\"in t?t.btn:o.btn[0],r.closeAll(\"dialog\");break;case 2:var s=t.content=f?t.content:[t.content||\"\",\"auto\"];t.content='<iframe scrolling=\"'+(t.content[1]||\"auto\")+'\" allowtransparency=\"true\" id=\"'+l[4]+a+'\" name=\"'+l[4]+a+'\" onload=\"this.className=\\'\\';\" class=\"layui-layer-load\" frameborder=\"0\" src=\"'+t.content[0]+'\"></iframe>';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll(\"loading\");break;case 4:f||(t.content=[t.content,\"body\"]),t.follow=t.content[1],t.content=t.content[0]+'<i class=\"layui-layer-TipsG\"></i>',delete t.title,t.tips=\"object\"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll(\"tips\")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i(\"body\").append(n[1])}():function(){s.parents(\".\"+l[0])[0]||(s.data(\"display\",s.css(\"display\")).show().addClass(\"layui-layer-wrap\").wrap(n[1]),i(\"#\"+l[0]+a).find(\".\"+l[5]).before(r))}()}():c.append(n[1]),i(\".layui-layer-move\")[0]||c.append(o.moveElem=u),e.layero=i(\"#\"+l[0]+a),t.scrollbar||l.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",a)}).auto(a),i(\"#layui-layer-shade\"+e.index).css({\"background-color\":t.shade[1]||\"#000\",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find(\"iframe\").attr(\"src\",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on(\"resize\",function(){e.offset(),(/^\\d+%$/.test(t.area[0])||/^\\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u=\"layer-anim \"+l.anim[t.anim];e.layero.addClass(u).one(\"webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend\",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data(\"isOutAnim\",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i(\"#\"+l[0]+e);\"\"===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find(\".\"+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css(\"padding-top\"))))};switch(a.type){case 2:u(\"iframe\");break;default:\"\"===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u(\".\"+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u(\".\"+l[5])):u(\".\"+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o=\"object\"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):\"auto\"!==t.offset&&(\"t\"===t.offset?e.offsetTop=0:\"r\"===t.offset?e.offsetLeft=n.width()-a[0]:\"b\"===t.offset?e.offsetTop=n.height()-a[1]:\"l\"===t.offset?e.offsetLeft=0:\"lt\"===t.offset?(e.offsetTop=0,e.offsetLeft=0):\"lb\"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):\"rt\"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):\"rb\"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr(\"minLeft\")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css(\"left\")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i(\"body\"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(\".layui-layer-TipsG\"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:\"auto\"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass(\"layui-layer-TipsB\").addClass(\"layui-layer-TipsT\").css(\"border-right-color\",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass(\"layui-layer-TipsL\").addClass(\"layui-layer-TipsR\").css(\"border-bottom-color\",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass(\"layui-layer-TipsT\").addClass(\"layui-layer-TipsB\").css(\"border-right-color\",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass(\"layui-layer-TipsR\").addClass(\"layui-layer-TipsL\").css(\"border-bottom-color\",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find(\".\"+l[5]).css({\"background-color\":t.tips[1],\"padding-right\":t.closeBtn?\"30px\":\"\"}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(\".layui-layer-resize\"),c={};return t.move&&l.css(\"cursor\",\"move\"),l.on(\"mousedown\",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css(\"left\")),e.clientY-parseFloat(s.css(\"top\"))],o.moveElem.css(\"cursor\",\"move\").show())}),f.on(\"mousedown\",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css(\"cursor\",\"se-resize\").show()}),a.on(\"mousemove\",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l=\"fixed\"===s.css(\"position\");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;a<c.stX&&(a=c.stX),a>f&&(a=f),o<c.stY&&(o=c.stY),o>u&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on(\"mouseup\",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find(\"iframe\").on(\"load\",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find(\".\"+l[6]).children(\"a\").on(\"click\",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a[\"btn\"+(e+1)]&&a[\"btn\"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find(\".\"+l[7]).on(\"click\",e),a.shadeClose&&i(\"#layui-layer-shade\"+t.index).on(\"click\",function(){r.close(t.index)}),n.find(\".layui-layer-min\").on(\"click\",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(\".layui-layer-max\").on(\"click\",function(){i(this).hasClass(\"layui-layer-maxmin\")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i(\"select\"),function(e,t){var n=i(this);n.parents(\".\"+l[0])[0]||1==n.attr(\"layer\")&&i(\".\"+l[0]).length<1&&n.removeAttr(\"layer\").show(),n=null})},s.pt.IE6=function(e){i(\"select\").each(function(e,t){var n=i(this);n.parents(\".\"+l[0])[0]||\"none\"===n.css(\"display\")||n.attr({layer:\"1\"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css(\"z-index\",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on(\"mousedown\",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css(\"margin-left\"))];e.find(\".layui-layer-max\").addClass(\"layui-layer-maxmin\"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr(\"layer-full\")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty(\"overflow\"):l.html[0].style.removeAttribute(\"overflow\"),l.html.removeAttr(\"layer-full\"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i(\".\"+l[4]).attr(\"times\"),i(\"#\"+l[0]+t).find(\"iframe\").contents().find(e)},r.getFrameIndex=function(e){return i(\"#\"+e).parents(\".\"+l[4]).attr(\"times\")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame(\"html\",e).outerHeight(),n=i(\"#\"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find(\".\"+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find(\"iframe\").css({height:t})}},r.iframeSrc=function(e,t){i(\"#\"+l[0]+e).find(\"iframe\").attr(\"src\",t)},r.style=function(e,t,n){var a=i(\"#\"+l[0]+e),r=a.find(\".layui-layer-content\"),s=a.attr(\"type\"),f=a.find(l[1]).outerHeight()||0,c=a.find(\".\"+l[6]).outerHeight()||0;a.attr(\"minLeft\");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find(\".\"+l[6]).outerHeight(),s===o.type[2]?a.find(\"iframe\").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css(\"padding-top\"))-parseFloat(r.css(\"padding-bottom\"))}))},r.min=function(e,t){var a=i(\"#\"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr(\"minLeft\")||181*o.minIndex+\"px\",c=a.css(\"position\");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr(\"position\",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:\"fixed\",overflow:\"hidden\"},!0),a.find(\".layui-layer-min\").hide(),\"page\"===a.attr(\"type\")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr(\"minLeft\")||o.minIndex++,a.attr(\"minLeft\",f)},r.restore=function(e){var t=i(\"#\"+l[0]+e),n=t.attr(\"area\").split(\",\");t.attr(\"type\");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr(\"position\"),overflow:\"visible\"},!0),t.find(\".layui-layer-max\").removeClass(\"layui-layer-maxmin\"),t.find(\".layui-layer-min\").show(),\"page\"===t.attr(\"type\")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i(\"#\"+l[0]+e);o.record(a),l.html.attr(\"layer-full\")||l.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",e),clearTimeout(t),t=setTimeout(function(){var t=\"fixed\"===a.css(\"position\");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(\".layui-layer-min\").hide()},100)},r.title=function(e,t){var n=i(\"#\"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i(\"#\"+l[0]+e),n=t.attr(\"type\"),a=\"layer-anim-close\";if(t[0]){var s=\"layui-layer-wrap\",f=function(){if(n===o.type[1]&&\"object\"===t.attr(\"conType\")){t.children(\":not(.\"+l[5]+\")\").remove();for(var a=t.find(\".\"+s),r=0;r<2;r++)a.unwrap();a.css(\"display\",a.data(\"display\")).removeClass(s)}else{if(n===o.type[2])try{var f=i(\"#\"+l[4]+e)[0];f.contentWindow.document.write(\"\"),f.contentWindow.close(),t.find(\".\"+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML=\"\",t.remove()}\"function\"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data(\"isOutAnim\")&&t.addClass(\"layer-anim \"+a),i(\"#layui-layer-moves, #layui-layer-shade\"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr(\"minLeft\")&&(o.minIndex--,o.minLeft.push(t.attr(\"minLeft\"))),r.ie&&r.ie<10||!t.data(\"isOutAnim\")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i(\".\"+l[0]),function(){var t=i(this),n=e?t.attr(\"type\")===e:1;n&&r.close(t.attr(\"times\")),n=null})};var f=r.cache||{},c=function(e){return f.skin?\" \"+f.skin+\" \"+f.skin+\"-\"+e:\"\"};r.prompt=function(e,t){var a=\"\";if(e=e||{},\"function\"==typeof e&&(t=e),e.area){var o=e.area;a='style=\"width: '+o[0]+\"; height: \"+o[1]+';\"',delete e.area}var s,l=2==e.formType?'<textarea class=\"layui-layer-input\"'+a+\"></textarea>\":function(){return'<input type=\"'+(1==e.formType?\"password\":\"text\")+'\" class=\"layui-layer-input\">'}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],content:l,skin:\"layui-layer-prompt\"+c(\"prompt\"),maxWidth:n.width(),success:function(t){s=t.find(\".layui-layer-input\"),s.val(e.value||\"\").focus(),\"function\"==typeof f&&f(t)},resize:!1,yes:function(i){var n=s.val();\"\"===n?s.focus():n.length>(e.maxlength||500)?r.tips(\"&#x6700;&#x591A;&#x8F93;&#x5165;\"+(e.maxlength||500)+\"&#x4E2A;&#x5B57;&#x6570;\",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n=\"layui-this\",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:\"layui-layer-tab\"+c(\"tab\"),resize:!1,title:function(){var e=t.length,i=1,a=\"\";if(e>0)for(a='<span class=\"'+n+'\">'+t[0].title+\"</span>\";i<e;i++)a+=\"<span>\"+t[i].title+\"</span>\";return a}(),content:'<ul class=\"layui-layer-tabmain\">'+function(){var e=t.length,i=1,a=\"\";if(e>0)for(a='<li class=\"layui-layer-tabli '+n+'\">'+(t[0].content||\"no content\")+\"</li>\";i<e;i++)a+='<li class=\"layui-layer-tabli\">'+(t[i].content||\"no  content\")+\"</li>\";return a}()+\"</ul>\",success:function(t){var o=t.find(\".layui-layer-title\").children(),r=t.find(\".layui-layer-tabmain\").children();o.on(\"mousedown\",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),\"function\"==typeof e.change&&e.change(o)}),\"function\"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||\"img\";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg(\"&#x6CA1;&#x6709;&#x56FE;&#x7247;\")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr(\"layer-index\",e),u.push({alt:t.attr(\"alt\"),pid:t.attr(\"layer-pid\"),src:t.attr(\"layer-src\")||t.attr(\"src\"),thumb:t.attr(\"src\")})})};if(h(),0===u.length)return;if(n||p.on(\"click\",t.img,function(){var e=i(this),n=e.attr(\"layer-index\");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(\".layui-layer-imgprev\").on(\"click\",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(\".layui-layer-imgnext\").on(\"click\",function(e){e.preventDefault(),s.imgnext()}),i(document).on(\"keyup\",s.keyup)},s.loadi=r.load(1,{shade:!(\"shade\"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:\"layui-layer-photos\",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]<r[1]&&(a[0]=a[0]/r[1],a[1]=a[1]/r[1])}return[a[0]+\"px\",a[1]+\"px\"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:\".layui-layer-phimg img\",moveType:1,scrollbar:!1,moveOut:!0,isOutAnim:!1,skin:\"layui-layer-photos\"+c(\"photos\"),content:'<div class=\"layui-layer-phimg\"><img src=\"'+u[d].src+'\" alt=\"'+(u[d].alt||\"\")+'\" layer-pid=\"'+u[d].pid+'\"><div class=\"layui-layer-imgsee\">'+(u.length>1?'<span class=\"layui-layer-imguide\"><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgprev\"></a><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgnext\"></a></span>':\"\")+'<div class=\"layui-layer-imgbar\" style=\"display:'+(a?\"block\":\"\")+'\"><span class=\"layui-layer-imgtit\"><a href=\"javascript:;\">'+(u[d].alt||\"\")+\"</a><em>\"+s.imgIndex+\"/\"+u.length+\"</em></span></div></div></div>\",success:function(e,i){s.bigimg=e.find(\".layui-layer-phimg\"),s.imgsee=e.find(\".layui-layer-imguide,.layui-layer-imgbar\"),s.event(e),t.tab&&t.tab(u[d],e),\"function\"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off(\"keyup\",s.keyup)}},t))},function(){r.close(s.loadi),r.msg(\"&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;\",{time:3e4,btn:[\"&#x4E0B;&#x4E00;&#x5F20;\",\"&#x4E0D;&#x770B;&#x4E86;\"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i(\"html\"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define(\"jquery\",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t(\"layer\",r)})):\"function\"==typeof define&&define.amd?define([\"jquery\"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window);layui.define(\"jquery\",function(t){\"use strict\";var a=layui.$,i=(layui.hint(),layui.device()),e=\"element\",l=\"layui-this\",n=\"layui-show\",s=function(){this.config={}};s.prototype.set=function(t){var i=this;return a.extend(!0,i.config,t),i},s.prototype.on=function(t,a){return layui.onevent.call(this,e,t,a)},s.prototype.tabAdd=function(t,i){var e=\".layui-tab-title\",l=a(\".layui-tab[lay-filter=\"+t+\"]\"),n=l.children(e),s=n.children(\".layui-tab-bar\"),o=l.children(\".layui-tab-content\"),r='<li lay-id=\"'+(i.id||\"\")+'\"'+(i.attr?' lay-attr=\"'+i.attr+'\"':\"\")+\">\"+(i.title||\"unnaming\")+\"</li>\";return s[0]?s.before(r):n.append(r),o.append('<div class=\"layui-tab-item\">'+(i.content||\"\")+\"</div>\"),f.hideTabMore(!0),f.tabAuto(),this},s.prototype.tabDelete=function(t,i){var e=\".layui-tab-title\",l=a(\".layui-tab[lay-filter=\"+t+\"]\"),n=l.children(e),s=n.find('>li[lay-id=\"'+i+'\"]');return f.tabDelete(null,s),this},s.prototype.tabChange=function(t,i){var e=\".layui-tab-title\",l=a(\".layui-tab[lay-filter=\"+t+\"]\"),n=l.children(e),s=n.find('>li[lay-id=\"'+i+'\"]');return f.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},b.on(\"click\",t.headerElem,function(i){var e=a(this).index();f.tabClick.call(this,i,e,null,t)})},s.prototype.progress=function(t,i){var e=\"layui-progress\",l=a(\".\"+e+\"[lay-filter=\"+t+\"]\"),n=l.find(\".\"+e+\"-bar\"),s=n.find(\".\"+e+\"-text\");return n.css(\"width\",i),s.text(i),this};var o=\".layui-nav\",r=\"layui-nav-item\",c=\"layui-nav-bar\",u=\"layui-nav-tree\",d=\"layui-nav-child\",y=\"layui-nav-more\",h=\"layui-anim layui-anim-upbit\",f={tabClick:function(t,i,s,o){o=o||{};var r=s||a(this),i=i||r.parent().children(\"li\").index(r),c=o.headerElem?r.parent():r.parents(\".layui-tab\").eq(0),u=o.bodyElem?a(o.bodyElem):c.children(\".layui-tab-content\").children(\".layui-tab-item\"),d=r.find(\"a\"),y=c.attr(\"lay-filter\");\"javascript:;\"!==d.attr(\"href\")&&\"_blank\"===d.attr(\"target\")||(r.addClass(l).siblings().removeClass(l),u.eq(i).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,\"tab(\"+y+\")\",{elem:c,index:i})},tabDelete:function(t,i){var n=i||a(this).parent(),s=n.index(),o=n.parents(\".layui-tab\").eq(0),r=o.children(\".layui-tab-content\").children(\".layui-tab-item\"),c=o.attr(\"lay-filter\");n.hasClass(l)&&(n.next()[0]?f.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&f.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){f.tabAuto()},50),layui.event.call(this,e,\"tabDelete(\"+c+\")\",{elem:o,index:s})},tabAuto:function(){var t=\"layui-tab-more\",e=\"layui-tab-bar\",l=\"layui-tab-close\",n=this;a(\".layui-tab\").each(function(){var s=a(this),o=s.children(\".layui-tab-title\"),r=(s.children(\".layui-tab-content\").children(\".layui-tab-item\"),'lay-stope=\"tabmore\"'),c=a('<span class=\"layui-unselect layui-tab-bar\" '+r+\"><i \"+r+' class=\"layui-icon\">&#xe61a;</i></span>');if(n===window&&8!=i.ie&&f.hideTabMore(!0),s.attr(\"lay-allowClose\")&&o.find(\"li\").each(function(){var t=a(this);if(!t.find(\".\"+l)[0]){var i=a('<i class=\"layui-icon layui-unselect '+l+'\">&#x1006;</i>');i.on(\"click\",f.tabDelete),t.append(i)}}),\"string\"!=typeof s.attr(\"lay-unauto\"))if(o.prop(\"scrollWidth\")>o.outerWidth()+1){if(o.find(\".\"+e)[0])return;o.append(c),s.attr(\"overflow\",\"\"),c.on(\"click\",function(a){o[this.title?\"removeClass\":\"addClass\"](t),this.title=this.title?\"\":\"收缩\"})}else o.find(\".\"+e).remove(),s.removeAttr(\"overflow\")})},hideTabMore:function(t){var i=a(\".layui-tab-title\");t!==!0&&\"tabmore\"===a(t.target).attr(\"lay-stope\")||(i.removeClass(\"layui-tab-more\"),i.find(\".layui-tab-bar\").attr(\"title\",\"\"))},clickThis:function(){var t=a(this),i=t.parents(o),n=i.attr(\"lay-filter\"),s=t.parent(),c=t.siblings(\".\"+d),y=\"string\"==typeof s.attr(\"lay-unselect\");\"javascript:;\"!==t.attr(\"href\")&&\"_blank\"===t.attr(\"target\")||y||c[0]||(i.find(\".\"+l).removeClass(l),s.addClass(l)),i.hasClass(u)&&(c.removeClass(h),c[0]&&(s[\"none\"===c.css(\"display\")?\"addClass\":\"removeClass\"](r+\"ed\"),\"all\"===i.attr(\"lay-shrink\")&&s.siblings().removeClass(r+\"ed\"))),layui.event.call(this,e,\"nav(\"+n+\")\",t)},collapse:function(){var t=a(this),i=t.find(\".layui-colla-icon\"),l=t.siblings(\".layui-colla-content\"),s=t.parents(\".layui-collapse\").eq(0),o=s.attr(\"lay-filter\"),r=\"none\"===l.css(\"display\");if(\"string\"==typeof s.attr(\"lay-accordion\")){var c=s.children(\".layui-colla-item\").children(\".\"+n);c.siblings(\".layui-colla-title\").children(\".layui-colla-icon\").html(\"&#xe602;\"),c.removeClass(n)}l[r?\"addClass\":\"removeClass\"](n),i.html(r?\"&#xe61a;\":\"&#xe602;\"),layui.event.call(this,e,\"collapse(\"+o+\")\",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter=\"'+e+'\"]':\"\"}(),s={tab:function(){f.tabAuto.call({})},nav:function(){var t=200,e={},s={},p={},b=function(l,o,r){var c=a(this),f=c.find(\".\"+d);o.hasClass(u)?l.css({top:c.position().top,height:c.children(\"a\").outerHeight(),opacity:1}):(f.addClass(h),l.css({left:c.position().left+parseFloat(c.css(\"marginLeft\")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:c.width(),opacity:1})},i.ie&&i.ie<10?0:t),clearTimeout(p[r]),\"block\"===f.css(\"display\")&&clearTimeout(s[r]),s[r]=setTimeout(function(){f.addClass(n),c.find(\".\"+y).addClass(y+\"d\")},300))};a(o+l).each(function(i){var l=a(this),o=a('<span class=\"'+c+'\"></span>'),h=l.find(\".\"+r);l.find(\".\"+c)[0]||(l.append(o),h.on(\"mouseenter\",function(){b.call(this,o,l,i)}).on(\"mouseleave\",function(){l.hasClass(u)||(clearTimeout(s[i]),s[i]=setTimeout(function(){l.find(\".\"+d).removeClass(n),l.find(\".\"+y).removeClass(y+\"d\")},300))}),l.on(\"mouseleave\",function(){clearTimeout(e[i]),p[i]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),h.find(\"a\").each(function(){var t=a(this),i=(t.parent(),t.siblings(\".\"+d));i[0]&&!t.children(\".\"+y)[0]&&t.append('<span class=\"'+y+'\"></span>'),t.off(\"click\",f.clickThis).on(\"click\",f.clickThis)})})},breadcrumb:function(){var t=\".layui-breadcrumb\";a(t+l).each(function(){var t=a(this),i=\"lay-separator\",e=t.attr(i)||\"/\",l=t.find(\"a\");l.next(\"span[\"+i+\"]\")[0]||(l.each(function(t){t!==l.length-1&&a(this).after(\"<span \"+i+\">\"+e+\"</span>\")}),t.css(\"visibility\",\"visible\"))})},progress:function(){var t=\"layui-progress\";a(\".\"+t+l).each(function(){var i=a(this),e=i.find(\".layui-progress-bar\"),l=e.attr(\"lay-percent\");e.css(\"width\",function(){return/^.+\\/.+$/.test(l)?100*new Function(\"return \"+l)()+\"%\":l}()),i.attr(\"lay-showPercent\")&&setTimeout(function(){e.html('<span class=\"'+t+'-text\">'+l+\"</span>\")},350)})},collapse:function(){var t=\"layui-collapse\";a(\".\"+t+l).each(function(){var t=a(this).find(\".layui-colla-item\");t.each(function(){var t=a(this),i=t.find(\".layui-colla-title\"),e=t.find(\".layui-colla-content\"),l=\"none\"===e.css(\"display\");i.find(\".layui-colla-icon\").remove(),i.append('<i class=\"layui-icon layui-colla-icon\">'+(l?\"&#xe602;\":\"&#xe61a;\")+\"</i>\"),i.off(\"click\",f.collapse).on(\"click\",f.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,a){a()})},s.prototype.render=s.prototype.init;var p=new s,b=a(document);p.render();var v=\".layui-tab-title li\";b.on(\"click\",v,f.tabClick),b.on(\"click\",f.hideTabMore),a(window).on(\"resize\",f.tabAuto),t(e,p)});layui.define(\"layer\",function(e){\"use strict\";var t=layui.$,i=layui.layer,n=layui.hint(),a=layui.device(),o={config:{},set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,r,e,t)}},l=function(){var e=this;return{upload:function(t){e.upload.call(e,t)},reload:function(t){e.reload.call(e,t)},config:e.config}},r=\"upload\",u=\"layui-upload-file\",c=\"layui-upload-form\",f=\"layui-upload-iframe\",s=\"layui-upload-choose\",p=function(e){var i=this;i.config=t.extend({},i.config,o.config,e),i.render()};p.prototype.config={accept:\"images\",exts:\"\",auto:!0,bindAction:\"\",url:\"\",field:\"file\",acceptMime:\"\",method:\"post\",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var i=this,e=i.config;e.elem=t(e.elem),e.bindAction=t(e.bindAction),i.file(),i.events()},p.prototype.file=function(){var e=this,i=e.config,n=e.elemFile=t(['<input class=\"'+u+'\" type=\"file\" accept=\"'+i.acceptMime+'\" name=\"'+i.field+'\"',i.multiple?\" multiple\":\"\",\">\"].join(\"\")),o=i.elem.next();(o.hasClass(u)||o.hasClass(c))&&o.remove(),a.ie&&a.ie<10&&i.elem.wrap('<div class=\"layui-upload-wrap\"></div>'),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n),a.ie&&a.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,i=e.config,n=t('<iframe id=\"'+f+'\" class=\"'+f+'\" name=\"'+f+'\" frameborder=\"0\"></iframe>'),a=t(['<form target=\"'+f+'\" class=\"'+c+'\" method=\"post\" key=\"set-mine\" enctype=\"multipart/form-data\" action=\"'+i.url+'\">',\"</form>\"].join(\"\"));t(\"#\"+f)[0]||t(\"body\").append(n),i.elem.next().hasClass(c)||(e.elemFile.wrap(a),i.elem.next(\".\"+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i=\"function\"==typeof i?i():i,e.push('<input type=\"hidden\" name=\"'+t+'\" value=\"'+i+'\">')}),e.join(\"\")}()))},p.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return\"input\"===e.tagName.toLocaleLowerCase()&&\"file\"===e.type},p.prototype.preview=function(e){var t=this;window.FileReader&&layui.each(t.chooseFiles,function(t,i){var n=new FileReader;n.readAsDataURL(i),n.onload=function(){e&&e(t,i,this.result)}})},p.prototype.upload=function(e,i){var n,o=this,l=o.config,r=o.elemFile[0],u=function(){var i=0,n=0,a=e||o.files||o.chooseFiles||r.files,u=function(){l.multiple&&i+n===o.fileLength&&\"function\"==typeof l.allDone&&l.allDone({total:o.fileLength,successful:i,aborted:n})};layui.each(a,function(e,a){var r=new FormData;r.append(l.field,a),layui.each(l.data,function(e,t){t=\"function\"==typeof t?t():t,r.append(e,t)}),t.ajax({url:l.url,type:\"post\",data:r,contentType:!1,processData:!1,dataType:\"json\",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,o.msg(\"请求上传接口出现异常\"),m(e),u()}})})},c=function(){var e=t(\"#\"+f);o.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var t,i=e.contents().find(\"body\");try{t=i.text()}catch(n){o.msg(\"获取上传后的响应信息出现异常\"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(\"\"),d(0,t))},30)},d=function(e,t){if(o.elemFile.next(\".\"+s).remove(),r.value=\"\",\"object\"!=typeof t)try{t=JSON.parse(t)}catch(i){return t={},o.msg(\"请对上传接口返回有效JSON\")}\"function\"==typeof l.done&&l.done(t,e||0,function(e){o.upload(e)})},m=function(e){l.auto&&(r.value=\"\"),\"function\"==typeof l.error&&l.error(e||0,function(e){o.upload(e)})},h=l.exts,v=function(){var t=[];return layui.each(e||o.chooseFiles,function(e,i){t.push(i.name)}),t}(),g={preview:function(e){o.preview(e)},upload:function(e,t){var i={};i[e]=t,o.upload(i)},pushFile:function(){return o.files=o.files||{},layui.each(o.chooseFiles,function(e,t){o.files[e]=t}),o.files},resetFile:function(e,t,i){var n=new File([t],i);o.files=o.files||{},o.files[e]=n}},y=function(){if(\"choose\"!==i&&!l.auto||(l.choose&&l.choose(g),\"choose\"!==i))return l.before&&l.before(g),a.ie?a.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\\/\\\\]+\\..+/g)||[]||\"\":v,0!==v.length){switch(l.accept){case\"file\":if(h&&!RegExp(\"\\\\w\\\\.(\"+h+\")$\",\"i\").test(escape(v)))return o.msg(\"选择的文件中包含不支持的格式\"),r.value=\"\";break;case\"video\":if(!RegExp(\"\\\\w\\\\.(\"+(h||\"avi|mp4|wma|rmvb|rm|flash|3gp|flv\")+\")$\",\"i\").test(escape(v)))return o.msg(\"选择的视频中包含不支持的格式\"),r.value=\"\";break;case\"audio\":if(!RegExp(\"\\\\w\\\\.(\"+(h||\"mp3|wav|mid\")+\")$\",\"i\").test(escape(v)))return o.msg(\"选择的音频中包含不支持的格式\"),r.value=\"\";break;default:if(layui.each(v,function(e,t){RegExp(\"\\\\w\\\\.(\"+(h||\"jpg|png|gif|bmp|jpeg$\")+\")\",\"i\").test(escape(t))||(n=!0)}),n)return o.msg(\"选择的图片中包含不支持的格式\"),r.value=\"\"}if(o.fileLength=function(){var t=0,i=e||o.files||o.chooseFiles||r.files;return layui.each(i,function(){t++}),t}(),l.number&&o.fileLength>l.number)return o.msg(\"同时最多只能上传的数量为：\"+l.number);if(l.size>0&&!(a.ie&&a.ie<10)){var F;if(layui.each(o.chooseFiles,function(e,t){if(t.size>1024*l.size){var i=l.size/1024;i=i>=1?i.toFixed(2)+\"MB\":l.size+\"KB\",r.value=\"\",F=i}}),F)return o.msg(\"文件不能超过\"+F)}y()}},p.prototype.reload=function(e){e=e||{},delete e.elem,delete e.bindAction;var i=this,e=i.config=t.extend({},i.config,o.config,e),n=e.elem.next();n.attr({name:e.name,accept:e.acceptMime,multiple:e.multiple})},p.prototype.events=function(){var e=this,i=e.config,o=function(t){e.chooseFiles={},layui.each(t,function(t,i){var n=(new Date).getTime();e.chooseFiles[n+\"-\"+t]=i})},l=function(t,n){var a=e.elemFile,o=t.length>1?t.length+\"个文件\":(t[0]||{}).name||a[0].value.match(/[^\\/\\\\]+\\..+/g)||[]||\"\";a.next().hasClass(s)&&a.next().remove(),e.upload(null,\"choose\"),e.isFile()||i.choose||a.after('<span class=\"layui-inline '+s+'\">'+o+\"</span>\")};i.elem.off(\"upload.start\").on(\"upload.start\",function(){var a=t(this),o=a.attr(\"lay-data\");if(o)try{o=new Function(\"return \"+o)(),e.config=t.extend({},i,o)}catch(l){n.error(\"Upload element property lay-data configuration item has a syntax error: \"+o)}e.config.item=a,e.elemFile[0].click()}),a.ie&&a.ie<10||i.elem.off(\"upload.over\").on(\"upload.over\",function(){var e=t(this);e.attr(\"lay-over\",\"\")}).off(\"upload.leave\").on(\"upload.leave\",function(){var e=t(this);e.removeAttr(\"lay-over\")}).off(\"upload.drop\").on(\"upload.drop\",function(n,a){var r=t(this),u=a.originalEvent.dataTransfer.files||[];r.removeAttr(\"lay-over\"),o(u),i.auto?e.upload(u):l(u)}),e.elemFile.off(\"upload.change\").on(\"upload.change\",function(){var t=this.files||[];o(t),i.auto?e.upload():l(t)}),i.bindAction.off(\"upload.action\").on(\"upload.action\",function(){e.upload()}),i.elem.data(\"haveEvents\")||(e.elemFile.on(\"change\",function(){t(this).trigger(\"upload.change\")}),i.elem.on(\"click\",function(){e.isFile()||t(this).trigger(\"upload.start\")}),i.drag&&i.elem.on(\"dragover\",function(e){e.preventDefault(),t(this).trigger(\"upload.over\")}).on(\"dragleave\",function(e){t(this).trigger(\"upload.leave\")}).on(\"drop\",function(e){e.preventDefault(),t(this).trigger(\"upload.drop\",e)}),i.bindAction.on(\"click\",function(){t(this).trigger(\"upload.action\")}),i.elem.data(\"haveEvents\",!0))},o.render=function(e){var t=new p(e);return l.call(t)},e(r,o)});layui.define(\"jquery\",function(e){\"use strict\";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(i,t){return e.slide(\"set\",i,t||0)},config:i}},n=\"slider\",l=\"layui-disabled\",s=\"layui-slider\",r=\"layui-slider-bar\",o=\"layui-slider-wrap\",u=\"layui-slider-wrap-btn\",d=\"layui-slider-tips\",v=\"layui-slider-input\",c=\"layui-slider-input-txt\",m=\"layui-slider-input-btn\",p=\"layui-slider-hover\",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:\"default\",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:\"#009688\"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.max<t.min&&(t.max=t.min+t.step),t.range){t.value=\"object\"==typeof t.value?t.value:[t.min,t.value];var a=Math.min(t.value[0],t.value[1]),n=Math.max(t.value[0],t.value[1]);t.value[0]=a>t.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),m=v-r+\"%\";r+=\"%\",v+=\"%\"}else{\"object\"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.value<t.min&&(t.value=t.min),t.value>t.max&&(t.value=t.max);var m=Math.floor((t.value-t.min)/(t.max-t.min)*100)+\"%\"}var p=t.disabled?\"#c2c2c2\":t.theme,f='<div class=\"layui-slider '+(\"vertical\"===t.type?\"layui-slider-vertical\":\"\")+'\">'+(t.tips?'<div class=\"layui-slider-tips\"></div>':\"\")+'<div class=\"layui-slider-bar\" style=\"background:'+p+\"; \"+(\"vertical\"===t.type?\"height\":\"width\")+\":\"+m+\";\"+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+(r||0)+';\"></div><div class=\"layui-slider-wrap\" style=\"'+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+(r||m)+';\"><div class=\"layui-slider-wrap-btn\" style=\"border: 2px solid '+p+';\"></div></div>'+(t.range?'<div class=\"layui-slider-wrap\" style=\"'+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+v+';\"><div class=\"layui-slider-wrap-btn\" style=\"border: 2px solid '+p+';\"></div></div>':\"\")+\"</div>\",h=i(t.elem),y=h.next(\".\"+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find(\".\"+o).eq(0).data(\"value\",t.value[0]),e.elemTemp.find(\".\"+o).eq(1).data(\"value\",t.value[1])):e.elemTemp.find(\".\"+o).data(\"value\",t.value),h.html(e.elemTemp),\"vertical\"===t.type&&e.elemTemp.height(t.height+\"px\"),t.showstep){for(var g=(t.max-t.min)/t.step,b=\"\",x=1;x<g+1;x++){var T=100*x/g;T<100&&(b+='<div class=\"layui-slider-step\" style=\"'+(\"vertical\"===t.type?\"bottom\":\"left\")+\":\"+T+'%\"></div>')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('<div class=\"layui-slider-input layui-input\"><div class=\"layui-slider-input-txt\"><input type=\"text\" class=\"layui-input\"></div><div class=\"layui-slider-input-btn\"><i class=\"layui-icon layui-icon-up\"></i><i class=\"layui-icon layui-icon-down\"></i></div></div>');h.css(\"position\",\"relative\"),h.append(w),h.find(\".\"+c).children(\"input\").val(t.value),\"vertical\"===t.type?w.css({left:0,top:-48}):e.elemTemp.css(\"margin-right\",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find(\".\"+u).addClass(l)):e.slide(),e.elemTemp.find(\".\"+u).on(\"mouseover\",function(){var a=\"vertical\"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find(\".\"+o),l=\"vertical\"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data(\"value\"),u=t.setTips?t.setTips(r):r;e.elemTemp.find(\".\"+d).html(u),\"vertical\"===t.type?e.elemTemp.find(\".\"+d).css({bottom:s+\"%\",\"margin-bottom\":\"20px\",display:\"inline-block\"}):e.elemTemp.find(\".\"+d).css({left:s+\"%\",display:\"inline-block\"})}).on(\"mouseout\",function(){e.elemTemp.find(\".\"+d).css(\"display\",\"none\")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return\"vertical\"===l.type?l.height:s[0].offsetWidth},h=s.find(\".\"+o),y=s.next(\".\"+v),g=y.children(\".\"+c).children(\"input\").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css(\"vertical\"===l.type?\"bottom\":\"left\",e+\"%\");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;\"vertical\"===l.type?(s.find(\".\"+d).css({bottom:e+\"%\",\"margin-bottom\":\"20px\"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find(\".\"+d).css(\"left\",e+\"%\"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);\"vertical\"===l.type?s.find(\".\"+r).css({height:o+\"%\",bottom:n+\"%\"}):s.find(\".\"+r).css({width:o+\"%\",left:n+\"%\"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children(\".\"+c).children(\"input\").val(g),h.eq(i).data(\"value\",u),u=l.setTips?l.setTips(u):u,s.find(\".\"+d).html(u),l.range){var v=[h.eq(0).data(\"value\"),h.eq(1).data(\"value\")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['<div class=\"layui-auxiliar-moving\" id=\"LAY-slider-moving\"></div'].join(\"\")),M=function(e,t){var a=function(){t&&t(),w.remove()};i(\"#LAY-slider-moving\")[0]||i(\"body\").append(w),w.on(\"mousemove\",e),w.on(\"mouseup\",a).on(\"mouseleave\",a)};if(\"set\"===e)return x(t,a);s.find(\".\"+u).each(function(e){var t=i(this);t.on(\"mousedown\",function(i){i=i||window.event;var a=t.parent()[0].offsetLeft,n=i.clientX;\"vertical\"===l.type&&(a=f()-t.parent()[0].offsetTop-h.height(),n=i.clientY);var r=function(i){i=i||window.event;var r=a+(\"vertical\"===l.type?n-i.clientY:i.clientX-n);r<0&&(r=0),r>f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(p),s.find(\".\"+d).show(),i.preventDefault()},o=function(){t.removeClass(p),s.find(\".\"+d).hide()};M(r,o)})}),s.on(\"click\",function(e){var t=i(\".\"+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n=\"vertical\"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?\"vertical\"===l.type?Math.abs(n-parseInt(i(h[0]).css(\"bottom\")))>Math.abs(n-parseInt(i(h[1]).css(\"bottom\")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.hover(function(){var e=i(this);e.children(\".\"+m).fadeIn(\"fast\")},function(){var e=i(this);e.children(\".\"+m).fadeOut(\"fast\")}),y.children(\".\"+m).children(\"i\").each(function(e){i(this).on(\"click\",function(){g=1==e?g-l.step<l.min?l.min:Number(g)-l.step:Number(g)+l.step>l.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=e<l.min?l.min:e,e=e>l.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children(\".\"+c).children(\"input\").on(\"keydown\",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on(\"change\",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)});layui.define(\"jquery\",function(e){\"use strict\";var i=layui.jquery,o={config:{},index:layui.colorpicker?layui.colorpicker.index+1e4:0,set:function(e){var o=this;return o.config=i.extend({},o.config,e),o},on:function(e,i){return layui.onevent.call(this,\"colorpicker\",e,i)}},r=function(){var e=this,i=e.config;return{config:i}},t=\"colorpicker\",n=\"layui-show\",l=\"layui-colorpicker\",c=\".layui-colorpicker-main\",a=\"layui-icon-down\",s=\"layui-icon-close\",f=\"layui-colorpicker-trigger-span\",d=\"layui-colorpicker-trigger-i\",u=\"layui-colorpicker-side\",p=\"layui-colorpicker-side-slider\",g=\"layui-colorpicker-basis\",v=\"layui-colorpicker-alpha-bgcolor\",h=\"layui-colorpicker-alpha-slider\",m=\"layui-colorpicker-basis-cursor\",b=\"layui-colorpicker-main-input\",k=function(e){var i={h:0,s:0,b:0},o=Math.min(e.r,e.g,e.b),r=Math.max(e.r,e.g,e.b),t=r-o;return i.b=r,i.s=0!=r?255*t/r:0,0!=i.s?e.r==r?i.h=(e.g-e.b)/t:e.g==r?i.h=2+(e.b-e.r)/t:i.h=4+(e.r-e.g)/t:i.h=-1,r==o&&(i.h=0),i.h*=60,i.h<0&&(i.h+=360),i.s*=100/255,i.b*=100/255,i},y=function(e){var e=e.indexOf(\"#\")>-1?e.substring(1):e;if(3==e.length){var i=e.split(\"\");e=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]}e=parseInt(e,16);var o={r:e>>16,g:(65280&e)>>8,b:255&e};return k(o)},x=function(e){var i={},o=e.h,r=255*e.s/100,t=255*e.b/100;if(0==r)i.r=i.g=i.b=t;else{var n=t,l=(255-r)*t/255,c=(n-l)*(o%60)/60;360==o&&(o=0),o<60?(i.r=n,i.b=l,i.g=l+c):o<120?(i.g=n,i.b=l,i.r=n-c):o<180?(i.g=n,i.r=l,i.b=l+c):o<240?(i.b=n,i.r=l,i.g=n-c):o<300?(i.b=n,i.g=l,i.r=l+c):o<360?(i.r=n,i.g=l,i.b=n-c):(i.r=0,i.g=0,i.b=0)}return{r:Math.round(i.r),g:Math.round(i.g),b:Math.round(i.b)}},C=function(e){var o=x(e),r=[o.r.toString(16),o.g.toString(16),o.b.toString(16)];return i.each(r,function(e,i){1==i.length&&(r[e]=\"0\"+i)}),r.join(\"\")},P=function(e){var i=/[0-9]{1,3}/g,o=e.match(i)||[];return{r:o[0],g:o[1],b:o[2]}},B=i(window),w=i(document),D=function(e){var r=this;r.index=++o.index,r.config=i.extend({},r.config,o.config,e),r.render()};D.prototype.config={color:\"\",size:null,alpha:!1,format:\"hex\",predefine:!1,colors:[\"#009688\",\"#5FB878\",\"#1E9FFF\",\"#FF5722\",\"#FFB800\",\"#01AAED\",\"#999\",\"#c00\",\"#ff8c00\",\"#ffd700\",\"#90ee90\",\"#00ced1\",\"#1e90ff\",\"#c71585\",\"rgb(0, 186, 189)\",\"rgb(255, 120, 0)\",\"rgb(250, 212, 0)\",\"#393D49\",\"rgba(0,0,0,.5)\",\"rgba(255, 69, 0, 0.68)\",\"rgba(144, 240, 144, 0.5)\",\"rgba(31, 147, 255, 0.73)\"]},D.prototype.render=function(){var e=this,o=e.config,r=i(['<div class=\"layui-unselect layui-colorpicker\">',\"<span \"+(\"rgb\"==o.format&&o.alpha?'class=\"layui-colorpicker-trigger-bgcolor\"':\"\")+\">\",'<span class=\"layui-colorpicker-trigger-span\" ','lay-type=\"'+(\"rgb\"==o.format?o.alpha?\"rgba\":\"torgb\":\"\")+'\" ','style=\"'+function(){var e=\"\";return o.color?(e=o.color,(o.color.match(/[0-9]{1,3}/g)||[]).length>3&&(o.alpha&&\"rgb\"==o.format||(e=\"#\"+C(k(P(o.color))))),\"background: \"+e):e}()+'\">','<i class=\"layui-icon layui-colorpicker-trigger-i '+(o.color?a:s)+'\"></i>',\"</span>\",\"</span>\",\"</div>\"].join(\"\")),t=i(o.elem);o.size&&r.addClass(\"layui-colorpicker-\"+o.size),t.addClass(\"layui-inline\").html(e.elemColorBox=r),e.color=e.elemColorBox.find(\".\"+f)[0].style.background,e.events()},D.prototype.renderPicker=function(){var e=this,o=e.config,r=e.elemColorBox[0],t=e.elemPicker=i(['<div id=\"layui-colorpicker'+e.index+'\" data-index=\"'+e.index+'\" class=\"layui-anim layui-anim-upbit layui-colorpicker-main\">','<div class=\"layui-colorpicker-main-wrapper\">','<div class=\"layui-colorpicker-basis\">','<div class=\"layui-colorpicker-basis-white\"></div>','<div class=\"layui-colorpicker-basis-black\"></div>','<div class=\"layui-colorpicker-basis-cursor\"></div>',\"</div>\",'<div class=\"layui-colorpicker-side\">','<div class=\"layui-colorpicker-side-slider\"></div>',\"</div>\",\"</div>\",'<div class=\"layui-colorpicker-main-alpha '+(o.alpha?n:\"\")+'\">','<div class=\"layui-colorpicker-alpha-bgcolor\">','<div class=\"layui-colorpicker-alpha-slider\"></div>',\"</div>\",\"</div>\",function(){if(o.predefine){var e=['<div class=\"layui-colorpicker-main-pre\">'];return layui.each(o.colors,function(i,o){e.push(['<div class=\"layui-colorpicker-pre'+((o.match(/[0-9]{1,3}/g)||[]).length>3?\" layui-colorpicker-pre-isalpha\":\"\")+'\">','<div style=\"background:'+o+'\"></div>',\"</div>\"].join(\"\"))}),e.push(\"</div>\"),e.join(\"\")}return\"\"}(),'<div class=\"layui-colorpicker-main-input\">','<div class=\"layui-inline\">','<input type=\"text\" class=\"layui-input\">',\"</div>\",'<div class=\"layui-btn-container\">','<button class=\"layui-btn layui-btn-primary layui-btn-sm\" colorpicker-events=\"clear\">清空</button>','<button class=\"layui-btn layui-btn-sm\" colorpicker-events=\"confirm\">确定</button>',\"</div\",\"</div>\",\"</div>\"].join(\"\"));e.elemColorBox.find(\".\"+f)[0];i(c)[0]&&i(c).data(\"index\")==e.index?e.removePicker(D.thisElemInd):(e.removePicker(D.thisElemInd),i(\"body\").append(t)),D.thisElemInd=e.index,D.thisColor=r.style.background,e.position(),e.pickerEvents()},D.prototype.removePicker=function(e){var o=this;o.config;return i(\"#layui-colorpicker\"+(e||o.index)).remove(),o},D.prototype.position=function(){var e=this,i=e.config,o=e.bindElem||e.elemColorBox[0],r=e.elemPicker[0],t=o.getBoundingClientRect(),n=r.offsetWidth,l=r.offsetHeight,c=function(e){return e=e?\"scrollLeft\":\"scrollTop\",document.body[e]|document.documentElement[e]},a=function(e){return document.documentElement[e?\"clientWidth\":\"clientHeight\"]},s=5,f=t.left,d=t.bottom;f-=(n-o.offsetWidth)/2,d+=s,f+n+s>a(\"width\")?f=a(\"width\")-n-s:f<s&&(f=s),d+l+s>a()&&(d=t.top>l?t.top-l:a()-l,d-=2*s),i.position&&(r.style.position=i.position),r.style.left=f+(\"fixed\"===i.position?0:c(1))+\"px\",r.style.top=d+(\"fixed\"===i.position?0:c())+\"px\"},D.prototype.val=function(){var e=this,i=(e.config,e.elemColorBox.find(\".\"+f)),o=e.elemPicker.find(\".\"+b),r=i[0],t=r.style.backgroundColor;if(t){var n=k(P(t)),l=i.attr(\"lay-type\");if(e.select(n.h,n.s,n.b),\"torgb\"===l&&o.find(\"input\").val(t),\"rgba\"===l){var c=P(t);if(3==(t.match(/[0-9]{1,3}/g)||[]).length)o.find(\"input\").val(\"rgba(\"+c.r+\", \"+c.g+\", \"+c.b+\", 1)\"),e.elemPicker.find(\".\"+h).css(\"left\",280);else{o.find(\"input\").val(t);var a=280*t.slice(t.lastIndexOf(\",\")+1,t.length-1);e.elemPicker.find(\".\"+h).css(\"left\",a)}e.elemPicker.find(\".\"+v)[0].style.background=\"linear-gradient(to right, rgba(\"+c.r+\", \"+c.g+\", \"+c.b+\", 0), rgb(\"+c.r+\", \"+c.g+\", \"+c.b+\"))\"}}else e.select(0,100,100),o.find(\"input\").val(\"\"),e.elemPicker.find(\".\"+v)[0].style.background=\"\",e.elemPicker.find(\".\"+h).css(\"left\",280)},D.prototype.side=function(){var e=this,o=e.config,r=e.elemColorBox.find(\".\"+f),t=r.attr(\"lay-type\"),n=e.elemPicker.find(\".\"+u),l=e.elemPicker.find(\".\"+p),c=e.elemPicker.find(\".\"+g),y=e.elemPicker.find(\".\"+m),C=e.elemPicker.find(\".\"+v),w=e.elemPicker.find(\".\"+h),D=l[0].offsetTop/180*360,E=100-(y[0].offsetTop+3)/180*100,H=(y[0].offsetLeft+3)/260*100,W=Math.round(w[0].offsetLeft/280*100)/100,j=e.elemColorBox.find(\".\"+d),F=e.elemPicker.find(\".layui-colorpicker-pre\").children(\"div\"),L=function(i,n,l,c){e.select(i,n,l);var f=x({h:i,s:n,b:l});if(j.addClass(a).removeClass(s),r[0].style.background=\"rgb(\"+f.r+\", \"+f.g+\", \"+f.b+\")\",\"torgb\"===t&&e.elemPicker.find(\".\"+b).find(\"input\").val(\"rgb(\"+f.r+\", \"+f.g+\", \"+f.b+\")\"),\"rgba\"===t){var d=0;d=280*c,w.css(\"left\",d),e.elemPicker.find(\".\"+b).find(\"input\").val(\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+c+\")\"),r[0].style.background=\"rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", \"+c+\")\",C[0].style.background=\"linear-gradient(to right, rgba(\"+f.r+\", \"+f.g+\", \"+f.b+\", 0), rgb(\"+f.r+\", \"+f.g+\", \"+f.b+\"))\"}o.change&&o.change(e.elemPicker.find(\".\"+b).find(\"input\").val())},M=i(['<div class=\"layui-auxiliar-moving\" id=\"LAY-colorpicker-moving\"></div'].join(\"\")),Y=function(e){i(\"#LAY-colorpicker-moving\")[0]||i(\"body\").append(M),M.on(\"mousemove\",e),M.on(\"mouseup\",function(){M.remove()}).on(\"mouseleave\",function(){M.remove()})};l.on(\"mousedown\",function(e){var i=this.offsetTop,o=e.clientY,r=function(e){var r=i+(e.clientY-o),t=n[0].offsetHeight;r<0&&(r=0),r>t&&(r=t);var l=r/180*360;D=l,L(l,H,E,W),e.preventDefault()};Y(r),e.preventDefault()}),n.on(\"click\",function(e){var o=e.clientY-i(this).offset().top;o<0&&(o=0),o>this.offsetHeight&&(o=this.offsetHeight);var r=o/180*360;D=r,L(r,H,E,W),e.preventDefault()}),y.on(\"mousedown\",function(e){var i=this.offsetTop,o=this.offsetLeft,r=e.clientY,t=e.clientX,n=function(e){var n=i+(e.clientY-r),l=o+(e.clientX-t),a=c[0].offsetHeight-3,s=c[0].offsetWidth-3;n<-3&&(n=-3),n>a&&(n=a),l<-3&&(l=-3),l>s&&(l=s);var f=(l+3)/260*100,d=100-(n+3)/180*100;E=d,H=f,L(D,f,d,W),e.preventDefault()};layui.stope(e),Y(n),e.preventDefault()}),c.on(\"mousedown\",function(e){var o=e.clientY-i(this).offset().top-3+B.scrollTop(),r=e.clientX-i(this).offset().left-3+B.scrollLeft();o<-3&&(o=-3),o>this.offsetHeight-3&&(o=this.offsetHeight-3),r<-3&&(r=-3),r>this.offsetWidth-3&&(r=this.offsetWidth-3);var t=(r+3)/260*100,n=100-(o+3)/180*100;E=n,H=t,L(D,t,n,W),e.preventDefault(),y.trigger(e,\"mousedown\")}),w.on(\"mousedown\",function(e){var i=this.offsetLeft,o=e.clientX,r=function(e){var r=i+(e.clientX-o),t=C[0].offsetWidth;r<0&&(r=0),r>t&&(r=t);var n=Math.round(r/280*100)/100;W=n,L(D,H,E,n),e.preventDefault()};Y(r),e.preventDefault()}),C.on(\"click\",function(e){var o=e.clientX-i(this).offset().left;o<0&&(o=0),o>this.offsetWidth&&(o=this.offsetWidth);var r=Math.round(o/280*100)/100;W=r,L(D,H,E,r),e.preventDefault()}),F.each(function(){i(this).on(\"click\",function(){i(this).parent(\".layui-colorpicker-pre\").addClass(\"selected\").siblings().removeClass(\"selected\");var e,o=this.style.backgroundColor,r=k(P(o)),t=o.slice(o.lastIndexOf(\",\")+1,o.length-1);D=r.h,H=r.s,E=r.b,3==(o.match(/[0-9]{1,3}/g)||[]).length&&(t=1),W=t,e=280*t,L(r.h,r.s,r.b,t)})})},D.prototype.select=function(e,i,o,r){var t=this,n=(t.config,C({h:e,s:100,b:100})),l=C({h:e,s:i,b:o}),c=e/360*180,a=180-o/100*180-3,s=i/100*260-3;t.elemPicker.find(\".\"+p).css(\"top\",c),t.elemPicker.find(\".\"+g)[0].style.background=\"#\"+n,t.elemPicker.find(\".\"+m).css({top:a,left:s}),\"change\"!==r&&t.elemPicker.find(\".\"+b).find(\"input\").val(\"#\"+l)},D.prototype.pickerEvents=function(){var e=this,o=e.config,r=e.elemColorBox.find(\".\"+f),t=e.elemPicker.find(\".\"+b+\" input\"),n={clear:function(i){r[0].style.background=\"\",e.elemColorBox.find(\".\"+d).removeClass(a).addClass(s),e.color=\"\",o.done&&o.done(\"\"),e.removePicker()},confirm:function(i,n){var l=t.val(),c=l,f={};if(l.indexOf(\",\")>-1){if(f=k(P(l)),e.select(f.h,f.s,f.b),r[0].style.background=c=\"#\"+C(f),(l.match(/[0-9]{1,3}/g)||[]).length>3&&\"rgba\"===r.attr(\"lay-type\")){var u=280*l.slice(l.lastIndexOf(\",\")+1,l.length-1);e.elemPicker.find(\".\"+h).css(\"left\",u),r[0].style.background=l,c=l}}else f=y(l),r[0].style.background=c=\"#\"+C(f),e.elemColorBox.find(\".\"+d).removeClass(s).addClass(a);return\"change\"===n?(e.select(f.h,f.s,f.b,n),void(o.change&&o.change(c))):(e.color=l,o.done&&o.done(l),void e.removePicker())}};e.elemPicker.on(\"click\",\"*[colorpicker-events]\",function(){var e=i(this),o=e.attr(\"colorpicker-events\");n[o]&&n[o].call(this,e)}),t.on(\"keyup\",function(e){var o=i(this);n.confirm.call(this,o,13===e.keyCode?null:\"change\")})},D.prototype.events=function(){var e=this,o=e.config,r=e.elemColorBox.find(\".\"+f);e.elemColorBox.on(\"click\",function(){e.renderPicker(),i(c)[0]&&(e.val(),e.side())}),o.elem[0]&&!e.elemColorBox[0].eventHandler&&(w.on(\"click\",function(o){if(!i(o.target).hasClass(l)&&!i(o.target).parents(\".\"+l)[0]&&!i(o.target).hasClass(c.replace(/\\./g,\"\"))&&!i(o.target).parents(c)[0]&&e.elemPicker){if(e.color){var t=k(P(e.color));e.select(t.h,t.s,t.b)}else e.elemColorBox.find(\".\"+d).removeClass(a).addClass(s);r[0].style.background=e.color||\"\",e.removePicker()}}),B.on(\"resize\",function(){return!(!e.elemPicker||!i(c)[0])&&void e.position()}),e.elemColorBox[0].eventHandler=!0)},o.render=function(e){var i=new D(e);return r.call(i)},e(t,o)});layui.define(\"layer\",function(e){\"use strict\";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l=\"form\",r=\".layui-form\",s=\"layui-this\",o=\"layui-hide\",c=\"layui-disabled\",u=function(){this.config={verify:{required:[/[\\S]+/,\"必填项不能为空\"],phone:[/^1\\d{10}$/,\"请输入正确的手机号\"],email:[/^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/,\"邮箱格式不正确\"],url:[/(^#)|(^http(s*):\\/\\/[^\\s]+\\.[^\\s]+)/,\"链接格式不正确\"],number:function(e){if(!e||isNaN(e))return\"只能填写数字\"},date:[/^(\\d{4})[-\\/](\\d{1}|0\\d{1}|1[0-2])([-\\/](\\d{1}|0\\d{1}|[1-2][0-9]|3[0-1]))*$/,\"日期格式不正确\"],identity:[/(^\\d{15}$)|(^\\d{17}(x|X|\\d)$)/,\"请输入正确的身份证号\"]}}};u.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},u.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},u.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},u.prototype.val=function(e,i){var a=t(r+'[lay-filter=\"'+e+'\"]');a.each(function(e,a){var n=t(this);layui.each(i,function(e,t){var i,a=n.find('[name=\"'+e+'\"]');a[0]&&(i=a[0].type,\"checkbox\"===i?a[0].checked=t:\"radio\"===i?a.each(function(){this.value==t&&(this.checked=!0)}):a.val(t))})}),f.render(null,e)},u.prototype.render=function(e,i){var n=this,u=t(r+function(){return i?'[lay-filter=\"'+i+'\"]':\"\"}()),d={select:function(){var e,i=\"请选择\",a=\"layui-form-select\",n=\"layui-select-title\",r=\"layui-select-none\",d=\"\",f=u.find(\"select\"),v=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t(\".\"+a).removeClass(a+\"ed \"+a+\"up\"),e&&d&&e.val(d)),e=null},y=function(i,u,f){var y,p=t(this),m=i.find(\".\"+n),k=m.find(\"input\"),x=i.find(\"dl\"),g=x.children(\"dd\"),b=this.selectedIndex;if(!u){var C=function(){var e=i.offset().top+i.outerHeight()+5-h.scrollTop(),t=x.outerHeight();b=p[0].selectedIndex,i.addClass(a+\"ed\"),g.removeClass(o),y=null,g.eq(b).addClass(s).siblings().removeClass(s),e+t>h.height()&&e>=t&&i.addClass(a+\"up\"),T()},w=function(e){i.removeClass(a+\"ed \"+a+\"up\"),k.blur(),y=null,e||$(k.val(),function(e){var i=p[0].selectedIndex;e&&(d=t(p[0].options[i]).html(),0===i&&d===k.attr(\"placeholder\")&&(d=\"\"),k.val(d||\"\"))})},T=function(){var e=x.children(\"dd.\"+s);if(e[0]){var t=e.position().top,i=x.height(),a=e.height();t>i&&x.scrollTop(t+x.scrollTop()-i+a-5),t<0&&x.scrollTop(t+x.scrollTop()-5)}};m.on(\"click\",function(e){i.hasClass(a+\"ed\")?w():(v(e,!0),C()),x.find(\".\"+r).remove()}),m.find(\".layui-edge\").on(\"click\",function(){k.focus()}),k.on(\"keyup\",function(e){var t=e.keyCode;9===t&&C()}).on(\"keydown\",function(e){var t=e.keyCode;9===t&&w();var i=function(t,a){var n,l;e.preventDefault();var r=function(){var e=x.children(\"dd.\"+s);if(x.children(\"dd.\"+o)[0]&&\"next\"===t){var i=x.children(\"dd:not(.\"+o+\",.\"+c+\")\"),n=i.eq(0).index();if(n>=0&&n<e.index()&&!i.hasClass(s))return i.eq(0).prev()[0]?i.eq(0).prev():x.children(\":last\")}return a&&a[0]?a:y&&y[0]?y:e}();return l=r[t](),n=r[t](\"dd:not(.\"+o+\")\"),l[0]?(y=r[t](),n[0]&&!n.hasClass(c)||!y[0]?(n.addClass(s).siblings().removeClass(s),void T()):i(t,y)):y=null};38===t&&i(\"prev\"),40===t&&i(\"next\"),13===t&&(e.preventDefault(),x.children(\"dd.\"+s).trigger(\"click\"))});var $=function(e,i,a){var n=0;layui.each(g,function(){var i=t(this),l=i.text(),r=l.indexOf(e)===-1;(\"\"===e||\"blur\"===a?e!==l:r)&&n++,\"keyup\"===a&&i[r?\"addClass\":\"removeClass\"](o)});var l=n===g.length;return i(l),l},q=function(e){var t=this.value,i=e.keyCode;return 9!==i&&13!==i&&37!==i&&38!==i&&39!==i&&40!==i&&($(t,function(e){e?x.find(\".\"+r)[0]||x.append('<p class=\"'+r+'\">无匹配项</p>'):x.find(\".\"+r).remove()},\"keyup\"),\"\"===t&&x.find(\".\"+r).remove(),void T())};f&&k.on(\"keyup\",q).on(\"blur\",function(i){var a=p[0].selectedIndex;e=k,d=t(p[0].options[a]).html(),0===a&&d===k.attr(\"placeholder\")&&(d=\"\"),setTimeout(function(){$(k.val(),function(e){d||k.val(\"\")},\"blur\")},200)}),g.on(\"click\",function(){var e=t(this),a=e.attr(\"lay-value\"),n=p.attr(\"lay-filter\");return!e.hasClass(c)&&(e.hasClass(\"layui-select-tips\")?k.val(\"\"):(k.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),p.val(a).removeClass(\"layui-form-danger\"),layui.event.call(this,l,\"select(\"+n+\")\",{elem:p[0],value:a,othis:i}),w(!0),!1)}),i.find(\"dl>dt\").on(\"click\",function(e){return!1}),t(document).off(\"click\",v).on(\"click\",v)}};f.each(function(e,l){var r=t(this),o=r.next(\".\"+a),u=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),v=l.options[0];if(\"string\"==typeof r.attr(\"lay-ignore\"))return r.show();var h=\"string\"==typeof r.attr(\"lay-search\"),p=v?v.value?i:v.innerHTML||i:i,m=t(['<div class=\"'+(h?\"\":\"layui-unselect \")+a,(u?\" layui-select-disabled\":\"\")+'\">','<div class=\"'+n+'\">','<input type=\"text\" placeholder=\"'+p+'\" '+('value=\"'+(d?f.html():\"\")+'\"')+(h?\"\":\" readonly\")+' class=\"layui-input'+(h?\"\":\" layui-unselect\")+(u?\" \"+c:\"\")+'\">','<i class=\"layui-edge\"></i></div>','<dl class=\"layui-anim layui-anim-upbit'+(r.find(\"optgroup\")[0]?\" layui-select-group\":\"\")+'\">',function(e){var t=[];return layui.each(e,function(e,a){0!==e||a.value?\"optgroup\"===a.tagName.toLowerCase()?t.push(\"<dt>\"+a.label+\"</dt>\"):t.push('<dd lay-value=\"'+a.value+'\" class=\"'+(d===a.value?s:\"\")+(a.disabled?\" \"+c:\"\")+'\">'+a.innerHTML+\"</dd>\"):t.push('<dd lay-value=\"\" class=\"layui-select-tips\">'+(a.innerHTML||i)+\"</dd>\")}),0===t.length&&t.push('<dd lay-value=\"\" class=\"'+c+'\">没有选项</dd>'),t.join(\"\")}(r.find(\"*\"))+\"</dl>\",\"</div>\"].join(\"\"));o[0]&&o.remove(),r.after(m),y.call(this,m,u,h)})},checkbox:function(){var e={checkbox:[\"layui-form-checkbox\",\"layui-form-checked\",\"checkbox\"],_switch:[\"layui-form-switch\",\"layui-form-onswitch\",\"switch\"]},i=u.find(\"input[type=checkbox]\"),a=function(e,i){var a=t(this);e.on(\"click\",function(){var t=a.attr(\"lay-filter\"),n=(a.attr(\"lay-text\")||\"\").split(\"|\");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find(\"em\").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find(\"em\").text(n[0])),layui.event.call(a[0],l,i[2]+\"(\"+t+\")\",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr(\"lay-skin\"),s=(l.attr(\"lay-text\")||\"\").split(\"|\"),o=this.disabled;\"switch\"===r&&(r=\"_\"+r);var u=e[r]||e.checkbox;if(\"string\"==typeof l.attr(\"lay-ignore\"))return l.show();var d=l.next(\".\"+u[0]),f=t(['<div class=\"layui-unselect '+u[0],n.checked?\" \"+u[1]:\"\",o?\" layui-checkbox-disbaled \"+c:\"\",'\"',r?' lay-skin=\"'+r+'\"':\"\",\">\",function(){var e=n.title.replace(/\\s/g,\"\"),t={checkbox:[e?\"<span>\"+n.title+\"</span>\":\"\",'<i class=\"layui-icon layui-icon-ok\"></i>'].join(\"\"),_switch:\"<em>\"+((n.checked?s[0]:s[1])||\"\")+\"</em><i></i>\"};return t[r]||t.checkbox}(),\"</div>\"].join(\"\"));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e=\"layui-form-radio\",i=[\"&#xe643;\",\"&#xe63f;\"],a=u.find(\"input[type=radio]\"),n=function(a){var n=t(this),s=\"layui-anim-scaleSpring\";a.on(\"click\",function(){var o=n[0].name,c=n.parents(r),u=n.attr(\"lay-filter\"),d=c.find(\"input[name=\"+o.replace(/(\\.|#|\\[|\\])/g,\"\\\\$1\")+\"]\");n[0].disabled||(layui.each(d,function(){var a=t(this).next(\".\"+e);this.checked=!1,a.removeClass(e+\"ed\"),a.find(\".layui-icon\").removeClass(s).html(i[1])}),n[0].checked=!0,a.addClass(e+\"ed\"),a.find(\".layui-icon\").addClass(s).html(i[0]),layui.event.call(n[0],l,\"radio(\"+u+\")\",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),s=r.next(\".\"+e),o=this.disabled;if(\"string\"==typeof r.attr(\"lay-ignore\"))return r.show();s[0]&&s.remove();var u=t(['<div class=\"layui-unselect '+e,l.checked?\" \"+e+\"ed\":\"\",(o?\" layui-radio-disbaled \"+c:\"\")+'\">','<i class=\"layui-anim layui-icon\">'+i[l.checked?0:1]+\"</i>\",\"<div>\"+function(){var e=l.title||\"\";return\"string\"==typeof r.next().attr(\"lay-radio\")&&(e=r.next().html(),r.next().remove()),e}()+\"</div>\",\"</div>\"].join(\"\"));r.after(u),n.call(this,u)})}};return e?d[e]?d[e]():a.error(\"不支持的\"+e+\"表单渲染\"):layui.each(d,function(e,t){t()}),n};var d=function(){var e=t(this),a=f.config.verify,s=null,o=\"layui-form-danger\",c={},u=e.parents(r),d=u.find(\"*[lay-verify]\"),v=e.parents(\"form\")[0],h=u.find(\"input,select,textarea\"),y=e.attr(\"lay-filter\");if(layui.each(d,function(e,l){var r=t(this),c=r.attr(\"lay-verify\").split(\"|\"),u=r.attr(\"lay-verType\"),d=r.val();if(r.removeClass(o),layui.each(c,function(e,t){var c,f=\"\",v=\"function\"==typeof a[t];if(a[t]){var c=v?f=a[t](d,l):!a[t][0].test(d);if(f=f||a[t][1],\"required\"===t&&(f=r.attr(\"lay-reqText\")||f),c)return\"tips\"===u?i.tips(f,function(){return\"string\"==typeof r.attr(\"lay-ignore\")||\"select\"!==l.tagName.toLowerCase()&&!/^checkbox|radio$/.test(l.type)?r:r.next()}(),{tips:1}):\"alert\"===u?i.alert(f,{title:\"提示\",shadeClose:!0}):i.msg(f,{icon:5,shift:6}),n.android||n.ios||setTimeout(function(){l.focus()},7),r.addClass(o),s=!0}}),s)return s}),s)return!1;var p={};return layui.each(h,function(e,t){if(t.name=(t.name||\"\").replace(/^\\s*|\\s*&/,\"\"),t.name){if(/^.*\\[\\]$/.test(t.name)){var i=t.name.match(/^(.*)\\[\\]$/g)[0];p[i]=0|p[i],t.name=t.name.replace(/^(.*)\\[\\]$/,\"$1[\"+p[i]++ +\"]\")}/^checkbox|radio$/.test(t.type)&&!t.checked||(c[t.name]=t.value)}}),layui.event.call(this,l,\"submit(\"+y+\")\",{elem:this,form:v,field:c})},f=new u,v=t(document),h=t(window);f.render(),v.on(\"reset\",r,function(){var e=t(this).attr(\"lay-filter\");setTimeout(function(){f.render(null,e)},50)}),v.on(\"submit\",r,d).on(\"click\",\"*[lay-submit]\",d),e(l,f)});layui.define(\"form\",function(e){\"use strict\";var i=layui.$,a=layui.form,n=\"tree\",r={config:{},index:layui[n]?layui[n].index+1e4:0,set:function(e){var a=this;return a.config=i.extend({},a.config,e),a},on:function(e,i){return layui.onevent.call(this,n,e,i)}},l=function(){var e=this,i=e.config,a=i.id||e.index;return l.that[a]=e,l.config[a]=i,{config:i,reload:function(i){e.reload.call(e,i)},getChecked:function(){return e.getChecked.call(e)},setChecked:function(i){return e.setChecked.call(e,i)}}},t=\"layui-hide\",d=\"layui-disabled\",s=\"layui-tree-set\",c=\"layui-tree-iconClick\",o=\"layui-icon-addition\",h=\"layui-icon-subtraction\",u=\"layui-tree-entry\",f=\"layui-tree-main\",p=\"layui-tree-txt\",y=\"layui-tree-pack\",v=\"layui-tree-spread\",C=\"layui-tree-setLineShort\",m=\"layui-tree-showLine\",k=\"layui-tree-lineExtend\",g=function(e){var a=this;a.index=++r.index,a.config=i.extend({},a.config,r.config,e),a.render()};g.prototype.config={data:[],showCheckbox:!1,showLine:!0,accordion:!1,onlyIconControl:!1,isJump:!1,edit:!1,text:{defaultNodeName:\"未命名\",none:\"无数据\"}},g.prototype.reload=function(e){var a=this;layui.each(e,function(e,i){i.constructor===Array&&delete a.config[e]}),a.config=i.extend(!0,{},a.config,e),a.render()},g.prototype.render=function(){var e=this,a=e.config,n=i('<div class=\"layui-tree'+(a.showCheckbox?\" layui-form\":\"\")+(a.showLine?\" layui-tree-line\":\"\")+'\" lay-filter=\"LAY-tree-'+e.index+'\"></div>');e.tree(n);var r=a.elem=i(a.elem);if(r[0]){if(a.showSearch&&n.prepend('<input type=\"text\" class=\"layui-input layui-tree-search\" placeholder=\"请输入关键字进行过滤\">'),e.key=a.id||e.index,e.elem=n,e.elemNone=i('<div class=\"layui-tree-emptyText\">'+a.text.none+\"</div>\"),r.html(e.elem),0==e.elem.find(\".layui-tree-set\").length)return e.elem.append(e.elemNone);a.drag&&e.drag(),a.showCheckbox&&e.renderForm(\"checkbox\"),e.elem.find(\".layui-tree-set\").each(function(){var e=i(this);e.parent(\".layui-tree-pack\")[0]||e.addClass(\"layui-tree-setHide\"),!e.next()[0]&&e.parents(\".layui-tree-pack\").eq(1).hasClass(\"layui-tree-lineExtend\")&&e.addClass(C),e.next()[0]||e.parents(\".layui-tree-set\").eq(0).next()[0]||e.addClass(C)}),e.events()}},g.prototype.renderForm=function(e){a.render(e,\"LAY-tree-\"+this.index)},g.prototype.tree=function(e,a){var n=this,r=n.config,l=a||r.data;layui.each(l,function(a,l){var c=l.children&&l.children.length>0,o=i('<div class=\"layui-tree-pack\" '+(l.spread?'style=\"display: block;\"':\"\")+'\"></div>'),h=i(['<div data-id=\"'+l.id+'\" class=\"layui-tree-set'+(l.spread?\" layui-tree-spread\":\"\")+(l.checked?\" layui-tree-checkedFirst\":\"\")+'\">',\"<div \"+(r.drag&&!l.fixed?'draggable=\"true\"':\"\")+' class=\"layui-tree-entry\">','<div class=\"layui-tree-main\">',function(){return r.showLine?c?'<span class=\"layui-tree-iconClick layui-tree-icon\"><i class=\"layui-icon '+(l.spread?\"layui-icon-subtraction\":\"layui-icon-addition\")+'\"></i></span>':'<span class=\"layui-tree-iconClick\"><i class=\"layui-icon layui-icon-file\"></i></span>':'<span class=\"layui-tree-iconClick\"><i class=\"layui-tree-iconArrow '+(c?\"\":t)+'\"></i></span>'}(),function(){return r.showCheckbox?'<input type=\"checkbox\" name=\"layuiTreeCheck\" lay-skin=\"primary\" '+(l.disabled?\"disabled\":\"\")+'  value=\"'+l.id+'\">':\"\"}(),function(){return r.isJump&&l.href?'<a href=\"'+l.href+'\" target=\"_blank\" class=\"'+p+'\">'+(l.title||l.label||r.text.defaultNodeName)+\"</a>\":'<span class=\"'+p+(l.disabled?\" \"+d:\"\")+'\">'+(l.title||l.label||r.text.defaultNodeName)+\"</span>\"}(),\"</div>\",function(){if(!r.edit)return\"\";var e={add:'<i class=\"layui-icon layui-icon-add-1\"  data-type=\"add\"></i>',update:'<i class=\"layui-icon layui-icon-edit\" data-type=\"update\"></i>',del:'<i class=\"layui-icon layui-icon-delete\" data-type=\"del\"></i>'},i=['<div class=\"layui-btn-group layui-tree-btnGroup\">'];return r.edit===!0&&(r.edit=[\"update\",\"del\"]),\"object\"==typeof r.edit?(layui.each(r.edit,function(a,n){i.push(e[n]||\"\")}),i.join(\"\")+\"</div>\"):void 0}(),\"</div></div>\"].join(\"\"));c&&(h.append(o),n.tree(o,l.children)),e.append(h),h.prev(\".\"+s)[0]&&h.prev().children(\".layui-tree-pack\").addClass(\"layui-tree-showLine\"),c||h.parent(\".layui-tree-pack\").addClass(\"layui-tree-lineExtend\"),n.spread(h,l),r.showCheckbox&&n.checkClick(h,l),r.edit&&n.operate(h,l)})},g.prototype.spread=function(e,a){var n=this,r=n.config,l=e.children(\".\"+u),t=l.children(\".\"+f),C=l.find(\".\"+c),m=l.find(\".\"+p),k=r.onlyIconControl?C:t,g=\"\";k.on(\"click\",function(i){var a=e.children(\".\"+y),n=k.children(\".layui-icon\")[0]?k.children(\".layui-icon\"):k.find(\".layui-tree-icon\").children(\".layui-icon\");if(a[0]){if(e.hasClass(v))e.removeClass(v),a.slideUp(200),n.removeClass(h).addClass(o);else if(e.addClass(v),a.slideDown(200),n.addClass(h).removeClass(o),r.accordion){var l=e.siblings(\".\"+s);l.removeClass(v),l.children(\".\"+y).slideUp(200),l.find(\".layui-tree-icon\").children(\".layui-icon\").removeClass(h).addClass(o)}}else g=\"normal\"}),m.on(\"click\",function(){var n=i(this);n.hasClass(d)||(g=e.hasClass(v)?r.onlyIconControl?\"open\":\"close\":r.onlyIconControl?\"close\":\"open\",r.click&&r.click({elem:e,state:g,data:a}))})},g.prototype.setCheckbox=function(e,i,a){var n=this,r=(n.config,a.prop(\"checked\"));if(\"object\"==typeof i.children||e.find(\".\"+y)[0]){var l=e.find(\".\"+y).find('input[name=\"layuiTreeCheck\"]');l.each(function(){this.disabled||(this.checked=r)})}var t=function(e){if(e.parents(\".\"+s)[0]){var i,a=e.parent(\".\"+y),n=a.parent(),l=a.prev().find('input[name=\"layuiTreeCheck\"]');r?l.prop(\"checked\",r):(a.find('input[name=\"layuiTreeCheck\"]').each(function(){this.checked&&(i=!0)}),i||l.prop(\"checked\",!1)),t(n)}};t(e),n.renderForm(\"checkbox\")},g.prototype.checkClick=function(e,a){var n=this,r=n.config,l=e.children(\".\"+u),t=l.children(\".\"+f);t.on(\"click\",'input[name=\"layuiTreeCheck\"]+',function(l){layui.stope(l);var t=i(this).prev(),d=t.prop(\"checked\");t.prop(\"disabled\")||(n.setCheckbox(e,a,t),r.oncheck&&r.oncheck({elem:e,checked:d,data:a}))})},g.prototype.operate=function(e,a){var n=this,r=n.config,l=e.children(\".\"+u),d=l.children(\".\"+f);l.children(\".layui-tree-btnGroup\").on(\"click\",\".layui-icon\",function(l){layui.stope(l);var f=i(this).data(\"type\"),g=e.children(\".\"+y),x={data:a,type:f,elem:e};if(\"add\"==f){g[0]||(r.showLine?(d.find(\".\"+c).addClass(\"layui-tree-icon\"),d.find(\".\"+c).children(\".layui-icon\").addClass(o).removeClass(\"layui-icon-file\")):d.find(\".layui-tree-iconArrow\").removeClass(t),e.append('<div class=\"layui-tree-pack\"></div>'));var b=r.operate&&r.operate(x),w={};if(w.title=r.text.defaultNodeName,w.id=b,n.tree(e.children(\".\"+y),[w]),r.showLine)if(g[0])g.hasClass(k)||g.addClass(k),e.find(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)}),g.children(\".\"+s).last().prev().hasClass(C)?g.children(\".\"+s).last().prev().removeClass(C):g.children(\".\"+s).last().removeClass(C),!e.parent(\".\"+y)[0]&&e.next()[0]&&g.children(\".\"+s).last().removeClass(C);else{var T=e.siblings(\".\"+s),L=1,N=e.parent(\".\"+y);layui.each(T,function(e,a){i(a).children(\".\"+y)[0]||(L=0)}),1==L?(T.children(\".\"+y).addClass(m),T.children(\".\"+y).children(\".\"+s).removeClass(C),e.children(\".\"+y).addClass(m),N.removeClass(k),N.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C)):e.children(\".\"+y).children(\".\"+s).addClass(C)}if(!r.showCheckbox)return;if(d.find('input[name=\"layuiTreeCheck\"]')[0].checked){var A=e.children(\".\"+y).children(\".\"+s).last();A.find('input[name=\"layuiTreeCheck\"]')[0].checked=!0}n.renderForm(\"checkbox\")}else if(\"update\"==f){var q=d.children(\".\"+p).html();d.children(\".\"+p).html(\"\"),d.append('<input type=\"text\" class=\"layui-tree-editInput\">'),d.children(\".layui-tree-editInput\").val(q).focus();var F=function(e){var i=e.val().trim();i=i?i:r.text.defaultNodeName,e.remove(),d.children(\".\"+p).html(i),x.data.title=i,r.operate&&r.operate(x)};d.children(\".layui-tree-editInput\").blur(function(){F(i(this))}),d.children(\".layui-tree-editInput\").on(\"keydown\",function(e){13===e.keyCode&&(e.preventDefault(),F(i(this)))})}else{if(r.operate&&r.operate(x),x.status=\"remove\",!e.prev(\".\"+s)[0]&&!e.next(\".\"+s)[0]&&!e.parent(\".\"+y)[0])return e.remove(),void n.elem.append(n.elemNone);if(e.siblings(\".\"+s).children(\".\"+u)[0]){if(r.showCheckbox){var I=function(e){if(e.parents(\".\"+s)[0]){var a=e.siblings(\".\"+s).children(\".\"+u),r=e.parent(\".\"+y).prev(),l=r.find('input[name=\"layuiTreeCheck\"]')[0],t=1,d=0;0==l.checked&&(a.each(function(e,a){var n=i(a).find('input[name=\"layuiTreeCheck\"]')[0];0!=n.checked||n.disabled||(t=0),n.disabled||(d=1)}),1==t&&1==d&&(l.checked=!0,n.renderForm(\"checkbox\"),I(r.parent(\".\"+s))))}};I(e)}if(r.showLine){var T=e.siblings(\".\"+s),L=1,N=e.parent(\".\"+y);layui.each(T,function(e,a){i(a).children(\".\"+y)[0]||(L=0)}),1==L?(g[0]||(N.removeClass(k),T.children(\".\"+y).addClass(m),T.children(\".\"+y).children(\".\"+s).removeClass(C)),e.next()[0]?N.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C):e.prev().children(\".\"+y).children(\".\"+s).last().addClass(C),e.next()[0]||e.parents(\".\"+s)[1]||e.parents(\".\"+s).eq(0).next()[0]||e.prev(\".\"+s).addClass(C)):!e.next()[0]&&e.hasClass(C)&&e.prev().addClass(C)}}else{var H=e.parent(\".\"+y).prev();if(r.showLine){H.find(\".\"+c).removeClass(\"layui-tree-icon\"),H.find(\".\"+c).children(\".layui-icon\").removeClass(h).addClass(\"layui-icon-file\");var S=H.parents(\".\"+y).eq(0);S.addClass(k),S.children(\".\"+s).each(function(){i(this).children(\".\"+y).children(\".\"+s).last().addClass(C)})}else H.find(\".layui-tree-iconArrow\").addClass(t);e.parents(\".\"+s).eq(0).removeClass(v),e.parent(\".\"+y).remove()}e.remove()}})},g.prototype.drag=function(){var e=this,a=e.config;e.elem.on(\"dragstart\",\".\"+u,function(){var e=i(this).parent(\".\"+s),n=e.parents(\".\"+s)[0]?e.parents(\".\"+s).eq(0):\"未找到父节点\";a.dragstart&&a.dragstart(e,n)}),e.elem.on(\"dragend\",\".\"+u,function(n){var n=n||event,r=n.clientY,l=i(this),d=l.parent(\".\"+s),f=d.height(),p=d.offset().top,g=e.elem.find(\".\"+s),x=e.elem.height(),b=e.elem.offset().top,w=x+b-13,T=d.parents(\".\"+s)[0],L=d.next()[0];if(T)var N=d.parent(\".\"+y),A=d.parents(\".\"+s).eq(0),q=A.parent(\".\"+y),F=A.offset().top,I=d.siblings(),H=A.children(\".\"+y).children(\".\"+s).length;var S=function(n){if(T||L||e.elem.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C),!T)return void d.removeClass(\"layui-tree-setHide\");if(1==H)a.showLine?(n.find(\".\"+c).removeClass(\"layui-tree-icon\"),n.find(\".\"+c).children(\".layui-icon\").removeClass(h).addClass(\"layui-icon-file\"),q.addClass(k),q.children(\".\"+s).children(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)})):n.find(\".layui-tree-iconArrow\").addClass(t),n.children(\".\"+y).remove(),n.removeClass(v);else{if(a.showLine){var r=1;layui.each(I,function(e,a){i(a).children(\".\"+y)[0]||(r=0)}),1==r?(d.children(\".\"+y)[0]||(N.removeClass(k),I.children(\".\"+y).addClass(m),I.children(\".\"+y).children(\".\"+s).removeClass(C)),N.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C),L||n.parents(\".\"+s)[0]||n.next()[0]||N.children(\".\"+s).last().addClass(C)):!L&&d.hasClass(C)&&N.children(\".\"+s).last().addClass(C)}if(a.showCheckbox){var l=function(a){if(a){if(!a.parents(\".\"+s)[0])return}else if(!n[0])return;var r=a?a.siblings().children(\".\"+u):I.children(\".\"+u),t=a?a.parent(\".\"+y).prev():N.prev(),d=t.find('input[name=\"layuiTreeCheck\"]')[0],c=1,o=0;0==d.checked&&(r.each(function(e,a){var n=i(a).find('input[name=\"layuiTreeCheck\"]')[0];0!=n.checked||n.disabled||(c=0),n.disabled||(o=1)}),1==c&&1==o&&(d.checked=!0,e.renderForm(\"checkbox\"),l(t.parent(\".\"+s)||n)))};l()}}};g.each(function(){if(0!=i(this).height()){if(r>p&&r<p+f)return void(a.dragend&&a.dragend(\"drag error\"));if(1==H&&r>F&&r<p+f)return void(a.dragend&&a.dragend(\"drag error\"));var n=i(this).offset().top;if(r>n&&r<n+15){if(i(this).children(\".\"+y)[0]||(a.showLine?(i(this).find(\".\"+c).eq(0).addClass(\"layui-tree-icon\"),i(this).find(\".\"+c).eq(0).children(\".layui-icon\").addClass(o).removeClass(\"layui-icon-file\")):i(this).find(\".layui-tree-iconArrow\").removeClass(t),i(this).append('<div class=\"layui-tree-pack\"></div>')),i(this).children(\".\"+y).append(d),S(A),a.showLine){var l=i(this).children(\".\"+y).children(\".\"+s);if(d.children(\".\"+y).children(\".\"+s).last().addClass(C),1==l.length){var h=i(this).siblings(\".\"+s),v=1,g=i(this).parent(\".\"+y);layui.each(h,function(e,a){i(a).children(\".\"+y)[0]||(v=0)}),1==v?(h.children(\".\"+y).addClass(m),h.children(\".\"+y).children(\".\"+s).removeClass(C),i(this).children(\".\"+y).addClass(m),g.removeClass(k),g.children(\".\"+s).last().children(\".\"+y).children(\".\"+s).last().addClass(C).removeClass(\"layui-tree-setHide\")):i(this).children(\".\"+y).children(\".\"+s).addClass(C).removeClass(\"layui-tree-setHide\")}else d.prev(\".\"+s).hasClass(C)?(d.prev(\".\"+s).removeClass(C),d.addClass(C)):(d.removeClass(\"layui-tree-setLineShort layui-tree-setHide\"),d.children(\".\"+y)[0]?d.prev(\".\"+s).children(\".\"+y).children(\".\"+s).last().removeClass(C):d.siblings(\".\"+s).find(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)})),i(this).next()[0]||d.addClass(C)}if(a.showCheckbox&&i(this).children(\".\"+u).find('input[name=\"layuiTreeCheck\"]')[0].checked){var x=d.children(\".\"+u);x.find('input[name=\"layuiTreeCheck\"]+').click()}return a.dragend&&a.dragend(\"drag success\",d,i(this)),!1}if(r<n){if(i(this).before(d),S(A),a.showLine){var b=d.children(\".\"+y),T=i(this).parents(\".\"+s).eq(0),L=T.children(\".\"+y).children(\".\"+s).last();if(b[0]){d.removeClass(C),b.children(\".\"+s).last().removeClass(C);var h=d.siblings(\".\"+s),v=1;layui.each(h,function(e,a){i(a).children(\".\"+y)[0]||(v=0)}),1==v?T[0]&&(h.children(\".\"+y).addClass(m),h.children(\".\"+y).children(\".\"+s).removeClass(C),L.children(\".\"+y).children(\".\"+s).last().addClass(C).removeClass(m)):d.children(\".\"+y).children(\".\"+s).last().addClass(C),!T.parent(\".\"+y)[0]&&T.next()[0]&&L.removeClass(C)}else T.hasClass(k)||T.addClass(k),T.find(\".\"+y).each(function(){i(this).children(\".\"+s).last().addClass(C)});T[0]||(d.addClass(\"layui-tree-setHide\"),d.children(\".\"+y).children(\".\"+s).last().removeClass(C))}if(T[0]&&a.showCheckbox&&T.children(\".\"+u).find('input[name=\"layuiTreeCheck\"]')[0].checked){var x=d.children(\".\"+u);x.find('input[name=\"layuiTreeCheck\"]+').click()}return a.dragend&&a.dragend(\"拖拽成功，插入目标节点上方\",d,i(this)),!1}if(r>w)return e.elem.children(\".\"+s).last().children(\".\"+y).addClass(m),e.elem.append(d),S(A),d.prev().children(\".\"+y).children(\".\"+s).last().removeClass(C),d.addClass(\"layui-tree-setHide\"),d.children(\".\"+y).children(\".\"+s).last().addClass(C),a.dragend&&a.dragend(\"拖拽成功，插入最外层节点\",d,e.elem),!1}})})},g.prototype.events=function(){var e=this,a=e.config,n=e.elem.find(\".layui-tree-checkedFirst\");layui.each(n,function(e,a){i(a).children(\".\"+u).find('input[name=\"layuiTreeCheck\"]+').trigger(\"click\")}),e.elem.find(\".layui-tree-search\").on(\"keyup\",function(){var n=i(this),r=n.val(),l=n.nextAll(),d=[];l.find(\".\"+p).each(function(){var e=i(this).parents(\".\"+u);if(i(this).html().indexOf(r)!=-1){d.push(i(this).parent());var a=function(e){e.addClass(\"layui-tree-searchShow\"),e.parent(\".\"+y)[0]&&a(e.parent(\".\"+y).parent(\".\"+s))};a(e.parent(\".\"+s))}}),l.find(\".\"+u).each(function(){var e=i(this).parent(\".\"+s);e.hasClass(\"layui-tree-searchShow\")||e.addClass(t)}),0==l.find(\".layui-tree-searchShow\").length&&e.elem.append(e.elemNone),a.onsearch&&a.onsearch({elem:d})}),e.elem.find(\".layui-tree-search\").on(\"keydown\",function(){i(this).nextAll().find(\".\"+u).each(function(){var e=i(this).parent(\".\"+s);e.removeClass(\"layui-tree-searchShow \"+t)}),i(\".layui-tree-emptyText\")[0]&&i(\".layui-tree-emptyText\").remove()})},g.prototype.getChecked=function(){var e=this,a=e.config,n=[],r=[];e.elem.find(\".layui-form-checked\").each(function(){n.push(i(this).prev()[0].value)});var l=function(e,a){layui.each(e,function(e,r){layui.each(n,function(e,n){if(r.id==n){var t=i.extend({},r);return delete t.children,a.push(t),r.children&&(t.children=[],l(r.children,t.children)),!0}})})};return l(i.extend({},a.data),r),r},g.prototype.setChecked=function(e){var a=this;a.config;a.elem.find(\".\"+s).each(function(a,n){var r=i(this).data(\"id\"),l=i(n).children(\".\"+u).find('input[name=\"layuiTreeCheck\"]'),t=l.next();if(\"number\"==typeof e){if(r==e)return l[0].checked||t.click(),!1}else i.inArray(r,e)!=-1&&(l[0].checked||t.click())})},l.that={},l.config={},r.reload=function(e,i){var a=l.that[e];return a.reload(i),l.call(a)},r.getChecked=function(e){var i=l.that[e];return i.getChecked()},r.setChecked=function(e,i){var a=l.that[e];return a.setChecked(i)},r.render=function(e){var i=new g(e);return l.call(i)},e(n,r)});layui.define([\"laytpl\",\"form\"],function(e){\"use strict\";var a=layui.$,t=layui.laytpl,n=layui.form,i=\"transfer\",l={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,i,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c=\"layui-hide\",o=\"layui-btn-disabled\",d=\"layui-none\",s=\"layui-transfer-box\",u=\"layui-transfer-header\",h=\"layui-transfer-search\",f=\"layui-transfer-active\",y=\"layui-transfer-data\",p=function(e){return e=e||{},['<div class=\"layui-transfer-box\" data-index=\"'+e.index+'\">','<div class=\"layui-transfer-header\">','<input type=\"checkbox\" name=\"'+e.checkAllName+'\" lay-filter=\"layTransferCheckbox\" lay-type=\"all\" lay-skin=\"primary\" title=\"{{ d.data.title['+e.index+\"] || 'list\"+(e.index+1)+\"' }}\\\">\",\"</div>\",\"{{# if(d.data.showSearch){ }}\",'<div class=\"layui-transfer-search\">','<i class=\"layui-icon layui-icon-search\"></i>','<input type=\"input\" class=\"layui-input\" placeholder=\"关键词搜索\">',\"</div>\",\"{{# } }}\",'<ul class=\"layui-transfer-data\"></ul>',\"</div>\"].join(\"\")},v=['<div class=\"layui-transfer layui-form layui-border-box\" lay-filter=\"LAY-transfer-{{ d.index }}\">',p({index:0,checkAllName:\"layTransferLeftCheckAll\"}),'<div class=\"layui-transfer-active\">','<button type=\"button\" class=\"layui-btn layui-btn-sm layui-btn-primary layui-btn-disabled\" data-index=\"0\">','<i class=\"layui-icon layui-icon-next\"></i>',\"</button>\",'<button type=\"button\" class=\"layui-btn layui-btn-sm layui-btn-primary layui-btn-disabled\" data-index=\"1\">','<i class=\"layui-icon layui-icon-prev\"></i>',\"</button>\",\"</div>\",p({index:1,checkAllName:\"layTransferRightCheckAll\"}),\"</div>\"].join(\"\"),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:[\"列表一\",\"列表二\"],width:200,height:360,data:[],value:[],showSearch:!1,id:\"\",text:{none:\"无数据\",searchNone:\"无匹配数据\"}},x.prototype.reload=function(e){var t=this;layui.each(e,function(e,a){a.constructor===Array&&delete t.config[e]}),t.config=a.extend(!0,{},t.config,e),t.render()},x.prototype.render=function(){var e=this,n=e.config,i=e.elem=a(t(v).render({data:n,index:e.index})),l=n.elem=a(n.elem);l[0]&&(n.data=n.data||[],n.value=n.value||[],e.key=n.id||e.index,l.html(e.elem),e.layBox=e.elem.find(\".\"+s),e.layHeader=e.elem.find(\".\"+u),e.laySearch=e.elem.find(\".\"+h),e.layData=i.find(\".\"+y),e.layBtn=i.find(\".\"+f+\" .layui-btn\"),e.layBox.css({width:n.width,height:n.height}),e.layData.css({height:function(){return n.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:\"layTransferLeftCheck\",views:[]},{checkName:\"layTransferRightCheck\",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,n=[\"<li>\",'<input type=\"checkbox\" name=\"'+a[t].checkName+'\" lay-skin=\"primary\" lay-filter=\"layTransferCheckbox\" title=\"'+e.title+'\"'+(e.disabled?\" disabled\":\"\")+(e.checked?\" checked\":\"\")+' value=\"'+e.value+'\">',\"</li>\"].join(\"\");a[t].views.push(n),delete e.selected}),e.layData.eq(0).html(a[0].views.join(\"\")),e.layData.eq(1).html(a[1].views.join(\"\")),e.renderCheckBtn()},x.prototype.renderForm=function(e){n.render(e,\"LAY-transfer-\"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,n=t.config;e=e||{},t.layBox.each(function(i){var l=a(this),r=l.find(\".\"+y),d=l.find(\".\"+u).find('input[type=\"checkbox\"]'),s=r.find('input[type=\"checkbox\"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data(\"hide\");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop(\"checked\",f&&h===s.length),t.layBtn.eq(i)[f?\"removeClass\":\"addClass\"](o),!e.stopNone){var p=r.children(\"li:not(.\"+c+\")\").length;t.noneView(r,p?\"\":n.text.none)}}),t.renderForm(\"checkbox\")},x.prototype.noneView=function(e,t){var n=a('<p class=\"layui-none\">'+(t||\"\")+\"</p>\");e.find(\".\"+d)[0]&&e.find(\".\"+d).remove(),t.replace(/\\s/g,\"\")&&e.append(n)},x.prototype.setValue=function(){var e=this,t=e.config,n=[];return e.layBox.eq(1).find(\".\"+y+' input[type=\"checkbox\"]').each(function(){var e=a(this).data(\"hide\");e||n.push(this.value)}),t.value=n,e},x.prototype.parseData=function(e){var t=this,n=t.config,i=[];return layui.each(n.data,function(t,l){l=(\"function\"==typeof n.parseData?n.parseData(l):l)||l,i.push(l=a.extend({},l)),layui.each(n.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),n.data=i,t},x.prototype.getData=function(e){var a=this,t=a.config,n=[];return layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&n.push(t)})}),n},x.prototype.events=function(){var e=this,t=e.config;e.elem.on(\"click\",'input[lay-filter=\"layTransferCheckbox\"]+',function(){var t=a(this).prev(),n=t[0].checked,i=t.parents(\".\"+s).eq(0).find(\".\"+y);t[0].disabled||(\"all\"===t.attr(\"lay-type\")&&i.find('input[type=\"checkbox\"]').each(function(){this.disabled||(this.checked=n)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on(\"click\",function(){var n=a(this),i=n.data(\"index\"),l=e.layBox.eq(i),r=[];if(!n.hasClass(o)){e.layBox.eq(i).each(function(t){var n=a(this),i=n.find(\".\"+y);i.children(\"li\").each(function(){var t=a(this),n=t.find('input[type=\"checkbox\"]'),i=n.data(\"hide\");n[0].checked&&!i&&(n[0].checked=!1,l.siblings(\".\"+s).find(\".\"+y).append(t.clone()),t.remove(),r.push(n[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings(\".\"+s).find(\".\"+h+\" input\");\"\"===c.val()||c.trigger(\"keyup\"),t.onchange&&t.onchange(e.getData(r),i)}}),e.laySearch.find(\"input\").on(\"keyup\",function(){var n=this.value,i=a(this).parents(\".\"+h).eq(0).siblings(\".\"+y),l=i.children(\"li\");l.each(function(){var e=a(this),t=e.find('input[type=\"checkbox\"]'),i=t[0].title.indexOf(n)!==-1;e[i?\"removeClass\":\"addClass\"](c),t.data(\"hide\",!i)}),e.renderCheckBtn();var r=l.length===i.children(\"li.\"+c).length;e.noneView(i,r?t.text.searchNone:\"\")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(i,l)});layui.define([\"laytpl\",\"laypage\",\"layer\",\"form\",\"util\"],function(e){\"use strict\";var t=layui.$,i=layui.laytpl,a=layui.laypage,l=layui.layer,n=layui.form,o=(layui.util,layui.hint()),r=layui.device(),d={config:{checkName:\"LAY_CHECKED\",indexName:\"LAY_TABLE_INDEX\"},cache:{},index:layui.table?layui.table.index+1e4:0,set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,y,e,t)}},c=function(){var e=this,t=e.config,i=t.id||t.index;return i&&(c.that[i]=e,c.config[i]=t),{config:t,reload:function(t){e.reload.call(e,t)},setColsWidth:function(){e.setColsWidth.call(e)},resize:function(){e.resize.call(e)}}},s=function(e){var t=c.config[e];return t||o.error(\"The ID option was not found in the table instance\"),t||null},u=function(e,a,l,n){var o=e.templet?function(){return\"function\"==typeof e.templet?e.templet(l):i(t(e.templet).html()||String(a)).render(l)}():a;return n?t(\"<div>\"+o+\"</div>\").text():o},y=\"table\",h=\".layui-table\",f=\"layui-hide\",p=\"layui-none\",v=\"layui-table-view\",m=\".layui-table-tool\",g=\".layui-table-box\",b=\".layui-table-init\",x=\".layui-table-header\",k=\".layui-table-body\",C=\".layui-table-main\",w=\".layui-table-fixed\",T=\".layui-table-fixed-l\",A=\".layui-table-fixed-r\",L=\".layui-table-total\",N=\".layui-table-page\",S=\".layui-table-sort\",W=\"layui-table-edit\",_=\"layui-table-hover\",E=function(e){var t='{{#if(item2.colspan){}} colspan=\"{{item2.colspan}}\"{{#} if(item2.rowspan){}} rowspan=\"{{item2.rowspan}}\"{{#}}}';return e=e||{},['<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"layui-table\" ','{{# if(d.data.skin){ }}lay-skin=\"{{d.data.skin}}\"{{# } }} {{# if(d.data.size){ }}lay-size=\"{{d.data.size}}\"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>',\"<thead>\",\"{{# layui.each(d.data.cols, function(i1, item1){ }}\",\"<tr>\",\"{{# layui.each(item1, function(i2, item2){ }}\",'{{# if(item2.fixed && item2.fixed !== \"right\"){ left = true; } }}','{{# if(item2.fixed === \"right\"){ right = true; } }}',function(){return e.fixed&&\"right\"!==e.fixed?'{{# if(item2.fixed && item2.fixed !== \"right\"){ }}':\"right\"===e.fixed?'{{# if(item2.fixed === \"right\"){ }}':\"\"}(),\"{{# var isSort = !(item2.colGroup) && item2.sort; }}\",'<th data-field=\"{{ item2.field||i2 }}\" data-key=\"{{d.index}}-{{i1}}-{{i2}}\" {{# if( item2.parentKey){ }}data-parentkey=\"{{ item2.parentKey }}\"{{# } }} {{# if(item2.minWidth){ }}data-minwidth=\"{{item2.minWidth}}\"{{# } }} '+t+' {{# if(item2.unresize || item2.colGroup){ }}data-unresize=\"true\"{{# } }} class=\"{{# if(item2.hide){ }}layui-hide{{# } }}{{# if(isSort){ }} layui-unselect{{# } }}{{# if(!item2.field){ }} layui-table-col-special{{# } }}\">','<div class=\"layui-table-cell laytable-cell-',\"{{# if(item2.colGroup){ }}\",\"group\",\"{{# } else { }}\",\"{{d.index}}-{{i1}}-{{i2}}\",'{{# if(item2.type !== \"normal\"){ }}',\" laytable-cell-{{ item2.type }}\",\"{{# } }}\",\"{{# } }}\",'\" {{#if(item2.align){}}align=\"{{item2.align}}\"{{#}}}>','{{# if(item2.type === \"checkbox\"){ }}','<input type=\"checkbox\" name=\"layTableCheckbox\" lay-skin=\"primary\" lay-filter=\"layTableAllChoose\" {{# if(item2[d.data.checkName]){ }}checked{{# }; }}>',\"{{# } else { }}\",'<span>{{item2.title||\"\"}}</span>',\"{{# if(isSort){ }}\",'<span class=\"layui-table-sort layui-inline\"><i class=\"layui-edge layui-table-sort-asc\" title=\"升序\"></i><i class=\"layui-edge layui-table-sort-desc\" title=\"降序\"></i></span>',\"{{# } }}\",\"{{# } }}\",\"</div>\",\"</th>\",e.fixed?\"{{# }; }}\":\"\",\"{{# }); }}\",\"</tr>\",\"{{# }); }}\",\"</thead>\",\"</table>\"].join(\"\")},z=['<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"layui-table\" ','{{# if(d.data.skin){ }}lay-skin=\"{{d.data.skin}}\"{{# } }} {{# if(d.data.size){ }}lay-size=\"{{d.data.size}}\"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>',\"<tbody></tbody>\",\"</table>\"].join(\"\"),H=['<div class=\"layui-form layui-border-box {{d.VIEW_CLASS}}\" lay-filter=\"LAY-table-{{d.index}}\" lay-id=\"{{ d.data.id }}\" style=\"{{# if(d.data.width){ }}width:{{d.data.width}}px;{{# } }} {{# if(d.data.height){ }}height:{{d.data.height}}px;{{# } }}\">',\"{{# if(d.data.toolbar){ }}\",'<div class=\"layui-table-tool\">','<div class=\"layui-table-tool-temp\"></div>','<div class=\"layui-table-tool-self\"></div>',\"</div>\",\"{{# } }}\",'<div class=\"layui-table-box\">',\"{{# if(d.data.loading){ }}\",'<div class=\"layui-table-init\" style=\"background-color: #fff;\">','<i class=\"layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop\"></i>',\"</div>\",\"{{# } }}\",\"{{# var left, right; }}\",'<div class=\"layui-table-header\">',E(),\"</div>\",'<div class=\"layui-table-body layui-table-main\">',z,\"</div>\",\"{{# if(left){ }}\",'<div class=\"layui-table-fixed layui-table-fixed-l\">','<div class=\"layui-table-header\">',E({fixed:!0}),\"</div>\",'<div class=\"layui-table-body\">',z,\"</div>\",\"</div>\",\"{{# }; }}\",\"{{# if(right){ }}\",'<div class=\"layui-table-fixed layui-table-fixed-r\">','<div class=\"layui-table-header\">',E({fixed:\"right\"}),'<div class=\"layui-table-mend\"></div>',\"</div>\",'<div class=\"layui-table-body\">',z,\"</div>\",\"</div>\",\"{{# }; }}\",\"</div>\",\"{{# if(d.data.totalRow){ }}\",'<div class=\"layui-table-total\">','<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"layui-table\" ','{{# if(d.data.skin){ }}lay-skin=\"{{d.data.skin}}\"{{# } }} {{# if(d.data.size){ }}lay-size=\"{{d.data.size}}\"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>','<tbody><tr><td><div class=\"layui-table-cell\" style=\"visibility: hidden;\">Total</div></td></tr></tbody>',\"</table>\",\"</div>\",\"{{# } }}\",\"{{# if(d.data.page){ }}\",'<div class=\"layui-table-page\">','<div id=\"layui-table-page{{d.index}}\"></div>',\"</div>\",\"{{# } }}\",\"<style>\",\"{{# layui.each(d.data.cols, function(i1, item1){\",\"layui.each(item1, function(i2, item2){ }}\",\".laytable-cell-{{d.index}}-{{i1}}-{{i2}}{ \",\"{{# if(item2.width){ }}\",\"width: {{item2.width}}px;\",\"{{# } }}\",\" }\",\"{{# });\",\"}); }}\",\"</style>\",\"</div>\"].join(\"\"),R=t(window),F=t(document),I=function(e){var i=this;i.index=++d.index,i.config=t.extend({},i.config,d.config,e),i.render()};I.prototype.config={limit:10,loading:!0,cellMinWidth:60,defaultToolbar:[\"filter\",\"exports\",\"print\"],autoSort:!0,text:{none:\"无数据\"}},I.prototype.render=function(){var e=this,a=e.config;if(a.elem=t(a.elem),a.where=a.where||{},a.id=a.id||a.elem.attr(\"id\")||e.index,a.request=t.extend({pageName:\"page\",limitName:\"limit\"},a.request),a.response=t.extend({statusName:\"code\",statusCode:0,msgName:\"msg\",dataName:\"data\",countName:\"count\"},a.response),\"object\"==typeof a.page&&(a.limit=a.page.limit||a.limit,a.limits=a.page.limits||a.limits,e.page=a.page.curr=a.page.curr||1,delete a.page.elem,delete a.page.jump),!a.elem[0])return e;a.height&&/^full-\\d+$/.test(a.height)&&(e.fullHeightGap=a.height.split(\"-\")[1],a.height=R.height()-e.fullHeightGap),e.setInit();var l=a.elem,n=l.next(\".\"+v),o=e.elem=t(i(H).render({VIEW_CLASS:v,data:a,index:e.index}));if(a.index=e.index,e.key=a.id||a.index,n[0]&&n.remove(),l.after(o),e.layTool=o.find(m),e.layBox=o.find(g),e.layHeader=o.find(x),e.layMain=o.find(C),e.layBody=o.find(k),e.layFixed=o.find(w),e.layFixLeft=o.find(T),e.layFixRight=o.find(A),e.layTotal=o.find(L),e.layPage=o.find(N),e.renderToolbar(),e.fullSize(),a.cols.length>1){var r=e.layFixed.find(x).find(\"th\");r.height(e.layHeader.height()-1-parseFloat(r.css(\"padding-top\"))-parseFloat(r.css(\"padding-bottom\")))}e.pullData(e.page),e.events()},I.prototype.initOpts=function(e){var t=this,i=(t.config,{checkbox:48,radio:48,space:15,numbers:40});e.checkbox&&(e.type=\"checkbox\"),e.space&&(e.type=\"space\"),e.type||(e.type=\"normal\"),\"normal\"!==e.type&&(e.unresize=!0,e.width=e.width||i[e.type])},I.prototype.setInit=function(e){var t=this,i=t.config;return i.clientWidth=i.width||function(){var e=function(t){var a,l;t=t||i.elem.parent(),a=t.width();try{l=\"none\"===t.css(\"display\")}catch(n){}return!t[0]||a&&!l?a:e(t.parent())};return e()}(),\"width\"===e?i.clientWidth:void layui.each(i.cols,function(e,a){layui.each(a,function(l,n){if(!n)return void a.splice(l,1);if(n.key=e+\"-\"+l,n.hide=n.hide||!1,n.colGroup||n.colspan>1){var o=0;layui.each(i.cols[e+1],function(t,i){i.HAS_PARENT||o>1&&o==n.colspan||(i.HAS_PARENT=!0,i.parentKey=e+\"-\"+l,o+=parseInt(i.colspan>1?i.colspan:1))}),n.colGroup=!0}t.initOpts(n)})})},I.prototype.renderToolbar=function(){var e=this,a=e.config,l=['<div class=\"layui-inline\" lay-event=\"add\"><i class=\"layui-icon layui-icon-add-1\"></i></div>','<div class=\"layui-inline\" lay-event=\"update\"><i class=\"layui-icon layui-icon-edit\"></i></div>','<div class=\"layui-inline\" lay-event=\"delete\"><i class=\"layui-icon layui-icon-delete\"></i></div>'].join(\"\"),n=e.layTool.find(\".layui-table-tool-temp\");if(\"default\"===a.toolbar)n.html(l);else if(\"string\"==typeof a.toolbar){var o=t(a.toolbar).html()||\"\";o&&n.html(i(o).render(a))}var r={filter:{title:\"筛选列\",layEvent:\"LAYTABLE_COLS\",icon:\"layui-icon-cols\"},exports:{title:\"导出\",layEvent:\"LAYTABLE_EXPORT\",icon:\"layui-icon-export\"},print:{title:\"打印\",layEvent:\"LAYTABLE_PRINT\",icon:\"layui-icon-print\"}},d=[];\"object\"==typeof a.defaultToolbar&&layui.each(a.defaultToolbar,function(e,t){var i=r[t];i&&d.push('<div class=\"layui-inline\" title=\"'+i.title+'\" lay-event=\"'+i.layEvent+'\"><i class=\"layui-icon '+i.icon+'\"></i></div>')}),e.layTool.find(\".layui-table-tool-self\").html(d.join(\"\"))},I.prototype.setParentCol=function(e,t){var i=this,a=i.config,l=i.layHeader.find('th[data-key=\"'+a.index+\"-\"+t+'\"]'),n=parseInt(l.attr(\"colspan\"))||0;if(l[0]){var o=t.split(\"-\"),r=a.cols[o[0]][o[1]];e?n--:n++,l.attr(\"colspan\",n),l[n<1?\"addClass\":\"removeClass\"](f),r.colspan=n,r.hide=n<1;var d=l.data(\"parentkey\");d&&i.setParentCol(e,d)}},I.prototype.setColsPatch=function(){var e=this,t=e.config;layui.each(t.cols,function(t,i){layui.each(i,function(t,i){i.hide&&e.setParentCol(i.hide,i.parentKey)})})},I.prototype.setColsWidth=function(){var e=this,t=e.config,i=0,a=0,l=0,n=0,o=e.setInit(\"width\");e.eachCols(function(e,t){t.hide||i++}),o=o-function(){return\"line\"===t.skin||\"nob\"===t.skin?2:i+1}()-e.getScrollWidth(e.layMain[0])-1;var r=function(e){layui.each(t.cols,function(i,r){layui.each(r,function(i,d){var c=0,s=d.minWidth||t.cellMinWidth;return d?void(d.colGroup||d.hide||(e?l&&l<s&&(a--,c=s):(c=d.width||0,/\\d+%$/.test(c)?(c=Math.floor(parseFloat(c)/100*o),c<s&&(c=s)):c||(d.width=c=0,a++)),d.hide&&(c=0),n+=c)):void r.splice(i,1)})}),o>n&&a&&(l=(o-n)/a)};r(),r(!0),e.autoColNums=a,e.eachCols(function(i,a){var n=a.minWidth||t.cellMinWidth;a.colGroup||a.hide||(0===a.width?e.getCssRule(t.index+\"-\"+a.key,function(e){e.style.width=Math.floor(l>=n?l:n)+\"px\"}):/\\d+%$/.test(a.width)&&e.getCssRule(t.index+\"-\"+a.key,function(e){e.style.width=Math.floor(parseFloat(a.width)/100*o)+\"px\"}))});var d=e.layMain.width()-e.getScrollWidth(e.layMain[0])-e.layMain.children(\"table\").outerWidth();if(e.autoColNums&&d>=-i&&d<=i){var c=function(t){var i;return t=t||e.layHeader.eq(0).find(\"thead th:last-child\"),i=t.data(\"field\"),!i&&t.prev()[0]?c(t.prev()):t},s=c(),u=s.data(\"key\");e.getCssRule(u,function(t){var i=t.style.width||s.outerWidth();t.style.width=parseFloat(i)+d+\"px\",e.layMain.height()-e.layMain.prop(\"clientHeight\")>0&&(t.style.width=parseFloat(t.style.width)-1+\"px\")})}e.loading(!0)},I.prototype.resize=function(){var e=this;e.fullSize(),e.setColsWidth(),e.scrollPatch()},I.prototype.reload=function(e){var i=this;e=e||{},delete i.haveInit,e.data&&e.data.constructor===Array&&delete i.config.data,i.config=t.extend(!0,{},i.config,e),i.render()},I.prototype.errorView=function(e){var i=this,a=i.layMain.find(\".\"+p),l=t('<div class=\"'+p+'\">'+(e||\"Error\")+\"</div>\");a[0]&&(i.layNone.remove(),a.remove()),i.layFixed.addClass(f),i.layMain.find(\"tbody\").html(\"\"),i.layMain.append(i.layNone=l),d.cache[i.key]=[]},I.prototype.page=1,I.prototype.pullData=function(e){var i=this,a=i.config,l=a.request,n=a.response,o=function(){\"object\"==typeof a.initSort&&i.sort(a.initSort.field,a.initSort.type)};if(i.startTime=(new Date).getTime(),a.url){var r={};r[l.pageName]=e,r[l.limitName]=a.limit;var d=t.extend(r,a.where);a.contentType&&0==a.contentType.indexOf(\"application/json\")&&(d=JSON.stringify(d)),i.loading(),t.ajax({type:a.method||\"get\",url:a.url,contentType:a.contentType,data:d,dataType:\"json\",headers:a.headers||{},success:function(t){\"function\"==typeof a.parseData&&(t=a.parseData(t)||t),t[n.statusName]!=n.statusCode?(i.renderForm(),i.errorView(t[n.msgName]||'返回的数据不符合规范，正确的成功状态码应为：\"'+n.statusName+'\": '+n.statusCode)):(i.renderData(t,e,t[n.countName]),o(),a.time=(new Date).getTime()-i.startTime+\" ms\"),i.setColsWidth(),\"function\"==typeof a.done&&a.done(t,e,t[n.countName])},error:function(e,t){i.errorView(\"数据接口请求异常：\"+t),i.renderForm(),i.setColsWidth()}})}else if(a.data&&a.data.constructor===Array){var c={},s=e*a.limit-a.limit;c[n.dataName]=a.data.concat().splice(s,a.limit),c[n.countName]=a.data.length,i.renderData(c,e,c[n.countName]),o(),i.setColsWidth(),\"function\"==typeof a.done&&a.done(c,e,c[n.countName])}},I.prototype.eachCols=function(e){var t=this;return d.eachCols(null,e,t.config.cols),t},I.prototype.renderData=function(e,n,o,r){var c=this,s=c.config,y=e[s.response.dataName]||[],h=[],v=[],m=[],g=function(){var e;return!r&&c.sortKey?c.sort(c.sortKey.field,c.sortKey.sort,!0):(layui.each(y,function(a,l){var o=[],y=[],p=[],g=a+s.limit*(n-1)+1;0!==l.length&&(r||(l[d.config.indexName]=a),c.eachCols(function(n,r){var c=r.field||n,h=s.index+\"-\"+r.key,v=l[c];if(void 0!==v&&null!==v||(v=\"\"),!r.colGroup){var m=['<td data-field=\"'+c+'\" data-key=\"'+h+'\" '+function(){var e=[];return r.edit&&e.push('data-edit=\"'+r.edit+'\"'),r.align&&e.push('align=\"'+r.align+'\"'),r.templet&&e.push('data-content=\"'+v+'\"'),r.toolbar&&e.push('data-off=\"true\"'),r.event&&e.push('lay-event=\"'+r.event+'\"'),r.style&&e.push('style=\"'+r.style+'\"'),r.minWidth&&e.push('data-minwidth=\"'+r.minWidth+'\"'),e.join(\" \")}()+' class=\"'+function(){var e=[];return r.hide&&e.push(f),r.field||e.push(\"layui-table-col-special\"),e.join(\" \")}()+'\">','<div class=\"layui-table-cell laytable-cell-'+function(){return\"normal\"===r.type?h:h+\" laytable-cell-\"+r.type}()+'\">'+function(){var n=t.extend(!0,{LAY_INDEX:g},l),o=d.config.checkName;switch(r.type){case\"checkbox\":return'<input type=\"checkbox\" name=\"layTableCheckbox\" lay-skin=\"primary\" '+function(){return r[o]?(l[o]=r[o],r[o]?\"checked\":\"\"):n[o]?\"checked\":\"\"}()+\">\";case\"radio\":return n[o]&&(e=a),'<input type=\"radio\" name=\"layTableRadio_'+s.index+'\" '+(n[o]?\"checked\":\"\")+' lay-type=\"layTableRadio\">';case\"numbers\":return g}return r.toolbar?i(t(r.toolbar).html()||\"\").render(n):u(r,v,n)}(),\"</div></td>\"].join(\"\");o.push(m),r.fixed&&\"right\"!==r.fixed&&y.push(m),\"right\"===r.fixed&&p.push(m)}}),h.push('<tr data-index=\"'+a+'\">'+o.join(\"\")+\"</tr>\"),v.push('<tr data-index=\"'+a+'\">'+y.join(\"\")+\"</tr>\"),m.push('<tr data-index=\"'+a+'\">'+p.join(\"\")+\"</tr>\"))}),c.layBody.scrollTop(0),c.layMain.find(\".\"+p).remove(),c.layMain.find(\"tbody\").html(h.join(\"\")),c.layFixLeft.find(\"tbody\").html(v.join(\"\")),c.layFixRight.find(\"tbody\").html(m.join(\"\")),c.renderForm(),\"number\"==typeof e&&c.setThisRowChecked(e),c.syncCheckAll(),c.haveInit?c.scrollPatch():setTimeout(function(){c.scrollPatch()},50),c.haveInit=!0,l.close(c.tipsIndex),s.HAS_SET_COLS_PATCH||c.setColsPatch(),void(s.HAS_SET_COLS_PATCH=!0))};return d.cache[c.key]=y,c.layPage[0==o||0===y.length&&1==n?\"addClass\":\"removeClass\"](f),r?g():0===y.length?(c.renderForm(),c.errorView(s.text.none)):(c.layFixed.removeClass(f),g(),c.renderTotal(y),void(s.page&&(s.page=t.extend({elem:\"layui-table-page\"+s.index,count:o,limit:s.limit,limits:s.limits||[10,20,30,40,50,60,70,80,90],groups:3,layout:[\"prev\",\"page\",\"next\",\"skip\",\"count\",\"limit\"],prev:'<i class=\"layui-icon\">&#xe603;</i>',next:'<i class=\"layui-icon\">&#xe602;</i>',jump:function(e,t){t||(c.page=e.curr,s.limit=e.limit,c.pullData(e.curr))}},s.page),s.page.count=o,a.render(s.page))))},I.prototype.renderTotal=function(e){var t=this,i=t.config,a={};if(i.totalRow){layui.each(e,function(e,i){0!==i.length&&t.eachCols(function(e,t){var l=t.field||e,n=i[l];t.totalRow&&(a[l]=(a[l]||0)+(parseFloat(n)||0))})});var l=[];t.eachCols(function(e,t){var n=t.field||e,o=['<td data-field=\"'+n+'\" data-key=\"'+i.index+\"-\"+t.key+'\" '+function(){var e=[];return t.align&&e.push('align=\"'+t.align+'\"'),t.style&&e.push('style=\"'+t.style+'\"'),t.minWidth&&e.push('data-minwidth=\"'+t.minWidth+'\"'),e.join(\" \")}()+' class=\"'+function(){var e=[];return t.hide&&e.push(f),t.field||e.push(\"layui-table-col-special\"),e.join(\" \")}()+'\">','<div class=\"layui-table-cell laytable-cell-'+function(){var e=i.index+\"-\"+t.key;return\"normal\"===t.type?e:e+\" laytable-cell-\"+t.type}()+'\">'+function(){var e=t.totalRowText||\"\";return t.totalRow?parseFloat(a[n]).toFixed(2)||e:e}(),\"</div></td>\"].join(\"\");l.push(o)}),t.layTotal.find(\"tbody\").html(\"<tr>\"+l.join(\"\")+\"</tr>\")}},I.prototype.getColElem=function(e,t){var i=this,a=i.config;return e.eq(0).find(\".laytable-cell-\"+(a.index+\"-\"+t)+\":eq(0)\")},I.prototype.renderForm=function(e){n.render(e,\"LAY-table-\"+this.index)},I.prototype.setThisRowChecked=function(e){var t=this,i=(t.config,\"layui-table-click\"),a=t.layBody.find('tr[data-index=\"'+e+'\"]');a.addClass(i).siblings(\"tr\").removeClass(i)},I.prototype.sort=function(e,i,a,l){var n,r,c=this,s={},u=c.config,h=u.elem.attr(\"lay-filter\"),f=d.cache[c.key];\"string\"==typeof e&&c.layHeader.find(\"th\").each(function(i,a){var l=t(this),o=l.data(\"field\");if(o===e)return e=l,n=o,!1});try{var n=n||e.data(\"field\"),p=e.data(\"key\");if(c.sortKey&&!a&&n===c.sortKey.field&&i===c.sortKey.sort)return;var v=c.layHeader.find(\"th .laytable-cell-\"+p).find(S);c.layHeader.find(\"th\").find(S).removeAttr(\"lay-sort\"),v.attr(\"lay-sort\",i||null),c.layFixed.find(\"th\")}catch(m){return o.error(\"Table modules: Did not match to field\")}c.sortKey={field:n,sort:i},u.autoSort&&(\"asc\"===i?r=layui.sort(f,n):\"desc\"===i?r=layui.sort(f,n,!0):(r=layui.sort(f,d.config.indexName),delete c.sortKey)),s[u.response.dataName]=r||f,c.renderData(s,c.page,c.count,!0),l&&layui.event.call(e,y,\"sort(\"+h+\")\",{field:n,type:i})},I.prototype.loading=function(e){var i=this,a=i.config;a.loading&&(e?(i.layInit&&i.layInit.remove(),delete i.layInit,i.layBox.find(b).remove()):(i.layInit=t(['<div class=\"layui-table-init\">','<i class=\"layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop\"></i>',\"</div>\"].join(\"\")),i.layBox.append(i.layInit)))},I.prototype.setCheckData=function(e,t){var i=this,a=i.config,l=d.cache[i.key];l[e]&&l[e].constructor!==Array&&(l[e][a.checkName]=t)},I.prototype.syncCheckAll=function(){var e=this,t=e.config,i=e.layHeader.find('input[name=\"layTableCheckbox\"]'),a=function(i){return e.eachCols(function(e,a){\"checkbox\"===a.type&&(a[t.checkName]=i)}),i};i[0]&&(d.checkStatus(e.key).isAll?(i[0].checked||(i.prop(\"checked\",!0),e.renderForm(\"checkbox\")),a(!0)):(i[0].checked&&(i.prop(\"checked\",!1),e.renderForm(\"checkbox\")),a(!1)))},I.prototype.getCssRule=function(e,t){var i=this,a=i.elem.find(\"style\")[0],l=a.sheet||a.styleSheet||{},n=l.cssRules||l.rules;layui.each(n,function(i,a){if(a.selectorText===\".laytable-cell-\"+e)return t(a),!0})},I.prototype.fullSize=function(){var e,t=this,i=t.config,a=i.height;t.fullHeightGap&&(a=R.height()-t.fullHeightGap,a<135&&(a=135),t.elem.css(\"height\",a)),a&&(e=parseFloat(a)-(t.layHeader.outerHeight()||38),i.toolbar&&(e-=t.layTool.outerHeight()||50),i.totalRow&&(e-=t.layTotal.outerHeight()||40),i.page&&(e-=t.layPage.outerHeight()||41),t.layMain.css(\"height\",e-2))},I.prototype.getScrollWidth=function(e){var t=0;return e?t=e.offsetWidth-e.clientWidth:(e=document.createElement(\"div\"),e.style.width=\"100px\",e.style.height=\"100px\",e.style.overflowY=\"scroll\",document.body.appendChild(e),t=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),t},I.prototype.scrollPatch=function(){var e=this,i=e.layMain.children(\"table\"),a=e.layMain.width()-e.layMain.prop(\"clientWidth\"),l=e.layMain.height()-e.layMain.prop(\"clientHeight\"),n=(e.getScrollWidth(e.layMain[0]),i.outerWidth()-e.layMain.width()),o=function(e){if(a&&l){if(e=e.eq(0),!e.find(\".layui-table-patch\")[0]){var i=t('<th class=\"layui-table-patch\"><div class=\"layui-table-cell\"></div></th>');i.find(\"div\").css({width:a}),e.find(\"tr\").append(i)}}else e.find(\".layui-table-patch\").remove()};o(e.layHeader),o(e.layTotal);var r=e.layMain.height(),d=r-l;e.layFixed.find(k).css(\"height\",i.height()>=d?d:\"auto\"),e.layFixRight[n>0?\"removeClass\":\"addClass\"](f),e.layFixRight.css(\"right\",a-1)},I.prototype.events=function(){var e,a=this,o=a.config,c=t(\"body\"),s={},u=a.layHeader.find(\"th\"),h=\".layui-table-cell\",p=o.elem.attr(\"lay-filter\");a.layTool.on(\"click\",\"*[lay-event]\",function(e){var i=t(this),c=i.attr(\"lay-event\"),s=function(e){var l=t(e.list),n=t('<ul class=\"layui-table-tool-panel\"></ul>');n.html(l),o.height&&n.css(\"max-height\",o.height-(a.layTool.outerHeight()||50)),i.find(\".layui-table-tool-panel\")[0]||i.append(n),a.renderForm(),n.on(\"click\",function(e){layui.stope(e)}),e.done&&e.done(n,l)};switch(layui.stope(e),F.trigger(\"table.tool.panel.remove\"),l.close(a.tipsIndex),c){case\"LAYTABLE_COLS\":s({list:function(){var e=[];return a.eachCols(function(t,i){i.field&&\"normal\"==i.type&&e.push('<li><input type=\"checkbox\" name=\"'+i.field+'\" data-key=\"'+i.key+'\" data-parentkey=\"'+(i.parentKey||\"\")+'\" lay-skin=\"primary\" '+(i.hide?\"\":\"checked\")+' title=\"'+(i.title||i.field)+'\" lay-filter=\"LAY_TABLE_TOOL_COLS\"></li>')}),e.join(\"\")}(),done:function(){n.on(\"checkbox(LAY_TABLE_TOOL_COLS)\",function(e){var i=t(e.elem),l=this.checked,n=i.data(\"key\"),r=i.data(\"parentkey\");layui.each(o.cols,function(e,t){layui.each(t,function(t,i){if(e+\"-\"+t===n){var d=i.hide;i.hide=!l,a.elem.find('*[data-key=\"'+o.index+\"-\"+n+'\"]')[l?\"removeClass\":\"addClass\"](f),d!=i.hide&&a.setParentCol(!l,r),a.resize()}})})})}});break;case\"LAYTABLE_EXPORT\":r.ie?l.tips(\"导出功能不支持 IE，请用 Chrome 等高级浏览器导出\",this,{tips:3}):s({list:function(){return['<li data-type=\"csv\">导出到 Csv 文件</li>','<li data-type=\"xls\">导出到 Excel 文件</li>'].join(\"\")}(),done:function(e,i){i.on(\"click\",function(){var e=t(this).data(\"type\");d.exportFile(o.id,null,e)})}});break;case\"LAYTABLE_PRINT\":var u=window.open(\"打印窗口\",\"_blank\"),h=[\"<style>\",\"body{font-size: 12px; color: #666;}\",\"table{width: 100%; border-collapse: collapse; border-spacing: 0;}\",\"th,td{line-height: 20px; padding: 9px 15px; border: 1px solid #ccc; text-align: left; font-size: 12px; color: #666;}\",\"a{color: #666; text-decoration:none;}\",\"*.layui-hide{display: none}\",\"</style>\"].join(\"\"),v=t(a.layHeader.html());v.append(a.layMain.find(\"table\").html()),v.append(a.layTotal.find(\"table\").html()),v.find(\"th.layui-table-patch\").remove(),v.find(\".layui-table-col-special\").remove(),u.document.write(h+v.prop(\"outerHTML\")),u.document.close(),u.print(),u.close()}layui.event.call(this,y,\"toolbar(\"+p+\")\",t.extend({event:c,config:o},{}))}),u.on(\"mousemove\",function(e){var i=t(this),a=i.offset().left,l=e.clientX-a;i.data(\"unresize\")||s.resizeStart||(s.allowResize=i.width()-l<=10,c.css(\"cursor\",s.allowResize?\"col-resize\":\"\"))}).on(\"mouseleave\",function(){t(this);s.resizeStart||c.css(\"cursor\",\"\")}).on(\"mousedown\",function(e){var i=t(this);if(s.allowResize){var l=i.data(\"key\");e.preventDefault(),s.resizeStart=!0,s.offset=[e.clientX,e.clientY],a.getCssRule(l,function(e){var t=e.style.width||i.outerWidth();s.rule=e,s.ruleWidth=parseFloat(t),s.minWidth=i.data(\"minwidth\")||o.cellMinWidth})}}),F.on(\"mousemove\",function(t){if(s.resizeStart){if(t.preventDefault(),s.rule){var i=s.ruleWidth+t.clientX-s.offset[0];i<s.minWidth&&(i=s.minWidth),s.rule.style.width=i+\"px\",l.close(a.tipsIndex)}e=1}}).on(\"mouseup\",function(t){s.resizeStart&&(s={},c.css(\"cursor\",\"\"),a.scrollPatch()),2===e&&(e=null)}),u.on(\"click\",function(i){var l,n=t(this),o=n.find(S),r=o.attr(\"lay-sort\");return o[0]&&1!==e?(l=\"asc\"===r?\"desc\":\"desc\"===r?null:\"asc\",void a.sort(n,l,null,!0)):e=2}).find(S+\" .layui-edge \").on(\"click\",function(e){var i=t(this),l=i.index(),n=i.parents(\"th\").eq(0).data(\"field\");layui.stope(e),0===l?a.sort(n,\"asc\",null,!0):a.sort(n,\"desc\",null,!0)});var v=function(e){var l=t(this),n=l.parents(\"tr\").eq(0).data(\"index\"),o=a.layBody.find('tr[data-index=\"'+n+'\"]'),r=d.cache[a.key]||[];return r=r[n]||{},t.extend({tr:o,data:d.clearCacheKey(r),del:function(){d.cache[a.key][n]=[],o.remove(),a.scrollPatch()},update:function(e){e=e||{},layui.each(e,function(e,l){if(e in r){var n,d=o.children('td[data-field=\"'+e+'\"]');r[e]=l,a.eachCols(function(t,i){i.field==e&&i.templet&&(n=i.templet)}),d.children(h).html(function(){return n?function(){return\"function\"==typeof n?n(r):i(t(n).html()||l).render(r)}():l}()),d.data(\"content\",l)}})}},e)};a.elem.on(\"click\",'input[name=\"layTableCheckbox\"]+',function(){var e=t(this).prev(),i=a.layBody.find('input[name=\"layTableCheckbox\"]'),l=e.parents(\"tr\").eq(0).data(\"index\"),n=e[0].checked,o=\"layTableAllChoose\"===e.attr(\"lay-filter\");o?(i.each(function(e,t){t.checked=n,a.setCheckData(e,n)}),a.syncCheckAll(),a.renderForm(\"checkbox\")):(a.setCheckData(l,n),a.syncCheckAll()),layui.event.call(e[0],y,\"checkbox(\"+p+\")\",v.call(e[0],{checked:n,type:o?\"all\":\"one\"}))}),a.elem.on(\"click\",'input[lay-type=\"layTableRadio\"]+',function(){var e=t(this).prev(),i=e[0].checked,l=d.cache[a.key],n=e.parents(\"tr\").eq(0).data(\"index\");layui.each(l,function(e,t){n===e?t.LAY_CHECKED=!0:delete t.LAY_CHECKED}),a.setThisRowChecked(n),layui.event.call(this,y,\"radio(\"+p+\")\",v.call(this,{checked:i}))}),a.layBody.on(\"mouseenter\",\"tr\",function(){var e=t(this),i=e.index();e.data(\"off\")||a.layBody.find(\"tr:eq(\"+i+\")\").addClass(_)}).on(\"mouseleave\",\"tr\",function(){var e=t(this),i=e.index();e.data(\"off\")||a.layBody.find(\"tr:eq(\"+i+\")\").removeClass(_)}).on(\"click\",\"tr\",function(){m.call(this,\"row\")}).on(\"dblclick\",\"tr\",function(){m.call(this,\"rowDouble\")});var m=function(e){var i=t(this);i.data(\"off\")||layui.event.call(this,y,e+\"(\"+p+\")\",v.call(i.children(\"td\")[0]))};a.layBody.on(\"change\",\".\"+W,function(){var e=t(this),i=this.value,l=e.parent().data(\"field\"),n=e.parents(\"tr\").eq(0).data(\"index\"),o=d.cache[a.key][n];o[l]=i,layui.event.call(this,y,\"edit(\"+p+\")\",v.call(this,{value:i,field:l}))}).on(\"blur\",\".\"+W,function(){var e,l=t(this),n=this,o=l.parent().data(\"field\"),r=l.parents(\"tr\").eq(0).data(\"index\"),c=d.cache[a.key][r];a.eachCols(function(t,i){i.field==o&&i.templet&&(e=i.templet)}),l.siblings(h).html(function(a){return e?function(){return\"function\"==typeof e?e(c):i(t(e).html()||n.value).render(c)}():a}(n.value)),l.parent().data(\"content\",n.value),l.remove()}),a.layBody.on(\"click\",\"td\",function(e){var i=t(this),a=(i.data(\"field\"),i.data(\"edit\")),l=i.children(h);if(!i.data(\"off\")&&a){var n=t('<input class=\"layui-input '+W+'\">');return n[0].value=i.data(\"content\")||l.text(),i.find(\".\"+W)[0]||i.append(n),n.focus(),void layui.stope(e)}}).on(\"mouseenter\",\"td\",function(){b.call(this)}).on(\"mouseleave\",\"td\",function(){b.call(this,\"hide\")});var g=\"layui-table-grid-down\",b=function(e){var i=t(this),a=i.children(h);if(!i.data(\"off\"))if(e)i.find(\".layui-table-grid-down\").remove();else if(a.prop(\"scrollWidth\")>a.outerWidth()){if(a.find(\".\"+g)[0])return;i.append('<div class=\"'+g+'\"><i class=\"layui-icon layui-icon-down\"></i></div>')}};a.layBody.on(\"click\",\".\"+g,function(e){var i=t(this),n=i.parent(),d=n.children(h);a.tipsIndex=l.tips(['<div class=\"layui-table-tips-main\" style=\"margin-top: -'+(d.height()+16)+\"px;\"+function(){return\"sm\"===o.size?\"padding: 4px 15px; font-size: 12px;\":\"lg\"===o.size?\"padding: 14px 15px;\":\"\"}()+'\">',d.html(),\"</div>\",'<i class=\"layui-icon layui-table-tips-c layui-icon-close\"></i>'].join(\"\"),d[0],{tips:[3,\"\"],time:-1,anim:-1,maxWidth:r.ios||r.android?300:a.elem.width()/2,isOutAnim:!1,skin:\"layui-table-tips\",success:function(e,t){e.find(\".layui-table-tips-c\").on(\"click\",function(){l.close(t)})}}),layui.stope(e)}),a.layBody.on(\"click\",\"*[lay-event]\",function(){var e=t(this),i=e.parents(\"tr\").eq(0).data(\"index\");layui.event.call(this,y,\"tool(\"+p+\")\",v.call(this,{event:e.attr(\"lay-event\")})),a.setThisRowChecked(i)}),a.layMain.on(\"scroll\",function(){var e=t(this),i=e.scrollLeft(),n=e.scrollTop();a.layHeader.scrollLeft(i),a.layTotal.scrollLeft(i),a.layFixed.find(k).scrollTop(n),l.close(a.tipsIndex)}),F.on(\"click\",function(){F.trigger(\"table.remove.tool.panel\")}),F.on(\"table.remove.tool.panel\",function(){t(\".layui-table-tool-panel\").remove()}),R.on(\"resize\",function(){a.resize()})},d.init=function(e,i){i=i||{};var a=this,l=t(e?'table[lay-filter=\"'+e+'\"]':h+\"[lay-data]\"),n=\"Table element property lay-data configuration item has a syntax error: \";return l.each(function(){var a=t(this),l=a.attr(\"lay-data\");try{l=new Function(\"return \"+l)()}catch(r){o.error(n+l)}var c=[],s=t.extend({elem:this,cols:[],data:[],skin:a.attr(\"lay-skin\"),size:a.attr(\"lay-size\"),even:\"string\"==typeof a.attr(\"lay-even\")},d.config,i,l);e&&a.hide(),a.find(\"thead>tr\").each(function(e){s.cols[e]=[],t(this).children().each(function(i){var a=t(this),l=a.attr(\"lay-data\");try{l=new Function(\"return \"+l)()}catch(r){return o.error(n+l)}var d=t.extend({title:a.text(),colspan:a.attr(\"colspan\")||0,rowspan:a.attr(\"rowspan\")||0},l);d.colspan<2&&c.push(d),s.cols[e].push(d)})}),a.find(\"tbody>tr\").each(function(e){var i=t(this),a={};i.children(\"td\").each(function(e,i){var l=t(this),n=l.data(\"field\");if(n)return a[n]=l.html()}),layui.each(c,function(e,t){var l=i.children(\"td\").eq(e);a[t.field]=l.html()}),s.data[e]=a}),d.render(s)}),a},c.that={},c.config={},d.eachCols=function(e,i,a){var l=c.config[e]||{},n=[],o=0;a=t.extend(!0,[],a||l.cols),layui.each(a,function(e,t){layui.each(t,function(t,i){if(i.colGroup){var l=0;o++,i.CHILD_COLS=[],layui.each(a[e+1],function(e,t){t.PARENT_COL_INDEX||l>1&&l==i.colspan||(t.PARENT_COL_INDEX=o,i.CHILD_COLS.push(t),l+=parseInt(t.colspan>1?t.colspan:1))})}i.PARENT_COL_INDEX||n.push(i)})});var r=function(e){layui.each(e||n,function(e,t){return t.CHILD_COLS?r(t.CHILD_COLS):void(\"function\"==typeof i&&i(e,t))})};r()},d.checkStatus=function(e){var t=0,i=0,a=[],l=d.cache[e]||[];return layui.each(l,function(e,l){return l.constructor===Array?void i++:void(l[d.config.checkName]&&(t++,a.push(d.clearCacheKey(l))))}),{data:a,isAll:!!l.length&&t===l.length-i}},d.exportFile=function(e,t,i){t=t||d.clearCacheKey(d.cache[e]),i=i||\"csv\";var a=c.config[e]||{},l={csv:\"text/csv\",xls:\"application/vnd.ms-excel\"}[i],n=document.createElement(\"a\");return r.ie?o.error(\"IE_NOT_SUPPORT_EXPORTS\"):(n.href=\"data:\"+l+\";charset=utf-8,\\ufeff\"+encodeURIComponent(function(){var i=[],a=[];return layui.each(t,function(t,l){var n=[];\"object\"==typeof e?(layui.each(e,function(e,a){0==t&&i.push(a||\"\")}),layui.each(d.clearCacheKey(l),function(e,t){n.push('\"'+(t||\"\")+'\"')})):d.eachCols(e,function(e,a){a.field&&\"normal\"==a.type&&!a.hide&&(0==t&&i.push(a.title||\"\"),n.push('\"'+u(a,l[a.field],l,\"text\")+'\"'))}),a.push(n.join(\",\"))}),i.join(\",\")+\"\\r\\n\"+a.join(\"\\r\\n\")}()),n.download=(a.title||\"table_\"+(a.index||\"\"))+\".\"+i,document.body.appendChild(n),n.click(),void document.body.removeChild(n))},d.resize=function(e){if(e){var t=s(e);if(!t)return;c.that[e].resize()}else layui.each(c.that,function(){this.resize()})},d.reload=function(e,t){var i=s(e);if(i){var a=c.that[e];return a.reload(t),c.call(a)}},d.render=function(e){var t=new I(e);return c.call(t)},d.clearCacheKey=function(e){return e=t.extend({},e),delete e[d.config.checkName],delete e[d.config.indexName],e},d.init(),e(y,d)});layui.define(\"jquery\",function(e){\"use strict\";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t=\"carousel\",a=\"layui-this\",l=\">*[carousel-item]>*\",o=\"layui-carousel-left\",r=\"layui-carousel-right\",d=\"layui-carousel-prev\",s=\"layui-carousel-next\",u=\"layui-carousel-arrow\",c=\"layui-carousel-ind\",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:\"600px\",height:\"280px\",full:!1,arrow:\"hover\",indicator:\"inside\",autoplay:!0,interval:3e3,anim:\"\",trigger:\"click\",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:\"fixed\",width:\"100%\",height:\"100%\",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr(\"lay-anim\",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['<button class=\"layui-icon '+u+'\" lay-type=\"sub\">'+(\"updown\"===n.anim?\"&#xe619;\":\"&#xe603;\")+\"</button>\",'<button class=\"layui-icon '+u+'\" lay-type=\"add\">'+(\"updown\"===n.anim?\"&#xe61a;\":\"&#xe602;\")+\"</button>\"].join(\"\"));n.elem.attr(\"lay-arrow\",n.arrow),n.elem.find(\".\"+u)[0]&&n.elem.find(\".\"+u).remove(),n.elem.append(t),t.on(\"click\",function(){var n=i(this),t=n.attr(\"lay-type\");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['<div class=\"'+c+'\"><ul>',function(){var i=[];return layui.each(e.elemItem,function(e){i.push(\"<li\"+(n.index===e?' class=\"layui-this\"':\"\")+\"></li>\")}),i.join(\"\")}(),\"</ul></div>\"].join(\"\"));n.elem.attr(\"lay-indicator\",n.indicator),n.elem.find(\".\"+c)[0]&&n.elem.find(\".\"+c).remove(),n.elem.append(t),\"updown\"===n.anim&&t.css(\"margin-top\",-(t.height()/2)),t.find(\"li\").on(\"hover\"===n.trigger?\"mouseover\":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide(\"add\",a-n.index):a<n.index&&e.slide(\"sub\",n.index-a)})},m.prototype.slide=function(e,i){var n=this,l=n.elemItem,u=n.config,c=u.index,m=u.elem.attr(\"lay-filter\");n.haveSlide||(\"sub\"===e?(n.subIndex(i),l.eq(u.index).addClass(d),setTimeout(function(){l.eq(c).addClass(r),l.eq(u.index).addClass(r)},50)):(n.addIndex(i),l.eq(u.index).addClass(s),setTimeout(function(){l.eq(c).addClass(o),l.eq(u.index).addClass(o)},50)),setTimeout(function(){l.removeClass(a+\" \"+d+\" \"+s+\" \"+o+\" \"+r),l.eq(u.index).addClass(a),n.haveSlide=!1},300),n.elemInd.find(\"li\").eq(u.index).addClass(a).siblings().removeClass(a),n.haveSlide=!0,layui.event.call(this,t,\"change(\"+m+\")\",{index:u.index,prevIndex:c,item:l.eq(u.index)}))},m.prototype.events=function(){var e=this,i=e.config;i.elem.data(\"haveEvents\")||(i.elem.on(\"mouseenter\",function(){clearInterval(e.timer)}).on(\"mouseleave\",function(){e.autoplay()}),i.elem.data(\"haveEvents\",!0))},n.render=function(e){var i=new m(e);return i},e(t,n)});layui.define(\"jquery\",function(e){\"use strict\";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n=\"rate\",t=\"layui-rate\",o=\"layui-icon-rate\",s=\"layui-icon-rate-solid\",u=\"layui-icon-rate-half\",r=\"layui-icon-rate-solid layui-icon-rate-half\",c=\"layui-icon-rate-solid layui-icon-rate\",f=\"layui-icon-rate layui-icon-rate-half\",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:\"\"},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style=\"color: '+i.theme+';\"':\"\";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='<ul class=\"layui-rate\" '+(i.readonly?\"readonly\":\"\")+\">\",u=1;u<=i.length;u++){var r='<li class=\"layui-inline\"><i class=\"layui-icon '+(u>Math.floor(i.value)?o:s)+'\" '+l+\"></i></li>\";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'<li><i class=\"layui-icon layui-icon-rate-half\" '+l+\"></i></li>\":n+=r}n+=\"</ul>\"+(i.text?'<span class=\"layui-inline\">'+i.value+\"星\":\"\")+\"</span>\";var c=i.elem,f=c.next(\".\"+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next(\"span\"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass(\"layui-inline\"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find(\"i\").width();l.children(\"li\").each(function(e){var t=e+1,v=a(this);v.on(\"click\",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next(\"span\").text(i.value+\"星\"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on(\"mousemove\",function(e){if(l.find(\"i\").each(function(){a(this).addClass(o).removeClass(r)}),l.find(\"i:lt(\"+t+\")\").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children(\"i\").addClass(u).removeClass(s)}}),v.on(\"mouseleave\",function(){l.find(\"i\").each(function(){a(this).addClass(o).removeClass(r)}),l.find(\"i:lt(\"+Math.floor(i.value)+\")\").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children(\"li:eq(\"+Math.floor(i.value)+\")\").children(\"i\").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});layui.define(\"jquery\",function(t){\"use strict\";var e=layui.$,i={fixbar:function(t){var i,n,a=\"layui-fixbar\",o=\"layui-fixbar-top\",r=e(document),l=e(\"body\");t=e.extend({showHeight:200},t),t.bar1=t.bar1===!0?\"&#xe606;\":t.bar1,t.bar2=t.bar2===!0?\"&#xe607;\":t.bar2,t.bgcolor=t.bgcolor?\"background-color:\"+t.bgcolor:\"\";var c=[t.bar1,t.bar2,\"&#xe604;\"],g=e(['<ul class=\"'+a+'\">',t.bar1?'<li class=\"layui-icon\" lay-type=\"bar1\" style=\"'+t.bgcolor+'\">'+c[0]+\"</li>\":\"\",t.bar2?'<li class=\"layui-icon\" lay-type=\"bar2\" style=\"'+t.bgcolor+'\">'+c[1]+\"</li>\":\"\",'<li class=\"layui-icon '+o+'\" lay-type=\"top\" style=\"'+t.bgcolor+'\">'+c[2]+\"</li>\",\"</ul>\"].join(\"\")),s=g.find(\".\"+o),u=function(){var e=r.scrollTop();e>=t.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};e(\".\"+a)[0]||(\"object\"==typeof t.css&&g.css(t.css),l.append(g),u(),g.find(\"li\").on(\"click\",function(){var i=e(this),n=i.attr(\"lay-type\");\"top\"===n&&e(\"html,body\").animate({scrollTop:0},200),t.click&&t.click.call(this,n)}),r.on(\"scroll\",function(){clearTimeout(n),n=setTimeout(function(){u()},100)}))},countdown:function(t,e,i){var n=this,a=\"function\"==typeof e,o=new Date(t).getTime(),r=new Date(!e||a?(new Date).getTime():e).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=e);var g=setTimeout(function(){n.countdown(t,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],e,g),l<=0&&clearTimeout(g),g},timeAgo:function(t,e){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(t).getTime();return a>6912e5?(a=new Date(t),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),e||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join(\"-\")+\" \"+n[1].join(\":\")):a>=864e5?(a/1e3/60/60/24|0)+\"天前\":a>=36e5?(a/1e3/60/60|0)+\"小时前\":a>=12e4?(a/1e3/60|0)+\"分钟前\":a<0?\"未来\":\"刚刚\"},digit:function(t,e){var i=\"\";t=String(t),e=e||2;for(var n=t.length;n<e;n++)i+=\"0\";return t<Math.pow(10,e)?i+(0|t):t},toDateString:function(t,e){var i=this,n=new Date(t||new Date),a=[i.digit(n.getFullYear(),4),i.digit(n.getMonth()+1),i.digit(n.getDate())],o=[i.digit(n.getHours()),i.digit(n.getMinutes()),i.digit(n.getSeconds())];return e=e||\"yyyy-MM-dd HH:mm:ss\",e.replace(/yyyy/g,a[0]).replace(/MM/g,a[1]).replace(/dd/g,a[2]).replace(/HH/g,o[0]).replace(/mm/g,o[1]).replace(/ss/g,o[2])},escape:function(t){return String(t||\"\").replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")},event:function(t,n,a){n=i.event[t]=e.extend(!0,i.event[t],n)||{},e(\"body\").on(a||\"click\",\"*[\"+t+\"]\",function(){var i=e(this),a=i.attr(t);n[a]&&n[a].call(this,i)})}};!function(t,e,i){\"$:nomunge\";function n(){a=e[l](function(){o.each(function(){var e=t(this),i=e.width(),n=e.height(),a=t.data(this,g);(i!==a.w||n!==a.h)&&e.trigger(c,[a.w=i,a.h=n])}),n()},r[s])}var a,o=t([]),r=t.resize=t.extend(t.resize,{}),l=\"setTimeout\",c=\"resize\",g=c+\"-special-event\",s=\"delay\",u=\"throttleWindow\";r[s]=250,r[u]=!0,t.event.special[c]={setup:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.add(e),t.data(this,g,{w:e.width(),h:e.height()}),1===o.length&&n()},teardown:function(){if(!r[u]&&this[l])return!1;var e=t(this);o=o.not(e),e.removeData(g),o.length||clearTimeout(a)},add:function(e){function n(e,n,o){var r=t(this),l=t.data(this,g)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[u]&&this[l])return!1;var a;return t.isFunction(e)?(a=e,n):(a=e.handler,void(e.handler=n))}}}(e,window),t(\"util\",i)});layui.define(\"jquery\",function(e){\"use strict\";var l=layui.$,o=function(e){},t='<i class=\"layui-anim layui-anim-rotate layui-anim-loop layui-icon \">&#xe63e;</i>';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!(\"isAuto\"in e)||e.isAuto,v=e.end||\"没有更多了\",y=e.scrollElem&&e.scrollElem!==document,d=\"<cite>加载更多</cite>\",h=l('<div class=\"layui-flow-more\"><a href=\"javascript:;\">'+d+\"</a></div>\");f.find(\".layui-flow-more\")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find(\"a\").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find(\"a\").html(t),\"function\"==typeof e.done&&e.done(++c,p)};if(g(),h.find(\"a\").on(\"click\",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+\" img\",scrollElem:e.scrollElem});return s?(m.on(\"scroll\",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop(\"scrollHeight\"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||\"img\",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr(\"src\")){var m=e.attr(\"lay-src\");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr(\"src\",m).removeAttr(\"lay-src\"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;s<t.lazyimg.elem.length;s++){var v=t.lazyimg.elem.eq(s),y=a?function(){return v.offset().top-n.offset().top+m}():v.offset().top;if(c(v,f),i=s,y>u)break}};if(f(),!o){var m;n.on(\"scroll\",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e(\"flow\",new o)});layui.define([\"layer\",\"form\"],function(t){\"use strict\";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n=\"layedit\",o=\"layui-show\",r=\"layui-disabled\",c=function(){var t=this;t.index=0,t.config={tool:[\"strong\",\"italic\",\"underline\",\"del\",\"|\",\"left\",\"center\",\"right\",\"|\",\"link\",\"unlink\",\"face\",\"image\"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r=\"layui-layedit\",c=e(\"string\"==typeof t?\"#\"+t:t),u=\"LAY_layedit_\"+ ++a.index,d=c.next(\".\"+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join(\"\")}(),m=e(['<div class=\"'+r+'\">','<div class=\"layui-unselect layui-layedit-tool\">'+f+\"</div>\",'<div class=\"layui-layedit-iframe\">','<iframe id=\"'+u+'\" name=\"'+u+'\" textarea=\"'+t+'\" frameborder=\"0\"></iframe>',\"</div>\",\"</div>\"].join(\"\"));return l.ie&&l.ie<8?c.removeClass(\"layui-hide\").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass(\"layui-hide\").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e(\"#\"+i[1].attr(\"textarea\"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find(\"iframe\");n.css({height:a.height}).on(\"load\",function(){var o=n.contents(),r=n.prop(\"contentWindow\"),c=o.find(\"head\"),s=e([\"<style>\",\"*{margin: 0; padding: 0;}\",\"body{padding: 10px; line-height: 20px; overflow-x: hidden; word-wrap: break-word; font: 14px Helvetica Neue,Helvetica,PingFang SC,Microsoft YaHei,Tahoma,Arial,sans-serif; -webkit-box-sizing: border-box !important; -moz-box-sizing: border-box !important; box-sizing: border-box !important;}\",\"a{color:#01AAED; text-decoration:none;}a:hover{color:#c00}\",\"p{margin-bottom: 10px;}\",\"img{display: inline-block; border: none; vertical-align: middle;}\",\"pre{margin: 10px 0; padding: 10px; line-height: 20px; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}\",\"</style>\"].join(\"\")),u=o.find(\"body\");c.append(s),u.attr(\"contenteditable\",\"true\").css({\"min-height\":a.height}).html(i.value||\"\"),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e(\"#LAY_layedit_\"+t),a=i.prop(\"contentWindow\");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on(\"keydown\",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if(\"pre\"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg(\"请暂时用shift+enter\"),!1}r.execCommand(\"formatBlock\",!1,\"<p>\")}}),e(n).parents(\"form\").on(\"submit\",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on(\"paste\",function(e){r.execCommand(\"formatBlock\",!1,\"<p>\"),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find(\"*[style]\").each(function(){var t=this.style.textAlign;this.removeAttribute(\"style\"),e(this).css({\"text-align\":t||\"\"})}),t.find(\"table\").addClass(\"layui-table\"),t.find(\"script,link\").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute(\"text\"),l.selection){var r=a.text||i.text;if(\"a\"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop(\"outerHTML\")),a.select()}else{var r=a.toString()||i.text;if(\"a\"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l=\"layedit-tool-active\",n=p(m(a)),o=function(e){return t.find(\".layedit-tool-\"+e)};i&&i[i.hasClass(l)?\"removeClass\":\"addClass\"](l),t.find(\">i\").removeClass(l),o(\"unlink\").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;\"b\"!==t&&\"strong\"!==t||o(\"b\").addClass(l),\"i\"!==t&&\"em\"!==t||o(\"i\").addClass(l),\"u\"===t&&o(\"u\").addClass(l),\"strike\"===t&&o(\"d\").addClass(l),\"p\"===t&&(\"center\"===e?o(\"center\").addClass(l):\"right\"===e?o(\"right\").addClass(l):o(\"left\").addClass(l)),\"a\"===t&&(o(\"link\").addClass(l),o(\"unlink\").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr(\"href\"),target:l.attr(\"target\")},function(e){var a=l[0];\"A\"===a.tagName?a.href=e.url:v.call(t,\"a\",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand(\"unlink\")},face:function(e){x.call(this,function(i){v.call(t,\"img\",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use(\"upload\",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find(\"input\")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,\"img\",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||\"上传失败\")}})})},code:function(e){k.call(o,function(i){v.call(t,\"pre\",{text:i.code,\"lay-lang\":i.lang},e)})},help:function(){i.open({type:2,title:\"帮助\",area:[\"600px\",\"380px\"],shadeClose:!0,shade:.1,skin:\"layui-layer-msg\",content:[\"http://www.layui.com/about/layedit/help.html\",\"no\"]})}},s=a.find(\".layui-layedit-tool\"),u=function(){var i=e(this),a=i.attr(\"layedit-event\"),l=i.attr(\"lay-command\");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand(\"formatBlock\",!1,\"<p>\"),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(\">i\").on(\"mousedown\",function(){var t=e(this),i=t.attr(\"layedit-event\");d.test(i)||u.call(this)}).on(\"click\",function(){var t=e(this),i=t.attr(\"layedit-event\");d.test(i)&&u.call(this)}),o.on(\"click\",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:\"LAY_layedit_link\",area:\"350px\",shade:.05,shadeClose:!0,moveType:1,title:\"超链接\",skin:\"layui-layer-msg\",content:['<ul class=\"layui-form\" style=\"margin: 15px;\">','<li class=\"layui-form-item\">','<label class=\"layui-form-label\" style=\"width: 60px;\">URL</label>','<div class=\"layui-input-block\" style=\"margin-left: 90px\">','<input name=\"url\" lay-verify=\"url\" value=\"'+(t.href||\"\")+'\" autofocus=\"true\" autocomplete=\"off\" class=\"layui-input\">',\"</div>\",\"</li>\",'<li class=\"layui-form-item\">','<label class=\"layui-form-label\" style=\"width: 60px;\">打开方式</label>','<div class=\"layui-input-block\" style=\"margin-left: 90px\">','<input type=\"radio\" name=\"target\" value=\"_self\" class=\"layui-input\" title=\"当前窗口\"'+(\"_self\"!==t.target&&t.target?\"\":\"checked\")+\">\",'<input type=\"radio\" name=\"target\" value=\"_blank\" class=\"layui-input\" title=\"新窗口\" '+(\"_blank\"===t.target?\"checked\":\"\")+\">\",\"</div>\",\"</li>\",'<li class=\"layui-form-item\" style=\"text-align: center;\">','<button type=\"button\" lay-submit lay-filter=\"layedit-link-yes\" class=\"layui-btn\"> 确定 </button>','<button style=\"margin-left: 20px;\" type=\"button\" class=\"layui-btn layui-btn-primary\"> 取消 </button>',\"</li>\",\"</ul>\"].join(\"\"),success:function(t,n){var o=\"submit(layedit-link-yes)\";a.render(\"radio\"),t.find(\".layui-btn-primary\").on(\"click\",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=[\"[微笑]\",\"[嘻嘻]\",\"[哈哈]\",\"[可爱]\",\"[可怜]\",\"[挖鼻]\",\"[吃惊]\",\"[害羞]\",\"[挤眼]\",\"[闭嘴]\",\"[鄙视]\",\"[爱你]\",\"[泪]\",\"[偷笑]\",\"[亲亲]\",\"[生病]\",\"[太开心]\",\"[白眼]\",\"[右哼哼]\",\"[左哼哼]\",\"[嘘]\",\"[衰]\",\"[委屈]\",\"[吐]\",\"[哈欠]\",\"[抱抱]\",\"[怒]\",\"[疑问]\",\"[馋嘴]\",\"[拜拜]\",\"[思考]\",\"[汗]\",\"[困]\",\"[睡]\",\"[钱]\",\"[失望]\",\"[酷]\",\"[色]\",\"[哼]\",\"[鼓掌]\",\"[晕]\",\"[悲伤]\",\"[抓狂]\",\"[黑线]\",\"[阴险]\",\"[怒骂]\",\"[互粉]\",\"[心]\",\"[伤心]\",\"[猪头]\",\"[熊猫]\",\"[兔子]\",\"[ok]\",\"[耶]\",\"[good]\",\"[NO]\",\"[赞]\",\"[来]\",\"[弱]\",\"[草泥马]\",\"[神马]\",\"[囧]\",\"[浮云]\",\"[给力]\",\"[围观]\",\"[威武]\",\"[奥特曼]\",\"[礼物]\",\"[钟]\",\"[话筒]\",\"[蜡烛]\",\"[蛋糕]\"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+\"images/face/\"+t+\".gif\"}),e}();return x.hide=x.hide||function(t){\"face\"!==e(t.target).attr(\"layedit-event\")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('<li title=\"'+e+'\"><img src=\"'+i+'\" alt=\"'+e+'\"></li>')}),'<ul class=\"layui-clear\">'+t.join(\"\")+\"</ul>\"}(),this,{tips:1,time:0,skin:\"layui-box layui-util-face\",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(\".layui-clear>li\").on(\"click\",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off(\"click\",x.hide).on(\"click\",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:\"LAY_layedit_code\",area:\"550px\",shade:.05,shadeClose:!0,moveType:1,title:\"插入代码\",skin:\"layui-layer-msg\",content:['<ul class=\"layui-form layui-form-pane\" style=\"margin: 15px;\">','<li class=\"layui-form-item\">','<label class=\"layui-form-label\">请选择语言</label>','<div class=\"layui-input-block\">','<select name=\"lang\">','<option value=\"JavaScript\">JavaScript</option>','<option value=\"HTML\">HTML</option>','<option value=\"CSS\">CSS</option>','<option value=\"Java\">Java</option>','<option value=\"PHP\">PHP</option>','<option value=\"C#\">C#</option>','<option value=\"Python\">Python</option>','<option value=\"Ruby\">Ruby</option>','<option value=\"Go\">Go</option>',\"</select>\",\"</div>\",\"</li>\",'<li class=\"layui-form-item layui-form-text\">','<label class=\"layui-form-label\">代码</label>','<div class=\"layui-input-block\">','<textarea name=\"code\" lay-verify=\"required\" autofocus=\"true\" class=\"layui-textarea\" style=\"height: 200px;\"></textarea>',\"</div>\",\"</li>\",'<li class=\"layui-form-item\" style=\"text-align: center;\">','<button type=\"button\" lay-submit lay-filter=\"layedit-code-yes\" class=\"layui-btn\"> 确定 </button>','<button style=\"margin-left: 20px;\" type=\"button\" class=\"layui-btn layui-btn-primary\"> 取消 </button>',\"</li>\",\"</ul>\"].join(\"\"),success:function(l,n){var o=\"submit(layedit-code-yes)\";a.render(\"select\"),l.find(\".layui-btn-primary\").on(\"click\",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'<i class=\"layui-icon layedit-tool-html\" title=\"HTML源代码\" lay-command=\"html\" layedit-event=\"html\"\">&#xe64b;</i><span class=\"layedit-tool-mid\"></span>',strong:'<i class=\"layui-icon layedit-tool-b\" title=\"加粗\" lay-command=\"Bold\" layedit-event=\"b\"\">&#xe62b;</i>',italic:'<i class=\"layui-icon layedit-tool-i\" title=\"斜体\" lay-command=\"italic\" layedit-event=\"i\"\">&#xe644;</i>',underline:'<i class=\"layui-icon layedit-tool-u\" title=\"下划线\" lay-command=\"underline\" layedit-event=\"u\"\">&#xe646;</i>',del:'<i class=\"layui-icon layedit-tool-d\" title=\"删除线\" lay-command=\"strikeThrough\" layedit-event=\"d\"\">&#xe64f;</i>',\"|\":'<span class=\"layedit-tool-mid\"></span>',left:'<i class=\"layui-icon layedit-tool-left\" title=\"左对齐\" lay-command=\"justifyLeft\" layedit-event=\"left\"\">&#xe649;</i>',center:'<i class=\"layui-icon layedit-tool-center\" title=\"居中对齐\" lay-command=\"justifyCenter\" layedit-event=\"center\"\">&#xe647;</i>',right:'<i class=\"layui-icon layedit-tool-right\" title=\"右对齐\" lay-command=\"justifyRight\" layedit-event=\"right\"\">&#xe648;</i>',link:'<i class=\"layui-icon layedit-tool-link\" title=\"插入链接\" layedit-event=\"link\"\">&#xe64c;</i>',unlink:'<i class=\"layui-icon layedit-tool-unlink layui-disabled\" title=\"清除链接\" lay-command=\"unlink\" layedit-event=\"unlink\"\">&#xe64d;</i>',face:'<i class=\"layui-icon layedit-tool-face\" title=\"表情\" layedit-event=\"face\"\">&#xe650;</i>',image:'<i class=\"layui-icon layedit-tool-image\" title=\"图片\" layedit-event=\"image\">&#xe64a;<input type=\"file\" name=\"file\"></i>',code:'<i class=\"layui-icon layedit-tool-code\" title=\"插入代码\" layedit-event=\"code\">&#xe64e;</i>',help:'<i class=\"layui-icon layedit-tool-help\" title=\"帮助\" layedit-event=\"help\">&#xe607;</i>'},w=new c;t(n,w)});layui.define(\"jquery\",function(e){\"use strict\";var a=layui.$,l=\"http://www.layui.com/doc/modules/code.html\";e(\"code\",function(e){var t=[];e=e||{},e.elem=a(e.elem||\".layui-code\"),e.about=!(\"about\"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr(\"lay-encode\")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")),c.html('<ol class=\"layui-code-ol\"><li>'+o.replace(/[\\r\\t\\n]+/g,\"</li><li>\")+\"</li></ol>\"),c.find(\">.layui-code-h3\")[0]||c.prepend('<h3 class=\"layui-code-h3\">'+(c.attr(\"lay-title\")||e.title||\"code\")+(e.about?'<a href=\"'+l+'\" target=\"_blank\">layui.code</a>':\"\")+\"</h3>\");var d=c.find(\">.layui-code-ol\");c.addClass(\"layui-box layui-code-view\"),(c.attr(\"lay-skin\")||e.skin)&&c.addClass(\"layui-code-\"+(c.attr(\"lay-skin\")||e.skin)),(d.find(\"li\").length/100|0)>0&&d.css(\"margin-left\",(d.find(\"li\").length/100|0)+\"px\"),(c.attr(\"lay-height\")||e.height)&&d.css(\"max-height\",c.attr(\"lay-height\")||e.height)})})}).addcss(\"modules/code.css\",\"skincodecss\");"
  },
  {
    "path": "lib/layui/layui.js",
    "content": "/** layui-v2.5.4 MIT License By https://www.layui.com */ ;\n! function(e) {\n\t\"use strict\";\n\tvar t = document,\n\t\to = {\n\t\t\tmodules: {},\n\t\t\tstatus: {},\n\t\t\ttimeout: 10,\n\t\t\tevent: {}\n\t\t},\n\t\tn = function() {\n\t\t\tthis.v = \"2.5.4\"\n\t\t},\n\t\tr = function() {\n\t\t\tvar e = t.currentScript ? t.currentScript.src : function() {\n\t\t\t\tfor (var e, o = t.scripts, n = o.length - 1, r = n; r > 0; r--)\n\t\t\t\t\tif (\"interactive\" === o[r].readyState) {\n\t\t\t\t\t\te = o[r].src;\n\t\t\t\t\t\tbreak\n\t\t\t\t\t} return e || o[n].src\n\t\t\t}();\n\t\t\treturn e.substring(0, e.lastIndexOf(\"/\") + 1)\n\t\t}(),\n\t\ti = function(t) {\n\t\t\te.console && console.error && console.error(\"Layui hint: \" + t)\n\t\t},\n\t\ta = \"undefined\" != typeof opera && \"[object Opera]\" === opera.toString(),\n\t\tu = {\n\t\t\tlayer: \"modules/layer\",\n\t\t\tlaydate: \"modules/laydate\",\n\t\t\tlaypage: \"modules/laypage\",\n\t\t\tlaytpl: \"modules/laytpl\",\n\t\t\tlayim: \"modules/layim\",\n\t\t\tlayedit: \"modules/layedit\",\n\t\t\tform: \"modules/form\",\n\t\t\tupload: \"modules/upload\",\n\t\t\ttransfer: \"modules/transfer\",\n\t\t\ttree: \"modules/tree\",\n\t\t\ttable: \"modules/table\",\n\t\t\telement: \"modules/element\",\n\t\t\trate: \"modules/rate\",\n\t\t\tcolorpicker: \"modules/colorpicker\",\n\t\t\tslider: \"modules/slider\",\n\t\t\tcarousel: \"modules/carousel\",\n\t\t\tflow: \"modules/flow\",\n\t\t\tutil: \"modules/util\",\n\t\t\tcode: \"modules/code\",\n\t\t\tjquery: \"modules/jquery\",\n\t\t\tmobile: \"modules/mobile\",\n\t\t\t\"layui.all\": \"../layui.all\",\n\t\t\t// ok-admin自定义模块\n\t\t\tokTab: \"okmodules/okTab\",\n\t\t\tokMenu: \"okmodules/okMenu\",\n\t\t\tokLayer: \"okmodules/okLayer\",\n\t\t\tokUtils: \"okmodules/okUtils\",\n\t\t\tokProgress: \"okmodules/okProgress/okProgress\",\n\t\t\ttreetable: \"okmodules/treetable/treetable\"\n\t\t};\n\tn.prototype.cache = o, n.prototype.define = function(e, t) {\n\t\tvar n = this,\n\t\t\tr = \"function\" == typeof e,\n\t\t\ti = function() {\n\t\t\t\tvar e = function(e, t) {\n\t\t\t\t\tlayui[e] = t, o.status[e] = !0\n\t\t\t\t};\n\t\t\t\treturn \"function\" == typeof t && t(function(n, r) {\n\t\t\t\t\te(n, r), o.callback[n] = function() {\n\t\t\t\t\t\tt(e)\n\t\t\t\t\t}\n\t\t\t\t}), this\n\t\t\t};\n\t\treturn r && (t = e, e = []), !layui[\"layui.all\"] && layui[\"layui.mobile\"] ? i.call(n) : (n.use(e, i), n)\n\t}, n.prototype.use = function(e, n, l) {\n\t\tfunction s(e, t) {\n\t\t\tvar n = \"PLaySTATION 3\" === navigator.platform ? /^complete$/ : /^(complete|loaded)$/;\n\t\t\t(\"load\" === e.type || n.test((e.currentTarget || e.srcElement).readyState)) && (o.modules[f] = t, d.removeChild(v),\n\t\t\t\tfunction r() {\n\t\t\t\t\treturn ++m > 1e3 * o.timeout / 4 ? i(f + \" is not a valid module\") : void(o.status[f] ? c() : setTimeout(r, 4))\n\t\t\t\t}())\n\t\t}\n\n\t\tfunction c() {\n\t\t\tl.push(layui[f]), e.length > 1 ? y.use(e.slice(1), n, l) : \"function\" == typeof n && n.apply(layui, l)\n\t\t}\n\t\tvar y = this,\n\t\t\tp = o.dir = o.dir ? o.dir : r,\n\t\t\td = t.getElementsByTagName(\"head\")[0];\n\t\te = \"string\" == typeof e ? [e] : e, window.jQuery && jQuery.fn.on && (y.each(e, function(t, o) {\n\t\t\t\"jquery\" === o && e.splice(t, 1)\n\t\t}), layui.jquery = layui.$ = jQuery);\n\t\tvar f = e[0],\n\t\t\tm = 0;\n\t\tif (l = l || [], o.host = o.host || (p.match(/\\/\\/([\\s\\S]+?)\\//) || [\"//\" + location.host + \"/\"])[0], 0 === e.length ||\n\t\t\tlayui[\"layui.all\"] && u[f] || !layui[\"layui.all\"] && layui[\"layui.mobile\"] && u[f]) return c(), y;\n\t\tif (o.modules[f]) ! function g() {\n\t\t\treturn ++m > 1e3 * o.timeout / 4 ? i(f + \" is not a valid module\") : void(\"string\" == typeof o.modules[f] && o.status[\n\t\t\t\tf] ? c() : setTimeout(g, 4))\n\t\t}();\n\t\telse {\n\t\t\tvar v = t.createElement(\"script\"),\n\t\t\t\th = (u[f] ? p + \"lay/\" : /^\\{\\/\\}/.test(y.modules[f]) ? \"\" : o.base || \"\") + (y.modules[f] || f) + \".js\";\n\t\t\th = h.replace(/^\\{\\/\\}/, \"\"), v.async = !0, v.charset = \"utf-8\", v.src = h + function() {\n\t\t\t\t\tvar e = o.version === !0 ? o.v || (new Date).getTime() : o.version || \"\";\n\t\t\t\t\treturn e ? \"?v=\" + e : \"\"\n\t\t\t\t}(), d.appendChild(v), !v.attachEvent || v.attachEvent.toString && v.attachEvent.toString().indexOf(\"[native code\") <\n\t\t\t\t0 || a ? v.addEventListener(\"load\", function(e) {\n\t\t\t\t\ts(e, h)\n\t\t\t\t}, !1) : v.attachEvent(\"onreadystatechange\", function(e) {\n\t\t\t\t\ts(e, h)\n\t\t\t\t}), o.modules[f] = h\n\t\t}\n\t\treturn y\n\t}, n.prototype.getStyle = function(t, o) {\n\t\tvar n = t.currentStyle ? t.currentStyle : e.getComputedStyle(t, null);\n\t\treturn n[n.getPropertyValue ? \"getPropertyValue\" : \"getAttribute\"](o)\n\t}, n.prototype.link = function(e, n, r) {\n\t\tvar a = this,\n\t\t\tu = t.createElement(\"link\"),\n\t\t\tl = t.getElementsByTagName(\"head\")[0];\n\t\t\"string\" == typeof n && (r = n);\n\t\tvar s = (r || e).replace(/\\.|\\//g, \"\"),\n\t\t\tc = u.id = \"layuicss-\" + s,\n\t\t\ty = 0;\n\t\treturn u.rel = \"stylesheet\", u.href = e + (o.debug ? \"?v=\" + (new Date).getTime() : \"\"), u.media = \"all\", t.getElementById(\n\t\t\tc) || l.appendChild(u), \"function\" != typeof n ? a : (function p() {\n\t\t\treturn ++y > 1e3 * o.timeout / 100 ? i(e + \" timeout\") : void(1989 === parseInt(a.getStyle(t.getElementById(c),\n\t\t\t\t\"width\")) ? function() {\n\t\t\t\tn()\n\t\t\t}() : setTimeout(p, 100))\n\t\t}(), a)\n\t}, o.callback = {}, n.prototype.factory = function(e) {\n\t\tif (layui[e]) return \"function\" == typeof o.callback[e] ? o.callback[e] : null\n\t}, n.prototype.addcss = function(e, t, n) {\n\t\treturn layui.link(o.dir + \"css/\" + e, t, n)\n\t}, n.prototype.img = function(e, t, o) {\n\t\tvar n = new Image;\n\t\treturn n.src = e, n.complete ? t(n) : (n.onload = function() {\n\t\t\tn.onload = null, \"function\" == typeof t && t(n)\n\t\t}, void(n.onerror = function(e) {\n\t\t\tn.onerror = null, \"function\" == typeof o && o(e)\n\t\t}))\n\t}, n.prototype.config = function(e) {\n\t\te = e || {};\n\t\tfor (var t in e) o[t] = e[t];\n\t\treturn this\n\t}, n.prototype.modules = function() {\n\t\tvar e = {};\n\t\tfor (var t in u) e[t] = u[t];\n\t\treturn e\n\t}(), n.prototype.extend = function(e) {\n\t\tvar t = this;\n\t\te = e || {};\n\t\tfor (var o in e) t[o] || t.modules[o] ? i(\"模块名 \" + o + \" 已被占用\") : t.modules[o] = e[o];\n\t\treturn t\n\t}, n.prototype.router = function(e) {\n\t\tvar t = this,\n\t\t\te = e || location.hash,\n\t\t\to = {\n\t\t\t\tpath: [],\n\t\t\t\tsearch: {},\n\t\t\t\thash: (e.match(/[^#](#.*$)/) || [])[1] || \"\"\n\t\t\t};\n\t\treturn /^#\\//.test(e) ? (e = e.replace(/^#\\//, \"\"), o.href = \"/\" + e, e = e.replace(/([^#])(#.*$)/, \"$1\").split(\"/\") ||\n\t\t\t[], t.each(e, function(e, t) {\n\t\t\t\t/^\\w+=/.test(t) ? function() {\n\t\t\t\t\tt = t.split(\"=\"), o.search[t[0]] = t[1]\n\t\t\t\t}() : o.path.push(t)\n\t\t\t}), o) : o\n\t}, n.prototype.data = function(t, o, n) {\n\t\tif (t = t || \"layui\", n = n || localStorage, e.JSON && e.JSON.parse) {\n\t\t\tif (null === o) return delete n[t];\n\t\t\to = \"object\" == typeof o ? o : {\n\t\t\t\tkey: o\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tvar r = JSON.parse(n[t])\n\t\t\t} catch (i) {\n\t\t\t\tvar r = {}\n\t\t\t}\n\t\t\treturn \"value\" in o && (r[o.key] = o.value), o.remove && delete r[o.key], n[t] = JSON.stringify(r), o.key ? r[o.key] :\n\t\t\t\tr\n\t\t}\n\t}, n.prototype.sessionData = function(e, t) {\n\t\treturn this.data(e, t, sessionStorage)\n\t}, n.prototype.device = function(t) {\n\t\tvar o = navigator.userAgent.toLowerCase(),\n\t\t\tn = function(e) {\n\t\t\t\tvar t = new RegExp(e + \"/([^\\\\s\\\\_\\\\-]+)\");\n\t\t\t\treturn e = (o.match(t) || [])[1], e || !1\n\t\t\t},\n\t\t\tr = {\n\t\t\t\tos: function() {\n\t\t\t\t\treturn /windows/.test(o) ? \"windows\" : /linux/.test(o) ? \"linux\" : /iphone|ipod|ipad|ios/.test(o) ? \"ios\" :\n\t\t\t\t\t\t/mac/.test(o) ? \"mac\" : void 0\n\t\t\t\t}(),\n\t\t\t\tie: function() {\n\t\t\t\t\treturn !!(e.ActiveXObject || \"ActiveXObject\" in e) && ((o.match(/msie\\s(\\d+)/) || [])[1] || \"11\")\n\t\t\t\t}(),\n\t\t\t\tweixin: n(\"micromessenger\")\n\t\t\t};\n\t\treturn t && !r[t] && (r[t] = n(t)), r.android = /android/.test(o), r.ios = \"ios\" === r.os, r\n\t}, n.prototype.hint = function() {\n\t\treturn {\n\t\t\terror: i\n\t\t}\n\t}, n.prototype.each = function(e, t) {\n\t\tvar o, n = this;\n\t\tif (\"function\" != typeof t) return n;\n\t\tif (e = e || [], e.constructor === Object) {\n\t\t\tfor (o in e)\n\t\t\t\tif (t.call(e[o], o, e[o])) break\n\t\t} else\n\t\t\tfor (o = 0; o < e.length && !t.call(e[o], o, e[o]); o++);\n\t\treturn n\n\t}, n.prototype.sort = function(e, t, o) {\n\t\tvar n = JSON.parse(JSON.stringify(e || []));\n\t\treturn t ? (n.sort(function(e, o) {\n\t\t\tvar n = /^-?\\d+$/,\n\t\t\t\tr = e[t],\n\t\t\t\ti = o[t];\n\t\t\treturn n.test(r) && (r = parseFloat(r)), n.test(i) && (i = parseFloat(i)), r && !i ? 1 : !r && i ? -1 : r > i ?\n\t\t\t\t1 : r < i ? -1 : 0\n\t\t}), o && n.reverse(), n) : n\n\t}, n.prototype.stope = function(t) {\n\t\tt = t || e.event;\n\t\ttry {\n\t\t\tt.stopPropagation()\n\t\t} catch (o) {\n\t\t\tt.cancelBubble = !0\n\t\t}\n\t}, n.prototype.onevent = function(e, t, o) {\n\t\treturn \"string\" != typeof e || \"function\" != typeof o ? this : n.event(e, t, null, o)\n\t}, n.prototype.event = n.event = function(e, t, n, r) {\n\t\tvar i = this,\n\t\t\ta = null,\n\t\t\tu = t.match(/\\((.*)\\)$/) || [],\n\t\t\tl = (e + \".\" + t).replace(u[0], \"\"),\n\t\t\ts = u[1] || \"\",\n\t\t\tc = function(e, t) {\n\t\t\t\tvar o = t && t.call(i, n);\n\t\t\t\to === !1 && null === a && (a = !1)\n\t\t\t};\n\t\treturn r ? (o.event[l] = o.event[l] || {}, o.event[l][s] = [r], this) : (layui.each(o.event[l], function(e, t) {\n\t\t\treturn \"{*}\" === s ? void layui.each(t, c) : (\"\" === e && layui.each(t, c), void(s && e === s && layui.each(t, c)))\n\t\t}), a)\n\t}, e.layui = new n\n}(window);\n"
  },
  {
    "path": "lib/zTree_v3/.gitignore",
    "content": "#################\n## Eclipse\n#################\n\n*.pydevproject\n.project\n.metadata\nbin/\ntmp/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n#################\n## Visual Studio\n#################\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Rr]elease/\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.vspscc\n.builds\n*.dotCover\n\n## TODO: If you have NuGet Package Restore enabled, uncomment this\n#packages/\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n\n# Visual Studio profiler\n*.psess\n*.vsp\n\n# ReSharper is a .NET coding add-in\n_ReSharper*\n\n# Installshield output folder\n[Ee]xpress\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish\n\n# Others\n[Bb]in\n[Oo]bj\nsql\nTestResults\n*.Cache\nClientBin\nstylecop.*\n~$*\n*.dbmdl\nGenerated_Code #added for RIA/Silverlight projects\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\n\n\n\n############\n## Windows\n############\n\n# Windows image file caches\nThumbs.db\n\n# Folder config file\nDesktop.ini\n\n\n#############\n## Python\n#############\n\n*.py[co]\n\n# Packages\n*.egg\n*.egg-info\ndist\nbuild\neggs\nparts\nbin\nvar\nsdist\ndevelop-eggs\n.installed.cfg\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\n\n#Translations\n*.mo\n\n#Mr Developer\n.mr.developer.cfg\n\n# Mac crap\n.DS_Store\n"
  },
  {
    "path": "lib/zTree_v3/README.md",
    "content": "jQuery Tree Plugin ---- zTree  \r\n============\r\nlast verson :  3.5.40\r\n\r\n\r\n**Donate to zTree** : http://www.treejs.cn/v3/donate.php\r\n\r\n\r\nzTree API : http://www.treejs.cn/v3/api.php\r\n\r\n\r\nzTree Demo : http://www.treejs.cn/v3/demo.php\r\n\r\n### INSTALL\r\n```\r\nnpm install @ztree/ztree_v3\r\n```\r\n\r\nIntroduction of zTree (简介)\r\n============\r\n* zTree is a multi-functional \"tree plug-ins.\" based on jQuery. The main advantages of zTree includes excellent performance, flexible configuration, and the combination of multiple functions.\r\n(zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。)\r\n\r\n* zTree is a free tree plug-in and uses the MIT license. \r\n(zTree 是开源免费的软件, 使用 MIT 许可证)\r\n\r\n* The code of zTree v3.x has been seperated according to the various functions. You can only load the code you need. \r\n(zTree v3.x 将核心代码按照功能进行了分割，不需要的代码可以不用加载)\r\n* zTree v3.x uses delay loading technique, which can easily load tens of thousands of nodes in seconds even in IE6 browser. \r\n(采用了 延迟加载 技术，上万节点轻松加载，即使在 IE6 下也能基本做到秒杀)\r\n* Compatible with IE, FireFox?, Chrome, Opera, Safari and other browsers. \r\n(兼容 IE、FireFox?、Chrome、Opera、Safari 等浏览器)\r\n* Support for JSON data. \r\n(支持 JSON 数据)\r\n* Support for static and asynchronous data loading node. \r\n(支持静态 和 Ajax 异步加载节点数据)\r\n* Replace the skin / custom icon flexibllly. \r\n(支持任意更换皮肤 / 自定义图标)\r\n* Support extremely flexible checkbox or radio selection function. \r\n(支持极其灵活的 checkbox 或 radio 选择功能)\r\n* Provide enough incident response callback. \r\n(提供多种事件响应回调)\r\n* Flexible editing (add / delete / change / search) functions, such as drag and drop nodes,you can even drag and drop multiple nodes. \r\n(灵活的编辑（增/删/改/查）功能，可随意拖拽节点，还可以多节点拖拽哟)\r\n* Enable to generate multiple instances of zTree in one page. \r\n(在一个页面内可同时生成多个 Tree 实例)\r\n* Simple parameters to achieve flexible configuration capabilities. \r\n(简单的参数配置实现 灵活多变的功能)\r\n* To enhance performance, zTree transforms the js & css structure to provide excellent browser compatibility and make the development more easily\r\n(zTree v3.x（JQuery Tree 插件），性能全面提升，js & css 架构全面调整，提供更好的兼容性和易开发性)\r\n\r\n\r\n"
  },
  {
    "path": "lib/zTree_v3/api/API_cn.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t\t<title>API 文档 [zTree --  jQuery 树插件]</title>\n\t\t<link rel=\"stylesheet\" href=\"apiCss/common.css\" type=\"text/css\">\n\t\t<link rel='stylesheet' href='apiCss/zTreeStyleForApi.css' type='text/css'>\n\t\t<script type=\"text/javascript\">\n\t\t\tvar ie = (function(){\n\t\t\t\tvar undef,\n\t\t\t\tv = 3,\n\t\t\t\tdiv = document.createElement('div'),\n\t\t\t\tall = div.getElementsByTagName('i');\n\t\t\t\twhile (\n\t\t\t\tdiv.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',\n\t\t\t\tall[0]\n\t\t\t);\n\t\t\t\treturn v > 4 ? v : undef;\n\t\t\t}()), ie6 = (ie === 6),\n\t\t\tpath = window.location.pathname.replace(/.*\\/([^\\/\\.]*)\\..*/g,\"$1\"),\n\t\t\tlangLib = [];\n\t\t\tie = ie<9;\n\t\t\tif(ie) {\n\t\t\t\tdocument.write('<link rel=\"stylesheet\" href=\"apiCss/common_ie6.css\" type=\"text/css\">');\n\t\t\t}\n\t\t\tvar lang = \"cn\",\n\t\t\tajaxMsg = \"如果你使用的是 Chrome 浏览器，那么请把 API 文档发布到 web 服务目录下访问。\\n\\n（Chrome 浏览器不支持本地 ajax 访问, 即：file://）\";\n\n\t\t</script>\n\t</head>\n\t<body>\n\t\t<div id=\"header_wrap\" class=\"header_wrap\" style=\"padding-top: 30px;\">\n\t\t\t<div id=\"header\" class=\"header round\">\n\t\t\t\t<div class=\"light-bulb\" alt=\"\"></div>\n\t\t\t\t<div class=\"ieSuggest\">浏览本网站建议您使用 Chrome、FireFox、Opera、IE9 等浏览器（只要不是 IE6 7 8 就行）, 速度会更快，画面会更炫！</div>\n\t\t\t\t<div class=\"google_plus\"><g:plusone></g:plusone></div>\n\t\t\t\t<div class=\"header-text\">\n\t\t\t\t\t<h1><em>zTree v3.5.40 API 文档</em></h1><p></p>\n\t\t\t\t\t<p>all.js = core + excheck + exedit ( 不包括 exhide ); 发现错误请及时通知，谢谢。</p>\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"shortcuts language\" style=\"top:0;\">\n\t\t\t\t\t<li><a href=\"API_en.html\" onclick=\"window.location.href='API_en.html'\"><button class=\"ico en\" title=\"英文版\" type=\"button\"></button><span class=\"\"></span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"content_wrap\" class=\"content_wrap\">\n\t\t\t<div id=\"content\" class=\"content\">\n\t\t\t\t<div class=\"nav_section\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li class=\"first\">注释：</li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_core\" onfocus=\"this.blur();\"></button><span>core 核心包</span></li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_check\" onfocus=\"this.blur();\"></button><span>excheck 扩展</span></li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_edit\" onfocus=\"this.blur();\"></button><span>exedit 扩展</span></li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_hide\" onfocus=\"this.blur();\"></button><span>exhide 扩展</span></li>\n\t\t\t\t\t\t<li class=\"noline\">\n\t\t\t\t\t\t\t<button class=\"ico16 z_search\" onfocus=\"this.blur();\" title=\"Enter 以及 左、右键可以快速定位查找结果\"></button>\n\t\t\t\t\t\t\t<input type=\"text\" class=\"searchKey search empty\" value=\"\"><input type=\"text\" class=\"searchResult search\" value=\"\">\n\t\t\t\t\t\t\t<button class=\"ico16 searchPrev disabled\" onfocus=\"this.blur();\" title=\"Enter 以及 左、右键可以快速定位查找结果\"></button><button class=\"ico16 searchNext disabled\" onfocus=\"this.blur();\" title=\"Enter 以及 左、右键可以快速定位查找结果\"></button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"contentBox\" class=\"contentBox round clearfix\">\n\t\t\t\t\t<div id=\"apiContent\" class=\"apiContent\">\n\t\t\t\t\t\t<div id=\"api_setting\" class=\"api_setting left\">\n\t\t\t\t\t\t\t<ul class=\"api_content_title\"><li>setting 配置详解</li></ul>\n\t\t\t\t\t\t\t<ul id=\"settingTree\" class=\"ztree\"></ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div id=\"api_function\" class=\"api_function right\">\n\t\t\t\t\t\t\t<ul class=\"api_content_title\"><li>zTree 方法详解</li></ul>\n\t\t\t\t\t\t\t<ul id=\"functionTree\" class=\"ztree\"></ul>\n\t\t\t\t\t\t\t<ul class=\"api_content_title\"><li>treeNode 节点数据详解</li></ul>\n\t\t\t\t\t\t\t<ul id=\"treenodeTree\" class=\"ztree\"></ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"clear\"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- overlayed -->\n\t\t<div id=\"overlayDiv\" class=\"baby_overlay\">\n\t\t\t<div id=\"overlayContent\" class=\"content round clearfix\">\n\t\t\t\t<div class=\"overlaySearch\">\n\t\t\t\t\t<button class=\"ico16 z_search\" onfocus=\"this.blur();\" title=\"Enter 以及 左、右键可以快速定位查找结果\"></button>\n\t\t\t\t\t<input type=\"text\" class=\"searchKey search empty\" value=\"\"><input type=\"text\" class=\"searchResult search\" value=\"\">\n\t\t\t\t\t<button class=\"ico16 searchPrev disabled\" onfocus=\"this.blur();\" title=\"Enter 以及 左、右键可以快速定位查找结果\"></button><button class=\"ico16 searchNext disabled\" onfocus=\"this.blur();\" title=\"Enter 以及 左、右键可以快速定位查找结果\"></button>\n\t\t\t\t</div>\n\t\t\t\t<a id=\"overlayDivCloseBtn\" class=\"close\"></a>\n\t\t\t\t<div id=\"overlayDetailDiv\" class=\"details\"></div>\n\t\t\t</div>\n\t\t\t<div id=\"overlayDivArrow\" class=\"baby_overlay_arrow\"></div>\n\t\t</div>\n\t\t<script type=\"text/javascript\" src=\"apiCss/jquery-1.6.2.min.js\"></script>\n\t\t<script type='text/javascript' src='apiCss/jquery.ztree.core.js'></script>\n\t\t<script type='text/javascript' src='apiCss/api.js'></script>\n\t\t<script type=\"text/javascript\">\n\t\t\t$(document).ready(function(){\n\t\t\t\tapiContent._init();\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "lib/zTree_v3/api/API_en.html",
    "content": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t\t<title>API Document [zTree -- jQuery tree plug-ins.]</title>\n\t\t<link rel=\"stylesheet\" href=\"apiCss/common.css\" type=\"text/css\">\n\t\t<link rel='stylesheet' href='apiCss/zTreeStyleForApi.css' type='text/css'>\n\t\t<script type=\"text/javascript\">\n\t\t\tvar ie = (function(){\n\t\t\t\tvar undef,\n\t\t\t\tv = 3,\n\t\t\t\tdiv = document.createElement('div'),\n\t\t\t\tall = div.getElementsByTagName('i');\n\t\t\t\twhile (\n\t\t\t\tdiv.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',\n\t\t\t\tall[0]\n\t\t\t);\n\t\t\t\treturn v > 4 ? v : undef;\n\t\t\t}()), ie6 = (ie === 6),\n\t\t\tpath = window.location.pathname.replace(/.*\\/([^\\/\\.]*)\\..*/g,\"$1\"),\n\t\t\tlangLib = [];\n\t\t\tie = ie<9;\n\t\t\tif(ie) {\n\t\t\t\tdocument.write('<link rel=\"stylesheet\" href=\"apiCss/common_ie6.css\" type=\"text/css\">');\n\t\t\t}\n\t\t\tvar lang = \"en\",\n\t\t\tajaxMsg = \"If you use chrome browser, please copy the API files to local webserver. \\n\\n( because chrome browser can't allow AJAX access to 'file://' )\";\n\t\t</script>\n\t</head>\n\t<body>\n\t\t<div id=\"header_wrap\" class=\"header_wrap\" style=\"padding-top: 30px;\">\n\t\t\t<div id=\"header\" class=\"header round\">\n\t\t\t\t<div class=\"light-bulb\" alt=\"\"></div>\n\t\t\t\t<div class=\"ieSuggest\">If you use the Chrome / FireFox / Opera / IE9 browser will be even more dazzling effect!</div>\n\t\t\t\t<div class=\"google_plus\"><g:plusone></g:plusone></div>\n\t\t\t\t<div class=\"header-text\">\n\t\t\t\t\t<h1><em>zTree v3.5.40 API Document</em></h1><p></p>\n\t\t\t\t\t<p>all.js = core + excheck + exedit ( without exhide ); if you found some mistakes please contact me.</p>\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"shortcuts language\" style=\"top:0;\">\n\t\t\t\t\t<li><a href=\"API_cn.html\" onclick=\"window.location.href='API_cn.html'\"><button class=\"ico cn\" title=\"Chinese\" type=\"button\"></button><span class=\"\"></span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"content_wrap\" class=\"content_wrap\">\n\t\t\t<div id=\"content\" class=\"content\">\n\t\t\t\t<div class=\"nav_section\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li class=\"first\">Notes: </li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_core\" onfocus=\"this.blur();\"></button><span>core package</span></li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_check\" onfocus=\"this.blur();\"></button><span>excheck pack</span></li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_edit\" onfocus=\"this.blur();\"></button><span>exedit pack</span></li>\n\t\t\t\t\t\t<li><button class=\"ico16 z_hide\" onfocus=\"this.blur();\"></button><span>exhide pack</span></li>\n\t\t\t\t\t\t<li class=\"noline\">\n\t\t\t\t\t\t\t<button class=\"ico16 z_search\" onfocus=\"this.blur();\" title=\"'Enter', 'left' and 'right' key can locate the search results quickly.\"></button>\n\t\t\t\t\t\t\t<input type=\"text\" class=\"searchKey search empty\" value=\"\"><input type=\"text\" class=\"searchResult search\" value=\"\">\n\t\t\t\t\t\t\t<button class=\"ico16 searchPrev disabled\" onfocus=\"this.blur();\" title=\"'Enter', 'left' and 'right' key can locate the search results quickly.\"></button><button class=\"ico16 searchNext disabled\" onfocus=\"this.blur();\" title=\"'Enter', 'left' and 'right' key can locate the search results quickly.\"></button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"contentBox\" class=\"contentBox round clearfix\">\n\t\t\t\t\t<div id=\"apiContent\" class=\"apiContent\">\n\t\t\t\t\t\t<div id=\"api_setting\" class=\"api_setting left\">\n\t\t\t\t\t\t\t<ul class=\"api_content_title\"><li>setting details</li></ul>\n\t\t\t\t\t\t\t<ul id=\"settingTree\" class=\"ztree\"></ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div id=\"api_function\" class=\"api_function right\">\n\t\t\t\t\t\t\t<ul class=\"api_content_title\"><li>zTree method details</li></ul>\n\t\t\t\t\t\t\t<ul id=\"functionTree\" class=\"ztree\"></ul>\n\t\t\t\t\t\t\t<ul class=\"api_content_title\"><li>treeNode data details</li></ul>\n\t\t\t\t\t\t\t<ul id=\"treenodeTree\" class=\"ztree\"></ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"clear\"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- overlayed -->\n\t\t<div id=\"overlayDiv\" class=\"baby_overlay\">\n\t\t\t<div id=\"overlayContent\" class=\"content round clearfix\">\n\t\t\t\t<div class=\"overlaySearch\">\n\t\t\t\t\t<button class=\"ico16 z_search\" onfocus=\"this.blur();\" title=\"'Enter', 'left' and 'right' key can locate the search results quickly.\"></button>\n\t\t\t\t\t<input type=\"text\" class=\"searchKey search empty\" value=\"\"><input type=\"text\" class=\"searchResult search\" value=\"\">\n\t\t\t\t\t<button class=\"ico16 searchPrev disabled\" onfocus=\"this.blur();\" title=\"'Enter', 'left' and 'right' key can locate the search results quickly.\"></button><button class=\"ico16 searchNext disabled\" onfocus=\"this.blur();\" title=\"'Enter', 'left' and 'right' key can locate the search results quickly.\"></button>\n\t\t\t\t</div>\n\t\t\t\t<a id=\"overlayDivCloseBtn\" class=\"close\"></a>\n\t\t\t\t<div id=\"overlayDetailDiv\" class=\"details\"></div>\n\t\t\t</div>\n\t\t\t<div id=\"overlayDivArrow\" class=\"baby_overlay_arrow\"></div>\n\t\t</div>\n\t\t<script type=\"text/javascript\" src=\"apiCss/jquery-1.6.2.min.js\"></script>\n\t\t<script type='text/javascript' src='apiCss/jquery.ztree.core.js'></script>\n\t\t<script type='text/javascript' src='apiCss/api.js'></script>\n\t\t<script type=\"text/javascript\">\n\t\t\t$(document).ready(function(){\n\t\t\t\tapiContent._init();\n\t\t\t});\n\t\t</script>\n\t</body>\n</html>"
  },
  {
    "path": "lib/zTree_v3/api/apiCss/api.js",
    "content": "var apiContent = {\n\tzTree_Setting: null,\n\tzTree_Node: null,\n\tzTree_Function: null,\n\toverlayDiv : null,\n\toverlayContent : null,\n\toverlayDetailDiv : null,\n\toverlayCloseBtn: null,\n\toverlayArrow: null,\n\tcontentBoxDiv : null,\n\tsettingDiv : null,\n\tfunctionDiv : null,\n\toverlaySearch: null,\n\tsearchKey: null,\n\tsearchResultInput: null,\n\tsearchPrevBtn: null,\n\tsearchNextBtn: null,\n\tapiCache: {},\n\tlastValue: \"\",\n\tsearchNodes: [],\n\tsearchNodesCur: 0,\n\n\t_init: function() {\n\t\tthis.overlayDiv = $(\"#overlayDiv\");\n\t\tthis.overlayContent = $(\"#overlayContent\");\n\t\tthis.overlayDetailDiv = $(\"#overlayDetailDiv\");\n\t\tthis.overlayCloseBtn = $(\"#overlayDivCloseBtn\");\n\t\tthis.overlayArrow = $(\"#overlayDivArrow\");\n\t\tthis.contentBoxDiv = $(\"#contentBox\");\n\t\tthis.settingDiv = $(\"#api_setting\");\n\t\tthis.functionDiv = $(\"#api_function\");\n\t\tthis.searchKey = $(\".searchKey\");\n\t\tthis.overlaySearch = $(\".overlaySearch\");\n\t\tthis.searchResultInput = $(\".searchResult\");\n\t\tthis.searchPrevBtn = $(\".searchPrev\");\n\t\tthis.searchNextBtn = $(\".searchNext\");\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tfontCss: this.getFontCss,\n\t\t\t\tshowLine: false,\n\t\t\t\tshowIcon: this.showIcon,\n\t\t\t\tshowTitle: this.getTitle,\n\t\t\t\tselectedMulti: false,\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"tt\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable:true,\n\t\t\t\t\tidKey: \"id\",\n\t\t\t\t\tpIdKey: \"pId\",\n\t\t\t\t\trootPId: \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonNodeCreated: this.onNodeCreated,\n\t\t\t\tbeforeClick: this.beforeClick\n\t\t\t}\n\t\t};\n\t\tvar setting_nodes =[\n\t\t\t{id:1, pId:0, t:\"setting\", name:\"var setting = {\", open:true},\n\t\t\t{id:11, pId:1, t:\"treeId\", name:\"treeId : \\\"\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:12, pId:1, t:\"treeObj\", name:\"treeObj : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:121, pId:1, name:\"\"},\n\n\t\t\t{id:20, pId:1, t:\"async\", name:\"async : {\", open:true},\n\t\t\t{id:201, pId:20, t:\"autoParam\", name:\"autoParam : [],\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:208, pId:20, t:\"contentType\", name:\"contentType : \\\"application...\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:202, pId:20, t:\"dataFilter\", name:\"dataFilter : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:203, pId:20, t:\"dataType\", name:\"dataType : \\\"text\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:204, pId:20, t:\"enable\", name:\"enable : false,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:205, pId:20, t:\"otherParam\", name:\"otherParam : [],\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:206, pId:20, t:\"type\", name:\"type : \\\"post\\\",\", iconSkin:\"core\", showAPI:true},\n      {id:209, pId:20, t:\"headers\", name:\"headers : {},\", iconSkin:\"core\", showAPI:true},\n      {id:210, pId:20, t:\"xhrFields\", name:\"xhrFields : {},\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:207, pId:20, t:\"url\", name:\"url : \\\"\\\"\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:21, pId:1, name:\"},\"},\n\t\t\t{id:22, pId:1, name:\"\"},\n\n\t\t\t{id:30, pId:1, t:\"callback\", name:\"callback : {\", open:true},\n\t\t\t{id:3001, pId:30, t:\"beforeAsync\", name:\"beforeAsync : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3002, pId:30, t:\"beforeCheck\", name:\"beforeCheck : null,\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:3003, pId:30, t:\"beforeClick\", name:\"beforeClick : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3004, pId:30, t:\"beforeCollapse\", name:\"beforeCollapse : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3004, pId:30, t:\"beforeDblClick\", name:\"beforeDblClick : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3005, pId:30, t:\"beforeDrag\", name:\"beforeDrag : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3006, pId:30, t:\"beforeDragOpen\", name:\"beforeDragOpen : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3007, pId:30, t:\"beforeDrop\", name:\"beforeDrop : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3029, pId:30, t:\"beforeEditName\", name:\"beforeEditName : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3008, pId:30, t:\"beforeExpand\", name:\"beforeExpand : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3009, pId:30, t:\"beforeMouseDown\", name:\"beforeMouseDown : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3010, pId:30, t:\"beforeMouseUp\", name:\"beforeMouseUp : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3011, pId:30, t:\"beforeRemove\", name:\"beforeRemove : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3012, pId:30, t:\"beforeRename\", name:\"beforeRename : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3013, pId:30, t:\"beforeRightClick\", name:\"beforeRightClick : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3014, pId:30, name:\"\"},\n\t\t\t{id:3015, pId:30, t:\"onAsyncError\", name:\"onAsyncError : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3016, pId:30, t:\"onAsyncSuccess\", name:\"onAsyncSuccess : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3017, pId:30, t:\"onCheck\", name:\"onCheck : null,\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:3018, pId:30, t:\"onClick\", name:\"onClick : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3019, pId:30, t:\"onCollapse\", name:\"onCollapse : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3029, pId:30, t:\"onDblClick\", name:\"onDblClick : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3020, pId:30, t:\"onDrag\", name:\"onDrag : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3030, pId:30, t:\"onDragMove\", name:\"onDragMove : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3021, pId:30, t:\"onDrop\", name:\"onDrop : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3022, pId:30, t:\"onExpand\", name:\"onExpand : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3023, pId:30, t:\"onMouseDown\", name:\"onMouseDown : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3024, pId:30, t:\"onMouseUp\", name:\"onMouseUp : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3025, pId:30, t:\"onNodeCreated\", name:\"onNodeCreated : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:3026, pId:30, t:\"onRemove\", name:\"onRemove : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3027, pId:30, t:\"onRename\", name:\"onRename : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:3028, pId:30, t:\"onRightClick\", name:\"onRightClick : null\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:31, pId:1, name:\"},\"},\n\t\t\t{id:32, pId:1, name:\"\"},\n\n\t\t\t{id:40, pId:1, t:\"check\", name:\"check : {\", open:true},\n\t\t\t{id:405, pId:40, t:\"autoCheckTrigger\", name:\"autoCheckTrigger : false,\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:401, pId:40, t:\"chkboxType\", name:\"chkboxType : {\\\"Y\\\": \\\"ps\\\", \\\"N\\\": \\\"ps\\\"},\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:402, pId:40, t:\"chkStyle\", name:\"chkStyle : \\\"checkbox\\\",\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:403, pId:40, t:\"enable\", name:\"enable : false,\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:406, pId:40, t:\"nocheckInherit\", name:\"nocheckInherit : false\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:407, pId:40, t:\"chkDisabledInherit\", name:\"chkDisabledInherit : false\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:404, pId:40, t:\"radioType\", name:\"radioType : \\\"level\\\"\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:41, pId:1, name:\"},\"},\n\t\t\t{id:42, pId:1, name:\"\"},\n\n\t\t\t{id:50, pId:1, t:\"data\", name:\"data : {\", open:true},\n\t\t\t{id:500, pId:50, t:\"keep\", name:\"keep : {\", open:true},\n\t\t\t{id:5001, pId:500, t:\"leaf\", name:\"leaf : false,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5002, pId:500, t:\"parent\", name:\"parent : false\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:501, pId:50, name:\"},\"},\n\n\t\t\t{id:510, pId:50, t:\"key\", name:\"key : {\", open:true},\n\t\t\t{id:5101, pId:510, t:\"checked\", name:\"checked : \\\"checked\\\",\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:5102, pId:510, t:\"children\", name:\"children : \\\"children\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5106, pId:510, t:\"isParent\", name:\"isParent : \\\"isParent\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5107, pId:510, t:\"isHidden\", name:\"isHidden : \\\"isHidden\\\",\", iconSkin:\"hide\", showAPI:true},\n\t\t\t{id:5103, pId:510, t:\"name\", name:\"name : \\\"name\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5104, pId:510, t:\"title\", name:\"title : \\\"\\\"\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5105, pId:510, t:\"url\", name:\"url : \\\"url\\\"\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:511, pId:50, name:\"},\"},\n\n\t\t\t{id:520, pId:50, t:\"simpleData\", name:\"simpleData : {\", open:true},\n\t\t\t{id:5201, pId:520, t:\"enable\", name:\"enable : false,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5202, pId:520, t:\"idKey\", name:\"idKey : \\\"id\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5203, pId:520, t:\"pIdKey\", name:\"pIdKey : \\\"pId\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5204, pId:520, t:\"rootPId\", name:\"rootPId : null\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:521, pId:50, name:\"}\"},\n\t\t\t{id:51, pId:1, name:\"},\"},\n\t\t\t{id:52, pId:1, name:\"\"},\n\n\t\t\t{id:60, pId:1, t:\"edit\", name:\"edit : {\", open:true},\n\t\t\t{id:601, pId:60, t:\"drag\", name:\"drag : {\", open:true},\n\t\t\t{id:60111, pId:601, t:\"autoExpandTrigger\", name:\"autoExpandTrigger : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60101, pId:601, t:\"isCopy\", name:\"isCopy : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60102, pId:601, t:\"isMove\", name:\"isMove : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60103, pId:601, t:\"prev\", name:\"prev : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60104, pId:601, t:\"next\", name:\"next : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60105, pId:601, t:\"inner\", name:\"inner : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60107, pId:601, t:\"borderMax\", name:\"borderMax : 10,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60108, pId:601, t:\"borderMin\", name:\"borderMin : -5,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60106, pId:601, t:\"minMoveSize\", name:\"minMoveSize : 5,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60109, pId:601, t:\"maxShowNodeNum\", name:\"maxShowNodeNum : 5,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:60110, pId:601, t:\"autoOpenTime\", name:\"autoOpenTime : 500\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:602, pId:60, name:\"},\"},\n\t\t\t{id:608, pId:60, t:\"editNameSelectAll\", name:\"editNameSelectAll : false,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:603, pId:60, t:\"enable\", name:\"enable : false,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:604, pId:60, t:\"removeTitle\", name:\"removeTitle : \\\"remove\\\",\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:605, pId:60, t:\"renameTitle\", name:\"renameTitle : \\\"rename\\\",\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:606, pId:60, t:\"showRemoveBtn\", name:\"showRemoveBtn : true,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:607, pId:60, t:\"showRenameBtn\", name:\"showRenameBtn : true\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:61, pId:1, name:\"},\"},\n\t\t\t{id:62, pId:1, name:\"\"},\n\n\t\t\t{id:70, pId:1, t:\"view\", name:\"view : {\", open:true},\n\t\t\t{id:7001, pId:70, t:\"addDiyDom\", name:\"addDiyDom : null,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7002, pId:70, t:\"addHoverDom\", name:\"addHoverDom : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:7003, pId:70, t:\"autoCancelSelected\", name:\"autoCancelSelected : true,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7004, pId:70, t:\"dblClickExpand\", name:\"dblClickExpand : true,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7005, pId:70, t:\"expandSpeed\", name:\"expandSpeed : \\\"fast\\\",\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7006, pId:70, t:\"fontCss\", name:\"fontCss : {},\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7012, pId:70, t:\"nameIsHTML\", name:\"nameIsHTML : false,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7007, pId:70, t:\"removeHoverDom\", name:\"removeHoverDom : null,\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:7008, pId:70, t:\"selectedMulti\", name:\"selectedMulti : true,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7009, pId:70, t:\"showIcon\", name:\"showIcon : true,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7010, pId:70, t:\"showLine\", name:\"showLine : true,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7011, pId:70, t:\"showTitle\", name:\"showTitle : true,\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:7012, pId:70, t:\"txtSelectedEnable\", name:\"txtSelectedEnable : false\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:71, pId:1, name:\"}\"},\n\n\t\t\t{id:2, pId:0, name:\"}\"}\n\t\t];\n\n\t\tvar treenode_nodes =[\n\t\t\t{id:1, pId:0, t:\"treeNode\", name:\"treeNode : {\", open:true},\n\t\t\t{id:101, pId:1, t:\"checked\", name:\"checked\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:102, pId:1, t:\"children\", name:\"children\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:128, pId:1, t:\"chkDisabled\", name:\"chkDisabled\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:127, pId:1, t:\"click\", name:\"click\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:103, pId:1, t:\"getCheckStatus\", name:\"getCheckStatus ()\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:135, pId:1, t:\"getIndex\", name:\"getIndex ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:104, pId:1, t:\"getNextNode\", name:\"getNextNode ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:105, pId:1, t:\"getParentNode\", name:\"getParentNode ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:136, pId:1, t:\"getPath\", name:\"getPath ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:106, pId:1, t:\"getPreNode\", name:\"getPreNode ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:129, pId:1, t:\"halfCheck\", name:\"halfCheck\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:107, pId:1, t:\"icon\", name:\"icon\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:108, pId:1, t:\"iconClose\", name:\"iconClose\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:109, pId:1, t:\"iconOpen\", name:\"iconOpen\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:110, pId:1, t:\"iconSkin\", name:\"iconSkin\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:131, pId:1, t:\"isHidden\", name:\"isHidden\", iconSkin:\"hide\", showAPI:true},\n\t\t\t{id:111, pId:1, t:\"isParent\", name:\"isParent\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:132, pId:1, t:\"name\", name:\"name\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:112, pId:1, t:\"nocheck\", name:\"nocheck\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:113, pId:1, t:\"open\", name:\"open\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:133, pId:1, t:\"target\", name:\"target\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:134, pId:1, t:\"url\", name:\"url\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:114, pId:1, t:\"diy\", name:\"*DIY*\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:115, pId:1, name:\"\"},\n\t\t\t{id:116, pId:1, t:\"check_Child_State\", name:\"[check_Child_State]\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:117, pId:1, t:\"check_Focus\", name:\"[check_Focus]\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:118, pId:1, t:\"checkedOld\", name:\"[checkedOld]\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:119, pId:1, t:\"editNameFlag\", name:\"[editNameFlag]\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:120, pId:1, t:\"isAjaxing\", name:\"[isAjaxing]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:121, pId:1, t:\"isFirstNode\", name:\"[isFirstNode]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:122, pId:1, t:\"isHover\", name:\"[isHover]\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:123, pId:1, t:\"isLastNode\", name:\"[isLastNode]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:124, pId:1, t:\"level\", name:\"[level]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:125, pId:1, t:\"parentTId\", name:\"[parentTId]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:126, pId:1, t:\"tId\", name:\"[tId]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:130, pId:1, t:\"zAsync\", name:\"[zAsync]\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:2, pId:0, name:\"}\"}\n\t\t];\n\n\t\tvar function_nodes =[\n\t\t\t{id:1, pId:0, t:\"$.fn.zTree\", name:\"$.fn.zTree : {\", open:true},\n\t\t\t{id:11, pId:1, t:\"init\", name:\"init (obj, zSetting, zNodes)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:12, pId:1, t:\"getZTreeObj\", name:\"getZTreeObj (treeId)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:14, pId:1, t:\"destroy\", name:\"destroy (treeId)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:13, pId:1, t:\"_z\", name:\"_z : {tools, view, event, data}\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:2, pId:0, name:\"}\"},\n\t\t\t{id:3, pId:0, name:\"\"},\n\t\t\t{id:4, pId:0, t:\"zTreeObj\", name:\"zTreeObj : {\", open:true},\n\t\t\t{id:401, pId:4, t:\"setting\", name:\"setting\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:402, pId:4, t:\"addNodes\", name:\"addNodes (parentNode, index, newNodes, isSilent)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:403, pId:4, t:\"cancelEditName\", name:\"cancelEditName (newName)\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:404, pId:4, t:\"cancelSelectedNode\", name:\"cancelSelectedNode (node)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:405, pId:4, t:\"checkAllNodes\", name:\"checkAllNodes (checked)\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:406, pId:4, t:\"checkNode\", name:\"checkNode (node, checked, checkTypeFlag, callbackFlag)\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:407, pId:4, t:\"copyNode\", name:\"copyNode (targetNode, node, moveType, isSilent)\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:436, pId:4, t:\"destroy\", name:\"destroy ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:408, pId:4, t:\"editName\", name:\"editName (node)\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:409, pId:4, t:\"expandAll\", name:\"expandAll (expandFlag)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:410, pId:4, t:\"expandNode\", name:\"expandNode (node, expandFlag, sonSign, focus, callbackFlag)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:411, pId:4, t:\"getChangeCheckedNodes\", name:\"getChangeCheckedNodes ()\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:412, pId:4, t:\"getCheckedNodes\", name:\"getCheckedNodes (checked)\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:413, pId:4, t:\"getNodeByParam\", name:\"getNodeByParam (key, value, parentNode)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:414, pId:4, t:\"getNodeByTId\", name:\"getNodeByTId (tId)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:415, pId:4, t:\"getNodeIndex\", name:\"getNodeIndex (node)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:416, pId:4, t:\"getNodes\", name:\"getNodes ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:431, pId:4, t:\"getNodesByFilter\", name:\"getNodesByFilter (filter, isSingle, parentNode, invokeParam)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:417, pId:4, t:\"getNodesByParam\", name:\"getNodesByParam (key, value, parentNode)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:418, pId:4, t:\"getNodesByParamFuzzy\", name:\"getNodesByParamFuzzy (key, value, parentNode)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:419, pId:4, t:\"getSelectedNodes\", name:\"getSelectedNodes ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:432, pId:4, t:\"hideNode\", name:\"hideNode (node)\", iconSkin:\"hide\", showAPI:true},\n\t\t\t{id:433, pId:4, t:\"hideNodes\", name:\"hideNodes (nodes)\", iconSkin:\"hide\", showAPI:true},\n\t\t\t{id:420, pId:4, t:\"moveNode\", name:\"moveNode (targetNode, node, moveType, isSilent)\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:421, pId:4, t:\"reAsyncChildNodes\", name:\"reAsyncChildNodes (parentNode, reloadType, isSilent, callback)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:437, pId:4, t:\"reAsyncChildNodesPromise\", name:\"reAsyncChildNodesPromise(parentNode, reloadType, isSilent)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:422, pId:4, t:\"refresh\", name:\"refresh ()\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:423, pId:4, t:\"removeChildNodes\", name:\"removeChildNodes (parentNode)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:424, pId:4, t:\"removeNode\", name:\"removeNode (node, callbackFlag)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:425, pId:4, t:\"selectNode\", name:\"selectNode (node, addFlag, isSilent)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:430, pId:4, t:\"setChkDisabled\", name:\"setChkDisabled (node, disabled, inheritParent, inheritChildren)\", iconSkin:\"check\", showAPI:true},\n\t\t\t{id:426, pId:4, t:\"setEditable\", name:\"setEditable (editable)\", iconSkin:\"edit\", showAPI:true},\n\t\t\t{id:434, pId:4, t:\"showNode\", name:\"showNode (node)\", iconSkin:\"hide\", showAPI:true},\n\t\t\t{id:435, pId:4, t:\"showNodes\", name:\"showNodes (nodes)\", iconSkin:\"hide\", showAPI:true},\n\t\t\t{id:427, pId:4, t:\"transformToArray\", name:\"transformToArray (nodes)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:428, pId:4, t:\"transformTozTreeNodes\", name:\"transformTozTreeNodes (simpleNodes)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:429, pId:4, t:\"updateNode\", name:\"updateNode (node, checkTypeFlag)\", iconSkin:\"core\", showAPI:true},\n\t\t\t{id:5, pId:0, name:\"}\"}\n\t\t];\n\n\t\tapiContent.zTree_Setting = $.fn.zTree.init($(\"#settingTree\"), $.fn.zTree._z.tools.clone(setting), setting_nodes);\n\t\tapiContent.zTree_Node = $.fn.zTree.init($(\"#treenodeTree\"), $.fn.zTree._z.tools.clone(setting), treenode_nodes);\n\t\tapiContent.zTree_Function = $.fn.zTree.init($(\"#functionTree\"), $.fn.zTree._z.tools.clone(setting), function_nodes);\n\t\tthis.bindEvent();\n\n\t},\n\tbindEvent: function() {\n\t\t$(document).bind(\"keydown\", this.listenKeyDown)\n\t\tthis.overlayCloseBtn.bind(\"click\", apiContent.overlayClose);\n\t\tthis.searchResultInput.bind(\"click\", function(e) {\n\t\t\t$(this).prev().get(0).focus();\n\t\t\tthis.blur();\n\t\t}).bind(\"focus\", function(e) {\n\t\t\tthis.blur();\n\t\t});\n\t\tthis.searchKey.bind(\"focus\", this.focusKey)\n\t\t\t.bind(\"blur\", this.blurKey)\n\t\t\t.bind(\"propertychange\", this.searchNode)\n\t\t\t.bind(\"input\", this.searchNode);\n\t\tthis.searchPrevBtn.bind(\"click\", this.searchPrev);\n\t\tthis.searchNextBtn.bind(\"click\", this.searchNext);\n\t},\n\tsetSameKey: function(value) {\n\t\tapiContent.searchKey.attr(\"value\", value);\n\t},\n\tfocusKey: function(e) {\n\t\tif (apiContent.searchKey.hasClass(\"empty\")) {\n\t\t\tapiContent.searchKey.removeClass(\"empty\");\n\t\t}\n\t},\n\tblurKey: function(e) {\n\t\tapiContent.setSameKey(e.target.value);\n\t\tif (e.target.value === \"\") {\n\t\t\tapiContent.searchKey.addClass(\"empty\");\n\t\t}\n\t},\n\tlistenKeyDown: function(e) {\n\t\tif (e.keyCode==\"13\" && apiContent.overlayDiv.is(\":hidden\")) {\n\t\t\tapiContent.openAPI();\n\t\t} else if (e.keyCode==\"37\") {\n\t\t\tapiContent.searchPrev();\n\t\t} else if (e.keyCode==\"13\" || e.keyCode==\"39\") {\n\t\t\tapiContent.searchNext();\n\t\t}\n\t},\n\topenAPI: function() {\n\t\tif (apiContent.searchNodes.length > 0) {\n\t\t\tvar setting_zTree = $.fn.zTree.getZTreeObj(\"settingTree\"),\n\t\t\ttreenode_zTree = $.fn.zTree.getZTreeObj(\"treenodeTree\"),\n\t\t\tfunction_zTree = $.fn.zTree.getZTreeObj(\"functionTree\");\n\t\t\tif (apiContent.searchNodesCur < 0 || apiContent.searchNodesCur > apiContent.searchNodes.length -1) {\n\t\t\t\tapiContent.searchNodesCur = 0;\n\t\t\t}\n\t\t\tvar node = apiContent.searchNodes[apiContent.searchNodesCur];\n\n\t\t\tif (node.tId.indexOf(\"setting\") > -1) {\n\t\t\t\tsetting_zTree.selectNode(node);\n\t\t\t} else if (node.tId.indexOf(\"treenode\") > -1) {\n\t\t\t\ttreenode_zTree.selectNode(node);\n\t\t\t} else {\n\t\t\t\tfunction_zTree.selectNode(node);\n\t\t\t}\n\t\t\tapiContent.beforeClick(node.tId.substring(0, node.tId.indexOf(\"_\")), node, true);\n\t\t\tapiContent.searchCur();\n\t\t}\n\t},\n\tsearchNode: function(e) {\n\t\tvar setting_zTree = $.fn.zTree.getZTreeObj(\"settingTree\"),\n\t\ttreenode_zTree = $.fn.zTree.getZTreeObj(\"treenodeTree\"),\n\t\tfunction_zTree = $.fn.zTree.getZTreeObj(\"functionTree\");\n\t\tif (apiContent.curKey == e.target.value) return;\n\t\tapiContent.curKey = e.target.value;\n\t\tvar value = $.trim(apiContent.curKey);\n\t\tapiContent.setSameKey(apiContent.curKey);\n\t\tif (apiContent.searchKey.hasClass(\"empty\")) {\n\t\t\tvalue = \"\";\n\t\t\tapiContent.searchResultInput.removeClass(\"noResult\").attr(\"value\",\"\");\n\t\t}\n\t\tif (apiContent.lastValue === value) return;\n\n\t\tapiContent.updateNodes(false);\n\t\tapiContent.lastValue = value;\n\t\tif (value === \"\" || value.length < 2) {\n\t\t\tapiContent.searchNodes = [];\n\t\t\tapiContent.searchNodesCur = -1;\n\t\t\tapiContent.searchCur(true);\n\t\t\treturn;\n\t\t}\n\n\t\tvar settingNodeList = setting_zTree.getNodesByFilter(apiContent.searchFilter);\n\t\tvar functionNodeList = function_zTree.getNodesByFilter(apiContent.searchFilter);\n\t\tvar treenodeNodeList = treenode_zTree.getNodesByFilter(apiContent.searchFilter);\n\t\tapiContent.searchNodes = settingNodeList.concat(functionNodeList).concat(treenodeNodeList);\n\t\tapiContent.searchNodesCur = -1;\n\t\tapiContent.searchCur();\n\t\tapiContent.updateNodes(true);\n\t},\n\tsearchFilter: function(node) {\n\t\tvar value = $.trim(apiContent.searchKey.get(0).value).toLowerCase();\n\t\treturn (node.showAPI && node.name.toLowerCase().indexOf(value) > -1);\n\t},\n\tsearchPrev: function(e) {\n\t\tif (apiContent.searchPrevBtn.hasClass(\"disabled\")) return;\n\t\tapiContent.searchNodesCur--;\n\t\tif (apiContent.searchNodesCur < 0 || apiContent.searchNodesCur > apiContent.searchNodes.length -1) {\n\t\t\tapiContent.searchNodesCur = apiContent.searchNodes.length -1;\n\t\t}\n\t\tapiContent.openAPI();\n\t},\n\tsearchNext: function(e) {\n\t\tif (apiContent.searchNextBtn.hasClass(\"disabled\")) return;\n\t\tapiContent.searchNodesCur++;\n\t\tapiContent.openAPI();\n\t},\n\tsearchCur: function(init) {\n\t\tvar result = apiContent.searchNodes;\n\t\tif (init) {\n\t\t\tapiContent.searchResultInput.removeClass(\"noResult\").attr(\"value\",\"\");\n\t\t} else if (result.length == 0) {\n\t\t\tapiContent.searchResultInput.addClass(\"noResult\").attr(\"value\",\"  [ 0 / 0 ]  \");\n\t\t} else {\n\t\t\tapiContent.searchResultInput.removeClass(\"noResult\").attr(\"value\",\" [ \" + (apiContent.searchNodesCur > -1 ? apiContent.searchNodesCur+1 : \"?\")+ \" / \" + result.length + \" ] \");\n\t\t}\n\t\tif (result.length > 0) {\n\t\t\tapiContent.searchPrevBtn.removeClass(\"disabled\");\n\t\t\tapiContent.searchNextBtn.removeClass(\"disabled\");\n\t\t} else {\n\t\t\tapiContent.searchPrevBtn.addClass(\"disabled\");\n\t\t\tapiContent.searchNextBtn.addClass(\"disabled\");\n\t\t}\n\t},\n\tupdateNodes: function(highlight) {\n\t\tvar setting_zTree = $.fn.zTree.getZTreeObj(\"settingTree\"),\n\t\ttreenode_zTree = $.fn.zTree.getZTreeObj(\"treenodeTree\"),\n\t\tfunction_zTree = $.fn.zTree.getZTreeObj(\"functionTree\"),\n\t\tnode = null;\n\t\tfor( var i=0, l=apiContent.searchNodes.length; i<l; i++) {\n\t\t\tnode = apiContent.searchNodes[i];\n\t\t\tif (node.level > 0) {\n\t\t\t\tnode.highlight = highlight;\n\t\t\t\tif (node.tId.indexOf(\"setting\") > -1) {\n\t\t\t\t\tsetting_zTree.updateNode(node);\n\t\t\t\t} else if (node.tId.indexOf(\"treenode\") > -1) {\n\t\t\t\t\ttreenode_zTree.updateNode(node);\n\t\t\t\t} else {\n\t\t\t\t\tfunction_zTree.updateNode(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tgetFontCss: function(treeId, treeNode) {\n\t\treturn (!!treeNode.highlight) ? {color:\"#A60000\", \"font-weight\":\"bold\"} : {color:\"#333\", \"font-weight\":\"normal\"};\n\t},\n\tgetTitle: function(treeId, node) {\n\t\tvar t = [], n = node;\n\t\twhile (n && !!n.t) {\n\t\t\tt.push(n.t);\n\t\t\tn = n.getParentNode();\n\t\t}\n\t\tt = t.reverse();\n\t\tnode.tt = t.join('.');\n\t\treturn true;\n\t},\n\tshowIcon: function(treeId, node) {\n\t\treturn (!!node.iconSkin);\n\t},\n\tonNodeCreated: function (e, treeId, node) {\n\t\tvar a = $(\"#\" + node.tId + \"_a\");\n\t\tif (node.showAPI) {\n\t\t\ta.attr(\"rel\", \"#overlayDiv\");\n\t\t} else {\n\t\t\ta.css({cursor: \"default\"});\n\t\t}\n\t},\n\tbeforeClick: function (treeId, node, noClear) {\n\t\tif (!node.showAPI) return false;\n\t\tvar o = $(\"#\" + node.tId + \"_a\");\n\t\tif (!!apiContent.apiCache[node.tId]) {\n\t\t\tapiContent.tmpDiv.html(apiContent.apiCache[node.tId]);\n\t\t\tapiContent.overlayShow(o, (apiContent.lastNode === node));\n\t\t} else {\n\t\t\tapiContent.overlayAjax(treeId, node);\n\t\t}\n\t\tapiContent.lastNode = node;\n\t\tif (node.tId.indexOf(\"settingTree\")>-1) {\n\t\t\tapiContent.settingDiv.removeClass(\"right\").addClass(\"left\");\n\t\t\tapiContent.functionDiv.removeClass(\"left\").addClass(\"right\");\n\t\t} else {\n\t\t\tapiContent.settingDiv.removeClass(\"left\").addClass(\"right\");\n\t\t\tapiContent.functionDiv.removeClass(\"right\").addClass(\"left\");\n\t\t}\n\n\t\tif (!noClear) {\n\t\t\tapiContent.clearSelectedNode();\n\t\t}\n\t\treturn true;\n\t},\n\tclearSelectedNode: function() {\n\t\tapiContent.zTree_Setting.cancelSelectedNode();\n\t\tapiContent.zTree_Node.cancelSelectedNode();\n\t\tapiContent.zTree_Function.cancelSelectedNode();\n\t},\n\toverlayAutoClose: function(e) {\n\t\tvar eId = e.target.id, eRel = e.target.getAttribute(\"rel\"), eClass = e.target.className;\n\t\tif (eId === \"overlayDiv\" || eId === \"overlayDivArrow\" || eClass.indexOf(\"searchPrev\") > -1 || eClass.indexOf(\"searchNext\") > -1 || !!eRel) return;\n\t\tif (!$(e.target).parents(\"[rel]\").length && !$(e.target).parents(\"#overlayDiv\").length) {\n\t\t\tapiContent.overlayClose();\n\t\t}\n\t},\n\toverlayClose: function() {\n\t\tvar o = apiContent.overlayDiv;\n\t\to.stop();\n\t\tapiContent.clearSelectedNode();\n\t\tif (ie) {\n\t\t\to.hide();\n\t\t} else {\n\t\t\tsetTimeout(function() {o.fadeTo(\"fast\", 0, function(){o.hide();})}, 200);\n\t\t}\n\t\t$(document).unbind(\"click\", apiContent.overlayAutoClose);\n\t},\n\toverlayShow: function(target, isSameNode) {\n\t\tvar w = $(window), o = apiContent.overlayDiv, a = apiContent.overlayArrow,\n\t\toc = apiContent.overlayContent, c = apiContent.contentBoxDiv,\n\t\tt = target.offset().top - 30,\n\t\tcMaxLeft = c.offset().left + c.outerWidth({margin:true}) - o.outerWidth({margin:true}) - 10,\n\t\tl = Math.min(cMaxLeft, target.offset().left + target.width() + 40),\n\t\tarrowT = target.offset().top + 16,\n\t\twMinTop = 100, footerHeight = 50, onlyFade = false,\n\t\twHeight = w.height(), wScrollTop=w.scrollTop(), wMaxTop = wHeight + wScrollTop - footerHeight;\n\t\tif (!apiContent.overlayMaxTop) {\n\t\t\tapiContent.overlayMaxTop = apiContent.contentBoxDiv.offset().top + apiContent.contentBoxDiv.height();\n\t\t}\n\t\to.stop();\n\t\tif (o.css(\"display\") !== \"block\") {\n\t\t\to.css({top: t, left: l});\n\t\t\ta.css({top:arrowT - t});\n\t\t\t$(document).bind(\"click\", apiContent.overlayAutoClose);\n\t\t}\n\t\tif (ie) {\n\t\t\tonlyFade = true;\n\t\t\to.show();\n\t\t} else {\n\t\t\to.fadeTo(\"fast\", 1);\n\t\t}\n\n\t\tvar h = apiContent.tmpDiv.outerHeight({margin:true}) + apiContent.overlaySearch.outerHeight();\n\t\tif ((t + h) > wMaxTop) {\n\t\t\tt = wMaxTop - h;\n\t\t}\n\t\tif ((t + h) > apiContent.overlayMaxTop) {\n\t\t\tt = apiContent.overlayMaxTop - h;\n\t\t}\n\t\tt = Math.max(t, wScrollTop, wMinTop);\n\t\tif ((t + h) > ($(\"body\").height()-footerHeight-20)) {\n\t\t\to.css(\"padding-bottom\", footerHeight + \"px\");\n\t\t} else {\n\t\t\to.css(\"padding-bottom\", \"0\");\n\t\t}\n\t\tapiContent.overlayDetailDiv.empty();\n\t\tapiContent.overlayDetailDiv.append(apiContent.tmpDiv.children());\n\t\tif (!onlyFade) {\n\t\t\tonlyFade = (isSameNode && t === parseInt(o.css(\"top\").replace(\"px\", \"\")));\n\t\t}\n\n\t\ta.removeClass(\"reverse\");\n\t\tif ( (arrowT - t) > (h-55) ) {\n\t\t\ta.addClass(\"reverse\");\n\t\t\tarrowT -= 55;\n\t\t}\n\n\t\tif (onlyFade) {\n\t\t\to.css({top: t, left: l});\n\t\t\toc.css({height: h});\n\t\t\ta.css({top:arrowT - t});\n\t\t} else {\n\t\t\to.animate({top: t, left: l}, {duration: \"normal\",easing: \"swing\", complete:null});\n\t\t\toc.animate({height: h}, {duration: \"fast\",easing: \"swing\", complete:null});\n\t\t\ta.animate({top:arrowT - t}, {duration: \"normal\",easing: \"linear\", complete:null});\n\t\t}\n\t},\n\toverlayAjax: function(treeId, node) {\n\t\tvar o = $(\"#\" + node.tId + \"_a\");\n\t\tif (node.isAjax) return;\n\t\tnode.isAjax = true;\n\t\t$.ajax({\n\t\t\ttype: \"get\",\n\t\t\turl: \"\" + lang + \"/\" + node.tt.replace(\"$.\", \"\") + \".html\",\n\t\t\tdata: null,\n\t\t\tdataType: \"text\",\n\t\t\tsuccess: function(msg) {\n\t\t\t\tif (!apiContent.tmpDiv) {\n\t\t\t\t\tvar tmpDiv = $(document.createElement(\"div\"));\n\t\t\t\t\ttmpDiv.addClass(\"baby_overlay_tmp\");\n\t\t\t\t\t$(\"body\").append(tmpDiv)\n\t\t\t\t\tapiContent.tmpDiv = $(document.createElement(\"div\"));\n\t\t\t\t\tapiContent.tmpDiv.addClass(\"details\");\n\t\t\t\t\ttmpDiv.append(apiContent.tmpDiv);\n\n\t\t\t\t} else {\n\t\t\t\t\tapiContent.tmpDiv.empty();\n\t\t\t\t}\n\t\t\t\tapiContent.tmpDiv.html(msg);\n\t\t\t\tapiContent.overlayShow(o, false);\n\t\t\t\tapiContent.apiCache[node.tId] = msg;\n\t\t\t\tnode.isAjax = false;\n\t\t\t},\n\t\t\terror: function(XMLHttpRequest, textStatus, errorThrown) {\n\t\t\t\talert(ajaxMsg)\n\t\t\t\tif (apiContent.tmpDiv) apiContent.tmpDiv.empty();\n\t\t\t\tnode.isAjax = false;\n\t\t\t}\n\t\t});\n\t}\n}"
  },
  {
    "path": "lib/zTree_v3/api/apiCss/common.css",
    "content": "/* Resets */\nhtml, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {\n\tmargin: 0;padding: 0;border: 0;outline: 0;font-weight: inherit;font-style: inherit;font-size: 100%;font-family: inherit;vertical-align: baseline;}\n:focus {outline: 0;}\nbody {color: #2f332a;font: 15px/21px Arial, Helvetica, simsun, sans-serif;background: #528036 url(img/background.jpg) no-repeat fixed 0 0;}\np {padding-bottom: 20px;}\nol, ul {list-style: none;}\ntable {border-collapse: separate;border-spacing: 0;}\ncaption, th, td {text-align: left;font-weight: normal;}\nstrong {font-weight: bold;}\nem {font-style: italic;}\nhr {display: none;}\n.font1 {color: white;background-color: #528036;}\n.right {float: right;}\n.left {float: left;}\n.hide {display: none;}\n.round {-moz-border-radius: 15px;-webkit-border-radius: 15px;-khtml-border-radius: 15px;border-radius: 15px;}\n.clear {clear: both;}\n.clearfix {display: block;}\n.clearfix:after {content: \".\";display: block;clear: both;visibility: hidden;line-height: 0;height: 0;}\nhtml[xmlns] .clearfix {display: block;}\n* html .clearfix {height: 1%;}\n\n/* Link Styles */\na {color: #528036;}\na:link, a:visited {text-decoration: none;}\na:hover {color: #000;text-decoration: none;}\na:active {text-decoration: none;}\n\n/* Headings */\nh1, h2, h3, h4, h5, h6 {color: #2f332a;font-weight: bold;font-family: Helvetica, Arial, simsun, sans-serif;padding-bottom: 5px;}\nh1 {font-size: 36px;line-height: 44px;}\nh2 {font-size: 20px;line-height: 20px;}\nh3 {font-size: 14px;line-height: 14px;}\nh4 {font-size: 14px;font-weight: normal;line-height: 25px;}\n\n/* Wraps */\n.header_wrap {position: relative;min-width: 940px;padding: 100px 30px 0 30px;}\n.content_wrap {position: relative;min-width: 940px;padding: 0 30px 50px 30px;}\n.footer_wrap {bottom: 0;height: 47px;width: 100%;background-color: #1b1b1b;border-top: 1px solid #749e58;}\n\n/* Header */\n.header {position: relative;width: 940px;margin: 0 auto;height: 160px;border: 1px solid white;background: transparent url(img/header-bg.png) repeat-x 0 -50px;}\n.header-text {padding: 40px 25px 15px 120px;font-size: 18px;line-height: 24px;color: #747d67;font-family: Helvetica, sans-serif;}\n.header-text img {padding-bottom: 5px;}\n.shortcuts {white-space: nowrap;text-align: right;position: absolute;top: -45px;right: 5px;}\n.shortcuts.language {top: -85px;right:0px;}\n.shortcuts li {display: inline;font-size: 18px;line-height: 28px;font-family: Helvetica, Arial, simsun, sans-serif;padding-bottom: 5px;margin-left: 30px;cursor: pointer;}\n.shortcuts li button {cursor: pointer;}\n.shortcuts li span {border-bottom: 1px dotted white;}\n.shortcuts li span.selected {padding: 2px;background-color: #528036;}\n.shortcuts li a {color: #fff;}\n.ieSuggest {display:none;font-size: 12px;color: silver;position: absolute;left: 10px;top: 2px;}\n.light-bulb {position: absolute;left: -20px;bottom: -35px;width:116px;height:180px;background-image:url(img/lightbulb.png);background-repeat: no-repeat;}\n\n/* Content */\n.content {position: relative;width: 940px;margin: 0 auto;}\n.nav_section {position: relative;height: 20px;font-family: \"Myriad Pro\", \"Trebuchet MS\", sans-serif;font-size: 15px;color: #253;padding: 20px 0;}\n.nav_section ul {position: absolute;right: 10px;}\n.nav_section ul li {display: inline;line-height: 20px;margin: 0 5px 0 20px;border-bottom: 1px dotted white;}\n.nav_section ul li.noline {border-bottom: 0;}\n.nav_section ul li a {color: #fff;}\n.nav_section ul li a.selected {padding: 2px;background-color: #528036;}\n.nav_section ul li.first {border: none;}\n.content .title {margin: 50px 30px 20px 70px;}\n.content li {margin-bottom: 5px;}\n.contentBox {position: relative;overflow: hidden;border: 1px solid white;min-height: 200px;line-height: 25px;background: transparent url(img/contact-bg.png) repeat-x 0 0;}\n\n.zTreeInfo {display:none;width: 940px;position: absolute;}\n.zTreeInfo p {padding-bottom: 50px;}\n.zTreeInfo-left {float: left;width: 280px;height:300px;padding: 0 50px 60px 75px;background:url(img/zTreeIntroduction.jpg) no-repeat 30px 30px;}\n.zTreeInfo-right {position: relative;float: right;width: 475px;padding: 0 50px 60px 0;}\n.zTreeInfo-right li {font-size: 12px;list-style-type: disc;}\n\n.license {display:none;width: 940px;position: absolute;}\n\n.donateInfo {display:block;width: 940px;position: absolute;}\n\n.links {display:none;width: 940px;position: absolute;}\n.links .content {float: left;width: 160px;height:200px;padding: 0 10px 10px 2px;text-align: center;}\n.links .content.first {margin-left: 30px;}\n\n.contact {display:none;width: 940px;position: absolute;}\n.contact .myhome { position: absolute; top:10px; left:620px; width:300px; height:266px; background: transparent url(img/myhome.gif) scroll no-repeat 0 0;}\n\n.siteTag {position: absolute;left: -16px;top: 109px;z-index: 10;width: 65px;height: 46px;padding:0;margin:0 10px 0 0;\n\t\t vertical-align:middle;border:0 none;background: transparent url(img/siteTag.png) scroll no-repeat 0 0;}\n.siteTag.tag_zTreeInfo {background-position: 0 0}\n.siteTag.tag_license {background-position: 0 -46px}\n.siteTag.tag_donate {background-position: 0 -92px}\n.siteTag.tag_contact {background-position: 0 -138px}\n\n.apiContent {width: 940px;}\n.apiContent .right {float: right;padding-right: 100px;}\n.apiContent .left {float: left;padding-right: 20px;border-right: 1px dotted silver;}\n.api_setting {position: relative;margin:20px 0 20px 20px;}\n.api_function {position: relative;margin:20px 0 20px 30px;padding-right: 10px;}\n.api_content_title {text-align: center;font-weight: bold;}\n\n.demoContent {width: 940px;}\n.demoContent .right {float: right;padding: 20px;width: 600px;}\n.demoContent .left {float: left;padding: 20px;}\n.demoContent iframe {width:600px;min-height: 530px;}\n\n.faqContent {width: 940px;}\n.faqContent .right {float: right;padding: 20px;width: 600px;}\n.faqContent .left {float: left;padding: 20px;}\n.faqContent iframe {width:600px;min-height: 300px;}\n\n.baby_overlay_tmp {position: absolute;top:0; left:-5000px;display:block;visibility: hidden;width:640px;font-size:11px;}\n.baby_overlay_tmp .details {padding: 20px;}\n.baby_overlay {display:none;position:absolute;z-index:99;left:0; top:0;width:640px;color:#fff;font-size:11px;}\n.baby_overlay .content {width:100%; height:100px;overflow: hidden;background: transparent url(img/overlay_bg.png) scroll repeat 0 0;}\n.baby_overlay .details {padding:0 20px 20px 20px;}\n.baby_overlay .close {background-image:url(img/close.png);position:absolute; right:5px; top:5px;cursor:pointer;height:36px;width:36px;}\n.baby_overlay_arrow {background-image:url(img/overlay_arrow.png);background-position:0 0;position:absolute;height:40px;width:40px;left: -40px;}\n.baby_overlay_arrow.reverse {background-position:0 -40px;}\n\n/* Footer */\n.footer {position: relative;min-width: 1000px;font: 14px/24px arial, helvetica, sans-serif;}\n.footer ul {position:absolute;left: 0px;border:1px solid #393939;background:#262626;padding:12px 0px;line-height: 18px;display: none;list-style: none;}\n.footer ul li a {display:block;padding: 2px 15px;color: #9c9c9c;text-indent: 0;}\n.footer ul li a:hover {text-decoration:none;color: #fff;}\n.footer-logo {position:absolute;margin: 10px 0 0 30px;width:122px; height:24px;top:0; left:0;background: transparent url(img/footer-logo.png) no-repeat 0 0;}\n.footer_mii {position: absolute;right: 558px;top: 8px;z-index: 10;padding: 4px 0;}\n.footer_mii a {font-size:10px;color:#649140}\n.footer_mii a:hover {color:#B6D76F}\n.footer_siteMap {position: absolute;right: 358px;top: 8px;width: 155px;z-index: 10;padding: 4px 0;}\n.footer_siteMap .footer_siteMap_header {width:155px;text-indent: -9999px;background: transparent url(img/footer_siteMap.gif) no-repeat 0 0;}\n.footer_siteMap ul {top:-202px;width:180px;}\n.footer_siteMap:hover ul {left: 0}\n.footer_contact {position: absolute;right: 193px;top: 8px;width: 155px;z-index: 10;padding: 4px 0;}\n.footer_contact .footer_contact_header {width:155px;text-indent: -9999px;background: transparent url(img/footer_contact.gif) no-repeat 0px 0px;}\n.footer_contact ul {top:-113px;width:153px;}\n.footer_contact:hover ul {left: 0}\n.footer_download {position: absolute;right: 60px;top: 8px;width: 123px;z-index: 10;padding: 4px 0;}\n.footer_download .footer_download_header {width:123px;text-indent: -9999px;background: transparent url(img/footer_download.png) no-repeat 0px 0px;}\n.footer_download ul {top:-113px;width:140px;}\n.footer_download:hover ul {left: 0}\n\n/* button icon */\nbutton {vertical-align:middle;border:0 none;background: transparent no-repeat 0 0 scroll;}\n\n.shortcuts button.ico {width:24px; height:24px;padding:0; margin:0 10px 0 0;background-image:url(img/menuIcon.png)}\n.shortcuts button.home {background-position: 0 0}\n.shortcuts button.demo {background-position: 0 -24px}\n.shortcuts button.api {background-position: 0 -48px}\n.shortcuts button.faq {background-position: 0 -72px}\n.shortcuts button.donate {background-position: 0 -144px}\n.shortcuts button.download {background-position: 0 -96px}\n.shortcuts button.face {background-position: 0 -120px}\n.shortcuts button.cn {width:48px; height:24px;padding:0; margin:0 10px 0 0;background-image:url(img/chinese.png)}\n.shortcuts button.en {width:48px; height:24px;padding:0; margin:0 10px 0 0;background-image:url(img/english.png)}\n\n.content button.ico {width:24px; height:24px;padding:0; margin:0 10px 0 0;}\n\n.content button.ico16 {width:16px; height:16px;padding:0; margin:0 5px 0 0;background-image:url(\"img/apiMenu.png\");}\nbutton.z_core {margin-top: -4px;background-position:0 0;}\nbutton.z_check {margin-top: -4px;background-position:0 -16px;}\nbutton.z_edit {margin-top: -4px;background-position:0 -32px;}\nbutton.z_hide {margin-top: -4px;background-position:0 -64px;}\nbutton.z_search {margin-top: -4px;background-position:0 -48px;}\nbutton.searchPrev {margin-top: -4px;background-position:-16px 0;cursor:pointer}\nbutton.searchNext {margin-top: -4px;background-position:-16px -16px;cursor:pointer}\nbutton.searchPrev.disabled {margin-top: -4px;background-position:-16px -32px;cursor:auto}\nbutton.searchNext.disabled {margin-top: -4px;background-position:-16px -48px;cursor:auto}\ninput.search {margin:0;padding:2px 0; border:0;}\ninput.searchKey {width:150px;}\ninput.searchResult {margin-left:-3px;width:65px;text-align:right;background-color:white;color:#707070}\ninput.searchResult.noResult {background-color:#ff6666;color:black}\n.baby_overlay div.overlaySearch {text-align:right;padding-right:50px;padding-top:12px;}\n\n/* api overlay*/\n.apiDetail .topLine {border-top: 1px dashed #376B29;margin-top: 5px;padding-top: 5px;}\n.apiDetail .highlight_red {color:#A60000;}\n.apiDetail .highlight_green {color:#A7F43D;}\n.apiDetail h1, .apiDetail h2, .apiDetail h3, .apiDetail h4, .apiDetail h5, .apiDetail h6 {color: white;padding: 0;}\n.apiDetail h2 {color: #A7F43D;margin: 5px auto;padding: 5px;font-size: 20px;}\n.apiDetail h2 span {font-size: 14px;float: right;font-weight: normal;margin: 2px 20px 0 0;vertical-align: bottom;}\n.apiDetail h2 span.path {float: left;margin: 2px 0 0 0;vertical-align: bottom;}\n.apiDetail h3 {margin: 5px auto;padding: 5px;font-size: 14px;font-weight: normal;}\n.apiDetail h3 span.h3_info {margin-left: 20px;font-size: 12px;}\n.apiDetail h4 {margin: 0 auto;padding: 0 5px;font-size: 12px;font-weight: normal;line-height: 16px;}\n.apiDetail .desc h4 {color: black;}\n.apiDetail h4 b{width: 150px;display:inline-block;}\n.apiDetail h4 span{width: 230px;display:inline-block;}\n\n.apiDetail pre, .apiDetail .desc {background: #E8FCD6;color: black;margin: 10px;padding: 10px;display: block;}\n.apiDetail pre {word-wrap: break-word;}\n.apiDetail p{margin-left: 5px;padding: 0;}\n.apiDetail .longdesc {margin-top: 5px;}\n.apiDetail .longdesc p{font-size: 12px;line-height:1.5;margin:3px 0;}\n.apiDetail .longdesc b{font-size: 14px;}\n.apiDetail table {border-collapse:collapse;}\n.apiDetail table td {border:1px solid silver;text-align: center;vertical-align: middle;}\n.apiDetail table thead td {font-weight: bold}\n\n.apiDetail button {width:16px; height:16px; vertical-align:middle; border:0 none; cursor: pointer;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-image:url(\"zTreeStyle/img/zTreeStandard.png\");}\n\n.apiDetail button.chk {width:13px; height:13px; margin:0 3px 2px 0; cursor: auto}\n.apiDetail button.chk.checkbox_false_full {background-position:0 0}\n.apiDetail button.chk.checkbox_false_full_focus {background-position:0 -14px}\n.apiDetail button.chk.checkbox_false_part {background-position:0 -28px}\n.apiDetail button.chk.checkbox_false_part_focus {background-position:0 -42px}\n.apiDetail button.chk.checkbox_true_full {background-position:-14px 0}\n.apiDetail button.chk.checkbox_true_full_focus {background-position:-14px -14px}\n.apiDetail button.chk.checkbox_true_part {background-position:-14px -28px}\n.apiDetail button.chk.checkbox_true_part_focus {background-position:-14px -42px}\n.apiDetail button.chk.radio_false_full {background-position:-28px 0}\n.apiDetail button.chk.radio_false_full_focus {background-position:-28px -14px}\n.apiDetail button.chk.radio_false_part {background-position:-28px -28px}\n.apiDetail button.chk.radio_false_part_focus {background-position:-28px -42px}\n.apiDetail button.chk.radio_true_full {background-position:-42px 0}\n.apiDetail button.chk.radio_true_full_focus {background-position:-42px -14px}\n.apiDetail button.chk.radio_true_part {background-position:-42px -28px}\n.apiDetail button.chk.radio_true_part_focus {background-position:-42px -42px}"
  },
  {
    "path": "lib/zTree_v3/api/apiCss/common_ie6.css",
    "content": "* html{\n/*\tbackground-image:url(about:blank);*/\n\tbackground-attachment:fixed;\n}\nhtml pre {word-wrap: break-word}\n.header {background-image: none;background-color: #F0F6E4;}\n\n.ieSuggest {display:block;}\n.shortcuts button.cn {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/chinese.png');background-image: none;}\n.shortcuts button.en {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/english.png');background-image: none;}\n\n.light-bulb {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/lightbulb.png');background-image: none;}\n.contentBox {background-image: none;background-color: #F0F6E4;}\n.zTreeInfo {background-image: none;background-color: #F0F6E4;}\n\n.content button.ico16 {*background-image:url(\"img/apiMenu.gif\")}\n.siteTag {background-image: none;}\n.apiContent .right {float: right;padding-right: 50px;}\n\ndiv.baby_overlay {background-color: #3C6E31;background-image:none;color:#fff;}\ndiv.baby_overlay .close {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/overlay_close_IE6.gif');background-image: none;}\n.baby_overlay_arrow {background-image:url(img/overlay_arrow.gif);}\n.apiDetail button {background-image:url(\"img/zTreeStandard.gif\")}"
  },
  {
    "path": "lib/zTree_v3/api/apiCss/jquery.ztree.core.js",
    "content": "/*\n * JQuery zTree core v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function(r){var J,K,L,M,N,O,v,t={},w={},x={},P={treeId:\"\",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:\"fast\",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:\"isParent\",children:\"children\",name:\"name\",title:\"\",url:\"url\",icon:\"icon\"},simpleData:{enable:!1,idKey:\"id\",pIdKey:\"pId\",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:\"application/x-www-form-urlencoded\",type:\"post\",\ndataType:\"text\",headers:{},xhrFields:{},url:\"\",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},y=[function(a){var b=a.treeObj,c=g.event;b.bind(c.NODECREATED,\nfunction(b,c,i){h.apply(a.callback.onNodeCreated,[b,c,i])});b.bind(c.CLICK,function(b,c,i,e,k){h.apply(a.callback.onClick,[c,i,e,k])});b.bind(c.EXPAND,function(b,c,i){h.apply(a.callback.onExpand,[b,c,i])});b.bind(c.COLLAPSE,function(b,c,i){h.apply(a.callback.onCollapse,[b,c,i])});b.bind(c.ASYNC_SUCCESS,function(b,c,i,e){h.apply(a.callback.onAsyncSuccess,[b,c,i,e])});b.bind(c.ASYNC_ERROR,function(b,c,i,e,k,g){h.apply(a.callback.onAsyncError,[b,c,i,e,k,g])});b.bind(c.REMOVE,function(b,c,i){h.apply(a.callback.onRemove,\n[b,c,i])});b.bind(c.SELECTED,function(b,c,i){h.apply(a.callback.onSelected,[c,i])});b.bind(c.UNSELECTED,function(b,c,i){h.apply(a.callback.onUnSelected,[c,i])})}],z=[function(a){var b=g.event;a.treeObj.unbind(b.NODECREATED).unbind(b.CLICK).unbind(b.EXPAND).unbind(b.COLLAPSE).unbind(b.ASYNC_SUCCESS).unbind(b.ASYNC_ERROR).unbind(b.REMOVE).unbind(b.SELECTED).unbind(b.UNSELECTED)}],A=[function(a){var b=e.getCache(a);b||(b={},e.setCache(a,b));b.nodes=[];b.doms=[]}],B=[function(a,b,c,d,f,i){if(c){var m=\ne.getRoot(a),k=e.nodeChildren(a,c);c.level=b;c.tId=a.treeId+\"_\"+ ++m.zId;c.parentTId=d?d.tId:null;c.open=typeof c.open==\"string\"?h.eqs(c.open,\"true\"):!!c.open;b=e.nodeIsParent(a,c);h.isArray(k)?(e.nodeIsParent(a,c,!0),c.zAsync=!0):(b=e.nodeIsParent(a,c,b),c.open=b&&!a.async.enable?c.open:!1,c.zAsync=!b);c.isFirstNode=f;c.isLastNode=i;c.getParentNode=function(){return e.getNodeCache(a,c.parentTId)};c.getPreNode=function(){return e.getPreNode(a,c)};c.getNextNode=function(){return e.getNextNode(a,c)};\nc.getIndex=function(){return e.getNodeIndex(a,c)};c.getPath=function(){return e.getNodePath(a,c)};c.isAjaxing=!1;e.fixPIdKeyValue(a,c)}}],u=[function(a){var b=a.target,c=e.getSetting(a.data.treeId),d=\"\",f=null,i=\"\",m=\"\",k=null,j=null,o=null;if(h.eqs(a.type,\"mousedown\"))m=\"mousedown\";else if(h.eqs(a.type,\"mouseup\"))m=\"mouseup\";else if(h.eqs(a.type,\"contextmenu\"))m=\"contextmenu\";else if(h.eqs(a.type,\"click\"))if(h.eqs(b.tagName,\"span\")&&b.getAttribute(\"treeNode\"+g.id.SWITCH)!==null)d=h.getNodeMainDom(b).id,\ni=\"switchNode\";else{if(o=h.getMDom(c,b,[{tagName:\"a\",attrName:\"treeNode\"+g.id.A}]))d=h.getNodeMainDom(o).id,i=\"clickNode\"}else if(h.eqs(a.type,\"dblclick\")&&(m=\"dblclick\",o=h.getMDom(c,b,[{tagName:\"a\",attrName:\"treeNode\"+g.id.A}])))d=h.getNodeMainDom(o).id,i=\"switchNode\";if(m.length>0&&d.length==0&&(o=h.getMDom(c,b,[{tagName:\"a\",attrName:\"treeNode\"+g.id.A}])))d=h.getNodeMainDom(o).id;if(d.length>0)switch(f=e.getNodeCache(c,d),i){case \"switchNode\":e.nodeIsParent(c,f)?h.eqs(a.type,\"click\")||h.eqs(a.type,\n\"dblclick\")&&h.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?k=J:i=\"\":i=\"\";break;case \"clickNode\":k=K}switch(m){case \"mousedown\":j=L;break;case \"mouseup\":j=M;break;case \"dblclick\":j=N;break;case \"contextmenu\":j=O}return{stop:!1,node:f,nodeEventType:i,nodeEventCallback:k,treeEventType:m,treeEventCallback:j}}],C=[function(a){var b=e.getRoot(a);b||(b={},e.setRoot(a,b));e.nodeChildren(a,b,[]);b.expandTriggerFlag=!1;b.curSelectedList=[];b.noSelection=!0;b.createdNodes=[];b.zId=0;b._ver=\n(new Date).getTime()}],D=[],E=[],F=[],G=[],H=[],e={addNodeCache:function(a,b){e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=b},getNodeCacheId:function(a){return a.substring(a.lastIndexOf(\"_\")+1)},addAfterA:function(a){E.push(a)},addBeforeA:function(a){D.push(a)},addInnerAfterA:function(a){G.push(a)},addInnerBeforeA:function(a){F.push(a)},addInitBind:function(a){y.push(a)},addInitUnBind:function(a){z.push(a)},addInitCache:function(a){A.push(a)},addInitNode:function(a){B.push(a)},addInitProxy:function(a,\nb){b?u.splice(0,0,a):u.push(a)},addInitRoot:function(a){C.push(a)},addNodesData:function(a,b,c,d){var f=e.nodeChildren(a,b);f?c>=f.length&&(c=-1):(f=e.nodeChildren(a,b,[]),c=-1);if(f.length>0&&c===0)f[0].isFirstNode=!1,j.setNodeLineIcos(a,f[0]);else if(f.length>0&&c<0)f[f.length-1].isLastNode=!1,j.setNodeLineIcos(a,f[f.length-1]);e.nodeIsParent(a,b,!0);c<0?e.nodeChildren(a,b,f.concat(d)):(a=[c,0].concat(d),f.splice.apply(f,a))},addSelectedNode:function(a,b){var c=e.getRoot(a);e.isSelectedNode(a,b)||\nc.curSelectedList.push(b)},addCreatedNode:function(a,b){(a.callback.onNodeCreated||a.view.addDiyDom)&&e.getRoot(a).createdNodes.push(b)},addZTreeTools:function(a){H.push(a)},exSetting:function(a){r.extend(!0,P,a)},fixPIdKeyValue:function(a,b){a.data.simpleData.enable&&(b[a.data.simpleData.pIdKey]=b.parentTId?b.getParentNode()[a.data.simpleData.idKey]:a.data.simpleData.rootPId)},getAfterA:function(a,b,c){for(var d=0,e=E.length;d<e;d++)E[d].apply(this,arguments)},getBeforeA:function(a,b,c){for(var d=\n0,e=D.length;d<e;d++)D[d].apply(this,arguments)},getInnerAfterA:function(a,b,c){for(var d=0,e=G.length;d<e;d++)G[d].apply(this,arguments)},getInnerBeforeA:function(a,b,c){for(var d=0,e=F.length;d<e;d++)F[d].apply(this,arguments)},getCache:function(a){return x[a.treeId]},getNodeIndex:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d;return-1},getNextNode:function(a,b){if(!b)return null;for(var c=\nb.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d==f?null:c[d+1];return null},getNodeByParam:function(a,b,c,d){if(!b||!c)return null;for(var f=0,i=b.length;f<i;f++){var m=b[f];if(m[c]==d)return b[f];m=e.nodeChildren(a,m);if(m=e.getNodeByParam(a,m,c,d))return m}return null},getNodeCache:function(a,b){if(!b)return null;var c=x[a.treeId].nodes[e.getNodeCacheId(b)];return c?c:null},getNodePath:function(a,b){if(!b)return null;var c;(c=b.parentTId?\nb.getParentNode().getPath():[])&&c.push(b);return c},getNodes:function(a){return e.nodeChildren(a,e.getRoot(a))},getNodesByParam:function(a,b,c,d){if(!b||!c)return[];for(var f=[],i=0,m=b.length;i<m;i++){var k=b[i];k[c]==d&&f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParam(a,k,c,d))}return f},getNodesByParamFuzzy:function(a,b,c,d){if(!b||!c)return[];for(var f=[],d=d.toLowerCase(),i=0,m=b.length;i<m;i++){var k=b[i];typeof k[c]==\"string\"&&b[i][c].toLowerCase().indexOf(d)>-1&&f.push(k);k=e.nodeChildren(a,\nk);f=f.concat(e.getNodesByParamFuzzy(a,k,c,d))}return f},getNodesByFilter:function(a,b,c,d,f){if(!b)return d?null:[];for(var i=d?null:[],m=0,k=b.length;m<k;m++){var g=b[m];if(h.apply(c,[g,f],!1)){if(d)return g;i.push(g)}g=e.nodeChildren(a,g);g=e.getNodesByFilter(a,g,c,d,f);if(d&&g)return g;i=d?g:i.concat(g)}return i},getPreNode:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length;d<f;d++)if(c[d]===b)return d==0?null:c[d-1];return null},\ngetRoot:function(a){return a?w[a.treeId]:null},getRoots:function(){return w},getSetting:function(a){return t[a]},getSettings:function(){return t},getZTreeTools:function(a){return(a=this.getRoot(this.getSetting(a)))?a.treeTools:null},initCache:function(a){for(var b=0,c=A.length;b<c;b++)A[b].apply(this,arguments)},initNode:function(a,b,c,d,e,i){for(var m=0,g=B.length;m<g;m++)B[m].apply(this,arguments)},initRoot:function(a){for(var b=0,c=C.length;b<c;b++)C[b].apply(this,arguments)},isSelectedNode:function(a,\nb){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d])return!0;return!1},nodeChildren:function(a,b,c){if(!b)return null;a=a.data.key.children;typeof c!==\"undefined\"&&(b[a]=c);return b[a]},nodeIsParent:function(a,b,c){if(!b)return!1;a=a.data.key.isParent;typeof c!==\"undefined\"?(typeof c===\"string\"&&(c=h.eqs(c,\"true\")),b[a]=!!c):b[a]=typeof b[a]==\"string\"?h.eqs(b[a],\"true\"):!!b[a];return b[a]},nodeName:function(a,b,c){a=a.data.key.name;typeof c!==\"undefined\"&&\n(b[a]=c);return\"\"+b[a]},nodeTitle:function(a,b){return\"\"+b[a.data.key.title===\"\"?a.data.key.name:a.data.key.title]},removeNodeCache:function(a,b){var c=e.nodeChildren(a,b);if(c)for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=null},removeSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d]||!e.getNodeCache(a,c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),a.treeObj.trigger(g.event.UNSELECTED,\n[a.treeId,b]),d--,f--},setCache:function(a,b){x[a.treeId]=b},setRoot:function(a,b){w[a.treeId]=b},setZTreeTools:function(a,b){for(var c=0,d=H.length;c<d;c++)H[c].apply(this,arguments)},transformToArrayFormat:function(a,b){function c(b){d.push(b);(b=e.nodeChildren(a,b))&&(d=d.concat(e.transformToArrayFormat(a,b)))}if(!b)return[];var d=[];if(h.isArray(b))for(var f=0,i=b.length;f<i;f++)c(b[f]);else c(b);return d},transformTozTreeFormat:function(a,b){var c,d,f=a.data.simpleData.idKey,i=a.data.simpleData.pIdKey;\nif(!f||f==\"\"||!b)return[];if(h.isArray(b)){var g=[],k={};for(c=0,d=b.length;c<d;c++)k[b[c][f]]=b[c];for(c=0,d=b.length;c<d;c++){var j=k[b[c][i]];if(j&&b[c][f]!=b[c][i]){var o=e.nodeChildren(a,j);o||(o=e.nodeChildren(a,j,[]));o.push(b[c])}else g.push(b[c])}return g}else return[b]}},n={bindEvent:function(a){for(var b=0,c=y.length;b<c;b++)y[b].apply(this,arguments)},unbindEvent:function(a){for(var b=0,c=z.length;b<c;b++)z[b].apply(this,arguments)},bindTree:function(a){var b={treeId:a.treeId},c=a.treeObj;\na.view.txtSelectedEnable||c.bind(\"selectstart\",v).css({\"-moz-user-select\":\"-moz-none\"});c.bind(\"click\",b,n.proxy);c.bind(\"dblclick\",b,n.proxy);c.bind(\"mouseover\",b,n.proxy);c.bind(\"mouseout\",b,n.proxy);c.bind(\"mousedown\",b,n.proxy);c.bind(\"mouseup\",b,n.proxy);c.bind(\"contextmenu\",b,n.proxy)},unbindTree:function(a){a.treeObj.unbind(\"selectstart\",v).unbind(\"click\",n.proxy).unbind(\"dblclick\",n.proxy).unbind(\"mouseover\",n.proxy).unbind(\"mouseout\",n.proxy).unbind(\"mousedown\",n.proxy).unbind(\"mouseup\",\nn.proxy).unbind(\"contextmenu\",n.proxy)},doProxy:function(a){for(var b=[],c=0,d=u.length;c<d;c++){var e=u[c].apply(this,arguments);b.push(e);if(e.stop)break}return b},proxy:function(a){var b=e.getSetting(a.data.treeId);if(!h.uCanDo(b,a))return!0;for(var b=n.doProxy(a),c=!0,d=0,f=b.length;d<f;d++){var i=b[d];i.nodeEventCallback&&(c=i.nodeEventCallback.apply(i,[a,i.node])&&c);i.treeEventCallback&&(c=i.treeEventCallback.apply(i,[a,i.node])&&c)}return c}};J=function(a,b){var c=e.getSetting(a.data.treeId);\nif(b.open){if(h.apply(c.callback.beforeCollapse,[c.treeId,b],!0)==!1)return!0}else if(h.apply(c.callback.beforeExpand,[c.treeId,b],!0)==!1)return!0;e.getRoot(c).expandTriggerFlag=!0;j.switchNode(c,b);return!0};K=function(a,b){var c=e.getSetting(a.data.treeId),d=c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&e.isSelectedNode(c,b)?0:c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&c.view.selectedMulti?2:1;if(h.apply(c.callback.beforeClick,[c.treeId,b,d],!0)==!1)return!0;d===0?j.cancelPreSelectedNode(c,\nb):j.selectNode(c,b,d===2);c.treeObj.trigger(g.event.CLICK,[a,c.treeId,b,d]);return!0};L=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseDown,[c.treeId,b],!0)&&h.apply(c.callback.onMouseDown,[a,c.treeId,b]);return!0};M=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseUp,[c.treeId,b],!0)&&h.apply(c.callback.onMouseUp,[a,c.treeId,b]);return!0};N=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeDblClick,[c.treeId,b],!0)&&\nh.apply(c.callback.onDblClick,[a,c.treeId,b]);return!0};O=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeRightClick,[c.treeId,b],!0)&&h.apply(c.callback.onRightClick,[a,c.treeId,b]);return typeof c.callback.onRightClick!=\"function\"};v=function(a){a=a.originalEvent.srcElement.nodeName.toLowerCase();return a===\"input\"||a===\"textarea\"};var h={apply:function(a,b,c){return typeof a==\"function\"?a.apply(Q,b?b:[]):c},canAsync:function(a,b){var c=e.nodeChildren(a,b),d=e.nodeIsParent(a,\nb);return a.async.enable&&b&&d&&!(b.zAsync||c&&c.length>0)},clone:function(a){if(a===null)return null;var b=h.isArray(a)?[]:{},c;for(c in a)b[c]=a[c]instanceof Date?new Date(a[c].getTime()):typeof a[c]===\"object\"?h.clone(a[c]):a[c];return b},eqs:function(a,b){return a.toLowerCase()===b.toLowerCase()},isArray:function(a){return Object.prototype.toString.apply(a)===\"[object Array]\"},isElement:function(a){return typeof HTMLElement===\"object\"?a instanceof HTMLElement:a&&typeof a===\"object\"&&a!==null&&\na.nodeType===1&&typeof a.nodeName===\"string\"},$:function(a,b,c){b&&typeof b!=\"string\"&&(c=b,b=\"\");return typeof a==\"string\"?r(a,c?c.treeObj.get(0).ownerDocument:null):r(\"#\"+a.tId+b,c?c.treeObj:null)},getMDom:function(a,b,c){if(!b)return null;for(;b&&b.id!==a.treeId;){for(var d=0,e=c.length;b.tagName&&d<e;d++)if(h.eqs(b.tagName,c[d].tagName)&&b.getAttribute(c[d].attrName)!==null)return b;b=b.parentNode}return null},getNodeMainDom:function(a){return r(a).parent(\"li\").get(0)||r(a).parentsUntil(\"li\").parent().get(0)},\nisChildOrSelf:function(a,b){return r(a).closest(\"#\"+b).length>0},uCanDo:function(){return!0}},j={addNodes:function(a,b,c,d,f){var i=e.nodeIsParent(a,b);if(!a.data.keep.leaf||!b||i)if(h.isArray(d)||(d=[d]),a.data.simpleData.enable&&(d=e.transformTozTreeFormat(a,d)),b){var i=l(b,g.id.SWITCH,a),m=l(b,g.id.ICON,a),k=l(b,g.id.UL,a);if(!b.open)j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,m,g.folder.CLOSE),b.open=!1,k.css({display:\"none\"});e.addNodesData(a,b,c,d);j.createNodes(a,b.level+\n1,d,b,c);f||j.expandCollapseParentNode(a,b,!0)}else e.addNodesData(a,e.getRoot(a),c,d),j.createNodes(a,0,d,null,c)},appendNodes:function(a,b,c,d,f,i,g){if(!c)return[];var k=[],h=d?d:e.getRoot(a),h=e.nodeChildren(a,h),o,l;if(!h||f>=h.length-c.length)f=-1;for(var s=0,n=c.length;s<n;s++){var p=c[s];i&&(o=(f===0||h.length==c.length)&&s==0,l=f<0&&s==c.length-1,e.initNode(a,b,p,d,o,l,g),e.addNodeCache(a,p));o=e.nodeIsParent(a,p);l=[];var I=e.nodeChildren(a,p);I&&I.length>0&&(l=j.appendNodes(a,b+1,I,p,-1,\ni,g&&p.open));g&&(j.makeDOMNodeMainBefore(k,a,p),j.makeDOMNodeLine(k,a,p),e.getBeforeA(a,p,k),j.makeDOMNodeNameBefore(k,a,p),e.getInnerBeforeA(a,p,k),j.makeDOMNodeIcon(k,a,p),e.getInnerAfterA(a,p,k),j.makeDOMNodeNameAfter(k,a,p),e.getAfterA(a,p,k),o&&p.open&&j.makeUlHtml(a,p,k,l.join(\"\")),j.makeDOMNodeMainAfter(k,a,p),e.addCreatedNode(a,p))}return k},appendParentULDom:function(a,b){var c=[],d=l(b,a);!d.get(0)&&b.parentTId&&(j.appendParentULDom(a,b.getParentNode()),d=l(b,a));var f=l(b,g.id.UL,a);f.get(0)&&\nf.remove();f=e.nodeChildren(a,b);f=j.appendNodes(a,b.level+1,f,b,-1,!1,!0);j.makeUlHtml(a,b,c,f.join(\"\"));d.append(c.join(\"\"))},asyncNode:function(a,b,c,d){var f,i;f=e.nodeIsParent(a,b);if(b&&!f)return h.apply(d),!1;else if(b&&b.isAjaxing)return!1;else if(h.apply(a.callback.beforeAsync,[a.treeId,b],!0)==!1)return h.apply(d),!1;if(b)b.isAjaxing=!0,l(b,g.id.ICON,a).attr({style:\"\",\"class\":g.className.BUTTON+\" \"+g.className.ICO_LOADING});var m={},k=h.apply(a.async.autoParam,[a.treeId,b],a.async.autoParam);\nfor(f=0,i=k.length;b&&f<i;f++){var q=k[f].split(\"=\"),o=q;q.length>1&&(o=q[1],q=q[0]);m[o]=b[q]}k=h.apply(a.async.otherParam,[a.treeId,b],a.async.otherParam);if(h.isArray(k))for(f=0,i=k.length;f<i;f+=2)m[k[f]]=k[f+1];else for(var n in k)m[n]=k[n];var s=e.getRoot(a)._ver;r.ajax({contentType:a.async.contentType,cache:!1,type:a.async.type,url:h.apply(a.async.url,[a.treeId,b],a.async.url),data:a.async.contentType.indexOf(\"application/json\")>-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,\nxhrFields:a.async.xhrFields,success:function(i){if(s==e.getRoot(a)._ver){var f=[];try{f=!i||i.length==0?[]:typeof i==\"string\"?eval(\"(\"+i+\")\"):i}catch(k){f=i}if(b)b.isAjaxing=null,b.zAsync=!0;j.setNodeLineIcos(a,b);f&&f!==\"\"?(f=h.apply(a.async.dataFilter,[a.treeId,b,f],f),j.addNodes(a,b,-1,f?h.clone(f):[],!!c)):j.addNodes(a,b,-1,[],!!c);a.treeObj.trigger(g.event.ASYNC_SUCCESS,[a.treeId,b,i]);h.apply(d)}},error:function(c,d,i){if(s==e.getRoot(a)._ver){if(b)b.isAjaxing=null;j.setNodeLineIcos(a,b);a.treeObj.trigger(g.event.ASYNC_ERROR,\n[a.treeId,b,c,d,i])}}});return!0},cancelPreSelectedNode:function(a,b,c){var d=e.getRoot(a).curSelectedList,f,i;for(f=d.length-1;f>=0;f--)if(i=d[f],b===i||!b&&(!c||c!==i))if(l(i,g.id.A,a).removeClass(g.node.CURSELECTED),b){e.removeSelectedNode(a,b);break}else d.splice(f,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,i])},createNodeCallback:function(a){if(a.callback.onNodeCreated||a.view.addDiyDom)for(var b=e.getRoot(a);b.createdNodes.length>0;){var c=b.createdNodes.shift();h.apply(a.view.addDiyDom,\n[a.treeId,c]);a.callback.onNodeCreated&&a.treeObj.trigger(g.event.NODECREATED,[a.treeId,c])}},createNodes:function(a,b,c,d,f){if(c&&c.length!=0){var i=e.getRoot(a),m=!d||d.open||!!l(e.nodeChildren(a,d)[0],a).get(0);i.createdNodes=[];var b=j.appendNodes(a,b,c,d,f,!0,m),k,h;d?(d=l(d,g.id.UL,a),d.get(0)&&(k=d)):k=a.treeObj;k&&(f>=0&&(h=k.children()[f]),f>=0&&h?r(h).before(b.join(\"\")):k.append(b.join(\"\")));j.createNodeCallback(a)}},destroy:function(a){a&&(e.initCache(a),e.initRoot(a),n.unbindTree(a),\nn.unbindEvent(a),a.treeObj.empty(),delete t[a.treeId])},expandCollapseNode:function(a,b,c,d,f){var i=e.getRoot(a),m;if(b){var k=e.nodeChildren(a,b),q=e.nodeIsParent(a,b);if(i.expandTriggerFlag)m=f,f=function(){m&&m();b.open?a.treeObj.trigger(g.event.EXPAND,[a.treeId,b]):a.treeObj.trigger(g.event.COLLAPSE,[a.treeId,b])},i.expandTriggerFlag=!1;if(!b.open&&q&&(!l(b,g.id.UL,a).get(0)||k&&k.length>0&&!l(k[0],a).get(0)))j.appendParentULDom(a,b),j.createNodeCallback(a);if(b.open==c)h.apply(f,[]);else{var c=\nl(b,g.id.UL,a),i=l(b,g.id.SWITCH,a),o=l(b,g.id.ICON,a);q?(b.open=!b.open,b.iconOpen&&b.iconClose&&o.attr(\"style\",j.makeNodeIcoStyle(a,b)),b.open?(j.replaceSwitchClass(b,i,g.folder.OPEN),j.replaceIcoClass(b,o,g.folder.OPEN),d==!1||a.view.expandSpeed==\"\"?(c.show(),h.apply(f,[])):k&&k.length>0?c.slideDown(a.view.expandSpeed,f):(c.show(),h.apply(f,[]))):(j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,o,g.folder.CLOSE),d==!1||a.view.expandSpeed==\"\"||!(k&&k.length>0)?(c.hide(),h.apply(f,[])):\nc.slideUp(a.view.expandSpeed,f))):h.apply(f,[])}}else h.apply(f,[])},expandCollapseParentNode:function(a,b,c,d,e){b&&(b.parentTId?(j.expandCollapseNode(a,b,c,d),b.parentTId&&j.expandCollapseParentNode(a,b.getParentNode(),c,d,e)):j.expandCollapseNode(a,b,c,d,e))},expandCollapseSonNode:function(a,b,c,d,f){var i=e.getRoot(a),i=b?e.nodeChildren(a,b):e.nodeChildren(a,i),g=b?!1:d,k=e.getRoot(a).expandTriggerFlag;e.getRoot(a).expandTriggerFlag=!1;if(i)for(var h=0,l=i.length;h<l;h++)i[h]&&j.expandCollapseSonNode(a,\ni[h],c,g);e.getRoot(a).expandTriggerFlag=k;j.expandCollapseNode(a,b,c,d,f)},isSelectedNode:function(a,b){if(!b)return!1;var c=e.getRoot(a).curSelectedList,d;for(d=c.length-1;d>=0;d--)if(b===c[d])return!0;return!1},makeDOMNodeIcon:function(a,b,c){var d=e.nodeName(b,c),d=b.view.nameIsHTML?d:d.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");a.push(\"<span id='\",c.tId,g.id.ICON,\"' title='' treeNode\",g.id.ICON,\" class='\",j.makeNodeIcoClass(b,c),\"' style='\",j.makeNodeIcoStyle(b,c),\"'></span><span id='\",\nc.tId,g.id.SPAN,\"' class='\",g.className.NAME,\"'>\",d,\"</span>\")},makeDOMNodeLine:function(a,b,c){a.push(\"<span id='\",c.tId,g.id.SWITCH,\"' title='' class='\",j.makeNodeLineClass(b,c),\"' treeNode\",g.id.SWITCH,\"></span>\")},makeDOMNodeMainAfter:function(a){a.push(\"</li>\")},makeDOMNodeMainBefore:function(a,b,c){a.push(\"<li id='\",c.tId,\"' class='\",g.className.LEVEL,c.level,\"' tabindex='0' hidefocus='true' treenode>\")},makeDOMNodeNameAfter:function(a){a.push(\"</a>\")},makeDOMNodeNameBefore:function(a,b,c){var d=\ne.nodeTitle(b,c),f=j.makeNodeUrl(b,c),i=j.makeNodeFontCss(b,c),m=[],k;for(k in i)m.push(k,\":\",i[k],\";\");a.push(\"<a id='\",c.tId,g.id.A,\"' class='\",g.className.LEVEL,c.level,\"' treeNode\",g.id.A,' onclick=\"',c.click||\"\",'\" ',f!=null&&f.length>0?\"href='\"+f+\"'\":\"\",\" target='\",j.makeNodeTarget(c),\"' style='\",m.join(\"\"),\"'\");h.apply(b.view.showTitle,[b.treeId,c],b.view.showTitle)&&d&&a.push(\"title='\",d.replace(/'/g,\"&#39;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),\"'\");a.push(\">\")},makeNodeFontCss:function(a,\nb){var c=h.apply(a.view.fontCss,[a.treeId,b],a.view.fontCss);return c&&typeof c!=\"function\"?c:{}},makeNodeIcoClass:function(a,b){var c=[\"ico\"];if(!b.isAjaxing){var d=e.nodeIsParent(a,b);c[0]=(b.iconSkin?b.iconSkin+\"_\":\"\")+c[0];d?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU)}return g.className.BUTTON+\" \"+c.join(\"_\")},makeNodeIcoStyle:function(a,b){var c=[];if(!b.isAjaxing){var d=e.nodeIsParent(a,b)&&b.iconOpen&&b.iconClose?b.open?b.iconOpen:b.iconClose:b[a.data.key.icon];d&&c.push(\"background:url(\",\nd,\") 0 0 no-repeat;\");(a.view.showIcon==!1||!h.apply(a.view.showIcon,[a.treeId,b],!0))&&c.push(\"width:0px;height:0px;\")}return c.join(\"\")},makeNodeLineClass:function(a,b){var c=[];a.view.showLine?b.level==0&&b.isFirstNode&&b.isLastNode?c.push(g.line.ROOT):b.level==0&&b.isFirstNode?c.push(g.line.ROOTS):b.isLastNode?c.push(g.line.BOTTOM):c.push(g.line.CENTER):c.push(g.line.NOLINE);e.nodeIsParent(a,b)?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU);return j.makeNodeLineClassEx(b)+c.join(\"_\")},\nmakeNodeLineClassEx:function(a){return g.className.BUTTON+\" \"+g.className.LEVEL+a.level+\" \"+g.className.SWITCH+\" \"},makeNodeTarget:function(a){return a.target||\"_blank\"},makeNodeUrl:function(a,b){var c=a.data.key.url;return b[c]?b[c]:null},makeUlHtml:function(a,b,c,d){c.push(\"<ul id='\",b.tId,g.id.UL,\"' class='\",g.className.LEVEL,b.level,\" \",j.makeUlLineClass(a,b),\"' style='display:\",b.open?\"block\":\"none\",\"'>\");c.push(d);c.push(\"</ul>\")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?\ng.line.LINE:\"\"},removeChildNodes:function(a,b){if(b){var c=e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.removeSelectedNode(a);delete b[a.data.key.children];a.data.keep.parent?l(b,g.id.UL,a).empty():(e.nodeIsParent(a,b,!1),b.open=!1,c=l(b,g.id.SWITCH,a),d=l(b,g.id.ICON,a),j.replaceSwitchClass(b,c,g.folder.DOCU),j.replaceIcoClass(b,d,g.folder.DOCU),l(b,g.id.UL,a).remove())}}},scrollIntoView:function(a,b){if(b)if(typeof Element===\"undefined\"){var c=a.treeObj.get(0).getBoundingClientRect(),\nd=b.getBoundingClientRect();(d.top<c.top||d.bottom>c.bottom||d.right>c.right||d.left<c.left)&&b.scrollIntoView()}else{if(!Element.prototype.scrollIntoViewIfNeeded)Element.prototype.scrollIntoViewIfNeeded=function(a){function b(a,c){return{start:a,length:c,end:a+c}}function c(b,d){return!1===a||d.start<b.end&&b.start<d.end?Math.max(b.end-d.length,Math.min(d.start,b.start)):(b.start+b.end-d.length)/2}function d(a,b){return{x:a,y:b,translate:function(c,i){return d(a+c,b+i)}}}function e(a,b){for(;a;)b=\nb.translate(a.offsetLeft,a.offsetTop),a=a.offsetParent;return b}for(var g=e(this,d(0,0)),j=d(this.offsetWidth,this.offsetHeight),h=this.parentNode,l;h instanceof HTMLElement;)l=e(h,d(h.clientLeft,h.clientTop)),h.scrollLeft=c(b(g.x-l.x,j.x),b(h.scrollLeft,h.clientWidth)),h.scrollTop=c(b(g.y-l.y,j.y),b(h.scrollTop,h.clientHeight)),g=g.translate(-h.scrollLeft,-h.scrollTop),h=h.parentNode};b.scrollIntoViewIfNeeded()}},setFirstNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[0].isFirstNode=\n!0},setLastNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[c.length-1].isLastNode=!0},removeNode:function(a,b){var c=e.getRoot(a),d=b.parentTId?b.getParentNode():c;b.isFirstNode=!1;b.isLastNode=!1;b.getPreNode=function(){return null};b.getNextNode=function(){return null};if(e.getNodeCache(a,b.tId)){l(b,a).remove();e.removeNodeCache(a,b);e.removeSelectedNode(a,b);for(var f=e.nodeChildren(a,d),i=0,h=f.length;i<h;i++)if(f[i].tId==b.tId){f.splice(i,1);break}j.setFirstNode(a,d);j.setLastNode(a,\nd);var k,i=f.length;if(!a.data.keep.parent&&i==0)e.nodeIsParent(a,d,!1),d.open=!1,delete d[a.data.key.children],i=l(d,g.id.UL,a),h=l(d,g.id.SWITCH,a),k=l(d,g.id.ICON,a),j.replaceSwitchClass(d,h,g.folder.DOCU),j.replaceIcoClass(d,k,g.folder.DOCU),i.css(\"display\",\"none\");else if(a.view.showLine&&i>0){var q=f[i-1],i=l(q,g.id.UL,a),h=l(q,g.id.SWITCH,a);k=l(q,g.id.ICON,a);d==c?f.length==1?j.replaceSwitchClass(q,h,g.line.ROOT):(c=l(f[0],g.id.SWITCH,a),j.replaceSwitchClass(f[0],c,g.line.ROOTS),j.replaceSwitchClass(q,\nh,g.line.BOTTOM)):j.replaceSwitchClass(q,h,g.line.BOTTOM);i.removeClass(g.line.LINE)}}},replaceIcoClass:function(a,b,c){if(b&&!a.isAjaxing&&(a=b.attr(\"class\"),a!=void 0)){a=a.split(\"_\");switch(c){case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:a[a.length-1]=c}b.attr(\"class\",a.join(\"_\"))}},replaceSwitchClass:function(a,b,c){if(b){var d=b.attr(\"class\");if(d!=void 0){d=d.split(\"_\");switch(c){case g.line.ROOT:case g.line.ROOTS:case g.line.CENTER:case g.line.BOTTOM:case g.line.NOLINE:d[0]=j.makeNodeLineClassEx(a)+\nc;break;case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:d[1]=c}b.attr(\"class\",d.join(\"_\"));c!==g.folder.DOCU?b.removeAttr(\"disabled\"):b.attr(\"disabled\",\"disabled\")}}},selectNode:function(a,b,c){c||j.cancelPreSelectedNode(a,null,b);l(b,g.id.A,a).addClass(g.node.CURSELECTED);e.addSelectedNode(a,b);a.treeObj.trigger(g.event.SELECTED,[a.treeId,b])},setNodeFontCss:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeFontCss(a,b);d&&c.css(d)},setNodeLineIcos:function(a,b){if(b){var c=l(b,g.id.SWITCH,\na),d=l(b,g.id.UL,a),f=l(b,g.id.ICON,a),i=j.makeUlLineClass(a,b);i.length==0?d.removeClass(g.line.LINE):d.addClass(i);c.attr(\"class\",j.makeNodeLineClass(a,b));e.nodeIsParent(a,b)?c.removeAttr(\"disabled\"):c.attr(\"disabled\",\"disabled\");f.removeAttr(\"style\");f.attr(\"style\",j.makeNodeIcoStyle(a,b));f.attr(\"class\",j.makeNodeIcoClass(a,b))}},setNodeName:function(a,b){var c=e.nodeTitle(a,b),d=l(b,g.id.SPAN,a);d.empty();a.view.nameIsHTML?d.html(e.nodeName(a,b)):d.text(e.nodeName(a,b));h.apply(a.view.showTitle,\n[a.treeId,b],a.view.showTitle)&&l(b,g.id.A,a).attr(\"title\",!c?\"\":c)},setNodeTarget:function(a,b){l(b,g.id.A,a).attr(\"target\",j.makeNodeTarget(b))},setNodeUrl:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeUrl(a,b);d==null||d.length==0?c.removeAttr(\"href\"):c.attr(\"href\",d)},switchNode:function(a,b){b.open||!h.canAsync(a,b)?j.expandCollapseNode(a,b,!b.open):a.async.enable?j.asyncNode(a,b)||j.expandCollapseNode(a,b,!b.open):b&&j.expandCollapseNode(a,b,!b.open)}};r.fn.zTree={consts:{className:{BUTTON:\"button\",\nLEVEL:\"level\",ICO_LOADING:\"ico_loading\",SWITCH:\"switch\",NAME:\"node_name\"},event:{NODECREATED:\"ztree_nodeCreated\",CLICK:\"ztree_click\",EXPAND:\"ztree_expand\",COLLAPSE:\"ztree_collapse\",ASYNC_SUCCESS:\"ztree_async_success\",ASYNC_ERROR:\"ztree_async_error\",REMOVE:\"ztree_remove\",SELECTED:\"ztree_selected\",UNSELECTED:\"ztree_unselected\"},id:{A:\"_a\",ICON:\"_ico\",SPAN:\"_span\",SWITCH:\"_switch\",UL:\"_ul\"},line:{ROOT:\"root\",ROOTS:\"roots\",CENTER:\"center\",BOTTOM:\"bottom\",NOLINE:\"noline\",LINE:\"line\"},folder:{OPEN:\"open\",\nCLOSE:\"close\",DOCU:\"docu\"},node:{CURSELECTED:\"curSelectedNode\"}},_z:{tools:h,view:j,event:n,data:e},getZTreeObj:function(a){return(a=e.getZTreeTools(a))?a:null},destroy:function(a){if(a&&a.length>0)j.destroy(e.getSetting(a));else for(var b in t)j.destroy(t[b])},init:function(a,b,c){var d=h.clone(P);r.extend(!0,d,b);d.treeId=a.attr(\"id\");d.treeObj=a;d.treeObj.empty();t[d.treeId]=d;if(typeof document.body.style.maxHeight===\"undefined\")d.view.expandSpeed=\"\";e.initRoot(d);a=e.getRoot(d);c=c?h.clone(h.isArray(c)?\nc:[c]):[];d.data.simpleData.enable?e.nodeChildren(d,a,e.transformTozTreeFormat(d,c)):e.nodeChildren(d,a,c);e.initCache(d);n.unbindTree(d);n.bindTree(d);n.unbindEvent(d);n.bindEvent(d);var f={setting:d,addNodes:function(a,b,c,f){function g(){j.addNodes(d,a,b,n,f==!0)}a||(a=null);var l=e.nodeIsParent(d,a);if(a&&!l&&d.data.keep.leaf)return null;l=parseInt(b,10);isNaN(l)?(f=!!c,c=b,b=-1):b=l;if(!c)return null;var n=h.clone(h.isArray(c)?c:[c]);h.canAsync(d,a)?j.asyncNode(d,a,f,g):g();return n},cancelSelectedNode:function(a){j.cancelPreSelectedNode(d,\na)},destroy:function(){j.destroy(d)},expandAll:function(a){a=!!a;j.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,f,g){function n(){var b=l(a,d).get(0);b&&f!==!1&&j.scrollIntoView(d,b)}if(!a||!e.nodeIsParent(d,a))return null;b!==!0&&b!==!1&&(b=!a.open);if((g=!!g)&&b&&h.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(g&&!b&&h.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&j.expandCollapseParentNode(d,a.getParentNode(),\nb,!1);if(b===a.open&&!c)return null;e.getRoot(d).expandTriggerFlag=g;!h.canAsync(d,a)&&c?j.expandCollapseSonNode(d,a,b,!0,n):(a.open=!b,j.switchNode(this.setting,a),n());return b},getNodes:function(){return e.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:e.getNodeByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodeByTId:function(a){return e.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:e.getNodesByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,\nb,c){return!a?null:e.getNodesByParamFuzzy(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,f){b=!!b;return!a||typeof a!=\"function\"?b?null:[]:e.getNodesByFilter(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b,f)},getNodeIndex:function(a){if(!a)return null;for(var b=a.parentTId?a.getParentNode():e.getRoot(d),b=e.nodeChildren(d,b),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1},getSelectedNodes:function(){for(var a=[],b=e.getRoot(d).curSelectedList,c=0,f=b.length;c<f;c++)a.push(b[c]);\nreturn a},isSelectedNode:function(a){return e.isSelectedNode(d,a)},reAsyncChildNodesPromise:function(a,b,c){return new Promise(function(d,e){try{f.reAsyncChildNodes(a,b,c,function(){d(a)})}catch(g){e(g)}})},reAsyncChildNodes:function(a,b,c,f){if(this.setting.async.enable){var h=!a;h&&(a=e.getRoot(d));if(b==\"refresh\"){for(var b=e.nodeChildren(d,a),n=0,r=b?b.length:0;n<r;n++)e.removeNodeCache(d,b[n]);e.removeSelectedNode(d);e.nodeChildren(d,a,[]);h?this.setting.treeObj.empty():l(a,g.id.UL,d).empty()}j.asyncNode(this.setting,\nh?null:a,!!c,f)}},refresh:function(){this.setting.treeObj.empty();var a=e.getRoot(d),b=e.nodeChildren(d,a);e.initRoot(d);e.nodeChildren(d,a,b);e.initCache(d);j.createNodes(d,0,e.nodeChildren(d,a),null,-1)},removeChildNodes:function(a){if(!a)return null;var b=e.nodeChildren(d,a);j.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&h.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(j.removeNode(d,a),b&&this.setting.treeObj.trigger(g.event.REMOVE,[d.treeId,a])))},selectNode:function(a,\nb,c){function e(){if(!c){var b=l(a,d).get(0);j.scrollIntoView(d,b)}}if(a&&h.uCanDo(d)){b=d.view.selectedMulti&&b;if(a.parentTId)j.expandCollapseParentNode(d,a.getParentNode(),!0,!1,e);else if(!c)try{l(a,d).focus().blur()}catch(f){}j.selectNode(d,a,b)}},transformTozTreeNodes:function(a){return e.transformTozTreeFormat(d,a)},transformToArray:function(a){return e.transformToArrayFormat(d,a)},updateNode:function(a){a&&l(a,d).get(0)&&h.uCanDo(d)&&(j.setNodeName(d,a),j.setNodeTarget(d,a),j.setNodeUrl(d,\na),j.setNodeLineIcos(d,a),j.setNodeFontCss(d,a))}};a.treeTools=f;e.setZTreeTools(d,f);(c=e.nodeChildren(d,a))&&c.length>0?j.createNodes(d,0,c,null,-1):d.async.enable&&d.async.url&&d.async.url!==\"\"&&j.asyncNode(d);return f}};var Q=r.fn.zTree,l=h.$,g=Q.consts})(jQuery);\n"
  },
  {
    "path": "lib/zTree_v3/api/apiCss/zTreeStyleForApi.css",
    "content": "/*-------------------------------------\nzTree Style\n\nversion:\t3.0\nauthor:\t\tHunter.z\nemail:\t\thunter.z@263.net\nwebsite:\thttp://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}\n.ztree {margin:0; padding:5px; color:#333}\n.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap}\n.ztree li ul{ margin:0; padding:0 0 0 18px}\n.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}\n\n.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; color:#333; height:17px; text-decoration:none; vertical-align:top; display: inline-block}\n.ztree li a:hover {text-decoration:none}\n.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid;}\n.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid; opacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_prev {}\n.ztree li a.tmpTargetNode_next {}\n.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;\n\tfont-size:12px; border:1px #7EC4CC solid; *border:0px}\n.ztree li span {line-height:16px; margin-right: 2px}\n.ztree li span.button {line-height:0; margin:0;width:16px; height:16px; display: inline-block; vertical-align:middle;\n\tborder:0 none; cursor: pointer;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-image:url(\"./img/zTreeStandard.png\"); *background-image:url(\"./img/zTreeStandard.gif\")}\n\n.ztree li span.button.switch {width:1px; height:18px; visibility: hidden}\n\n.zTreeDragUL {margin:0; padding:0; position:absolute; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}\n.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n\n/* level 等级样式*/\n/*.ztree li button.level0 {\n\tdisplay:none;\n}\n.ztree li ul.level0 {\n\tpadding:0;\n\tbackground:none;\n}*/\n\n.ztree li span.button.core_ico_docu{margin-right:2px; background-position:-126px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.check_ico_docu{margin-right:2px; background-position:-126px -16px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit_ico_docu{margin-right:2px; background-position:-126px -32px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.hide_ico_docu{margin-right:2px; background-position:-160px 0; vertical-align:top; *vertical-align:middle}\n"
  },
  {
    "path": "lib/zTree_v3/api/cn/fn.zTree._z.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON</span><span class=\"path\">$.fn.zTree.</span>_z</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree v3.x 内部的全部方法都可以通过 $.fn.zTree._z 进行调用，开放出来是为了更便于大家开发制作自己的 zTree 插件。 </p>\n\t\t\t<p class=\"highlight_red\">如无特殊需求请勿使用此对象，以及修改此对象内部的各个函数。</p>\n\t\t</div>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/fn.zTree.destroy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId)</span><span class=\"path\">$.fn.zTree.</span>destroy</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>从 zTree v3.4 开始提供销毁 zTree 的方法。 </p>\n\t\t\t<p>1、用此方法可以销毁指定 treeId 的 zTree，也可以销毁当前页面全部的 zTree。</p>\n\t\t\t<p class=\"highlight_red\">2、销毁指定 treeId 的 zTree 也可以使用 zTreeObj.destroy() 方法。</p>\n\t\t\t<p class=\"highlight_red\">3、重新使用已经被销毁的树，必须要使用 init 方法进行初始化。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree 的 DOM 容器的 id</p>\n\t<p class=\"highlight_red\">省略 treeId，表示销毁当前页面全部的 zTree</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 销毁 id 为 \"treeDemo\" 的 zTree</h4>\n\t<pre xmlns=\"\"><code>$.fn.zTree.destroy(\"treeDemo\");</code></pre>\n\t<h4>2. 销毁全部 的 zTree</h4>\n\t<pre xmlns=\"\"><code>$.fn.zTree.destroy();</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/fn.zTree.getZTreeObj.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId)</span><span class=\"path\">$.fn.zTree.</span>getZTreeObj</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree v3.x 专门提供的根据 treeId 获取 zTree 对象的方法。 </p>\n\t\t\t<p class=\"highlight_red\">必须在初始化 zTree 以后才可以使用此方法。</p>\n\t\t\t<p>有了这个方法，用户不再需要自己设定全局变量来保存 zTree 初始化后得到的对象了，而且在所有回调函数中全都会返回 treeId 属性，用户可以随时使用此方法获取需要进行操作的 zTree 对象</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree 的 DOM 容器的 id</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>zTree 对象，提供操作 zTree 的各种方法，对于通过 js 操作 zTree 来说必须通过此对象</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取 id 为 tree 的 zTree 对象</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/fn.zTree.init.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(obj, zSetting, zNodes)</span><span class=\"path\">$.fn.zTree.</span>init</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 初始化方法，创建 zTree 必须使用此方法</p>\n\t\t\t<p>1、页面需要进行 W3C 申明，例如：&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"&nbsp;&nbsp; &nbsp;\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"&gt;。</p>\n\t\t\t<p>2、需要首先加载 jquery-1.4.2.js 或其他更高版本的 jQuery 。</p>\n\t\t\t<p>3、需要加载 jquery-ztree.core-3.0.js，如果需要用到 编辑功能 或 checkbox / radio 还需要分别加载 jquery-ztree.exedit-3.0.js 和 jquery-ztree.excheck-3.0.js 。</p>\n\t\t\t<p>4、需要加载 zTreeStyle.css 以及 zTreeStyle 目录下的 img 文件。</p>\n\t\t\t<p>5、如果需要使用自定义图标请参考相应的Demo。</p>\n\t\t\t<p>6、请注意设置 zTree 的容器样式 class=\"ztree\"，其中 \"ztree\" 这个 className，可以根据需要随意修改，别忘了修改 css 中对应名字就是了，对于容器如果需要增加其他特殊样式，可根据自己的需要进行修改。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>obj</b><span>jQuery Object</span></h4>\n\t<p>用于展现 zTree 的 DOM 容器</p>\n\t<h4 class=\"topLine\"><b>zSetting</b><span>JSON</span></h4>\n\t<p>zTree 的配置数据，具体请参考 “setting 配置详解”中的各个属性详细说明</p>\n\t<h4 class=\"topLine\"><b>zNodes</b><span>Array(JSON) / JSON</span></h4>\n\t<p>zTree 的节点数据，具体请参考 “treeNode 节点数据详解”中的各个属性详细说明</p>\n\t<p class=\"highlight_red\">1、v3.x 支持单独添加一个节点，即如果只新增一个节点，不用必须包在数组中</p>\n\t<p class=\"highlight_red\">2、如果需要异步加载根节点，可以设置为 null 或 [ ]</p>\n\t<p class=\"highlight_red\">3、使用简单数据模式，请参考 setting.data.simpleData 内的属性说明</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>zTree 对象，提供操作 zTree 的各种方法，对于通过 js 操作 zTree 来说必须通过此对象</p>\n\t<p class=\"highlight_red\">如果不需要自行设定全局变量保存，可以利用 $.fn.zTree.getZTreeObj 方法随时获取</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 简单创建 zTree 演示</h4>\n\t<pre xmlns=\"\"><code>&lt;!DOCTYPE html&gt;\n&lt;HTML&gt;\n &lt;HEAD&gt;\n  &lt;TITLE&gt; ZTREE DEMO &lt;/TITLE&gt;\n  &lt;meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"&gt;\n  &lt;link rel=\"stylesheet\" href=\"zTreeStyle/zTreeStyle.css\" type=\"text/css\"&gt;\n  &lt;script type=\"text/javascript\" src=\"jquery-1.4.2.js\"&gt;&lt;/script&gt;\n  &lt;script type=\"text/javascript\" src=\"jquery.ztree.core.js\"&gt;&lt;/script&gt;\n&lt;!--\n  &lt;script type=\"text/javascript\" src=\"jquery.ztree.excheck.js\"&gt;&lt;/script&gt;\n  &lt;script type=\"text/javascript\" src=\"jquery.ztree.exedit.js\"&gt;&lt;/script&gt;\n--&gt;\n  &lt;SCRIPT type=\"text/javascript\" &gt;\n\tvar zTreeObj,\n\tsetting = {\n\t\tview: {\n\t\t\tselectedMulti: false\n\t\t}\n\t},\n\tzTreeNodes = [\n\t\t{\"name\":\"网站导航\", open:true, children: [\n\t\t\t{ \"name\":\"google\", \"url\":\"http://g.cn\", \"target\":\"_blank\"},\n\t\t\t{ \"name\":\"baidu\", \"url\":\"http://baidu.com\", \"target\":\"_blank\"},\n\t\t\t{ \"name\":\"sina\", \"url\":\"http://www.sina.com.cn\", \"target\":\"_blank\"}\n\t\t\t]\n\t\t}\n\t];\n\n\t$(document).ready(function(){\n\t\tzTreeObj = $.fn.zTree.init($(\"#tree\"), setting, zTreeNodes);\n\n\t});\n  &lt;/SCRIPT&gt;\n &lt;/HEAD&gt;\n\n&lt;BODY&gt;\n&lt;ul id=\"tree\" class=\"ztree\" style=\"width:230px; overflow:auto;\"&gt;&lt;/ul&gt;\n &lt;/BODY&gt;\n&lt;/HTML&gt;</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.autoParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Array(String) / Function(treeId, treeNode)</span><span class=\"path\">setting.async.</span>autoParam</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>异步加载时需要自动提交父节点属性的参数。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：[ ]</p>\n\t\t</div>\n\t</div>\n\t<h3>Array(String) 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>1、将需要作为参数提交的属性名称，制作成 Array 即可，例如：[\"id\", \"name\"]</p>\n\t<p>2、可以设置提交时的参数名称，例如 server 只接受 zId : [\"id=zId\"]</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t\t<h4><b>treeId</b><span>String</span></h4>\n\t\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t\t<p>需要异步加载子节点的的父节点 JSON 数据对象</p>\n\t\t<p class=\"highlight_red\">针对根进行异步加载时，treeNode = null</p>\n\t\t<h4 class=\"topLine\"><b>返回值</b><span>Array(String)</span></h4>\n\t\t<p>返回值同 Array(String) 格式的数据</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 id 属性为自动提交的参数</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\"]\n\t}\n};\n假设 异步加载 父节点(node = {id:1, name:\"test\"}) 的子节点时，将提交参数 id=1\n......</code></pre>\n\t<h4>2. 设置 id 属性作为 zId 成为自动提交的参数</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id=zId\"]\n\t}\n};\n假设 对父节点 node = {id:1, name:\"test\"}，进行异步加载时，将提交参数 zId=1\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.contentType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.async.</span>contentType</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Ajax 提交参数的数据类型。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"application/x-www-form-urlencoded\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> contentType = \"application/x-www-form-urlencoded\" 可以满足绝大部分请求，按照标准的 Form 格式提交参数</p>\n\t<p> contentType = \"application/json\" 可以满足 .Net 的编程需要，按照 JSON 格式提交参数</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 Ajax 提交参数的数据类型为 JSON 格式</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\tcontentType: \"application/json\",\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.dataFilter.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, parentNode, responseData)</span><span class=\"path\">setting.async.</span>dataFilter</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于对 Ajax 返回数据进行预处理的函数。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>进行异步加载的父节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">对根进行异步加载时，parentNode = null</p>\n\t<h4 class=\"topLine\"><b>responseData</b><span>Array(JSON) / JSON / String</span></h4>\n\t<p>异步加载获取到的数据转换后的 Array(JSON) / JSON / String 数据对象</p>\n\t<p class=\"highlight_red\">v3.4开始 支持 XML 数据格式的 String</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON) / JSON</span></h4>\n\t<p>返回值是 zTree 支持的JSON 数据结构即可。</p>\n\t<p class=\"highlight_red\">v3.x 支持单个 JSON 节点数据进行加载</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 修改异步获取到的节点name属性</h4>\n\t<pre xmlns=\"\"><code>function ajaxDataFilter(treeId, parentNode, responseData) {\n    if (responseData) {\n      for(var i =0; i < responseData.length; i++) {\n        responseData[i].name += \"_filter\";\n      }\n    }\n    return responseData;\n};\nvar setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tdataFilter: ajaxDataFilter\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.dataType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.async.</span>dataType</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Ajax 获取的数据类型。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"text\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> dataType = \"text\" 可以满足绝大部分请求</p>\n\t<p class=\"highlight_red\">其余 dataType 类型请参考 jQuery ajax 中的 dataType 参数</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 Ajax 获取的数据类型为 纯文本</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\tdataType: \"text\",\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.async.</span>enable</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 是否开启异步加载模式</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示 开启 异步加载模式</p>\n\t<p> false 表示 关闭 异步加载模式</p>\n\t<p class=\"highlight_red\">如果设置为 true，请务必设置 setting.async 内的其它参数。</p>\n\t<p class=\"highlight_red\">如果需要根节点也异步加载，初始化时 treeNodes 参数设置为 null 即可。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要开启异步加载模式</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.headers.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Object</span><span class=\"path\">setting.async.</span>headers</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p><span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"{}\"</p>\n      <p class=\"highlight_red\">v3.5.36+</p>\n\t\t</div>\n\t</div>\n\t<h3>Object 格式说明</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">请参考 jQuery ajax 中的 headers 参数</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.otherParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Array(String) / JSON / Function(treeId, treeNode)</span><span class=\"path\">setting.async.</span>otherParam</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Ajax 请求提交的静态参数键值对。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：[ ]</p>\n\t\t</div>\n\t</div>\n\t<h3>Array(String) 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>可以为空[ ]，如果有 key，则必须存在 value。 例如：[key, value]</p>\n\t</div>\n\t<h3>JSON 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>直接用 JSON 格式制作键值对，例如：{ key1:value1, key2:value2 }</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t\t<h4><b>treeId</b><span>String</span></h4>\n\t\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t\t<p>需要异步加载子节点的的父节点 JSON 数据对象</p>\n\t\t<p class=\"highlight_red\">针对根进行异步加载时，treeNode = null</p>\n\t\t<h4 class=\"topLine\"><b>返回值</b><span>Array(String) || JSON</span></h4>\n\t\t<p>返回值同 Array(String) || JSON 格式的数据</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 Array(String) 格式的参数</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\totherParam: [\"id\", \"1\", \"name\", \"test\"]\n\t}\n};\n进行异步加载时，将提交参数 id=1&name=test</code></pre>\n\t<h4>2. 设置 JSON 格式的参数</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\totherParam: { \"id\":\"1\", \"name\":\"test\"}\n\t}\n};\n进行异步加载时，将提交参数 id=1&name=test</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.type.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.async.</span>type</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Ajax 的 http 请求模式。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"post\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> type = \"post\" 表示异步加载采用 post 方法请求</p>\n\t<p> type = \"get\" 表示异步加载采用 get 方法请求</p>\n\t<p class=\"highlight_red\">对应于 jQuery ajax 中的 type 参数</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置使用 get 方式请求数据</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\ttype: \"get\",\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.url.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Function(treeId, treeNode)</span><span class=\"path\">setting.async.</span>url</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Ajax 获取数据的 URL 地址。<span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>设置固定的异步加载 url 字符串，请注意地址的路径，确保页面能正常加载</p>\n\t<p class=\"highlight_red\">url 内也可以带参数，这些参数就只能是通过 get 方式提交了，并且请注意进行转码</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要异步加载子节点的的父节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">针对根进行异步加载时，treeNode = null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>String</span></h4>\n\t<p>返回值同 String 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置异步获取节点的 URL 为 nodes.php</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"nodes.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置异步获取节点的 URL 为 function 动态获取</h4>\n\t<pre xmlns=\"\"><code>function getAsyncUrl(treeId, treeNode) {\n    return treeNode.isParent ? \"nodes1.php\" : \"nodes2.php\";\n};\nvar setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: getAsyncUrl,\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.async.xhrFields.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Object</span><span class=\"path\">setting.async.</span>xhrFields</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p><span class=\"highlight_red\">[setting.async.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"{}\"</p>\n      <p class=\"highlight_red\">v3.5.36+</p>\n\t\t</div>\n\t</div>\n\t<h3>Object 格式说明</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">请参考 jQuery ajax 中的 xhrFields 参数</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeAsync.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeAsync</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获异步加载之前的事件回调函数，zTree 根据返回值确定是否允许进行异步加载</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>进行异步加载的父节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">针对根进行异步加载时，treeNode = null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将不进行异步加载，也无法触发 onAsyncSuccess / onAsyncError 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止 id 为 1 的父节点进行异步加载操作</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeAsync(treeId, treeNode) {\n    return (treeNode.id !== 1);\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeAsync: zTreeBeforeAsync\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeCheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeCheck</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 勾选 或 取消勾选 之前的事件回调函数，并且根据返回值确定是否允许 勾选 或 取消勾选 </p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>进行 勾选 或 取消勾选 的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，将不会改变勾选状态，并且无法触发 onCheck 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止所有勾选操作，保持初始化的勾选状态</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeCheck(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeCheck: zTreeBeforeCheck\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode, clickFlag)</span><span class=\"path\">setting.callback.</span>beforeClick</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获单击节点之前的事件回调函数，并且根据返回值确定是否允许单击操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>被单击的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>clickFlag</b><span>Number</span></h4>\n\t<p>节点被点击后的选中操作类型，详细看下表</p>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead><tr><td>clickFlag</td><td title=\"是否允许多点选中\">selectedMulti</td><td title=\"是否按下 Ctrl 或 Cmd 键\">autoCancelSelected<br/>&&<br/>event.ctrlKey / metaKey</td><td title=\"节点当前选择状态\">isSelected</td><td>选中操作</td></tr></thead>\n\t\t<tbody>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>false</td><td>普通选中</td></tr>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>true</td><td>普通选中</td></tr>\n\t\t\t<tr><td>2</td><td>true</td><td>true</td><td>false</td><td>追加选中</td></tr>\n\t\t\t<tr><td>0</td><td>true</td><td>true</td><td>true</td><td>取消选中</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>false</td><td>普通选中</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>true</td><td>普通选中</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>true</td><td>false</td><td>普通选中</td></tr>\n\t\t\t<tr><td>0</td><td>false</td><td>true</td><td>true</td><td>取消选中</td></tr>\n\t\t</tbody>\n\t</table>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将不会选中节点，也无法触发 onClick 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止节点被选中</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeClick(treeId, treeNode, clickFlag) {\n    return (treeNode.id !== 1);\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeClick: zTreeBeforeClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeCollapse.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeCollapse</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获父节点折叠之前的事件回调函数，并且根据返回值确定是否允许折叠操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>要折叠的父节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将不会折叠节点，也无法触发 onCollapse 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止所有已展开的父节点折叠</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeCollapse(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeCollapse: zTreeBeforeCollapse\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeDblClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeDblClick</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标双击之前的事件回调函数，并且根据返回值确定触发 onDblClick 事件回调函数</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标双击时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，将仅仅无法触发 onDblClick 事件回调函数，对其他操作无任何影响</p>\n\t<p class=\"highlight_red\">此事件回调函数对双击节点展开功能无任何影响，如果需要设置请参考 setting.view.dblClickExpand 属性</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止 onDblClick 事件</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeDblClick(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeDblClick: zTreeBeforeDblClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeDrag.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNodes)</span><span class=\"path\">setting.callback.</span>beforeDrag</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被拖拽之前的事件回调函数，并且根据返回值确定是否允许开启拖拽操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>被拖拽的节点 treeNodes 所在 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>要被拖拽的节点 JSON 数据集合</p>\n\t<p class=\"highlight_red\">v3.x 允许多个同级节点同时被拖拽，因此将此参数修改为 Array(JSON)</p>\n\t<p class=\"highlight_red\">如果拖拽时多个被选择的节点不是同级关系，则只能拖拽鼠标当前所在位置的节点</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将终止拖拽，也无法触发 onDrag / beforeDrop / onDrop 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止全部拖拽操作</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeDrag(treeId, treeNodes) {\n    return false;\n};\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeDrag: zTreeBeforeDrag\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeDragOpen.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeDragOpen</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获拖拽节点移动到折叠状态的父节点后，即将自动展开该父节点之前的事件回调函数，并且根据返回值确定是否允许自动展开操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>需要被展开的父节点 treeNode 所在 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>要被自动展开的父节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将无法进行自动展开操作</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止全部拖拽时的自动展开操作</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeDragOpen(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeDragOpen: zTreeBeforeDragOpen\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeDrop.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNodes, targetNode, moveType, isCopy)</span><span class=\"path\">setting.callback.</span>beforeDrop</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点拖拽操作结束之前的事件回调函数，并且根据返回值确定是否允许此拖拽操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t\t<p class=\"highlight_red\">如未拖拽到有效位置，则不触发此回调函数，直接将节点恢复原位置</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>目标节点 targetNode 所在 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>被拖拽的节点 JSON 数据集合</p>\n\t<p class=\"highlight_red\">无论拖拽操作为 复制 还是 移动，treeNodes 都是当前被拖拽节点的数据集合。</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>treeNodes 被拖拽放开的目标节点 JSON 数据对象。</p>\n\t<p class=\"highlight_red\">如果拖拽成为根节点，则 targetNode = null</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>指定移动到目标节点的相对位置</p>\n\t<p class=\"highlight_red\">\"inner\"：成为子节点，\"prev\"：成为同级前一个节点，\"next\"：成为同级后一个节点</p>\n\t<h4 class=\"topLine\"><b>isCopy</b><span>Boolean</span></h4>\n\t<p>拖拽节点操作是 复制 或 移动</p>\n\t<p class=\"highlight_red\">true：复制；false：移动</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将恢复被拖拽的节点，也无法触发 onDrop 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止将节点拖拽成为根节点</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) {\n    return !(targetNode == null || (moveType != \"inner\" && !targetNode.parentTId));\n};\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeDrop: zTreeBeforeDrop\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeEditName.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeEditName</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点编辑按钮的 click 事件，并且根据返回值确定是否允许进入名称编辑状态</p>\n\t\t\t<p class=\"highlight_red\">此事件回调函数最主要是用于捕获编辑按钮的点击事件，然后触发自定义的编辑界面操作。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>将要进入编辑名称状态的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，节点将无法进入 zTree 默认的编辑名称状态</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止修改父节点的名称</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeEditName(treeId, treeNode) {\n\treturn !treeNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeEditName: zTreeBeforeEditName\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeExpand.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeExpand</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获父节点展开之前的事件回调函数，并且根据返回值确定是否允许展开操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>要展开的父节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将不会展开节点，也无法触发 onExpand 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止所有已折叠的父节点展开</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeExpand(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeExpand: zTreeBeforeExpand\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeMouseDown.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeMouseDown</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标按键按下之前的事件回调函数，并且根据返回值确定触发 onMouseDown 事件回调函数</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标按键按下时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，将仅仅无法触发 onMouseDown 事件回调函数，对其他操作无任何影响</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止 onMouseDown 事件</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeMouseDown(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeMouseDown: zTreeBeforeMouseDown\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeMouseUp.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeMouseUp</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标按键松开之前的事件回调函数，并且根据返回值确定触发 onMouseUp 事件回调函数</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标按键松开时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，将仅仅无法触发 onMouseUp 事件回调函数，对其他操作无任何影响</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止 onMouseUp 事件</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeMouseUp(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeMouseUp: zTreeBeforeMouseUp\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeRemove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeRemove</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被删除之前的事件回调函数，并且根据返回值确定是否允许删除操作</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>将要删除的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将不删除节点，也无法触发 onRemove 事件回调函数</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止全部删除操作</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeRemove(treeId, treeNode) {\n\treturn false;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeRemove: zTreeBeforeRemove\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeRename.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode, newName, isCancel)</span><span class=\"path\">setting.callback.</span>beforeRename</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点编辑名称结束（Input 失去焦点 或 按下 Enter 键）之后，更新节点名称数据之前的事件回调函数，并且根据返回值确定是否允许更改名称的操作</p>\n\t\t\t<p class=\"highlight_red\">节点进入编辑名称状态后，按 ESC 键可以放弃当前修改，恢复原名称，取消编辑名称状态</p>\n\t\t\t<p class=\"highlight_red\">从 v3.5.13 开始，取消编辑状态也会触发此回调，根据 isCancel 参数判断</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>将要更改名称的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>newName</b><span>String</span></h4>\n\t<p>修改后的新名称</p>\n\t<h4 class=\"topLine\"><b>isCancel</b><span>Boolean</span></h4>\n\t<p>是否取消操作 (v3.5.13+)</p>\n\t<p class=\"highlight_red\">isCancel = true 表示取消编辑操作（按下 ESC 或 使用 cancelEditName 方法）</p>\n\t<p class=\"highlight_red\">isCancel = false 表示确认修改操作</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，zTree 将保持名称编辑状态，无法触发 onRename 事件回调函数，并且会导致屏蔽其它事件，直到修改名称使得 beforeRename 返回 true</p>\n\t<p class=\"highlight_red\">如果返回 false，不会让 input 输入框获取焦点，避免由于警告信息而导致反复触发 beforeRename。 请在关闭提示警告信息后，利用 editName 方法让 input 重新获取焦点。</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止修改的名称的长度小于 5</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeRename(treeId, treeNode, newName, isCancel) {\n\treturn newName.length > 5;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeRename: zTreeBeforeRename\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.beforeRightClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeRightClick</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标右键点击之前的事件回调函数，并且根据返回值确定触发 onRightClick 事件回调函数</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标右键点击时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值是 true / false</p>\n\t<p class=\"highlight_red\">如果返回 false，将仅仅无法触发 onRightClick 事件回调函数，对其他操作无任何影响</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止 onRightClick 事件</h4>\n\t<pre xmlns=\"\"><code>function zTreeBeforeRightClick(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeRightClick: zTreeBeforeRightClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onAsyncError.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span class=\"path\">setting.callback.</span>onAsyncError</h2>\n\t<h2><span>Function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown)</span>&nbsp;</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获异步加载出现异常错误的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeAsync 方法，且返回 false，将无法触发 onAsyncSuccess / onAsyncError 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>进行异步加载的父节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">针对根进行异步加载时，treeNode = null</p>\n\t<h4 class=\"topLine\"><b>XMLHttpRequest</b><span>String</span></h4>\n\t<p>标准 XMLHttpRequest 对象，请参考 JQuery API 文档。</p>\n\t<h4 class=\"topLine\"><b>textStatus</b><span>String</span></h4>\n\t<p>请求状态：success，error，请参考 JQuery API 文档。</p>\n\t<h4 class=\"topLine\"><b>errorThrown</b><span>String</span></h4>\n\t<p>errorThrown 只有当异常发生时才会被传递，请参考 JQuery API 文档。</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 异步加载出现异常后，弹出错误信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n    alert(XMLHttpRequest);\n};\nvar setting = {\n\tcallback: {\n\t\tonAsyncError: zTreeOnAsyncError\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onAsyncSuccess.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode, msg)</span><span class=\"path\">setting.callback.</span>onAsyncSuccess</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获异步加载正常结束的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeAsync 方法，且返回 false，将无法触发 onAsyncSuccess / onAsyncError 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>进行异步加载的父节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">针对根进行异步加载时，treeNode = null</p>\n\t<h4 class=\"topLine\"><b>msg</b><span>String / Object</span></h4>\n\t<p>异步获取的节点数据字符串，主要便于用户调试使用。</p>\n\t<p class=\"highlight_red\">实际数据类型会受 setting.async.dataType 的设置影响，请参考 JQuery API 文档。</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 异步加载成功后，弹出提示信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {\n    alert(msg);\n};\nvar setting = {\n\tcallback: {\n\t\tonAsyncSuccess: zTreeOnAsyncSuccess\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onCheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onCheck</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 checkbox / radio 被勾选 或 取消勾选的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeCheck 方法，且返回 false，将无法触发 onCheck 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>被勾选 或 取消勾选的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次点击 checkbox 或 radio 后， 弹出该节点的 tId、name 以及当前勾选状态的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnCheck(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name + \",\" + treeNode.checked);\n};\nvar setting = {\n\tcallback: {\n\t\tonCheck: zTreeOnCheck\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode, clickFlag)</span><span class=\"path\">setting.callback.</span>onClick</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被点击的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeClick 方法，且返回 false，将无法触发 onClick 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>被点击的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>clickFlag</b><span>Number</span></h4>\n\t<p>节点被点击后的选中操作类型，详细看下表</p>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead><tr><td>clickFlag</td><td title=\"是否允许多点选中\">selectedMulti</td><td title=\"是否按下 Ctrl 或 Cmd 键\">autoCancelSelected<br/>&&<br/>event.ctrlKey / metaKey</td><td title=\"节点当前选择状态\">isSelected</td><td>选中操作</td></tr></thead>\n\t\t<tbody>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>false</td><td>普通选中</td></tr>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>true</td><td>普通选中</td></tr>\n\t\t\t<tr><td>2</td><td>true</td><td>true</td><td>false</td><td>追加选中</td></tr>\n\t\t\t<tr><td>0</td><td>true</td><td>true</td><td>true</td><td>取消选中</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>false</td><td>普通选中</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>true</td><td>普通选中</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>true</td><td>false</td><td>普通选中</td></tr>\n\t\t\t<tr><td>0</td><td>false</td><td>true</td><td>true</td><td>取消选中</td></tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次点击节点后， 弹出该节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnClick(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonClick: zTreeOnClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onCollapse.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onCollapse</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被折叠的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeCollapse 方法，且返回 false，将无法触发 onCollapse 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>被折叠的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次折叠节点后， 弹出该节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnCollapse(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonCollapse: zTreeOnCollapse\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onDblClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onDblClick</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标双击之后的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeDblClick 方法，且返回 false，将无法触发 onDblClick 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标双击时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次鼠标双击后， 弹出鼠标所在节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnDblClick(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonDblClick: zTreeOnDblClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onDrag.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNodes)</span><span class=\"path\">setting.callback.</span>onDrag</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被拖拽的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeDrag 方法，且返回 false，将无法触发 onDragMove 和 onDrag 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>被拖拽的节点 treeNodes 所在 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>要被拖拽的节点 JSON 数据集合</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次开始进行拖拽节点后， 弹出被拖拽节点的个数信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnDrag(event, treeId, treeNodes) {\n    alert(treeNodes.length);\n};\nvar setting = {\n\tcallback: {\n\t\tonDrag: zTreeOnDrag\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onDragMove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNodes)</span><span class=\"path\">setting.callback.</span>onDragMove</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被拖拽过程中移动的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">主要用于捕获 zTree 节点拖拽到的 DOM，从而操作对应的 DOM。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>被拖拽的节点 treeNodes 所在 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>要被拖拽的节点 JSON 数据集合</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 拖拽节点时，随时输出 当前拖拽到的目标 DOM</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnDragMove(event, treeId, treeNodes) {\n    console.log(event.target);\n};\nvar setting = {\n\tcallback: {\n\t\tonDragMove: zTreeOnDragMove\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onDrop.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNodes, targetNode, moveType, isCopy)</span><span class=\"path\">setting.callback.</span>onDrop</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点拖拽操作结束的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeDrop 方法，且返回 false，将无法触发 onDrop 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>目标节点 targetNode 所在 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>被拖拽的节点 JSON 数据集合</p>\n\t<p class=\"highlight_red\">如果拖拽操作为 移动，treeNodes 是当前被拖拽节点的数据集合。</p>\n\t<p class=\"highlight_red\">如果拖拽操作为 复制，treeNodes 是复制后 clone 得到的新节点数据。</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>成为 treeNodes 拖拽结束的目标节点 JSON 数据对象。</p>\n\t<p class=\"highlight_red\">如果拖拽成为根节点，则 targetNode = null</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>指定移动到目标节点的相对位置</p>\n\t<p class=\"highlight_red\">\"inner\"：成为子节点，\"prev\"：成为同级前一个节点，\"next\"：成为同级后一个节点</p>\n\t<p class=\"highlight_red\">如果 moveType = null，表明拖拽无效</p>\n\t<h4 class=\"topLine\"><b>isCopy</b><span>Boolean</span></h4>\n\t<p>拖拽节点操作是 复制 或 移动</p>\n\t<p class=\"highlight_red\">true：复制；false：移动</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次拖拽操作结束后， 弹出该被拖拽节点的个数以及目标节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnDrop(event, treeId, treeNodes, targetNode, moveType) {\n    alert(treeNodes.length + \",\" + (targetNode ? (targetNode.tId + \", \" + targetNode.name) : \"isRoot\" ));\n};\nvar setting = {\n\tcallback: {\n\t\tonDrop: zTreeOnDrop\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onExpand.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onExpand</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点被展开的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeExpand 方法，且返回 false，将无法触发 onExpand 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>被展开的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次展开节点后， 弹出该节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnExpand(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonExpand: zTreeOnExpand\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onMouseDown.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onMouseDown</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标按键按下后的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeMouseDown 方法，且返回 false，将无法触发 onMouseDown 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标按键按下时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次鼠标按键按下后， 弹出鼠标所在节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnMouseDown(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonMouseDown: zTreeOnMouseDown\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onMouseUp.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onMouseUp</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标按键松开后的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">如果设置了 setting.callback.beforeMouseUp 方法，且返回 false，将无法触发 onMouseUp 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标按键松开时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次鼠标按键松开后， 弹出鼠标所在节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnMouseUp(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonMouseUp: zTreeOnMouseUp\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onNodeCreated.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onNodeCreated</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点生成 DOM 后的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">v3.x 采用了延迟加载技术，因此对于父节点未展开的子节点来说，初始化后是不会触发此回调函数，直到其父节点被展开</p>\n\t\t\t<p class=\"highlight_red\">大数据量的节点加载请注意：不设置 onNodeCreated，可以提升一部分初始化性能</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>生成 DOM 完毕的节点的 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 创建节点 DOM 后， 弹出该节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnNodeCreated(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonNodeCreated: zTreeOnNodeCreated\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onRemove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onRemove</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获删除节点之后的事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">如果用户设置了 beforeRemove 回调函数，并返回 false，将无法触发 onRemove 事件回调函数。</p>\n\t\t\t<p>默认值：null</p>\t\t\t\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>将要删除的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 删除节点时，弹出被删除的节点的 tId 以及 name 信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnRemove(event, treeId, treeNode) {\n\talert(treeNode.tId + \", \" + treeNode.name);\n}\nvar setting = {\n\tcallback: {\n\t\tonRemove: zTreeOnRemove\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onRename.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode, isCancel)</span><span class=\"path\">setting.callback.</span>onRename</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获节点编辑名称结束之后的事件回调函数。</p>\n\t\t\t<p>1、节点进入编辑名称状态，并且修改节点名称后触发此回调函数。<span class=\"highlight_red\">如果用户设置了 beforeRename 回调函数，并返回 false，将无法触发 onRename 事件回调函数。</span></p>\n\t\t\t<p>2、<span class=\"highlight_red\">如果通过直接修改 treeNode 的数据，并且利用 updateNode 方法更新，是不会触发此回调函数的。</span></p>\n\t\t\t<p class=\"highlight_red\">3、从 v3.5.13 开始，取消编辑状态也会触发此回调，根据 isCancel 参数判断</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>被修改名称的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>isCancel</b><span>Boolean</span></h4>\n\t<p>是否取消操作 (v3.5.13+)</p>\n\t<p class=\"highlight_red\">isCancel = true 表示取消编辑操作（按下 ESC 或 使用 cancelEditName 方法）</p>\n\t<p class=\"highlight_red\">isCancel = false 表示确认修改操作</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 修改名称后，弹出被修改名称的节点的 tId 以及 name 信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnRename(event, treeId, treeNode, isCancel) {\n\talert(treeNode.tId + \", \" + treeNode.name);\n}\nvar setting = {\n\tcallback: {\n\t\tonRename: zTreeOnRename\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.callback.onRightClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onRightClick</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于捕获 zTree 上鼠标右键点击之后的事件回调函数</p>\n\t\t\t<p class=\"highlight_red\">1、如果设置了 setting.callback.beforeRightClick 方法，且返回 false，将无法触发 onRightClick 事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">2、只要将 function 的引用赋给 onRightClick 属性，则右键点击 zTree 时，将屏蔽浏览器的右键菜单。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event 对象</span></h4>\n\t<p>标准的 js event 对象</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>鼠标右键点击时所在节点的 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果不在节点上，则返回 null</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 每次鼠标右键点击后， 弹出鼠标所在节点的 tId、name 的信息</h4>\n\t<pre xmlns=\"\"><code>function zTreeOnRightClick(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonRightClick: zTreeOnRightClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.autoCheckTrigger.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>autoCheckTrigger</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置自动关联勾选时是否触发 beforeCheck / onCheck 事件回调函数。<span class=\"highlight_red\">[setting.check.enable = true 且 setting.check.chkStyle = \"checkbox\" 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、如果设置 setting.check.chkboxType = { \"Y\": \"\", \"N\": \"\" }，将不会有任何自动关联勾选的操作。</p>\n\t\t\t<p class=\"highlight_red\">2、如果开启触发，对于节点较多的树将会影响性能，因为所有被联动勾选的操作都会触发事件回调函数，请根据需要决定是否使用此功能。</p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 触发 / 不触发 事件回调函数</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要触发自动关联勾选操作</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tautoCheckTrigger: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.chkDisabledInherit.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>chkDisabledInherit</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>当父节点设置 chkDisabled = true 时，设置子节点是否自动继承 chkDisabled = true 。<span class=\"highlight_red\">[setting.check.enable = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、只使用于初始化节点时，便于批量操作。 对于已存在的节点请利用 setChkDisabled 方法单个节点设置。</p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示 新加入子节点时，自动继承父节点 chkDisabled = true 的属性。</p>\n\t<p> false 表示 新加入子节点时，不继承父节点 chkDisabled 的属性。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要子节点自动继承 chkDisabled = true</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkDisabledInherit: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.chkStyle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.check.</span>chkStyle</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>勾选框类型(checkbox 或 radio）<span class=\"highlight_red\">[setting.check.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"checkbox\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>chkStyle = \"checkbox\" 时，显示 checkbox 选择框，<span class=\"highlight_red\">setting.check.chkboxType</span> 属性有效。\n<br/>chkStyle = \"radio\" 时，显示 radio 选择框， <span class=\"highlight_red\">setting.check.radioType</span> 属性有效。</p>\n\t<p class=\"highlight_red\">请注意大小写，不要改变</p>\n\t</div>\n\t<h3>checkbox 状态说明</h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_false_full\"></button>未勾选；<span class=\"highlight_red\">如果是父节点，则无子节点被勾选</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk checkbox_false_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_false_part\"></button>未勾选；（只有父节点存在此状态）<span class=\"highlight_red\">存在被勾选的子节点</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk checkbox_false_part_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_true_full\"></button>被勾选；<span class=\"highlight_red\">如果是父节点，则全部子节点都被勾选</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk checkbox_true_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_true_part\"></button>被勾选；（只有父节点存在此状态）<span class=\"highlight_red\">且部分或无子节点被勾选</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk checkbox_true_part_focus\"></button></p>\n\t\t</div>\n\t</div>\n\t<h3>radio 状态说明</h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p><button type=\"button\" class=\"chk radio_false_full\"></button>未勾选；<span class=\"highlight_red\">如果是父节点，则没有子节点被勾选</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk radio_false_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk radio_false_part\"></button>未勾选；（只有父节点存在此状态）<span class=\"highlight_red\">且存在被勾选的子节点</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk radio_false_part_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk radio_true_full\"></button>被勾选；<span class=\"highlight_red\">如果是父节点，则没有子节点被勾选</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk radio_true_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk radio_true_part\"></button>被勾选；（只有父节点存在此状态）<span class=\"highlight_red\">且存在被勾选的子节点</span>。鼠标移到该节点上显示为：<button type=\"button\" class=\"chk radio_true_part_focus\"></button></p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置选择框为 radio</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkStyle: \"radio\"\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.chkboxType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON</span><span class=\"path\">setting.check.</span>chkboxType</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>勾选 checkbox 对于父子节点的关联关系。<span class=\"highlight_red\">[setting.check.enable = true 且 setting.check.chkStyle = \"checkbox\" 时生效]</span></p>\n\t\t\t<p>默认值：{ \"Y\": \"ps\", \"N\": \"ps\" }</p>\n\t\t</div>\n\t</div>\n\t<h3>JSON 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>Y 属性定义 checkbox 被勾选后的情况；\n<br/>N 属性定义 checkbox 取消勾选后的情况；\n<br/>\"p\" 表示操作会影响父级节点；\n<br/>\"s\" 表示操作会影响子级节点。</p>\n\t<p class=\"highlight_red\">请注意大小写，不要改变</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. checkbox 勾选操作，只影响父级节点；取消勾选操作，只影响子级节点</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkStyle: \"checkbox\",\n\t\tchkboxType: { \"Y\": \"p\", \"N\": \"s\" }\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>enable</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 的节点上是否显示 checkbox / radio</p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 显示 / 不显示 复选框或单选框</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要显示 checkbox</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.nocheckInherit.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>nocheckInherit</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>当父节点设置 nocheck = true 时，设置子节点是否自动继承 nocheck = true 。<span class=\"highlight_red\">[setting.check.enable = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、只使用于初始化节点时，便于批量操作。 对于已存在的节点请利用 updateNode 方法单个节点设置。</p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示 新加入子节点时，自动继承父节点 nocheck = true 的属性。</p>\n\t<p> false 表示 新加入子节点时，不继承父节点 nocheck 的属性。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要子节点自动继承 nocheck = true</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tnocheckInherit: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.check.radioType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.check.</span>radioType</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>radio 的分组范围。<span class=\"highlight_red\">[setting.check.enable = true 且 setting.check.chkStyle = \"radio\" 时生效]</span></p>\n\t\t\t<p>默认值：\"level\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>radioType = \"level\" 时，在每一级节点范围内当做一个分组。\n<br/>radioType = \"all\" 时，在整棵树范围内当做一个分组。</p>\n\t<p class=\"highlight_red\">请注意大小写，不要改变</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 radio 的判别规则为整棵树内</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkStyle: \"radio\",\n\t\tradioType: \"all\"\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.keep.leaf.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.data.keep.</span>leaf</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 的节点叶子节点属性锁，是否始终保持 isParent = false</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 锁定 / 不锁定 叶子节点属性</p>\n\t<p class=\"highlight_red\">如果设置为 true，则所有 isParent = false 的节点，都无法添加子节点。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要锁定叶子节点状态</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkeep: {\n\t\t\tleaf: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.keep.parent.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.data.keep.</span>parent</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 的节点父节点属性锁，是否始终保持 isParent = true</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 锁定 / 不锁定 父节点属性</p>\n\t<p class=\"highlight_red\">如果设置为 true，则所有 isParent = true 的节点，即使该节点的子节点被全部删除或移走，依旧保持父节点状态。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 需要锁定父节点状态</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkeep: {\n\t\t\tparent: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.checked.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>checked</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据中保存 check 状态的属性名称。</p>\n\t\t\t<p>默认值：\"checked\"</p>\n\t\t\t<p class=\"highlight_red\">请勿与 zTree 节点数据的其他参数冲突，例如：checkedOld</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 isChecked 属性当做节点名称</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tchecked: \"isChecked\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.children.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>children</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据中保存子节点数据的属性名称。</p>\n\t\t\t<p>默认值：\"children\"</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 nodes 属性当做节点名称</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tchildren: \"nodes\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.isHidden.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>isHidden</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exhide</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据保存节点是否隐藏的属性名称。</p>\n\t\t\t<p>默认值：\"isHidden\"</p>\n\t\t\t<p class=\"highlight_red\">v3.5.32+</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 hidden 属性当做节点是否隐藏的属性名称</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tisHidden: \"hidden\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.isParent.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>isParent</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据保存节点是否为父节点的属性名称。</p>\n\t\t\t<p>默认值：\"isParent\"</p>\n\t\t\t<p class=\"highlight_red\">v3.5.32+</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 parent 属性当做节点是否为父节点的属性名称</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tisParent: \"parent\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.name.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>name</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据保存节点名称的属性名称。</p>\n\t\t\t<p>默认值：\"name\"</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 ename 属性当做节点名称</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tname: \"ename\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.title.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>title</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据保存节点提示信息的属性名称。<span class=\"highlight_red\">[setting.view.showTitle = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">如果设置为 \"\" ，则自动与 setting.data.key.name 保持一致，避免用户反复设置</p>\n\t\t\t<p>默认值：\"\"</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 fullName 属性当做节点名称</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\ttitle: \"fullName\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.key.url.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>url</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点数据保存节点链接的目标 URL 的属性名称。</p>\n\t\t\t<p class=\"highlight_red\">特殊用途：当后台数据只能生成 url 属性，又不想实现点击节点跳转的功能时，可以直接修改此属性为其他不存在的属性名称</p>\n\t\t\t<p>默认值：\"url\"</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 显示节点时，将 treeNode 的 xUrl 属性当做节点链接的目标 URL</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\turl: \"xUrl\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.simpleData.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.data.simpleData.</span>enable</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>确定 zTree 初始化时的节点数据、异步加载时的节点数据、或 <span class=\"highlight_red\">addNodes</span> 方法中输入的 newNodes 数据是否采用简单数据模式 (Array)</p>\n\t\t\t<p>不需要用户再把数据库中取出的 List 强行转换为复杂的 JSON 嵌套格式</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 使用 / 不使用 简单数据模式</p>\n\t<p class=\"highlight_red\">如果设置为 true，请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId，并且让数据满足父子关系。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 使用简单 Array 格式的数据</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.simpleData.idKey.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.simpleData.</span>idKey</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点数据中保存唯一标识的属性名称。<span class=\"highlight_red\">[setting.data.simpleData.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"id\"</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 使用简单 Array 格式的数据</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.simpleData.pIdKey.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.simpleData.</span>pIdKey</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点数据中保存其父节点唯一标识的属性名称。<span class=\"highlight_red\">[setting.data.simpleData.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：\"pId\"</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 使用简单 Array 格式的数据</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.data.simpleData.rootPId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Number</span><span class=\"path\">setting.data.simpleData.</span>rootPId</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于修正根节点父节点数据，即 pIdKey 指定的属性值。<span class=\"highlight_red\">[setting.data.simpleData.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 使用简单 Array 格式的数据</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.autoExpandTrigger.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.drag.</span>autoExpandTrigger</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽时父节点自动展开是否触发 onExpand 事件回调函数。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 触发 / 不触发 onExpand 事件回调函数。</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置拖拽时父节点自动展开触发 onExpand 事件回调函数</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tautoExpandTrigger: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.autoOpenTime.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>autoOpenTime</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽时父节点自动展开的延时间隔。 (单位：ms)<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：500</p>\n\t\t\t<p class=\"highlight_red\">请根据自己的需求适当调整此值</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置拖拽到父节点上立刻自动展开</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tautoOpenTime: 0\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.borderMax.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>borderMax</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽节点成为根节点时的 Tree 内边界范围 (单位：px)。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：10</p>\n\t\t\t<p class=\"highlight_red\">请根据自己的需求适当调整此值</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 更改拖拽操作节点成为根节点时的 Tree 内边界范围为20px</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tborderMax: 20\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.borderMin.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>borderMin</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽节点成为根节点时的 Tree 外边界范围 (单位：px)。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：-5</p>\n\t\t\t<p class=\"highlight_red\">请根据自己的需求适当调整此值</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 更改拖拽操作节点成为根节点时的 Tree 外边界范围为10px</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tborderMin: -10\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.inner.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNodes, targetNode)</span><span class=\"path\">setting.edit.drag.</span>inner</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽到目标节点时，设置是否允许成为目标节点的子节点。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">拖拽目标是 根 的时候，不触发 prev 和 next，只会触发 inner</p>\n\t\t\t<p class=\"highlight_red\">此功能主要作用是对拖拽进行适当限制（辅助箭头），需要结合 prev、next 一起使用，才能实现完整功能。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 允许 / 不允许 成为目标节点的子节点</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控（多棵树拖拽时，是目标节点所在树的 treeId）</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>被拖拽的节点 JSON 数据集合</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>拖拽时的目标节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如果拖拽的节点要成为根节点，则 targetNode = null</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止拖拽成为目标节点的子节点</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: true,\n\t\t\tinner: false\n\t\t}\n\t}\n};\n......</code></pre>\n\t<h4>2. 禁止拖拽成为根节点的子节点</h4>\n\t<pre xmlns=\"\"><code>function canInner(treeId, nodes, targetNode) {\n\treturn !(targetNode && targetNode.level === 0);\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: true,\n\t\t\tinner: canInner\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.isCopy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.drag.</span>isCopy</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽时, 设置是否允许复制节点。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>规则说明</h3>\n\t<div class=\"desc\">\n\t<p>1、isCopy = true; isMove = true 时，拖拽节点按下 Ctrl 或 Cmd 键表示 copy; 否则为 move</p>\n\t<p>2、isCopy = true; isMove = false 时，所有拖拽操作都是 copy</p>\n\t<p>3、isCopy = false; isMove = true 时，所有拖拽操作都是 move</p>\n\t<p>4、isCopy = false; isMove = false 时，禁止拖拽操作</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置所有拖拽操作都是 copy</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tisCopy: true,\n\t\t\tisMove: false\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.isMove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.drag.</span>isMove</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽时, 设置是否允许移动节点。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>规则说明</h3>\n\t<div class=\"desc\">\n\t<p>1、isCopy = true; isMove = true 时，拖拽节点按下 Ctrl 或 Cmd 键表示 copy; 否则为 move</p>\n\t<p>2、isCopy = true; isMove = false 时，所有拖拽操作都是 copy</p>\n\t<p>3、isCopy = false; isMove = true 时，所有拖拽操作都是 move</p>\n\t<p>4、isCopy = false; isMove = false 时，禁止拖拽操作</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置所有拖拽操作都是 move</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tisCopy: false,\n\t\t\tisMove: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.maxShowNodeNum.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>maxShowNodeNum</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽多个兄弟节点时，浮动图层中显示的最大节点数。 多余的节点用...代替。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值：5</p>\n\t\t\t<p class=\"highlight_red\">请根据自己的需求适当调整此值</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置拖拽时最多可显示10个节点</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tmaxShowNodeNum: 10\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.minMoveSize.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>minMoveSize</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>判定是否拖拽操作的最小位移值 (单位：px)。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">根据自己的需求可适当调整此值，如果太小容易导致点击鼠标时误操作进行拖拽</p>\n\t\t\t<p>默认值：5</p>\n\t\t</div>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 更改拖拽操作启动位移值为10px</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tminMoveSize: 10\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.next.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNodes, targetNode)</span><span class=\"path\">setting.edit.drag.</span>next</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽到目标节点时，设置是否允许移动到目标节点后面的操作。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">拖拽目标是 根 的时候，不触发 prev 和 next，只会触发 inner</p>\n\t\t\t<p class=\"highlight_red\">此功能主要作用是对拖拽进行适当限制（辅助箭头），需要结合 prev、inner 一起使用，才能实现完整功能。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 允许 / 不允许 移动到目标节点后面</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控（多棵树拖拽时，是目标节点所在树的 treeId）</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>被拖拽的节点 JSON 数据集合</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>拖拽时的目标节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止拖拽到节点后面的操作</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: false,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n\t<h4>2. 禁止拖拽到父节点后面的操作</h4>\n\t<pre xmlns=\"\"><code>function canNext(treeId, nodes, targetNode) {\n\treturn !targetNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: canNext,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.drag.prev.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNodes, targetNode)</span><span class=\"path\">setting.edit.drag.</span>prev</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>拖拽到目标节点时，设置是否允许移动到目标节点前面的操作。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p class=\"highlight_red\">拖拽目标是 根 的时候，不触发 prev 和 next，只会触发 inner</p>\n\t\t\t<p class=\"highlight_red\">此功能主要作用是对拖拽进行适当限制（辅助箭头），需要结合 next、inner 一起使用，才能实现完整功能。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 允许 / 不允许 移动到目标节点前面</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控（多棵树拖拽时，是目标节点所在树的 treeId）</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>被拖拽的节点 JSON 数据集合</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>拖拽时的目标节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 禁止拖拽到节点前面的操作</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: false,\n\t\t\tnext: true,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n\t<h4>2. 禁止拖拽到父节点前面的操作</h4>\n\t<pre xmlns=\"\"><code>function canPrev(treeId, nodes, targetNode) {\n\treturn !targetNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: canPrev,\n\t\t\tnext: true,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.editNameSelectAll.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.</span>editNameSelectAll</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点编辑名称 input 初次显示时,设置 txt 内容是否为全选状态。 <span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示 全选状态</p>\n\t<p> false 表示 不是全选状态，光标默认在最后</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置节点编辑名称 input 初次显示时，txt内容为全选状态</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\teditNameSelectAll: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.</span>enable</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 是否处于编辑状态</p>\n\t\t\t<p class=\"highlight_red\">请在初始化之前设置，初始化后需要改变编辑状态请使用 zTreeObj.setEditable() 方法</p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 可以 / 不可以 编辑</p>\n\t</div>\n\t<h3>编辑状态规则说明</h3>\n\t<div class=\"desc\">\n\t<p>1、点击节点时，不会打开 <span class=\"highlight_red\">node.url</span> 指定的 URL。\n<br/>2、全面支持 编辑 与 异步加载 状态共存。\n<br/>3、可以对节点进行拖拽，且支持多棵树之间进行拖拽。\n<br/>4、支持拖拽时 复制/移动 节点。（参考: <span class=\"highlight_red\">setting.edit.drag.isCopy / setting.edit.drag.isMove</span>）\n<br/>5、可以通过编辑按钮修改 name 属性。\n<br/>6、可以通过删除按钮删除节点。\n<br/>\n</p>\n\t<p class=\"highlight_red\">请注意大小写，不要改变</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 进入编辑状态</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.removeTitle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>removeTitle</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>删除按钮的 Title 辅助信息。<span class=\"highlight_red\">[setting.edit.enable = true & setting.edit.showRemoveBtn = true 时生效]</span></p>\n\t\t\t<p>默认值：\"remove\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>鼠标移动到 删除按钮 上时，浏览器自动弹出的辅助信息内容，可根据用户需要自行修改</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置删除按钮 Title 信息的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>String</span></h4>\n\t<p>返回值同 String 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置删除按钮的 Title 辅助信息为: \"删除节点\"</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: true,\n\t\tremoveTitle: \"删除节点\"\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置父节点删除按钮的 Title 辅助信息为: \"删除父节点\"</h4>\n\t<pre xmlns=\"\"><code>function setRemoveTitle(treeId, treeNode) {\n\treturn treeNode.isParent ? \"删除父节点\":\"删除叶子节点\";\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: true,\n\t\tremoveTitle: setRemoveTitle\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.renameTitle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>renameTitle</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>编辑名称按钮的 Title 辅助信息。<span class=\"highlight_red\">[setting.edit.enable = true & setting.edit.showRenameBtn = true 时生效]</span></p>\n\t\t\t<p>默认值：\"rename\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>设置鼠标移动到 编辑名称按钮 上时，浏览器自动弹出的辅助信息内容，可根据用户需要自行修改</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置编辑名称按钮 Title 信息的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>String</span></h4>\n\t<p>返回值同 String 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置编辑名称按钮的 Title 辅助信息为: \"编辑节点名称\"</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: true,\n\t\trenameTitle: \"编辑节点名称\"\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置父节点编辑名称按钮的 Title 辅助信息为: \"编辑父节点名称\"</h4>\n\t<pre xmlns=\"\"><code>function setRenameTitle(treeId, treeNode) {\n\treturn treeNode.isParent ? \"编辑父节点名称\":\"编辑叶子节点名称\";\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: true,\n\t\trenameTitle: setRenameTitle\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.showRemoveBtn.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>showRemoveBtn</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置是否显示删除按钮。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>当点击某节点的删除按钮时：</p>\n\t\t\t<p>1、首先触发 <span class=\"highlight_red\">setting.callback.beforeRemove</span> 回调函数，用户可判定是否进行删除操作。</p>\n\t\t\t<p>2、如果未设置 beforeRemove 或 beforeRemove 返回 true，则删除节点并触发 <span class=\"highlight_red\">setting.callback.onRemove</span> 回调函数。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 显示 / 隐藏 删除按钮</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置是否显示删除按钮的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 不显示删除按钮</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: false\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置所有的父节点不显示删除按钮</h4>\n\t<pre xmlns=\"\"><code>function setRemoveBtn(treeId, treeNode) {\n\treturn !treeNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: setRemoveBtn\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.edit.showRenameBtn.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>showRenameBtn</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置是否显示编辑名称按钮。<span class=\"highlight_red\">[setting.edit.enable = true 时生效]</span></p>\n\t\t\t<p>当点击某节点的编辑名称按钮时：</p>\n\t\t\t<p>1、进入节点编辑名称状态。</p>\n\t\t\t<p>2、编辑名称完毕（Input 失去焦点 或 按下 Enter 键），会触发 <span class=\"highlight_red\">setting.callback.beforeRename</span> 回调函数，用户可根据自己的规则判定是否允许修改名称。</p>\n\t\t\t<p>3、如果 beforeRename 返回 false，则继续保持编辑名称状态，直到名称符合规则位置 （按下 ESC 键可取消编辑名称状态，恢复原名称）。</p>\n\t\t\t<p>4、如果未设置 beforeRename 或 beforeRename 返回 true，则结束节点编辑名称状态，更新节点名称，并触发 <span class=\"highlight_red\">setting.callback.onRename</span> 回调函数。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 显示 / 隐藏 编辑名称按钮</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置是否显示编辑名称按钮的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 不显示编辑名称按钮</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: false\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置所有的父节点不显示编辑名称按钮</h4>\n\t<pre xmlns=\"\"><code>function setRenameBtn(treeId, treeNode) {\n\treturn !treeNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: setRenameBtn\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.treeId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.</span>treeId</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 的唯一标识，初始化后，等于 用户定义的 zTree 容器的 id 属性值。</p>\n\t\t\t<p class=\"highlight_red\">请勿进行初始化 或 修改，属于内部参数。</p>\n\t\t</div>\n\t</div>\n\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.treeObj.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Object</span><span class=\"path\">setting.</span>treeObj</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 容器的 jQuery 对象，主要功能：便于操作。</p>\n\t\t\t<p class=\"highlight_red\">请勿进行初始化 或 修改，属于内部参数。</p>\n\t\t</div>\n\t</div>\n\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.addDiyDom.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>addDiyDom</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于在节点上固定显示用户自定义控件</p>\n\t\t\t<p class=\"highlight_red\">1. 大数据量的节点加载请注意：在 addDiyDom 中针对每个节点 查找 DOM 对象并且添加新 DOM 控件，肯定会影响初始化性能；如果不是必须使用，建议不使用此功能</p>\n\t\t\t<p class=\"highlight_red\">2. 属于高级应用，使用时请确保对 zTree 比较了解。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要显示自定义控件的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置节点后面显示一个按钮</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\taddDiyDom: addDiyDom\n\t}\n};\nfunction addDiyDom(treeId, treeNode) {\n\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\tvar editStr = \"&lt;span id='diyBtn_space_\" +treeNode.id+ \"' &gt; &lt;/span&gt;\"\n\t\t+ \"&lt;button type='button' class='diyBtn1' id='diyBtn_\" + treeNode.id\n\t\t+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'&gt;&lt;/button&gt;\";\n\taObj.append(editStr);\n\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.addHoverDom.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>addHoverDom</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于当鼠标移动到节点上时，显示用户自定义控件，显示隐藏状态同 zTree 内部的编辑、删除按钮</p>\n\t\t\t<p class=\"highlight_red\">请务必与 <span class=\"highlight_red\">setting.view.removeHoverDom</span> 同时使用；属于高级应用，使用时请确保对 zTree 比较了解。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要显示自定义控件的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置鼠标移到节点上，在后面显示一个按钮</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\taddHoverDom: addHoverDom,\n\t\tremoveHoverDom: removeHoverDom,\n\t\t......\n\t}\n};\nfunction addHoverDom(treeId, treeNode) {\n\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\tvar editStr = \"&lt;span id='diyBtn_space_\" +treeNode.id+ \"' &gt;&nbsp;&lt;/span&gt;\"\n\t\t+ \"&lt;button type='button' class='diyBtn1' id='diyBtn_\" + treeNode.id\n\t\t+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'&gt;&lt;/button&gt;\";\n\taObj.append(editStr);\n\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n};\nfunction removeHoverDom(treeId, treeNode) {\n\t$(\"#diyBtn_\"+treeNode.id).unbind().remove();\n\t$(\"#diyBtn_space_\" +treeNode.id).unbind().remove();\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.autoCancelSelected.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>autoCancelSelected</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>点击节点时，按下 Ctrl 或 Cmd 键是否允许取消选择操作。</p>\n\t\t\t<p class=\"highlight_red\">如果不需要此功能，请设置为 false。</p>\n\t\t\t<p>默认值: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 支持 / 不支持 配合 Ctrl 或 Cmd 键进行取消节点选择的操作</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 禁止配合 Ctrl 或 Cmd 键进行取消节点选择的操作</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tautoCancelSelected: false\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.dblClickExpand.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>dblClickExpand</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>双击节点时，是否自动展开父节点的标识</p>\n\t\t\t<p>默认值: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示双击节点 切换 / 不切换 展开状态</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置是否双击切换展开状态的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 取消默认双击展开父节点的功能</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tdblClickExpand: false\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置 zTree 仅仅 level=0 的父节点取消双击展开的功能</h4>\n\t<pre xmlns=\"\"><code>function dblClickExpand(treeId, treeNode) {\n\treturn treeNode.level > 0;\n};\nvar setting = {\n\tview: {\n\t\tdblClickExpand: dblClickExpand\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.expandSpeed.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Number</span><span class=\"path\">setting.view.</span>expandSpeed</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 节点展开、折叠时的动画速度，设置方法同 JQuery 动画效果中 speed 参数。</p>\n\t\t\t<p class=\"highlight_red\">IE6 下会自动关闭动画效果，以保证 zTree 的操作速度</p>\n\t\t\t<p>默认值：\"fast\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>三种预定速度之一的字符串(\"slow\", \"normal\", or \"fast\")</p>\n\t<p class=\"highlight_red\">设置为 \"\" 时，不显示动画效果</p>\n\t</div>\n\t<h3>Number 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>表示动画时长的毫秒数值 (如：1000)</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置为慢速显示动画效果</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\texpandSpeed: \"slow\"\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.fontCss.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>fontCss</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>个性化文字样式，只针对 zTree 在节点上显示的&lt;A&gt;对象。</p>\n\t\t\t<p>默认值：{}</p>\n\t\t</div>\n\t</div>\n\t<h3>JSON 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>JSON 格式为 JQuery css方法中的 JSON 对象格式，例如：<span class=\"highlight_red\">{color:\"#ff0011\", background:\"blue\"}</span></p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置自定义样式的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>返回值同 JSON 格式的数据，例如：<span class=\"highlight_red\">{color:\"#ff0011\", background:\"blue\"}</span></p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 不修改CSS，设置全部节点 name 显示为红色</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tfontCss : {color:\"red\"}\n\t}\n};</code></pre>\n\t<h4>2. 设置 level=0 的节点 name 显示为红色</h4>\n\t<pre xmlns=\"\"><code>function setFontCss(treeId, treeNode) {\n\treturn treeNode.level == 0 ? {color:\"red\"} : {};\n};\nvar setting = {\n\tview: {\n\t\tfontCss: setFontCss\n\t}\n};</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.nameIsHTML.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>nameIsHTML</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 name 属性是否支持 HTML 脚本</p>\n\t\t\t<p class=\"highlight_red\">如果允许 HTML 脚本，请根据自己的需求做校验，避免出现 js 注入等安全问题。</p>\n\t\t\t<p>默认值: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 支持 / 不支持 HTML 脚本</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 name 属性支持 HTML 脚本</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tnameIsHTML: true\n\t}\n};\nvar node = {\"name\":\"&lt;font color='red'&gt;test&lt;/font&gt;\"};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.removeHoverDom.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>removeHoverDom</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于当鼠标移出节点时，隐藏用户自定义控件，显示隐藏状态同 zTree 内部的编辑、删除按钮</p>\n\t\t\t<p class=\"highlight_red\">请务必与 <span class=\"highlight_red\">addHoverDom</span> 同时使用；属于高级应用，使用时请确保对 zTree 比较了解。</p>\n\t\t\t<p>默认值：null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要隐藏自定义控件的节点 JSON 数据对象</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置鼠标移到节点上，在后面显示一个按钮</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\taddHoverDom: addHoverDom,\n\t\tremoveHoverDom: removeHoverDom,\n\t\t......\n\t}\n};\nfunction addHoverDom(treeId, treeNode) {\n\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\tvar editStr = \"&lt;span id='diyBtn_space_\" +treeNode.id+ \"' &gt;&nbsp;&lt;/span&gt;\"\n\t\t+ \"&lt;button type='button' class='diyBtn1' id='diyBtn_\" + treeNode.id\n\t\t+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'&gt;&lt;/button&gt;\";\n\taObj.append(editStr);\n\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n};\nfunction removeHoverDom(treeId, treeNode) {\n\t$(\"#diyBtn_\"+treeNode.id).unbind().remove();\n\t$(\"#diyBtn_space_\" +treeNode.id).unbind().remove();\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.selectedMulti.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>selectedMulti</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置是否允许同时选中多个节点。</p>\n\t\t\t<p>默认值: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 支持 / 不支持 同时选中多个节点</p>\n\t<p class=\"highlight_red\">1、设置为 true时，按下 Ctrl 或 Cmd 键可以选中多个节点</p>\n\t<p class=\"highlight_red\">2、设置为 true / false 都不影响按下 Ctrl 或 Cmd 键可以让已选中的节点取消选中状态（ 取消选中状态可以参考 setting.view.autoCancelSelected ）</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 禁止多点同时选中的功能</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tselectedMulti: false\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.showIcon.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>showIcon</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 是否显示节点的图标。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 显示 / 隐藏 图标</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置是否显示图标的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置 zTree 不显示图标</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tshowIcon: false\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置 zTree 仅仅 level=2 的节点不显示图标</h4>\n\t<pre xmlns=\"\"><code>function showIconForTree(treeId, treeNode) {\n\treturn treeNode.level != 2;\n};\nvar setting = {\n\tview: {\n\t\tshowIcon: showIconForTree\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.showLine.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>showLine</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 是否显示节点之间的连线。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 显示 / 不显示 连线</p>\n\t</div>\n\t<h3>setting 举例</h3>\n\t<h4>1. 设置 zTree 不显示节点之间的连线</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tshowLine: false\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.showTitle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>showTitle</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 是否显示节点的 title 提示信息(即节点 DOM 的 title 属性)。</p>\n\t\t\t<p class=\"highlight_red\">请务必与 <span class=\"highlight_red\">setting.data.key.title</span> 同时使用。</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 显示 / 隐藏 提示信息</p>\n\t<p class=\"highlight_red\">如果 setting.view.showTitle = true & setting.data.key.title = ''，zTree 会自动使用 setting.data.key.name 指定的节点名称当做 title</p>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>对应 zTree 的 <b class=\"highlight_red\">treeId</b>，便于用户操控</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要设置是否显示提示信息的节点 JSON 数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值同 Boolean 格式的数据</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置 zTree 不显示提示信息</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tshowTitle: false\n\t}\n};\n......</code></pre>\n\t<h4>2. 设置 zTree 仅仅 level=2 的节点不显示提示信息</h4>\n\t<pre xmlns=\"\"><code>function showTitleForTree(treeId, treeNode) {\n\treturn treeNode.level != 2;\n};\nvar setting = {\n\tview: {\n\t\tshowTitle: showTitleForTree\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/setting.view.txtSelectedEnable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>txtSelectedEnable</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 是否允许可以选择 zTree DOM 内的文本。</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true / false 分别表示 允许 / 不允许 选择 zTree Dom 内的文本</p>\n\t</div>\n\t<h3>setting & function 举例</h3>\n\t<h4>1. 设置 zTree 允许选择文本</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\ttxtSelectedEnable: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.check_Child_State.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">treeNode.</span>check_Child_State</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于设置节点的子节点的 checkBox / radio 的半选状态。<span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">v3.x 针对节点数据对象提供 treeNode.getCheckStatus() 方法获取标准的半选状态</p>\n\t\t\t<p class=\"highlight_red\">zTree 内部使用，请勿进行初始化 或 随意修改</p>\n\t\t\t<p>默认值：true</p>\n\t\t</div>\n\t</div>\n\t<h3>Number 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>规则如下：</p>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"checkbox\"</td></tr>\n\t\t\t<tr><td>treeNode.check_Child_State</td><td>勾选状态说明</td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-1</td><td>不存在子节点 或 子节点全部设置为 nocheck = true</td></tr>\n\t\t\t<tr><td>0</td><td>无 子节点被勾选</td></tr>\n\t\t\t<tr><td>1</td><td>部分 子节点被勾选</td></tr>\n\t\t\t<tr><td>2</td><td>全部 子节点被勾选</td></tr>\n\t\t</tbody>\n\t</table>\n\t<br/>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"radio\"</td></tr>\n\t\t\t<tr><td>treeNode.check_Child_State</td><td>勾选状态说明</td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-1</td><td>不存在子节点 或 子节点全部设置为 nocheck = true</td></tr>\n\t\t\t<tr><td>0</td><td>无 子节点被勾选</td></tr>\n\t\t\t<tr><td>2</td><td>有 子节点被勾选</td></tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.check_Focus.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>check_Focus</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于设置节点的 checkBox / radio 的 focus 状态。<span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">zTree 内部使用，请勿进行初始化 或 随意修改</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>true 表示当前鼠标移动到输入框内</p>\n\t<p>false 表示当前鼠标移动到输入框外</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.checked.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>checked</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点的 checkBox / radio 的 勾选状态。<span class=\"highlight_red\">[setting.check.enable = true & treeNode.nocheck = false 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、如果不使用 checked 属性设置勾选状态，请修改 setting.data.key.checked </p>\n\t\t\t<p class=\"highlight_red\">2、建立 treeNode 数据时设置 treeNode.checked = true 可以让节点的输入框默认为勾选状态</p>\n\t\t\t<p class=\"highlight_red\">3、修改节点勾选状态，可以使用 treeObj.checkNode / checkAllNodes / updateNode 方法，具体使用哪种请根据自己的需求而定</p>\n\t\t\t<p class=\"highlight_red\">4、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 \"false\",\"true\" 字符串格式的数据</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>true 表示节点的输入框被勾选</p>\n\t<p>false 表示节点的输入框未勾选</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 初始化的数据设置 默认为勾选状态</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n{ \"id\":1, \"name\":\"test1\", checked:true },\n{ \"id\":2, \"name\":\"test2\", checked:true }\n]</code></pre>\n\t<h4>2. 获取第一个根节点的勾选状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar checked = treeObj.getNodes()[0].checked;\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.checkedOld.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>checkedOld</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点的 checkBox / radio 在初始化时的 勾选状态。<span class=\"highlight_red\">[setting.check.enable = true & treeNode.nocheck = false 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、zTree 初始化节点数据时会对此属性进行赋值，因此请勿对此属性初始化</p>\n\t\t\t<p class=\"highlight_red\">2、如需配合 zTreeObj.getChangeCheckedNodes 方法实现特殊功能，可以根据需求在使用中自行修改 checkedOld 数据</p>\n\t\t\t<p>默认值：checked的初始化值</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>true 表示节点初始化时 输入框被勾选</p>\n\t<p>false 表示节点初始化时 输入框未勾选</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取第一个根节点的初始勾选状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar checkedOld = treeObj.getNodes()[0].checkedOld;\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.children.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Array(JSON)</span><span class=\"path\">treeNode.</span>children</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点的子节点数据集合。</p>\n\t\t\t<p class=\"highlight_red\">1、如果不使用 children 属性保存子节点数据，请修改 setting.data.key.children </p>\n\t\t\t<p class=\"highlight_red\">2、异步加载时，对于设置了 isParent = true 的节点，在展开时将进行异步加载</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>Array(JSON) 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>标准的 JSON 数据对象</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 初始化的标准嵌套格式的 JSON 数据对象</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n{ \"id\":1, \"name\":\"test1\",\n\tchildren: [\n\t{ \"id\":3, \"name\":\"test3\"},\n\t{ \"id\":4, \"name\":\"test4\"},\n\t{ \"id\":5, \"name\":\"test5\"}\n\t]\n},\n{ \"id\":2, \"name\":\"test2\"  }\n]</code></pre>\n\t<h4>2. 获取第一个根节点的子节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes()[0].children;\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.chkDisabled.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>chkDisabled</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>1、设置节点的 checkbox / radio 是否禁用 <span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">2、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 \"false\",\"true\" 字符串格式的数据</p>\n\t\t\t<p class=\"highlight_red\">3、请勿对已加载的节点修改此属性，禁止 或 取消禁止 请使用 setChkDisabled() 方法</p>\n\t\t\t<p class=\"highlight_red\">4、初始化时，如果需要子孙节点继承父节点的 chkDisabled 属性，请设置 setting.check.chkDisabledInherit 属性</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">true 表示此节点的 checkbox / radio 被禁用。</p>\n\t<p class=\"highlight_red\">false 表示此节点的 checkbox / radio 可以使用。</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 禁用节点 checkbox / radio </h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\", \"checked\":true, \"chkDisabled\":true},\n\t{ \"id\":2, \"name\":\"test2\", \"chkDisabled\":true},\n\t{ \"id\":3, \"name\":\"test3\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.click.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>click</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>最简单的 click 事件操作。相当于 onclick=\"...\" 的内容。 如果操作较复杂，请使用 onClick 事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">由于 IE 对于 onclick 和 click事件共存时的处理与其他浏览器不同，所以请不要利用此参数控制是否允许跳转的操作（例如：treeNode.click = \"return false;\"）。如有类似需求，请不要使用 url 属性设置网址，同时利用 onClick 回调函数控制跳转。</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>标准 javascript 语法， 例如：alert(\"test\"); 等</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置某节点点击时，弹出信息框</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"Google CN\", \"url\":\"http://g.cn\", \"click\":\"alert('test');\"},\n\t......\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.diy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>?</span><span class=\"path\">treeNode.</span>* DIY *</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于保存节点的其他自定义数据信息，不要与 zTree 使用的属性相同即可，用户可随意设定。</p>\n\t\t</div>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置节点的备用英文名称</h4>\n\t<pre xmlns=\"\"><code>var node = { \"id\":1, \"name\":\"test1\", \"ename\":\"test eName\"};</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.editNameFlag.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>editNameFlag</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>用于记录节点是否处于编辑名称状态。<span class=\"highlight_red\">[setting.edit.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">zTree 内部使用，请勿进行初始化 或 随意修改</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>true 表示节点处于编辑名称状态</p>\n\t<p>false 表示节点未处于编辑名称状态</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.getCheckStatus.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getCheckStatus</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取节点 checkbox / radio 半勾选状态。<span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>JSON</span></h4>\n\t<pre xmlns=\"\"><code>{\n\tchecked: true, //等同于 treeNode.checked\n\thalf: true  //规则见下表\n}</code></pre>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"checkbox\"</td></tr>\n\t\t\t<tr><td>treeNode.checked</td><td>treeNode.check_Child_State</td><td>treeNode.halfCheck</td><td> half </td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-</td><td>-</td><td>true</td><td>true</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>true</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>true</td><td>0</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td>true</td><td>1</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td>true</td><td>2</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>false</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>0</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>1</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td>false</td><td>2</td><td>false</td><td>true</td></tr>\n\t\t</tbody>\n\t</table>\n\t<br/>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"radio\"</td></tr>\n\t\t\t<tr><td>treeNode.checked</td><td>treeNode.check_Child_State</td><td>treeNode.halfCheck</td><td> half </td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-</td><td>-</td><td>true</td><td>true</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>true</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>true</td><td>0</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>true</td><td>2</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>false</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>0</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>2</td><td>false</td><td>true</td></tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取第一个根节点的半选状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar halfCheck = treeObj.getNodes()[0].getCheckStatus();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.getIndex.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getIndex</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取 treeNode 节点在同级节点中的位置。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>Number</span></h4>\n\t<p>treeNode 节点在同级节点中的位置。(从 0 开始)</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取当前被选中的节点在同级节点中的位置</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getIndex();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.getNextNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getNextNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取与 treeNode 节点相邻的后一个节点。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>JSON</span></h4>\n\t<p>与 treeNode 节点相邻的后一个节点。</p>\n\t<p class=\"highlight_red\">如果 treeNode 是最后一个节点，返回 null 。</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取当前被选中的节点的下一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getNextNode();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.getParentNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getParentNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取 treeNode 节点的父节点。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>JSON</span></h4>\n\t<p> treeNode 节点的父节点 JSON 数据对象。</p>\n\t<p class=\"highlight_red\">如果 treeNode 是根节点，返回 null 。</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取当前被选中的节点的父节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getParentNode();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.getPath.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getPath</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取 treeNode 节点的所有父节点（包括自己）。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>Array (JSON)</span></h4>\n\t<p> treeNode 节点的所有父节点的数据集合（包括自己）</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取当前被选中的节点的所有父节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getPath();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.getPreNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getPreNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取与 treeNode 节点相邻的前一个节点。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>JSON</span></h4>\n\t<p>与 treeNode 节点相邻的前一个节点。</p>\n\t<p class=\"highlight_red\">如果 treeNode 是第一个节点，返回 null 。</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 获取当前被选中的节点的前一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getPreNode();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.halfCheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>halfCheck</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>强制节点的 checkBox / radio 的 半勾选状态。<span class=\"highlight_red\">[setting.check.enable = true & treeNode.nocheck = false 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、强制为半勾选状态后，不再进行自动计算半勾选状态</p>\n\t\t\t<p class=\"highlight_red\">2、设置 treeNode.halfCheck = false 或 null 才能恢复自动计算半勾选状态</p>\n\t\t\t<p class=\"highlight_red\">3、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 \"false\",\"true\" 字符串格式的数据</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>true 表示节点的输入框 强行设置为半勾选</p>\n\t<p>false 表示节点的输入框 根据 zTree 的规则自动计算半勾选状态</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 初始化的数据设置 默认为半勾选状态</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n{ \"id\":1, \"name\":\"test1\", isParent:true, checked:true, halfCheck:true },\n{ \"id\":2, \"name\":\"test2\", isParent:true, checked:false, halfCheck:true },\n{ \"id\":3, \"name\":\"test3\", isParent:true, checked:true },\n{ \"id\":4, \"name\":\"test4\", isParent:true, checked:false }\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.icon.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>icon</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点自定义图标的 URL 路径。</p>\n\t\t\t<p class=\"highlight_red\">1、父节点如果只设置 icon ，会导致展开、折叠时都使用同一个图标</p>\n\t\t\t<p class=\"highlight_red\">2、父节点展开、折叠使用不同的个性化图标需要同时设置 treeNode.iconOpen / treeNode.iconClose 两个属性</p>\n\t\t\t<p class=\"highlight_red\">3、如果想利用 className 设置个性化图标，需要设置 treeNode.iconSkin 属性</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>图标图片的 url 可以是相对路径也可以是绝对路径</p>\n\t<p class=\"highlight_red\">设置相对路径请注意页面与图片之间的关系，确保图片能够正常加载</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置节点的个性化图标</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t//父节点展开 折叠时使用相同的图标\n\t{ name:\"父节点1\", icon:\"/img/parent.gif\"},\n\n\t//父节点展开 折叠时分别使用不同的图标\n\t{ name:\"父节点2\", iconOpen:\"/img/open.gif\", iconClose:\"/img/close.gif\"}, \n\n\t//叶子节点个性化图标\n\t{ name:\"叶子节点\", icon:\"/img/leaf.gif\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.iconClose.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>iconClose</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>父节点自定义折叠时图标的 URL 路径。</p>\n\t\t\t<p class=\"highlight_red\">1、此属性只针对父节点有效</p>\n\t\t\t<p class=\"highlight_red\">2、此属性必须与 iconOpen 同时使用</p>\n\t\t\t<p class=\"highlight_red\">3、如果想利用 className 设置个性化图标，需要设置 treeNode.iconSkin 属性</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>图标图片的 url 可以是相对路径也可以是绝对路径</p>\n\t<p class=\"highlight_red\">设置相对路径请注意页面与图片之间的关系，确保图片能够正常加载</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置节点的个性化图标</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t//父节点展开 折叠时使用相同的图标\n\t{ name:\"父节点1\", icon:\"/img/parent.gif\"},\n\n\t//父节点展开 折叠时分别使用不同的图标\n\t{ name:\"父节点2\", iconOpen:\"/img/open.gif\", iconClose:\"/img/close.gif\"}, \n\n\t//叶子节点个性化图标\n\t{ name:\"叶子节点\", icon:\"/img/leaf.gif\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.iconOpen.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>iconOpen</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>父节点自定义展开时图标的 URL 路径。</p>\n\t\t\t<p class=\"highlight_red\">1、此属性只针对父节点有效</p>\n\t\t\t<p class=\"highlight_red\">2、此属性必须与 iconClose 同时使用</p>\n\t\t\t<p class=\"highlight_red\">3、如果想利用 className 设置个性化图标，需要设置 treeNode.iconSkin 属性</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>图标图片的 url 可以是相对路径也可以是绝对路径</p>\n\t<p class=\"highlight_red\">设置相对路径请注意页面与图片之间的关系，确保图片能够正常加载</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置节点的个性化图标</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t//父节点展开 折叠时使用相同的图标\n\t{ name:\"父节点1\", icon:\"/img/parent.gif\"},\n\n\t//父节点展开 折叠时分别使用不同的图标\n\t{ name:\"父节点2\", iconOpen:\"/img/open.gif\", iconClose:\"/img/close.gif\"}, \n\n\t//叶子节点个性化图标\n\t{ name:\"叶子节点\", icon:\"/img/leaf.gif\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.iconSkin.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>iconSkin</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点自定义图标的 className</p>\n\t\t\t<p class=\"highlight_red\">1、需要修改 css，增加相应 className 的设置</p>\n\t\t\t<p class=\"highlight_red\">2、css 方式简单、方便，并且同时支持父节点展开、折叠状态切换图片</p>\n\t\t\t<p class=\"highlight_red\">3、css 建议采用图片分割渲染的方式以减少反复加载图片，并且避免图片闪动</p>\n\t\t\t<p class=\"highlight_red\">4、zTree v3.x 的 iconSkin 同样支持 IE6</p>\n\t\t\t<p class=\"highlight_red\">5、如果想直接使用 图片的Url路径 设置节点的个性化图标，需要设置 treeNode.icon / treeNode.iconOpen / treeNode.iconClose 属性</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>设置个性图标的 className</p>\n\t</div>\n\t<h3>css & treeNode 举例</h3>\n\t<h4>1. 设置节点的个性化图标</h4>\n\t<pre xmlns=\"\"><code>css 内容：\n.ztree li span.button.diy01_ico_open, .ztree li span.button.diy01_ico_close{...}\n\n.ztree li span.button.diy02_ico_open{...}\n.ztree li span.button.diy02_ico_close{...}\n\n.ztree li span.button.diy03_ico_docu{...}\n\njs中节点数据：\nvar nodes = [\n\t//父节点展开 折叠时使用相同的图标\n\t{ name:\"父节点1\", iconSkin:\"diy01\"},\n\n\t//父节点展开 折叠时分别使用不同的图标\n\t{ name:\"父节点2\", iconSkin:\"diy02\"},\n\n\t//叶子节点个性化图标\n\t{ name:\"叶子节点\", iconSkin:\"diy03\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.isAjaxing.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isAjaxing</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录 treeNode 节点是否正在进行异步加载。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示节点正在进行异步加载</p>\n\t<p> false 表示节点没有进行异步加载</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点是否节点正在进行异步加载</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isAjaxing = sNodes[0].isAjaxing;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.isFirstNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isFirstNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录 treeNode 节点是否为同级节点中的第一个节点。</p>\n\t\t\t<p class=\"highlight_red\">使用 exhide 扩展后，只针对显示的节点设置此属性</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示是同级节点中的第一个节点</p>\n\t<p> false 表示不是同级节点中的第一个节点</p>\n\t<p class=\"highlight_red\">节点被隐藏后，isFirstNode = false</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点是否是同级节点中的第一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isFirstNode = sNodes[0].isFirstNode;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.isHidden.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isHidden</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exhide</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>判断 treeNode 节点是否被隐藏。</p>\n\t\t\t<p class=\"highlight_red\">1、初始化 zTree 时，如果节点设置 isHidden = true，会被自动隐藏</p>\n\t\t\t<p class=\"highlight_red\">2、请勿对已加载的节点修改此属性，隐藏 / 显示 请使用 hideNode() / hideNodes() / showNode() / showNodes() 方法</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示被隐藏</p>\n\t<p> false 表示被显示</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看第一个根节点是否被隐藏</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getNodes();\nif (sNodes.length > 0) {\n\tvar isHidden = sNodes[0].isHidden;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.isHover.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isHover</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录节点 的 hover 状态，主要用于 setting.view.addHoverDom / removeHoverDom 。</p>\n\t\t\t<p class=\"highlight_red\">zTree 内部使用，请勿进行初始化 或 随意修改</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>true 表示节点处于 hover 状态</p>\n\t<p>false 表示节点未处于 hover 状态</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.isLastNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isLastNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录 treeNode 节点是否为同级节点中的最后一个节点。</p>\n\t\t\t<p class=\"highlight_red\">使用 exhide 扩展后，只针对显示的节点设置此属性</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示是同级节点中的最后一个节点</p>\n\t<p> false 表示不是同级节点中的最后一个节点</p>\n\t<p class=\"highlight_red\">节点被隐藏后，isLastNode = false</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点是否是同级节点中的最后一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isLastNode = sNodes[0].isLastNode;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.isParent.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isParent</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录 treeNode 节点是否为父节点。</p>\n\t\t\t<p class=\"highlight_red\">1、初始化节点数据时，根据 treeNode.children 属性判断，有子节点则设置为 true，否则为 false</p>\n\t\t\t<p class=\"highlight_red\">2、初始化节点数据时，如果设定 treeNode.isParent = true，即使无子节点数据，也会设置为父节点</p>\n\t\t\t<p class=\"highlight_red\">3、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 \"false\",\"true\" 字符串格式的数据</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示是父节点</p>\n\t<p> false 表示不是父节点</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点是否是父节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isParent = sNodes[0].isParent;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.level.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">treeNode.</span>level</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录节点的层级</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>Number 格式说明</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">根节点 level = 0，依次递增</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点的级数</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar level = sNodes[0].level;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.name.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>name</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点名称。</p>\n\t\t\t<p class=\"highlight_red\">1、如果不使用 name 属性保存节点名称，请修改 setting.data.key.name </p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>节点显示的名称字符串，标准 String 即可，所有特殊字符都会被自动转义</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置节点的名称为 test1、test2、test3</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\"},\n\t{ \"id\":2, \"name\":\"test2\"},\n\t{ \"id\":3, \"name\":\"test3\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.nocheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>nocheck</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>1、设置节点是否隐藏 checkbox / radio <span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">2、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 \"false\",\"true\" 字符串格式的数据</p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">true 表示此节点不显示 checkbox / radio，不影响勾选的关联关系，不影响父节点的半选状态。</p>\n\t<p class=\"highlight_red\">false 表示节点具有正常的勾选功能</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 不显示某个节点的 checkbox / radio </h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\", \"nocheck\":true},\n\t{ \"id\":2, \"name\":\"test2\"},\n\t{ \"id\":3, \"name\":\"test3\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.open.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>open</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录 treeNode 节点的 展开 / 折叠 状态。</p>\n\t\t\t<p class=\"highlight_red\">1、初始化节点数据时，如果设定 treeNode.open = true，则会直接展开此节点</p>\n\t\t\t<p class=\"highlight_red\">2、叶子节点 treeNode.open = false</p>\n\t\t\t<p class=\"highlight_red\">3、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 \"false\",\"true\" 字符串格式的数据</p>\n\t\t\t<p class=\"highlight_red\">4、非异步加载模式下，无子节点的父节点设置 open=true 后，可显示为展开状态，但异步加载模式下不会生效。（v3.5.15+） </p>\n\t\t\t<p>默认值：false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示节点为 展开 状态</p>\n\t<p> false 表示节点为 折叠 状态</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点的 展开 / 折叠 状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isOpen = sNodes[0].open;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.parentTId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>parentTId</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>treeNode 节点的父节点唯一标识 tId。</p>\n\t\t\t<p class=\"highlight_red\">1、v3.x 用 parentTId 替换了原先的 parentNode 属性，同时增加了 getParentNode 方法，以避免原先 parentNode 造成的 clone 死循环</p>\n\t\t\t<p class=\"highlight_red\">2、初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>zTree 内部生成的节点唯一标识，请参考 treeNode.tId 的说明</p>\n\t<p class=\"highlight_red\">如果 treeNode 是根节点，则 parentTId = null</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点的父节点 tId</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar parentTId = sNodes[0].parentTId;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.tId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>tId</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>treeNode 节点的唯一标识 tId。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>生成规则：setting.treeId + \"_\" + 内部计数</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点的 tId</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar tId = sNodes[0].tId;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.target.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>target</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置点击节点后在何处打开 url。<span class=\"highlight_red\">[treeNode.url 存在时有效]</span></p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>同超链接 target 属性: \"_blank\", \"_self\" 或 其他指定窗口名称 </p>\n\t<p>省略此属性，则默认为 \"_blank\"</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置点击某节点时，弹出新页面</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\", \"url\":\"http://myTest.com\", \"target\":\"_blank\"},\n\t......\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.url.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>url</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>节点链接的目标 URL</p>\n\t\t\t<p class=\"highlight_red\">1、编辑模式 (setting.edit.enable = true) 下此属性功能失效，如果必须使用类似功能，请利用 onClick 事件回调函数自行控制。</p>\n\t\t\t<p class=\"highlight_red\">2、如果需要在 onClick 事件回调函数中进行跳转控制，那么请将 URL 地址保存在其他自定义的属性内，请勿使用 url</p>\n\t\t\t<p>默认值：无</p>\n\t\t</div>\n\t</div>\n\t<h3>String 格式说明</h3>\n\t<div class=\"desc\">\n\t<p>同超链接 href 属性</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 设置某节点点击时，跳转到 g.cn</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"Google CN\", \"url\":\"http://g.cn\"},\n\t......\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/treeNode.zAsync.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>zAsync</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>记录 treeNode 节点是否已经进行过异步加载，避免父节点反复异步加载数据。</p>\n\t\t\t<p class=\"highlight_red\">初始化节点数据时，由 zTree 增加此属性，请勿提前赋值</p>\n\t\t\t<p class=\"highlight_red\">默认值：false （无子节点的父节点）； true （有子节点的父节点 & 叶子节点）</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean 格式说明</h3>\n\t<div class=\"desc\">\n\t<p> true 表示父节点展开时不需要自动异步加载</p>\n\t<p> false 表示父节点展开时需要自动异步加载</p>\n\t<p class=\"highlight_red\"> 此参数不会对 reAsyncChildNodes 方法造成任何影响</p>\n\t</div>\n\t<h3>treeNode 举例</h3>\n\t<h4>1. 查看当前被选中的节点是否节点是否需要自动异步加载</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar zAsync = sNodes[0].zAsync;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.addNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(parentNode, [index], newNodes, isSilent)</span><span class=\"path\">zTreeObj.</span>addNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>添加节点。</p>\n\t\t\t<p class=\"highlight_red\">v3.x 为了避免原先反复初始化造成的数据重复问题，在 初始化 和 添加节点 时内部进行 clone 操作。如果需要获取数据在 zTree 内的对象，请获取此方法的返回值。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>parentNode</b><span>JSON</span></h4>\n\t<p>指定的父节点，如果增加根节点，请设置 parentNode 为 null 即可。</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4><b>[index]</b><span>Number</span></h4>\n\t<p>新节点插入的位置（从 0 开始）</p>\n\t<p>index = -1 时，插入到最后</p>\n\t<p>此参数可忽略</p>\n\t<p class=\"highlight_red\">v3.5.19+</p>\n\t<h4 class=\"topLine\"><b>newNodes</b><span>JSON / Array(JSON)</span></h4>\n\t<p>需要增加的节点数据 JSON 对象集合，数据只需要满足 zTree 的节点数据必需的属性即可，详细请参考“treeNode 节点数据详解”</p>\n\t<p class=\"highlight_red\">1、v3.x 支持单独添加一个节点，即如果只新增一个节点，不用必须包在数组中</p>\n\t<p class=\"highlight_red\">2、使用简单数据模式，请参考 setting.data.simpleData 内的属性说明</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>设定增加节点后是否自动展开父节点。</p>\n\t<p>isSilent = true 时，不展开父节点，其他值或缺省状态都自动展开。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>返回值是 zTree 最终添加的节点数据集合</p>\n\t<p class=\"highlight_red\">如果 newNodes 是单个节点数据 JSON，返回值也是将其包在 Array 内</p>\n\t<p class=\"highlight_red\">请务必记住：返回值中的数据对象 是 newNodes 被 clone 后的，所以绝对不相等！</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 对于 id = \"tree\" 的 zTree 增加 1 个根节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar newNode = {name:\"newNode1\"};\nnewNode = treeObj.addNodes(null, newNode);\n</code></pre>\n\t<h4>2. 对于 id = \"tree\" 的 zTree 增加 3 个根节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar newNodes = [{name:\"newNode1\"}, {name:\"newNode2\"}, {name:\"newNode3\"}];\nnewNodes = treeObj.addNodes(null, newNodes);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.cancelEditName.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(newName)</span><span class=\"path\">zTreeObj.</span>cancelEditName</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>取消节点的编辑名称状态，可以恢复原名称，也可以强行赋给新的名称。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>newName</b><span>String</span></h4>\n\t<p>重新给定的新名称。</p>\n\t<p class=\"highlight_red\">如果省略此参数，则恢复原名称。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 取消 zTree 的编辑名称状态，恢复该节点原有名称</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.cancelEditName();\n</code></pre>\n\t<h4>2. 取消 zTree 的编辑名称状态，并且重新设定该节点名称</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.cancelEditName(\"test_new_name\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.cancelSelectedNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>cancelSelectedNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>取消节点的选中状态。</p>\n\t\t\t<p class=\"highlight_red\">v3.x 支持多点同时选中，因此取消选中状态可以全部取消，也可以单独取消某个节点的选中状态。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要取消选中状态的节点。</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<p class=\"highlight_red\">如果省略此参数，则将取消全部被选中节点的选中状态。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 取消当前所有被选中节点的选中状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.cancelSelectedNode();\n</code></pre>\n\t<h4>2. 取消当前第一个被选中节点的选中状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) { \n\ttreeObj.cancelSelectedNode(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.checkAllNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(checked)</span><span class=\"path\">zTreeObj.</span>checkAllNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>勾选 或 取消勾选 全部节点。<span class=\"highlight_red\">[setting.check.enable = true 且 setting.check.chkStyle = \"checkbox\" 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">此方法不会触发 beforeCheck / onCheck 事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>checked</b><span>Boolean</span></h4>\n\t<p>checked = true  表示勾选全部节点</p>\n\t<p>checked = false 表示全部节点取消勾选</p>\n\t<p class=\"highlight_red\">不会影响 treeNode.nocheck = true 的节点。</p>\n\t<p class=\"highlight_red\">不会影响未加载的节点。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 勾选全部节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.checkAllNodes(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.checkNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, checked, checkTypeFlag, callbackFlag)</span><span class=\"path\">zTreeObj.</span>checkNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>勾选 或 取消勾选 单个节点。<span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">v3.x 中 checkNode() 方法可以触发 beforeCheck / onCheck 事件回调函数。便于减少冗余代码</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要勾选 或 取消勾选 的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>checked</b><span>Boolean</span></h4>\n\t<p>checked = true  表示勾选节点</p>\n\t<p>checked = false 表示节点取消勾选</p>\n\t<p class=\"highlight_red\">省略此参数，则根据对此节点的勾选状态进行 toggle 切换</p>\n\t<p class=\"highlight_red\">不影响 treeNode.nocheck = true 的节点。</p>\n\t<h4 class=\"topLine\"><b>checkTypeFlag</b><span>Boolean</span></h4>\n\t<p>checkTypeFlag = true 表示按照 setting.check.chkboxType 属性进行父子节点的勾选联动操作</p>\n\t<p>checkTypeFlag = false 表示只修改此节点勾选状态，无任何勾选联动操作</p>\n\t<p class=\"highlight_red\">checkTypeFlag = false 且 treeNode.checked = checked 时，不会触发回调函数，直接返回</p>\n\t<p class=\"highlight_red\">不影响父子节点中 treeNode.nocheck = true 的节点。</p>\n\t<h4 class=\"topLine\"><b>callbackFlag</b><span>Boolean</span></h4>\n\t<p>callbackFlag = true 表示执行此方法时触发 beforeCheck & onCheck 事件回调函数</p>\n\t<p>callbackFlag = false 表示执行此方法时不触发事件回调函数</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 false</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 勾选当前选中的节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nfor (var i=0, l=nodes.length; i < l; i++) {\n\ttreeObj.checkNode(nodes[i], true, true);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.copyNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(targetNode, treeNode, moveType, isSilent)</span><span class=\"path\">zTreeObj.</span>copyNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>复制节点。</p>\n\t\t\t<p class=\"highlight_red\">v3.x 复制节点时进行 clone 操作。如果需要获取数据在 zTree 内的对象，请获取此方法的返回值。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>targetNode</b><span>JSON</span></h4>\n\t<p>要复制到的目标节点 JSON 数据</p>\n\t<p class=\"highlight_red\">如果复制成为根节点，请设置 targetNode 为 null 即可</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要被复制的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>复制到目标节点的相对位置</p>\n\t<p class=\"highlight_red\">\"inner\"：成为子节点，\"prev\"：成为同级前一个节点，\"next\"：成为同级后一个节点</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>设定复制节点后是否自动展开父节点。</p>\n\t<p>isSilent = true 时，不展开父节点，其他值或缺省状态都自动展开。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>返回值是最终加入到 zTree 内的节点数据</p>\n\t<p class=\"highlight_red\">请务必记住：返回值中的数据对象 是 treeNode 被 clone 后的，所以绝对不相等！</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 将根节点中第二个节点 复制成为 第一个节点的子节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.copyNode(nodes[0], nodes[1], \"inner\");\n</code></pre>\n\t<h4>2. 将根节点中第二个节点 复制成为 第一个节点的前一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.copyNode(nodes[0], nodes[1], \"before\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.destroy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId)</span><span class=\"path\">zTreeObj.</span>destroy</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>从 zTree v3.4 开始提供销毁 zTree 的方法。</p>\n\t\t\t<p>1、用此方法可以销毁 zTreeObj 代表的 zTree。</p>\n\t\t\t<p class=\"highlight_red\">2、销毁当前页面全部的 zTree，也可以使用 $.fn.zTree.destroy() 方法。</p>\n\t\t\t<p class=\"highlight_red\">3、重新使用已经被销毁的树，必须要使用 init 方法进行初始化。</p>\n\t\t</div>\n\t</div>\n        <h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 销毁 id 为 \"treeDemo\" 的 zTree</h4>\n\t<pre xmlns=\"\"><code>var zTreeObj = $.fn.zTree.getZTreeObj(\"treeDemo\");\nzTreeObj.destroy();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.editName.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>editName</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置某节点进入编辑名称状态。</p>\n\t\t\t<p class=\"highlight_red\">1、如果需要用 js 取消编辑名称状态，请使用 cancelEditName(newName) 方法。</p>\n\t\t\t<p class=\"highlight_red\">2、可利用此方法让当前正编辑的节点 input 输入框获取焦点。</p>\n\t\t\t<p class=\"highlight_red\">3、请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>指定进入编辑名称状态的节点 JSON 数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 设置根节点第一个节点进入编辑名称状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.editName(nodes[0]);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.expandAll.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(expandFlag)</span><span class=\"path\">zTreeObj.</span>expandAll</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>展开 / 折叠 全部节点</p>\n\t\t\t<p class=\"highlight_red\">此方法不会触发  beforeExpand / onExpand  和 beforeCollapse / onCollapse 事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>expandFlag</b><span>Boolean</span></h4>\n\t<p>expandFlag = true 表示 展开 全部节点</p>\n\t<p>expandFlag =  false 表示 折叠 全部节点</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值表示最终实际操作情况</p>\n\t<p>true 表示 展开 全部节点</p>\n\t<p>false 表示 折叠 全部节点</p>\n\t<p>null 表示 不存在任何父节点</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 展开全部节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.expandAll(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.expandNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, expandFlag, sonSign, focus, callbackFlag)</span><span class=\"path\">zTreeObj.</span>expandNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>展开 / 折叠 指定的节点</p>\n\t\t\t<p class=\"highlight_red\">v3.x 中执行此方法可以触发 beforeExpand / onExpand  或 beforeCollapse / onCollapse 事件回调函数。便于减少冗余代码</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要 展开 / 折叠 的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>expandFlag</b><span>Boolean</span></h4>\n\t<p>expandFlag = true 表示 展开 节点</p>\n\t<p>expandFlag = false 表示 折叠 节点</p>\n\t<p class=\"highlight_red\">省略此参数，则根据对此节点的展开状态进行 toggle 切换</p>\n\t<h4 class=\"topLine\"><b>sonSign</b><span>Boolean</span></h4>\n\t<p>sonSign = true 表示 全部子孙节点 进行与 expandFlag 相同的操作</p>\n\t<p>sonSign = false 表示 只影响此节点，对于其 子孙节点无任何影响</p>\n\t<p class=\"highlight_red\">sonSign = false 且 treeNode.open = expandFlag 时，不会触发回调函数，直接返回</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 false</p>\n\t<h4 class=\"topLine\"><b>focus</b><span>Boolean</span></h4>\n\t<p>focus = true 表示 展开 / 折叠 操作后，通过设置焦点保证此焦点进入可视区域内</p>\n\t<p>focus =  false 表示 展开 / 折叠 操作后，不设置任何焦点</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 true</p>\n\t<h4 class=\"topLine\"><b>callbackFlag</b><span>Boolean</span></h4>\n\t<p>callbackFlag = true 表示执行此方法时触发 beforeExpand / onExpand  或 beforeCollapse / onCollapse 事件回调函数</p>\n\t<p>callbackFlag = false 表示执行此方法时不触发事件回调函数</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 false</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Boolean</span></h4>\n\t<p>返回值表示最终实际操作情况</p>\n\t<p>true 表示 展开 节点</p>\n\t<p>false 表示 折叠 节点</p>\n\t<p>null 表示 不是父节点</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 展开当前选择的第一个节点（包括其全部子节点）</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\ttreeObj.expandNode(nodes[0], true, true, true);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getChangeCheckedNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>getChangeCheckedNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取输入框勾选状态被改变的节点集合（与原始数据 checkedOld 对比）。<span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>返回全部勾选状态被改变的节点集合 Array</p>\n\t<p class=\"highlight_red\">如果需要获取每次操作后全部被改变勾选状态的节点数据，请在每次勾选操作后，遍历所有被改变勾选状态的节点数据，让其 checkedOld = checked 就可以了。</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取当前勾选状态被改变的节点集合</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getChangeCheckedNodes();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getCheckedNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(checked)</span><span class=\"path\">zTreeObj.</span>getCheckedNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取输入框被勾选 或 未勾选的节点集合。<span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>checked</b><span>Boolean</span></h4>\n\t<p>checked = true  表示获取 被勾选 的节点集合</p>\n\t<p>checked = false 表示获取 未勾选 的节点集合</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 true。</p>\n\t<p class=\"highlight_red\">对于 treeNode.nocheck = true 的节点不进行获取。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>返回全部符合要求的节点集合 Array</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取当前被勾选的节点集合</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getCheckedNodes(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodeByParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(key, value, parentNode)</span><span class=\"path\">zTreeObj.</span>getNodeByParam</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>根据节点数据的属性搜索，获取条件完全匹配的节点数据 JSON 对象</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>key</b><span>String</span></h4>\n\t<p>需要精确匹配的属性名称</p>\n\t<h4 class=\"topLine\"><b>value</b><span>?</span></h4>\n\t<p>需要精确匹配的属性值，可以是任何类型，只要保证与 key 指定的属性值保持一致即可</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>搜索范围，指定在某个父节点下的子节点中进行搜索</p>\n\t<p class=\"highlight_red\">忽略此参数，表示在全部节点中搜索</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>匹配精确搜索的节点数据</p>\n\t<p class=\"highlight_red\">1、如无结果，返回 null</p>\n\t<p class=\"highlight_red\">2、如有多个节点满足查询条件，只返回第一个匹配到的节点</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 查找 id = 1 的节点数据</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodeByParam(\"id\", 1, null);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodeByTId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(tId)</span><span class=\"path\">zTreeObj.</span>getNodeByTId</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>根据 zTree 的唯一标识 tId 快速获取节点 JSON 数据对象</p>\n\t\t\t<p class=\"highlight_red\">通过内部的 cache 获取，不需要遍历节点。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>tId</b><span>String</span></h4>\n\t<p>节点在 zTree 内的唯一标识 tId</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>tId 对应的节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">如无结果，返回 null</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取 tId = \"tree_10\" 的节点数据</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodeByTId(\"tree_10\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodeIndex.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>getNodeIndex</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取某节点在同级节点中的序号（从0开始）</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要查询顺序的节点 JSON 数据对象</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Number</span></h4>\n\t<p class=\"highlight_red\">返回值从 0 开始计数</p>\n\t<p class=\"highlight_red\">如果不存在该节点数据，返回 -1</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取当前选中的第一个节点在同级节点中的序号</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\tvar index = treeObj.getNodeIndex(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>getNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取 zTree 的全部节点数据</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>全部节点数据</p>\n\t<p class=\"highlight_red\">1、Array 仅仅是根节点的集合（默认情况子节点都处于 children 属性下）； </p>\n\t<p class=\"highlight_red\">2、如需遍历全部节点需要利用递归，或利用 transformToArray 方法 将数据变成简单的 Array 集合</p>\n\t<p class=\"highlight_red\">3、对于异步加载模式下，尚未加载的子节点是无法通过此方法获取的。</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取全部节点数据</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodesByFilter.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(filter, isSingle, parentNode, invokeParam)</span><span class=\"path\">zTreeObj.</span>getNodesByFilter</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>根据自定义规则搜索节点数据 JSON 对象集合 或 单个节点数据</p>\n\t\t\t<p class=\"highlight_red\">可自定义复杂的搜索规则</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>filter</b><span>Function</span></h4>\n\t<p>自定义过滤器函数 function filter(node) {...}</p>\n\t<p>filter 参数：node (节点数据 JSON)</p>\n\t<p>filter 返回值：boolean (true 表示符合搜索条件；false 表示不符合搜索条件)</p>\n\t<h4 class=\"topLine\"><b>isSingle</b><span>Boolean</span></h4>\n\t<p>isSingle = true 表示只查找单个节点</p>\n\t<p>isSingle = false 表示查找节点集合</p>\n\t<p class=\"highlight_red\">忽略此参数，表示查找节点集合</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>可以指定在某个父节点下的子节点中搜索</p>\n\t<p class=\"highlight_red\">忽略此参数，表示在全部节点中搜索</p>\n\t<h4 class=\"topLine\"><b>invokeParam</b><span>任意类型</span></h4>\n\t<p>用户自定义的数据对象，用于 filter 中进行计算</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON) / JSON</span></h4>\n\t<p>isSingle = true 返回 第一个找到的节点数据 JSON，无结果时返回 null</p>\n\t<p>isSingle = false 返回 节点数据集合 Array(JSON)，无结果时返回 [ ]</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 查找 level = 2 & name 中包含 \"test\" 的节点数据</h4>\n\t<pre xmlns=\"\"><code>function filter(node) {\n    return (node.level == 2 && node.name.indexOf(\"test\")>-1);\n}\n......\nvar treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodesByFilter(filter, true); // 仅查找一个节点\nvar nodes = treeObj.getNodesByFilter(filter); // 查找节点集合\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodesByParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(key, value, parentNode)</span><span class=\"path\">zTreeObj.</span>getNodesByParam</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>根据节点数据的属性搜索，获取条件完全匹配的节点数据 JSON 对象集合</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>key</b><span>String</span></h4>\n\t<p>需要精确匹配的属性名称</p>\n\t<h4 class=\"topLine\"><b>value</b><span>?</span></h4>\n\t<p>需要精确匹配的属性值，可以是任何类型，只要保证与 key 指定的属性值保持一致即可</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>可以指定在某个父节点下的子节点中搜索</p>\n\t<p class=\"highlight_red\">忽略此参数，表示在全部节点中搜索</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>匹配精确搜索的节点数据集合</p>\n\t<p class=\"highlight_red\">如无结果，返回 [ ]</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 查找 name = \"test\" 的节点数据</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodesByParam(\"name\", \"test\", null);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getNodesByParamFuzzy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(key, value, parentNode)</span><span class=\"path\">zTreeObj.</span>getNodesByParamFuzzy</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>根据节点数据的属性搜索，获取条件模糊匹配的节点数据 JSON 对象集合</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>key</b><span>String</span></h4>\n\t<p>需要模糊匹配的属性名称</p>\n\t<h4 class=\"topLine\"><b>value</b><span>String</span></h4>\n\t<p>需要模糊匹配的属性值</p>\n\t<p class=\"highlight_red\">模糊匹配只能针对 String 类型的数据</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>可以指定在某个父节点下的子节点中搜索</p>\n\t<p class=\"highlight_red\">忽略此参数，表示在全部节点中搜索</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>匹配模糊搜索的节点数据集合</p>\n\t<p class=\"highlight_red\">如无结果，返回 [ ]</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 查找 name 包含 \"test\" 的节点数据</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodesByParamFuzzy(\"name\", \"test\", null);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.getSelectedNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>getSelectedNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>获取 zTree 当前被选中的节点数据集合</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>当前被选中的节点数据集合</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 获取当前被选中的节点数据集合</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.hideNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>hideNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exhide</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>隐藏某个节点。</p>\n\t\t\t<p class=\"highlight_red\">1、此功能不支持 exedit 扩展，因此不要在编辑状态时使用隐藏节点的方法。</p>\n\t\t\t<p class=\"highlight_red\">2、隐藏/显示节点，会影响节点的 isFirstNode 和 isLastNode 属性。</p>\n\t\t\t<p class=\"highlight_red\">3、请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>指定被隐藏的节点 JSON 数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 隐藏根节点第一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.hideNode(nodes[0]);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.hideNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNodes)</span><span class=\"path\">zTreeObj.</span>hideNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exhide</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>隐藏一批节点。</p>\n\t\t\t<p class=\"highlight_red\">1、此功能不支持 exedit 扩展，因此不要在编辑状态时使用隐藏节点的方法。</p>\n\t\t\t<p class=\"highlight_red\">2、隐藏/显示节点，会影响节点的 isFirstNode 和 isLastNode 属性。</p>\n\t\t\t<p class=\"highlight_red\">3、请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>指定被隐藏的节点 JSON 数据集合</p>\n\t<p class=\"highlight_red\">请务必保证这些节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 隐藏根节点第一个节点的子节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.hideNodes(nodes[0].children);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.moveNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(targetNode, treeNode, moveType, isSilent)</span><span class=\"path\">zTreeObj.</span>moveNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>移动节点。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>targetNode</b><span>JSON</span></h4>\n\t<p>要移动到的目标节点 JSON 数据</p>\n\t<p class=\"highlight_red\">如果移动成为根节点，请设置 targetNode 为 null 即可</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要被移动的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>指定移动到目标节点的相对位置</p>\n\t<p class=\"highlight_red\">\"inner\"：成为子节点，\"prev\"：成为同级前一个节点，\"next\"：成为同级后一个节点</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>设定移动节点后是否自动展开父节点。</p>\n\t<p>isSilent = true 时，不展开父节点，其他值或缺省状态都自动展开。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>JSON</span></h4>\n\t<p>返回值是最终被移动的节点数据，正常情况下与 treeNode 参数完全相同</p>\n\t<p class=\"highlight_red\">如果 返回值 为 null，说明 移动失败，主要原因有：<br/>\n\t\t&nbsp;1、targetNode 是 treeNode 父节点，且 moveType = \"inner\"<br/>\n\t\t&nbsp;2、targetNode 是 treeNode 子孙节点\n\t</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 将根节点中第二个节点 移动成为 第一个节点的子节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.moveNode(nodes[0], nodes[1], \"inner\");\n</code></pre>\n\t<h4>2. 将根节点中第二个节点 移动成为 第一个节点的前一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.moveNode(nodes[0], nodes[1], \"prev\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.reAsyncChildNodes.html",
    "content": "<div class=\"apiDetail\">\n    <div>\n        <h2><span>Function(parentNode, reloadType, isSilent, callback)</span><span class=\"path\">zTreeObj.</span>reAsyncChildNodes\n        </h2>\n        <h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n        <div class=\"desc\">\n            <p></p>\n            <div class=\"longdesc\">\n                <p>强行异步加载父节点的子节点。<span class=\"highlight_red\">[setting.async.enable = true 时有效]</span></p>\n                <p class=\"highlight_red\">已经加载过的父节点可反复使用此方法重新加载。</p>\n                <p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n            </div>\n        </div>\n        <h3>Function 参数说明</h3>\n        <div class=\"desc\">\n            <h4><b>parentNode</b><span>JSON</span></h4>\n            <p>指定需要异步加载的父节点 JSON 数据</p>\n            <p class=\"highlight_red\">1、parentNode = null 时，相当于从根节点 Root 进行异步加载</p>\n            <p class=\"highlight_red\">2、parentNode.isParent = false 时，不进行异步加载</p>\n            <p class=\"highlight_red\">3、请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n            <h4 class=\"topLine\"><b>reloadType</b><span>String</span></h4>\n            <p>reloadType = \"refresh\" 表示清空后重新加载。</p>\n            <p>reloadType != \"refresh\" 时，表示追加子节点处理。</p>\n            <h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n            <p>设定异步加载后是否自动展开父节点。</p>\n            <p>isSilent = true 时，不展开父节点，其他值或缺省状态都自动展开。</p>\n            <h4 class=\"topLine\"><b>callback</b><span>function</span></h4>\n            <p>刷新完成后的回调函数。</p>\n            <h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n            <p>目前无任何返回值</p>\n        </div>\n        <h3>function 举例</h3>\n        <h4>1. 重新异步加载 zTree </h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.reAsyncChildNodes(null, \"refresh\");\n</code></pre>\n        <h4>2. 重新异步加载当前选中的第一个节点</h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\ttreeObj.reAsyncChildNodes(nodes[0], \"refresh\");\n}\n</code></pre>\n    </div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.reAsyncChildNodesPromise.html",
    "content": "<div class=\"apiDetail\">\n    <div>\n        <h2><span>Function(parentNode, reloadType, isSilent)</span><span class=\"path\">zTreeObj.</span>reAsyncChildNodesPromise\n        </h2>\n        <h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n        <div class=\"desc\">\n            <p></p>\n            <div class=\"longdesc\">\n                <p>强行异步加载父节点的子节点（ES6 Promise 版）。<span class=\"highlight_red\">[setting.async.enable = true 时有效]</span></p>\n                <p class=\"highlight_red\">已经加载过的父节点可反复使用此方法重新加载。</p>\n                <p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n                <p class=\"highlight_red\">v3.5.29+</p>\n            </div>\n        </div>\n        <h3>Function 参数说明</h3>\n        <div class=\"desc\">\n            <h4><b>parentNode</b><span>JSON</span></h4>\n            <p>指定需要异步加载的父节点 JSON 数据</p>\n            <p class=\"highlight_red\">1、parentNode = null 时，相当于从根节点 Root 进行异步加载</p>\n            <p class=\"highlight_red\">2、parentNode.isParent = false 时，不进行异步加载</p>\n            <p class=\"highlight_red\">3、请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n            <h4 class=\"topLine\"><b>reloadType</b><span>String</span></h4>\n            <p>reloadType = \"refresh\" 表示清空后重新加载。</p>\n            <p>reloadType != \"refresh\" 时，表示追加子节点处理。</p>\n            <h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n            <p>设定异步加载后是否自动展开父节点。</p>\n            <p>isSilent = true 时，不展开父节点，其他值或缺省状态都自动展开。</p>\n            <h4 class=\"topLine\"><b>返回值</b><span>ES6 Promise</span></h4>\n            <p>ES6 的 Promise 对象，便于异步控制，使用时请注意浏览器兼容问题</p>\n        </div>\n        <h3>function 举例</h3>\n        <h4>1. 重新异步加载 zTree </h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.reAsyncChildNodes(null, \"refresh\");\n</code></pre>\n        <h4>2. 重新异步加载当前选中的第一个节点</h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\ttreeObj.reAsyncChildNodes(nodes[0], \"refresh\");\n}\n</code></pre>\n    </div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.refresh.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>refresh</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>刷新 zTree 。</p>\n\t\t\t<p class=\"highlight_red\">没有特殊必要，尽量不要使用此方法。单个节点更新请使用 updateNode 方法，异步加载模式下请使用 reAsyncChildNodes 方法。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 刷新 zTree </h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.refresh();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.removeChildNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(parentNode)</span><span class=\"path\">zTreeObj.</span>removeChildNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>清空某父节点的子节点。</p>\n\t\t\t<p class=\"highlight_red\">1、清空子节点后，父节点会自动变为叶子节点，如需要父节点保持父节点状态，请设置 setting.data.keep.parent 属性。</p>\n\t\t\t<p class=\"highlight_red\">2、请勿用此方法清空根节点，如果需要清空根节点，直接初始化 zTree，并且设置初始节点为 null 即可。</p>\n\t\t\t<p class=\"highlight_red\">3、此方法不会触发任何事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>parentNode</b><span>JSON</span></h4>\n\t<p>需要清空子节点的父节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>将该父节点的子节点数据返回，如果不存在则返回 null</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 清空选中的第一个节点的子节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes && nodes.length>0) {\n\ttreeObj.removeChildNodes(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.removeNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, callbackFlag)</span><span class=\"path\">zTreeObj.</span>removeNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>删除节点。</p>\n\t\t\t<p class=\"highlight_red\">v3.x 中删除节点可以触发 beforeRemove / onRemove 事件回调函数。便于减少冗余代码</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要被删除的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>callbackFlag</b><span>Boolean</span></h4>\n\t<p>callbackFlag = true 表示执行此方法时触发 beforeRemove & onRemove 事件回调函数</p>\n\t<p>callbackFlag = false 表示执行此方法时不触发事件回调函数</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 false</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 删除所有选中的节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nfor (var i=0, l=nodes.length; i < l; i++) {\n\ttreeObj.removeNode(nodes[i]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.selectNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, addFlag, isSilent)</span><span class=\"path\">zTreeObj.</span>selectNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>选中指定节点</p>\n\t\t\t<p class=\"highlight_red\">v3.x 支持同时选中多个节点。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要被选中的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>addFlag</b><span>Boolean</span></h4>\n\t<p>addFlag = true 表示追加选中，会出现多点同时被选中的情况</p>\n\t<p>addFlag = false （默认）表示单独选中，原先被选中的节点会被取消选中状态</p>\n\t<p class=\"highlight_red\">setting.view.selectedMulti = false 时，此参数无效，始终进行单独选中</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>isSilent = true 选中节点时，不会让节点自动滚到到可视区域内</p>\n\t<p>isSilent = false （默认）表示选中节点时，会让节点自动滚到到可视区域内</p>\n\t<p class=\"highlight_red\">(v3.5.23+)</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 单独选中根节点中第一个节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\nif (nodes.length>0) {\n\ttreeObj.selectNode(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.setChkDisabled.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(node, disabled, inheritParent, inheritChildren)</span><span class=\"path\">zTreeObj.</span>setChkDisabled</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.excheck</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>禁用 或 解禁 某个节点的 checkbox / radio <span class=\"highlight_red\">[setting.check.enable = true 时有效]</span></p>\n\t\t\t<p class=\"highlight_red\">1、节点的 checkbox / radio 被禁用后，无法勾选或取消勾选，但能够影响父节点的半选状态</p>\n\t\t\t<p class=\"highlight_red\">2、请不要直接修改已加载节点的 treeNode.chkDisabled 属性。</p>\n\t\t\t<p class=\"highlight_red\">3、请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>需要禁用 或 解禁 checkbox / radio 的节点数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>disabled</b><span>Boolean</span></h4>\n\t<p>disabled = true  表示禁用 checkbox / radio</p>\n\t<p>disabled = false 表示解禁 checkbox / radio</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 disabled = false </p>\n\t<p class=\"highlight_red\">不影响 treeNode.nocheck = true 的节点。</p>\n\t<h4 class=\"topLine\"><b>inheritParent</b><span>Boolean</span></h4>\n\t<p>inheritParent = true 表示全部父节点进行同样的操作</p>\n\t<p>inheritParent = false 表示不影响父节点</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 inheritParent = false </p>\n\t<h4 class=\"topLine\"><b>inheritChildren</b><span>Boolean</span></h4>\n\t<p>inheritChildren = true 表示全部子节点进行同样的操作</p>\n\t<p>inheritChildren = false 表示不影响子节点</p>\n\t<p class=\"highlight_red\">省略此参数，等同于 inheritChildren = false </p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 禁用当前选中的节点的 checkbox / radio</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nfor (var i=0, l=nodes.length; i < l; i++) {\n\ttreeObj.setChkDisabled(nodes[i], true);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.setEditable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(editable)</span><span class=\"path\">zTreeObj.</span>setEditable</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exedit</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>设置 zTree 进入 / 取消 编辑状态。</p>\n\t\t\t<p class=\"highlight_red\">对于编辑状态的各种功能需要提前设置对应 setting 中的不同属性</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>editable</b><span>Boolean</span></h4>\n\t<p>true 表示进入 编辑状态</p>\n\t<p>false 表示取消 编辑状态</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 设置 zTree 进入编辑状态</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.setEditable(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.setting.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON</span><span class=\"path\">zTreeObj.</span>setting</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree 对象使用的 setting 配置数据，详细请参考 “setting 配置详解”中的各个属性详细说明</p>\n\t\t\t<p class=\"highlight_red\">v3.x 取消了原先操作 setting 的方法，让用户可以较自由的修改参数，但请注意，对于 zTree 初始化有影响的参数后期修改是不会起作用的，请对各个属性有较深入的了解以后再考虑进行修改。</p>\n\t\t</div>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.showNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>showNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exhide</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>显示某个被隐藏的节点。</p>\n\t\t\t<p class=\"highlight_red\">1、此功能不支持 exedit 扩展，因此不要在编辑状态时使用隐藏节点的方法。</p>\n\t\t\t<p class=\"highlight_red\">2、隐藏/显示节点，会影响节点的 isFirstNode 和 isLastNode 属性。</p>\n\t\t\t<p class=\"highlight_red\">3、请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>指定被显示的节点 JSON 数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 显示某个隐藏的节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodeByParam(\"isHidden\", true);\nif (node) {\n  treeObj.showNode(node);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.showNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNodes)</span><span class=\"path\">zTreeObj.</span>showNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.exhide</span> 扩展 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>显示一批已经被隐藏的节点。</p>\n\t\t\t<p class=\"highlight_red\">1、此功能不支持 exedit 扩展，因此不要在编辑状态时使用隐藏节点的方法。</p>\n\t\t\t<p class=\"highlight_red\">2、隐藏/显示节点，会影响节点的 isFirstNode 和 isLastNode 属性。</p>\n\t\t\t<p class=\"highlight_red\">3、请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>指定被显示的节点 JSON 数据集合</p>\n\t<p class=\"highlight_red\">请务必保证这些节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 显示全部隐藏的节点</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodesByParam(\"isHidden\", true);\ntreeObj.showNodes(nodes);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.transformToArray.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNodes)</span><span class=\"path\">zTreeObj.</span>transformToArray</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>将 zTree 使用的标准 JSON 嵌套格式的数据转换为简单 Array 格式。(免去用户自行编写递归遍历全部节点的麻烦)</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON) / JSON</span></h4>\n\t<p>需要被转换的 zTree 节点数据对象集合 或 某个单独节点的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>转换后的简单 Array 数据格式</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 将 zTree 节点数据转换为简单 Array 格式</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.transformToArray(treeObj.getNodes());\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.transformTozTreeNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(simpleNodes)</span><span class=\"path\">zTreeObj.</span>transformTozTreeNodes</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>将简单 Array 格式数据转换为 zTree 使用的标准 JSON 嵌套数据格式。</p>\n\t\t\t<p class=\"highlight_red\">使用此方法，请务必设置节点唯一标识属性名称 setting.data.simpleData.idKey 和 父节点唯一标识属性名称 setting.data.simpleData.pIdKey，并且让数据满足父子关系。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>simpleNodes</b><span>Array(JSON) / JSON</span></h4>\n\t<p>需要被转换的简单 Array 格式数据 或 某个单独的数据对象</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>Array(JSON)</span></h4>\n\t<p>zTree 使用的标准数据，子节点都存在于父节点数据的 children 属性中</p>\n\t<p class=\"highlight_red\">如果 simpleNodes 是一个 JSON 对象，则被简单封装成长度为 1 的数组。</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 将简单 Array 格式转换为zTree使用的标准格式</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar simpleNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\nvar treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.transformTozTreeNodes(simpleNodes);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/cn/zTreeObj.updateNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, checkTypeFlag)</span><span class=\"path\">zTreeObj.</span>updateNode</h2>\n\t<h3>概述<span class=\"h3_info\">[ 依赖 <span class=\"highlight_green\">jquery.ztree.core</span> 核心 js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>更新某节点数据，主要用于该节点显示属性的更新。</p>\n\t\t\t<p class=\"highlight_red\">1、可针对 name、target、 url、icon、 iconSkin、checked、nocheck 等这几个用于显示效果的参数进行更新，其他用于 zTreeNodes 的参数请不要随意更新，对于展开节点，还请调用 expandNode方法，因此请勿随意修改 open 属性。</p>\n\t\t\t<p class=\"highlight_red\">2、用此方法修改 checked 勾选状态不会触发 beforeCheck / onCheck 事件回调函数。</p>\n\t\t\t<p class=\"highlight_red\">请通过 zTree 对象执行此方法。</p>\n\t\t</div>\n\t</div>\n\t<h3>Function 参数说明</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>指定需要更新的节点 JSON 数据</p>\n\t<p class=\"highlight_red\">请务必保证此节点数据对象 是 zTree 内部的数据对象</p>\n\t<h4 class=\"topLine\"><b>checkTypeFlag</b><span>Boolean</span></h4>\n\t<p>checkTypeFlag = true 表示按照 setting.check.chkboxType 属性进行父子节点的勾选联动操作</p>\n\t<p>checkTypeFlag = false 表示只修改此节点勾选状态，无任何勾选联动操作</p>\n\t<p class=\"highlight_red\">当 setting.check.enable = true 且 setting.check.chkStyle = \"checkbox\" 时才有效</p>\n\t<p class=\"highlight_red\">不影响父子节点中 treeNode.nocheck = true 的节点。</p>\n\t<h4 class=\"topLine\"><b>返回值</b><span>无</span></h4>\n\t<p>目前无任何返回值</p>\n\t</div>\n\t<h3>function 举例</h3>\n\t<h4>1. 更新根节点中第一个节点的名称</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\nif (nodes.length>0) {\n\tnodes[0].name = \"test\";\n\ttreeObj.updateNode(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/fn.zTree._z.html",
    "content": "<div class=\"apiDetail\">\n<div>\n    <h2><span>JSON</span><span class=\"path\">$.fn.zTree.</span>_z</h2>\n    <h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n    <div class=\"desc\">\n        <p></p>\n        <div class=\"longdesc\">\n                <p>All of the internal methods in zTree v3.x are available through '$. fn.zTree._z', \n                    use this if you want to develop your own zTree plug-ins.</p>\n                <p class=\"highlight_red\">Unless you are writing a plugin, \n                    you should not use this object.</p>\n        </div>\n    </div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/fn.zTree.destroy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId)</span><span class=\"path\">$.fn.zTree.</span>destroy</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>From zTree v3.4, zTree provides a method for destruction.</p>\n\t\t\t<p>1. This method can destroy a zTree by treeId, or destroy all zTree instances.</p>\n\t\t\t<p class=\"highlight_red\">2. If you want to destroy a zTree, you can use the 'zTreeObj.destroy()' method.</p>\n\t\t\t<p class=\"highlight_red\">3. If you want to re-use the tree which has been destroyed, \n                            you must first re-initialise it with the 'init()' method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, all zTree instances will be destroyed.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Destroy the zTree with id === 'treeDemo'</h4>\n\t<pre xmlns=\"\"><code>$.fn.zTree.destroy(\"treeDemo\");</code></pre>\n\t<h4>2. Destroy all zTree instances</h4>\n\t<pre xmlns=\"\"><code>$.fn.zTree.destroy();</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/fn.zTree.getZTreeObj.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId)</span><span class=\"path\">$.fn.zTree.</span>getZTreeObj</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree v3.x provides this method to get zTree object from the tree's Id.</p>\n\t\t\t<p class=\"highlight_red\">Please initialize zTree first, then you can use this method.</p>\n\t\t\t<p>Users don't need to use a global variable to reference the zTree object, \n                            as all of the callback methods will pass 'treeId' parameters, \n                            and you can always call this method to get the zTree object.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>zTree object</p>\n\t<p>This is a reference to the zTree object.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Get the zTree object with id='tree'</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/fn.zTree.init.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(obj, zSetting, zNodes)</span><span class=\"path\">$.fn.zTree.</span>init</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>This method is used to create a zTree.</p>\n\t\t\t<p>1. The web page must use the W3C DTD. For example: &lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"&nbsp;&nbsp; &nbsp;\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"&gt;</p>\n\t\t\t<p>2. Needs jquery-1.4.2.js or better.</p>\n\t\t\t<p>3. Needs jquery-ztree.core-3.0.js or better.\n                            If you are using edit mode or checkbox / radio mode, \n                            make sure you load jquery-ztree.exedit-3.0.js and jquery-ztree.excheck-3.0.js.</p>\n\t\t\t<p>4. Needs zTreeStyle.css and image files</p>\n\t\t\t<p>5. If you plan to use custom icons, please refer to the Demo, \n                            or see the help on iconSkin.</p>\n\t\t\t<p>6. Note: You need to set zTree container's class name to \"ztree\". \n                            If you need to change it, don't forget to modify the css file. \n                            If you need other special styles, you can modify the css file.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>object</b><span>jQuery Object</span></h4>\n\t<p>DOM Container for zTree</p>\n\t<h4 class=\"topLine\"><b>zSetting</b><span>JSON</span></h4>\n\t<p>zTree's configuration data, please refer to \"setting details\" in the API Document.</p>\n\t<h4 class=\"topLine\"><b>zNodes</b><span>Array(JSON) / JSON</span></h4>\n\t<p>zTree's node data, please refer to \"treeNode data details\" in the API Document.</p>\n\t<p class=\"highlight_red\">1. zTree v3.x support to add single node, that is, if only to add one node, \n                you can use JSON without using Array.</p>\n\t<p class=\"highlight_red\">2. If you are planning on using asynchronous loading of root nodes, set it to null or [ ]</p>\n\t<p class=\"highlight_red\">3. If you are using simple data mode, please refer to \"setting.data.simpleData\" in the API Document.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>zTree object</p>\n\t<p>This object can provide the methods of operate the zTree</p>\n\t<p class=\"highlight_red\">You can use $.fn.zTree.getZTreeObj method at any time to obtain.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. create a simple tree</h4>\n\t<pre xmlns=\"\"><code>&lt;!DOCTYPE html&gt;\n&lt;HTML&gt;\n &lt;HEAD&gt;\n  &lt;TITLE&gt; ZTREE DEMO &lt;/TITLE&gt;\n  &lt;meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"&gt;\n  &lt;link rel=\"stylesheet\" href=\"zTreeStyle/zTreeStyle.css\" type=\"text/css\"&gt;\n  &lt;script type=\"text/javascript\" src=\"jquery-1.4.2.js\"&gt;&lt;/script&gt;\n  &lt;script type=\"text/javascript\" src=\"jquery.ztree.core.js\"&gt;&lt;/script&gt;\n&lt;!--\n  &lt;script type=\"text/javascript\" src=\"jquery.ztree.excheck.js\"&gt;&lt;/script&gt;\n  &lt;script type=\"text/javascript\" src=\"jquery.ztree.exedit.js\"&gt;&lt;/script&gt;\n--&gt;\n  &lt;SCRIPT type=\"text/javascript\" &gt;\n\tvar zTreeObj,\n\tsetting = {\n\t\tview: {\n\t\t\tselectedMulti: false\n\t\t}\n\t},\n\tzTreeNodes = [\n\t\t{\"name\":\"Site Map\", open:true, children: [\n\t\t\t{ \"name\":\"google\", \"url\":\"http://www.google.com\", \"target\":\"_blank\"},\n\t\t\t{ \"name\":\"baidu\", \"url\":\"http://baidu.com\", \"target\":\"_blank\"},\n\t\t\t{ \"name\":\"sina\", \"url\":\"http://www.sina.com.cn\", \"target\":\"_blank\"}\n\t\t\t]\n\t\t}\n\t];\n\n\t$(document).ready(function(){\n\t\tzTreeObj = $.fn.zTree.init($(\"#tree\"), setting, zTreeNodes);\n\n\t});\n  &lt;/SCRIPT&gt;\n &lt;/HEAD&gt;\n\n&lt;BODY&gt;\n&lt;ul id=\"tree\" class=\"ztree\" style=\"width:230px; overflow:auto;\"&gt;&lt;/ul&gt;\n &lt;/BODY&gt;\n&lt;/HTML&gt;</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.autoParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Array(String) / Function(treeId, treeNode)</span><span class=\"path\">setting.async.</span>autoParam</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>During asynchronous loading, a request is sent to the server, which contains the identify of the parent node, \n                            so it can retrieve the children.\n                            This attribute is an array of strings, which is the identity parameter (or parameters).\n                            It applies when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default：[ ]</p>\n\t\t</div>\n\t</div>\n\t<h3>Array(String) Format</h3>\n\t<div class=\"desc\">\n\t<p>1. Put the attribute name(s) of node to the array. For example: [\"id\", \"name\"]</p>\n\t<p>2. You can rename the parameter name as sent to the server. For example: server only accepts \"zId\" -- [\"id=zId\"]</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t\t<h4><b>treeId</b><span>String</span></h4>\n\t\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t\t<p>Parent node's JSON data object</p>\n\t\t<p class=\"highlight_red\">When asynchronously loading the root, the treeNode = null</p>\n\t\t<h4 class=\"topLine\"><b>Return </b><span>Array(String)</span></h4>\n\t\t<p>Return value is same as 'Array(String) Format'</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. set auto commit 'id' attribute</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\"]\n\t}\n};\nIf we have a parent node: {id:1, name:\"test\"}, When we are asynchronously loading this parent node's children, it will be submitted to the server with parameters: id=1\n......</code></pre>\n\t<h4>2. set auto commit 'id' attribute, but the parameter name expected by the server is 'zId'</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id=zId\"]\n\t}\n};\nIf we have a parent node: {id:1, name:\"test\"}, When we are asynchronously loading this parent node's children, it will be submitted to the server with parameters: zId=1\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.contentType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.async.</span>contentType</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When Ajax sends data to the server, it uses this content-type. \n                            It is used when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default：\"application/x-www-form-urlencoded\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p> contentType = \"application/x-www-form-urlencoded\", means: the sending data format is \"form\" format.</p>\n\t<p> contentType = \"application/json\",  means: the sending data format is \"json\" format. (for .Net)</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. set the sending data format to \"json\" format.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\tcontentType: \"application/json\",\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.dataFilter.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, parentNode, responseData)</span><span class=\"path\">setting.async.</span>dataFilter</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback function to pre-process Ajax return data. It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b></p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>Parent node's JSON data object</p>\n\t<p class=\"highlight_red\">When asynchronously loading the root, the parentNode = null</p>\n\t<h4 class=\"topLine\"><b>responseData</b><span>Array(JSON) / JSON / String</span></h4>\n\t<p>Array (JSON) / JSON / String data objects</p>\n\t<p class=\"highlight_red\">From v3.4, support XML strings.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON) / JSON</span></h4>\n\t<p>The return value should be the JSON data structure which is supported by the zTree.</p>\n\t<p class=\"highlight_red\">v3.x supports to load single node JSON data object.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Modify the node name attributes returned by an Ajax request.</h4>\n\t<pre xmlns=\"\"><code>function ajaxDataFilter(treeId, parentNode, responseData) {\n    if (responseData) {\n      for(var i =0; i < responseData.length; i++) {\n        responseData[i].name += \"_filter\";\n      }\n    }\n    return responseData;\n};\nvar setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tdataFilter: ajaxDataFilter\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.dataType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.async.</span>dataType</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The data type of Ajax requests. It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default：\"text\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p> dataType = \"text\", There is probably no need to change this.</p>\n\t<p class=\"highlight_red\">The 'dataType' in zTree and jQuery's ajax requests is same.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the dataType which ajax retrieves to \"text\".</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\tdataType: \"text\",\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.async.</span>enable</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set zTree asynchronous loading mode on/off.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true - turn on asynchronous loading mode</p>\n\t<p> false - turn off asynchronous loading mode</p>\n\t<p class=\"highlight_red\">If set it is true, you must set other attributes in setting.async</p>\n\t<p class=\"highlight_red\">If you don't pass the 'treeNodes' parameter when you initialize zTree, the root nodes will be retrieved using ajax.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Turn on asynchronous loading mode</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.headers.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Object</span><span class=\"path\">setting.async.</span>headers</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default：\"{}\"</p>\n      <p class=\"highlight_red\">v3.5.36+</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">The 'headers' in zTree and jQuery's ajax requests is same.</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.otherParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Array(String) / JSON / Function(treeId, treeNode)</span><span class=\"path\">setting.async.</span>otherParam</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The query parameters of the Ajax request. (key - value) It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default: [ ]</p>\n\t\t</div>\n\t</div>\n\t<h3>Array(String) Format</h3>\n\t<div class=\"desc\">\n\t<p>Can be an empty array. e.g. [ ].  The array should contain key value pairs, e.g. [key, value]. (Either or [key] or [key, value, key] is wrong!!)</p>\n\t</div>\n\t<h3>JSON Format</h3>\n\t<div class=\"desc\">\n\t<p>Use JSON hash data to set the key-value pairs. e.g. { key1:value1, key2:value2 }</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t\t<h4><b>treeId</b><span>String</span></h4>\n\t\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t\t<p>Parent node's JSON data object</p>\n\t\t<p class=\"highlight_red\">When asynchronously loading the root, the treeNode = null</p>\n\t\t<h4 class=\"topLine\"><b>Return </b><span>Array(String) || JSON</span></h4>\n\t\t<p>Return value is same as 'Array(String) || JSON Format'</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Using Array(String) Format</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\t<span style=\"color:red\">otherParam: [\"id\", \"1\", \"name\", \"test\"]</span>\n\t}\n};\nwhen zTree sends the ajax request, the query string will be like this: id=1&name=test</code></pre>\n\t<h4>2. Using JSON data Format</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"http://host/getNode.php\",\n\t\t<span style=\"color:red\">otherParam: { \"id\":\"1\", \"name\":\"test\"}</span>\n\t}\n};\nwhen zTree sends the ajax request, the query string will be like this: id=1&name=test</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.type.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.async.</span>type</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Http request tyoe in ajax. It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default: \"post\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p> \"post\" - http request mode</p>\n\t<p> \"get\" - http request mode</p>\n\t<p class=\"highlight_red\">Both zTree and jQuery's this 'type' for ajax requests.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set http request mode is 'get'</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\ttype: \"get\",\n\t\turl: \"http://host/getNode.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.url.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Function(treeId, treeNode)</span><span class=\"path\">setting.async.</span>url</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The URL to which the ajax request is sent. It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default: \"\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>A url string(e.g. \"http://www.domain.com/cgi-bin/my-script.cgi\"). Note: please check that the url can be loaded with a browser</p>\n\t<p class=\"highlight_red\">Url can also take parameters, please note that they need to be urlencoded.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>Parent node's JSON data object</p>\n\t<p class=\"highlight_red\">When asynchronously loading the root, the treeNode = null</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>String</span></h4>\n\t<p>Return value is same as 'String Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. set ajax url is \"nodes.php\"</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: \"nodes.php\",\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n\t<h4>2. set ajax url is \"function\"</h4>\n\t<pre xmlns=\"\"><code>function getAsyncUrl(treeId, treeNode) {\n    return treeNode.isParent ? \"nodes1.php\" : \"nodes2.php\";\n};\nvar setting = {\n\tasync: {\n\t\tenable: true,\n\t\turl: getAsyncUrl,\n\t\tautoParam: [\"id\", \"name\"]\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.async.xhrFields.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Object</span><span class=\"path\">setting.async.</span>xhrFields</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span></p>\n\t\t\t<p>Default：\"{}\"</p>\n      <p class=\"highlight_red\">v3.5.36+</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">The 'xhrFields' in zTree and jQuery's ajax requests is same.</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeAsync.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeAsync</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>This callback is made before zTree makes an ajax request, giving you an opportunity to decide if it should proceed or not. \n                            Return false to prevent zTree from sending the ajax request.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the parent node</p>\n\t<p class=\"highlight_red\">When asynchronously loading the root, treeNode = null</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If the function returns false, zTree will not send the ajax request, and will not trigger the 'onAsyncSuccess / onAsyncError' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. If the parent node's attribute 'id' is 1, don't send the ajax request.</h4>\n\t<pre xmlns=\"\"><code>function myBeforeCallBack(treeId, treeNode) {\n    return (treeNode.id !== 1);\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeAsync: myBeforeCallBack\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeCheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeCheck</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback before checking or unchecking a node, A false return value from the callback will prevent any change in the checked state.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is checked or unchecked</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not change the checkbox state, and will not trigger the 'onCheck' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. This example returns false, preventing all checkboxes in the tree from toggling.</h4>\n\t<pre xmlns=\"\"><code>function myBeforeCheckCallBack(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeCheck: myBeforeCheckCallBack\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode, clickFlag)</span><span class=\"path\">setting.callback.</span>beforeClick</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Before click callback, return false to prevent the 'onClick' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is clicked</p>\n\t<h4 class=\"topLine\"><b>clickFlag</b><span>Number</span></h4>\n\t<p>Node is selected or deselected state, please see table below for details</p>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead><tr><td>clickFlag</td><td title=\"Whether to allow multi-select\">selectedMulti</td><td title=\"Whether to press Ctrl-key or Cmd-key\">autoCancelSelected<br/>&&<br/>event.ctrlKey / metaKey</td><td title=\"Node's selection state\">isSelected</td><td>operate for selected</td></tr></thead>\n\t\t<tbody>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>false</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>true</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>2</td><td>true</td><td>true</td><td>false</td><td>node is selected (multi)</td></tr>\n\t\t\t<tr><td>0</td><td>true</td><td>true</td><td>true</td><td>node is deselected</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>false</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>true</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>true</td><td>false</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>0</td><td>false</td><td>true</td><td>true</td><td>node is deselected</td></tr>\n\t\t</tbody>\n\t</table>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not change selected state, and will not trigger the 'onClick' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disabled to click the node</h4>\n\t<pre xmlns=\"\"><code>function myBeforeClick(treeId, treeNode, clickFlag) {\n    return (treeNode.id !== 1);\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeClick: myBeforeClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeCollapse.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeCollapse</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before collapse node, The return value controls the  collapse node.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be collapsed</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not collapse node, and will not trigger the 'onCollapse' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disabled to collapse node which is expanded</h4>\n\t<pre xmlns=\"\"><code>function myBeforeCollapse(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeCollapse: myBeforeCollapse\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeDblClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeDblClick</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function, executed before the 'onDblClick' callback, The return value controls the 'onDblClick' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is double clicked</p>\n\t<p class=\"highlight_red\">If the DOM which dblclicked isn't a node, it will return null.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, ztree will not trigger the 'onDblClick' callback, no effect on other operations.</p>\n\t<p class=\"highlight_red\">This callback function does not affect the auto expand of the parent node , please refer to setting.view.dblClickExpand properties.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to trigger the 'onDblClick' callback</h4>\n\t<pre xmlns=\"\"><code>function myBeforeDblClick(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeDblClick: myBeforeDblClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeDrag.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNodes)</span><span class=\"path\">setting.callback.</span>beforeDrag</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before the drag node callback, The return value controls whether the drag node callback will execute.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>, the id of the containing tree.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes being dragged</p>\n\t<p class=\"highlight_red\">v3.x allows the drag and drop of multiple sibling nodes, so this parameter's type is changed to Array(JSON).</p>\n\t<p class=\"highlight_red\">If the selected nodes aren't sibling nodes, you can only drag one node.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will abort the drag and drop, and will not trigger the 'onDrag / beforeDrop / onDrop' sequence of callbacks.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable drag completely (by returning false)</h4>\n\t<pre xmlns=\"\"><code>function myBeforeDrag(treeId, treeNodes) {\n    return false;\n};\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeDrag: myBeforeDrag\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeDragOpen.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeDragOpen</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback executed before drag node to collapsed parent node, The return value controls the auto expand behaviour of the parent node.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>, the tree is what the treeNode(parent node) is belong to.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the parent node which will be auto expanded</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not auto expand parent node.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to auto expand parent node.</h4>\n\t<pre xmlns=\"\"><code>function myBeforeDragOpen(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeDragOpen: myBeforeDragOpen\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeDrop.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNodes, targetNode, moveType, isCopy)</span><span class=\"path\">setting.callback.</span>beforeDrop</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before drag-drop of a node, The return value controls the execution of drag-drop callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t\t<p class=\"highlight_red\">When a node is dropped, if the drop is not in a valid location, this callback will not be triggered, and will revert to the original position.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>, the id of the containing tree.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which has been dragged</p>\n\t<p class=\"highlight_red\">The treeNodes which have been dragged, when copying nodes or moving nodes.</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the destination node on which treeNodes are being dropped.</p>\n\t<p class=\"highlight_red\">If the treeNodes is the root node, the targetNode = null</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>the relative position of move to the target node</p>\n\t<p class=\"highlight_red\">\"inner\": will be child of targetNode</p>\n\t<p class=\"highlight_red\">\"prev\": will be sibling node, and be in front of targetNode</p>\n\t<p class=\"highlight_red\">\"next\":  will be sibling node, and be behind targetNode</p>\n\t<h4 class=\"topLine\"><b>isCopy</b><span>Boolean</span></h4>\n\t<p>the flag used to determine if the drop is to copy or move the node</p>\n\t<p class=\"highlight_red\">true: copy node; false: move node</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will restore the dragged nodes, and will not trigger the 'onDrop' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to drag nodes to root</h4>\n\t<pre xmlns=\"\"><code>function myBeforeDrop(treeId, treeNodes, targetNode, moveType) {\n    return !(targetNode == null || (moveType != \"inner\" && !targetNode.parentTId));\n};\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeDrop: myBeforeDrop\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeEditName.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeEditName</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before click edit button, The return value controls the editing of the name.</p>\n\t\t\t<p class=\"highlight_red\">This callback is fired when the edit button is clicked, to control the custom editing operation.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be edited.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, allow editing of the name.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable editing of any parent node's name</h4>\n\t<pre xmlns=\"\"><code>function myBeforeEditName(treeId, treeNode) {\n\treturn !treeNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeEditName: myBeforeEditName\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeExpand.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeExpand</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before expanding a node, The return value controls the expand node callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be expanded</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not expand node, and will not trigger the 'onExpand' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disables expanding of all nodes</h4>\n\t<pre xmlns=\"\"><code>function myBeforeExpand(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeExpand: myBeforeExpand\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeMouseDown.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeMouseDown</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function, executed before the 'onMouseDown' callback, The return value controls the 'onMouseDown' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which mouse over</p>\n\t<p class=\"highlight_red\">If the DOM which mouse over isn't a node, it will return null.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not trigger the 'onMouseDown' callback, no effect on other operations.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to trigger the 'onMouseDown' callback</h4>\n\t<pre xmlns=\"\"><code>function myBeforeMouseDown(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeMouseDown: myBeforeMouseDown\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeMouseUp.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeMouseUp</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function, executed before the 'onMouseUp' callback, The return value controls the 'onMouseUp' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which mouse over</p>\n\t<p class=\"highlight_red\">If the DOM which mouse over isn't a node, it will return null.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not trigger the 'onMouseUp' callback, no effect on other operations.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to trigger the 'onMouseUp' callback</h4>\n\t<pre xmlns=\"\"><code>function myBeforeMouseUp(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeMouseUp: myBeforeMouseUp\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeRemove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeRemove</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before remove node, The return value controls the  allow to remove node.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be removed.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, zTree will not remove node, and will not trigger the 'onRemove' callback.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to remove node</h4>\n\t<pre xmlns=\"\"><code>function myBeforeRemove(treeId, treeNode) {\n\treturn false;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeRemove: myBeforeRemove\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeRename.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode, newName, isCancel)</span><span class=\"path\">setting.callback.</span>beforeRename</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Specify callback function to be called before rename(when input DOM blur or press Enter Key), The return value controls the  allow to rename node.</p>\n\t\t\t<p class=\"highlight_red\">When node is editing name, press the ESC key to restore the original name and stop edit name.</p>\n\t\t\t<p class=\"highlight_red\">From v3.5.13, zTree will trigger this callback when user cancel edit name. please see 'isCancel' parameter.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be rename.</p>\n\t<h4 class=\"topLine\"><b>newName</b><span>String</span></h4>\n\t<p>the new name</p>\n\t<h4 class=\"topLine\"><b>isCancel</b><span>Boolean</span></h4>\n\t<p>the status about cancel edit name (v3.5.13+)</p>\n\t<p class=\"highlight_red\">isCancel = true means: user cancel edit name. (press ESC or use cancelEditName() function)</p>\n\t<p class=\"highlight_red\">isCancel = false means: user submit edit name.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, the treeNode will keep the editing name, don't trigger the 'onRename' callback, and will ignore other enents, until the callback return true.</p>\n\t<p class=\"highlight_red\">If returns false, zTree will not set the input box to get focus to avoid the warning message which led to repeated triggering ‘beforeRename’ callback. Please use editName() method to set the input box to get focus when user close the warning message.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. the length of the new name can't less than 5</h4>\n\t<pre xmlns=\"\"><code>function myBeforeRename(treeId, treeNode, newName, isCancel) {\n\treturn newName.length > 5;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true\n\t},\n\tcallback: {\n\t\tbeforeRename: myBeforeRename\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.beforeRightClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.callback.</span>beforeRightClick</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the right click event before the 'onRightClick' callback, The return value controls the 'onRightClick' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is mouse right clicked</p>\n\t<p class=\"highlight_red\">If the DOM which mouse right clicked isn't a node, it will return null.</p>\n\t<h4 class=\"topLine\"><b>Return</b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t<p class=\"highlight_red\">If return false, ztree will not trigger the 'onRightClick' callback, no effect on other operations.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to trigger the 'onRightClick' callback</h4>\n\t<pre xmlns=\"\"><code>function myBeforeRightClick(treeId, treeNode) {\n    return false;\n};\nvar setting = {\n\tcallback: {\n\t\tbeforeRightClick: myBeforeRightClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onAsyncError.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span class=\"path\">setting.callback.</span>onAsyncError</h2>\n\t<h2><span>Function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown)</span>&nbsp;</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the error event when execute ajax.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeAsync',and return false, zTree will not execute ajax, and will not trigger the 'onAsyncSuccess / onAsyncError' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the parent node</p>\n\t<p class=\"highlight_red\">When load root nodes, treeNode = null</p>\n\t<h4 class=\"topLine\"><b>XMLHttpRequest</b><span>String</span></h4>\n\t<p>XMLHttpRequest Object, please refer to JQuery API documentation.</p>\n\t<h4 class=\"topLine\"><b>textStatus</b><span>String</span></h4>\n\t<p>a string categorizing the status of the request(\"success\", \"error\"...), please refer to JQuery API documentation.</p>\n\t<h4 class=\"topLine\"><b>errorThrown</b><span>String</span></h4>\n\t<p>eWhen an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, please refer to JQuery API documentation.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When execute ajax make error, alert message.</h4>\n\t<pre xmlns=\"\"><code>function myOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n    alert(XMLHttpRequest);\n};\nvar setting = {\n\tcallback: {\n\t\tonAsyncError: myOnAsyncError\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onAsyncSuccess.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode, msg)</span><span class=\"path\">setting.callback.</span>onAsyncSuccess</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the complete success event when execute ajax.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeAsync',and return false, zTree will not execute ajax, and will not trigger the 'onAsyncSuccess / onAsyncError' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the parent node</p>\n\t<p class=\"highlight_red\">When load root nodes, treeNode = null</p>\n\t<h4 class=\"topLine\"><b>msg</b><span>String / Object</span></h4>\n\t<p>The actualnode data which got by ajax. User-friendly debugging.</p>\n\t<p class=\"highlight_red\">The actual data's type of msg is affected by 'setting.async.dataType', please refer to JQuery API documentation.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When execute ajax complete success, alert message.</h4>\n\t<pre xmlns=\"\"><code>function myOnAsyncSuccess(event, treeId, treeNode, msg) {\n    alert(msg);\n};\nvar setting = {\n\tcallback: {\n\t\tonAsyncSuccess: myOnAsyncSuccess\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onCheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onCheck</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the check or uncheck event when check or uncheck the checkbox and radio.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeCheck',and return false, zTree will not change check state, and will not trigger the 'onCheck' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is checked or unchecked</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When check or uncheck the checkbox and radio, alert info about 'tId' and 'name' and 'checked'.</h4>\n\t<pre xmlns=\"\"><code>function myOnCheck(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name + \",\" + treeNode.checked);\n};\nvar setting = {\n\tcallback: {\n\t\tonCheck: myOnCheck\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode, clickFlag)</span><span class=\"path\">setting.callback.</span>onClick</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the click event when click node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeClick',and return false, zTree will not change selected state, and will not trigger the 'onClick' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is clicked</p>\n\t<h4 class=\"topLine\"><b>clickFlag</b><span>Number</span></h4>\n\t<p>Node is selected or deselected state, please see table below for details</p>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead><tr><td>clickFlag</td><td title=\"Whether to allow multi-select\">selectedMulti</td><td title=\"Whether to press Ctrl-key or Cmd-key\">autoCancelSelected<br/>&&<br/>event.ctrlKey / metaKey</td><td title=\"Node's selection state\">isSelected</td><td>operate for selected</td></tr></thead>\n\t\t<tbody>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>false</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>1</td><td>true</td><td>false</td><td>true</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>2</td><td>true</td><td>true</td><td>false</td><td>node is selected (multi)</td></tr>\n\t\t\t<tr><td>0</td><td>true</td><td>true</td><td>true</td><td>node is deselected</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>false</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>false</td><td>true</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>1</td><td>false</td><td>true</td><td>false</td><td>node is selected (single)</td></tr>\n\t\t\t<tr><td>0</td><td>false</td><td>true</td><td>true</td><td>node is deselected</td></tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When click node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnClick(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonClick: myOnClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onCollapse.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onCollapse</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for collapse node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeCollapse',and return false, zTree will not collapse node, and will not trigger the 'onCollapse' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be collapsed</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When collapse node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnCollapse(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonCollapse: myOnCollapse\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onDblClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onDblClick</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the dblclick event when double click node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeDblClick',and return false, zTree will not trigger the 'onDblClick' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is double clicked</p>\n\t<p class=\"highlight_red\">If the DOM which dblclicked isn't a node, it will return null.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When double click node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnDblClick(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonDblClick: myOnDblClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onDrag.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNodes)</span><span class=\"path\">setting.callback.</span>onDrag</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the drag event when drag node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeDrag',and return false, zTree will stop drag, and will not trigger the 'onDragMove' & 'onDrag' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>, the id of the containing tree.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which will be dragged</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When drag nodes, alert the number of dragged nodes.</h4>\n\t<pre xmlns=\"\"><code>function myOnDrag(event, treeId, treeNodes) {\n    alert(treeNodes.length);\n};\nvar setting = {\n\tcallback: {\n\t\tonDrag: myOnDrag\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onDragMove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNodes)</span><span class=\"path\">setting.callback.</span>onDragMove</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the drag-move event when drag & drop node.</p>\n\t\t\t<p class=\"highlight_red\">Mainly used to capture the DOM which the nodes was drag in. </p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>, the id of the containing tree.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which will be dragged</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When drag nodes, output the target dom.</h4>\n\t<pre xmlns=\"\"><code>function myOnDragMove(event, treeId, treeNodes) {\n\tconsole.log(event.target);\n};\nvar setting = {\n\tcallback: {\n\t\tonDragMove: myOnDragMove\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onDrop.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNodes, targetNode, moveType, isCopy)</span><span class=\"path\">setting.callback.</span>onDrop</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to capture the drop event when drag-drop node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeDrop',and return false, zTree will restore the dragged nodes, and will not trigger the 'onDrop' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>, the id of the containing tree.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which has been dragged</p>\n\t<p class=\"highlight_red\">The treeNodes are the data of the nodes which be dragged, when move nodes.</p>\n\t<p class=\"highlight_red\">The treeNodes are the clone data of the nodes which be dragged, when copy nodes.</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the target node which treeNodes are drag-dropped.</p>\n\t<p class=\"highlight_red\">If the treeNodes will be root node, the targetNode = null</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>the relative position of move to the target node</p>\n\t<p class=\"highlight_red\">\"inner\": will be child of targetNode</p>\n\t<p class=\"highlight_red\">\"prev\": will be sibling node, and be in front of targetNode</p>\n\t<p class=\"highlight_red\">\"next\":  will be sibling node, and be behind targetNode</p>\n\t<p class=\"highlight_red\">If moveType is null, means drag & drop is cancel.</p>\n\t<h4 class=\"topLine\"><b>isCopy</b><span>Boolean</span></h4>\n\t<p>the flag used to judge copy node or move node</p>\n\t<p class=\"highlight_red\">true: copy node; false: move node</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When drag-drop nodes complete, alert the number of dragged nodes and info about targetNode.</h4>\n\t<pre xmlns=\"\"><code>function myOnDrop(event, treeId, treeNodes, targetNode, moveType) {\n    alert(treeNodes.length + \",\" + (targetNode ? (targetNode.tId + \", \" + targetNode.name) : \"isRoot\" ));\n};\nvar setting = {\n\tcallback: {\n\t\tonDrop: myOnDrop\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onExpand.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onExpand</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for expand node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeExpand',and return false, zTree will not expand node, and will not trigger the 'onExpand' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be expanded</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When expand node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnExpand(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonExpand: myOnExpand\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onMouseDown.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onMouseDown</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for mouse down.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeMouseDown',and return false, zTree will not trigger the 'onMouseDown' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which mouse over</p>\n\t<p class=\"highlight_red\">If the DOM which mouse over isn't a node, it will return null.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When mouse down, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnMouseDown(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonMouseDown: myOnMouseDown\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onMouseUp.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onMouseUp</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for mouse up.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeMouseUp',and return false, zTree will not trigger the 'onMouseUp' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which mouse over</p>\n\t<p class=\"highlight_red\">If the DOM which mouse over isn't a node, it will return null.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When mouse up, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnMouseUp(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonMouseUp: myOnMouseUp\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onNodeCreated.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onNodeCreated</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for node's DOM is created.</p>\n\t\t\t<p class=\"highlight_red\">Because v3.x uses lazy loading technology, so the nodes which doesn't create DOM when initialized will not trigger this callback, until its parent node is expanded.</p>\n\t\t\t<p class=\"highlight_red\">Large amount of data to load, please note: do not set onNodeCreated, can improve performance as when initialized.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which DOM is created</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When node's DOM is created, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnNodeCreated(event, treeId, treeNode) {\n    alert(treeNode.tId + \", \" + treeNode.name);\n};\nvar setting = {\n\tcallback: {\n\t\tonNodeCreated: myOnNodeCreated\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onRemove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onRemove</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for remove node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeRemove',and return false, zTree will not remove node, and will not trigger the 'onRemove' callback.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which was removed.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When remove node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnRemove(event, treeId, treeNode) {\n\talert(treeNode.tId + \", \" + treeNode.name);\n}\nvar setting = {\n\tcallback: {\n\t\tonRemove: myOnRemove\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onRename.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode, isCancel)</span><span class=\"path\">setting.callback.</span>onRename</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for remove node.</p>\n\t\t\t<p class=\"highlight_red\">1. If you set 'setting.callback.beforeRename',and return false, zTree will keep the editing name, and will not trigger the 'onRename' callback.</p>\n\t\t\t<p class=\"highlight_red\">2. If you modify treeNode data, and use 'updateNode' function, zTree will not trigger the 'onRename' callback.</p>\n\t\t\t<p class=\"highlight_red\">3. From v3.5.13, zTree will trigger this callback when user cancel edit name. please see 'isCancel' parameter.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which was rename.</p>\n\t<h4 class=\"topLine\"><b>isCancel</b><span>Boolean</span></h4>\n\t<p>the status about cancel edit name (v3.5.13+)</p>\n\t<p class=\"highlight_red\">isCancel = true means: user cancel edit name. (press ESC or use cancelEditName() function)</p>\n\t<p class=\"highlight_red\">isCancel = false means: user submit edit name.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When rename node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnRename(event, treeId, treeNode, isCancel) {\n\talert(treeNode.tId + \", \" + treeNode.name);\n}\nvar setting = {\n\tcallback: {\n\t\tonRename: myOnRename\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.callback.onRightClick.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(event, treeId, treeNode)</span><span class=\"path\">setting.callback.</span>onRightClick</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Callback for mouse right click node.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.beforeRightClick',and return false, zTree will not trigger the 'onRightClick' callback.</p>\n\t\t\t<p class=\"highlight_red\">If you set 'setting.callback.onRightClick', zTree will shield the browser context menu when mouse right click on zTree.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>event</b><span>js event Object</span></h4>\n\t<p>event Object</p>\n\t<h4 class=\"topLine\"><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which is mouse right clicked</p>\n\t<p class=\"highlight_red\">If the DOM which mouse right clicked isn't a node, it will return null.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. When mouse right click node, alert info about 'tId' and 'name'.</h4>\n\t<pre xmlns=\"\"><code>function myOnRightClick(event, treeId, treeNode) {\n    alert(treeNode ? treeNode.tId + \", \" + treeNode.name : \"isRoot\");\n};\nvar setting = {\n\tcallback: {\n\t\tonRightClick: myOnRightClick\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.autoCheckTrigger.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>autoCheckTrigger</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When node is automatically checked or unchecked, this parameter used to set to trigger 'beforeCheck / onCheck' callback. It is valid when <span class=\"highlight_red\">[setting.check.enable = true & setting.check.chkStyle = \"checkbox\"]</span></p>\n\t\t\t<p class=\"highlight_red\">1. If you set 'setting.check.chkboxType' to { \"Y\": \"\", \"N\": \"\" }, will not automatically checked or unchecked.</p>\n\t\t\t<p class=\"highlight_red\">2. If you turn on the trigger and there are many more nodes, will affect the performance, because the check or uncheck node can cause many nodes to be automatically checked or unchecked, it will trigger a lot of callbacks, according to the need to decide whether to use this feature.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: trigger callback</p>\n\t<p> false means: don't trigger callback</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. When node is automatically checked or unchecked, zTree trigger 'beforeCheck / onCheck' callback.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tautoCheckTrigger: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.chkDisabledInherit.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>chkDisabledInherit</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When the parent node's 'chkDisabled' attribute is true, set the child nodes automatically inherit the 'chkDisabled' attribute. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">1. Only be used to initialize the nodes, easy batch operations. Please use the 'updateNode' method modify existing node.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: When add new child nodes, if parent node's 'chkDisabled' attribute is true, the child nodes automatically inherit the 'chkDisabled' attribute.</p>\n\t<p> false means: When add new child nodes, the child nodes don't inherit the 'chkDisabled' attribute from parent node.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1.  When add new child nodes, the child nodes automatically inherit the 'chkDisabled' attribute from parent node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkDisabledInherit: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.chkStyle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.check.</span>chkStyle</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Use the checkbox or radio. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p>Default: \"checkbox\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>When chkStyle = \"checkbox\", zTree show checkbox, and '<span class=\"highlight_red\">setting.check.chkboxType</span>' attribute is valid.\n<br/>When chkStyle = \"radio\", zTree show radio, and '<span class=\"highlight_red\">setting.check.radioType</span>' attribute is valid.</p>\n\t<p class=\"highlight_red\">Please note that letter case, do not change.</p>\n\t</div>\n\t<h3>checkbox States Descriptions</h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_false_full\"></button>not checked; <span class=\"highlight_red\">If node is parent, so its child nodes have been not checked.</span> when mouse over: <button type=\"button\" class=\"chk checkbox_false_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_false_part\"></button>not checked; (only parent node) <span class=\"highlight_red\">some of its child nodes have been checked.</span> when mouse over: <button type=\"button\" class=\"chk checkbox_false_part_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_true_full\"></button>be checked; <span class=\"highlight_red\">If node is parent, so its all child nodes have been checked.</span> when mouse over: <button type=\"button\" class=\"chk checkbox_true_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk checkbox_true_part\"></button>be checked; (only parent node) <span class=\"highlight_red\">some of its child nodes or all have been not checked.</span> when mouse over: <button type=\"button\" class=\"chk checkbox_true_part_focus\"></button></p>\n\t\t</div>\n\t</div>\n\t<h3>radio States Descriptions</h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p><button type=\"button\" class=\"chk radio_false_full\"></button>not checked; <span class=\"highlight_red\">If node is parent, so its child have been not checked.</span> when mouse over: <button type=\"button\" class=\"chk radio_false_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk radio_false_part\"></button>not checked; (only parent node) <span class=\"highlight_red\">some of its child have been checked.</span> when mouse over: <button type=\"button\" class=\"chk radio_false_part_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk radio_true_full\"></button>be checked; <span class=\"highlight_red\">If node is parent, so its child have been not checked.</span> when mouse over: <button type=\"button\" class=\"chk radio_true_full_focus\"></button></p>\n\t\t\t<p><button type=\"button\" class=\"chk radio_true_part\"></button>be checked; (only parent node) <span class=\"highlight_red\">some of its child have been checked.</span> when mouse over: <button type=\"button\" class=\"chk radio_true_part_focus\"></button></p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. use radio</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkStyle: \"radio\"\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.chkboxType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON</span><span class=\"path\">setting.check.</span>chkboxType</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When one node is checked or unchecked, control its parent node and its child node auto checked or unchecked. It is valid when <span class=\"highlight_red\">[setting.check.enable = true &amp; setting.check.chkStyle = \"checkbox\"]</span></p>\n\t\t\t<p>Default: { \"Y\": \"ps\", \"N\": \"ps\" }</p>\n\t\t</div>\n\t</div>\n\t<h3>JSON Format</h3>\n\t<div class=\"desc\">\n\t<p>\"Y\" attribute use to set auto check after checkbox was checked.\n<br/>\"N\" attribute use to set auto uncheck after checkbox was unchecked.\n<br/>If value has \"p\", so parent nodes will be checked or unchecked.\n<br/>If value has \"s\", so child nodes will be checked or unchecked.</p>\n\t<p class=\"highlight_red\">Please note that letter case, do not change.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. If check the node, so only auto check parent nodes; If uncheck the node, so only auto uncheck child nodes;</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkStyle: \"checkbox\",\n\t\tchkboxType: { \"Y\": \"p\", \"N\": \"s\" }\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>enable</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to use checkbox or radio in zTree</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: use the checkbox or radio</p>\n\t<p> false means: don't use the checkbox or radio</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. use the checkbox</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.nocheckInherit.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.check.</span>nocheckInherit</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When the parent node's 'nocheck' attribute is true, set the child nodes automatically inherit the 'nocheck' attribute. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">1. Only be used to initialize the nodes, easy batch operations. Please use the 'updateNode' method modify existing node.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: When add new child nodes, if parent node's 'nocheck' attribute is true, the child nodes automatically inherit the 'nocheck' attribute.</p>\n\t<p> false means: When add new child nodes, the child nodes don't inherit the 'nocheck' attribute from parent node.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1.  When add new child nodes, the child nodes automatically inherit the 'nocheck' attribute from parent node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tnocheckInherit: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.check.radioType.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.check.</span>radioType</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The group about radio. It is valid when <span class=\"highlight_red\">[setting.check.enable = true &amp; setting.check.chkStyle = \"radio\"]</span></p>\n\t\t\t<p>Default: \"level\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>When radioType = \"level\", will be grouped with same level nodes which have the same parent node.\n<br/>When radioType = \"all\", will be grouped with all nodes.</p>\n\t<p class=\"highlight_red\">Please note that letter case, do not change.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the group about radio is all nodes.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tcheck: {\n\t\tenable: true,\n\t\tchkStyle: \"radio\",\n\t\tradioType: \"all\"\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.keep.leaf.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.data.keep.</span>leaf</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The leaf node's lock, the leaf node will lock the 'isParent' attribute to false.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: lock the leaf node, and <span class=\"highlight_red\">the node which 'isParent' attribute is false can't add child nodes</span>.</p>\n\t<p> false means: don't lock the leaf node, and <span class=\"highlight_red\">the node which 'isParent' attribute is false can add child nodes</span>.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. lock the leaf node</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkeep: {\n\t\t\tleaf: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.keep.parent.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.data.keep.</span>parent</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The parent node's lock, the parent node will lock 'isParent' attribute to true.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: lock the parent node, and <span class=\"highlight_red\">if remove all of the parent node's child nodes, its 'isParent' attribute still keep to be true.</span>.</p>\n\t<p> false means: don't lock the parent node, and <span class=\"highlight_red\">if remove all of the parent node's child nodes, its 'isParent' attribute will change to be false.</span>.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. lock the parent node</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkeep: {\n\t\t\tparent: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.checked.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>checked</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save the checked state.</p>\n\t\t\t<p>Default: \"checked\"</p>\n\t\t\t<p class=\"highlight_red\">Please don't set the other node attribute which zTree used. (e.g., checkedOld)</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. set the 'isChecked' attribute to save the checked state.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tchecked: \"isChecked\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.children.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>children</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save the child nodes.</p>\n\t\t\t<p>Default: \"children\"</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the 'nodes' attribute to save the child nodes.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tchildren: \"nodes\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.isHidden.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>isHidden</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save whether the node is the parent node.</p>\n\t\t\t<p>Default: \"isHidden\"</p>\n\t\t\t<p class=\"highlight_red\">v3.5.32+</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the 'hidden' attribute to save whether the node is the parent node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tisHidden: \"hidden\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.isParent.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>isParent</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save whether the node is the parent node.</p>\n\t\t\t<p>Default: \"isParent\"</p>\n\t\t\t<p class=\"highlight_red\">v3.5.32+</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the 'parent' attribute to save whether the node is the parent node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tisParent: \"parent\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.name.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>name</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save the node name.</p>\n\t\t\t<p>Default: \"name\"</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the 'ename' attribute to save the node name.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\tname: \"ename\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.title.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>title</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save the 'title' attribute of node DOM. It is valid when <span class=\"highlight_red\">[setting.view.showTitle = true]</span></p>\n\t\t\t<p class=\"highlight_red\">If set it to \"\", the title of node DOM will be same as 'setting.data.key.name' attribute.</p>\n\t\t\t<p>Default: \"\"</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the 'fullName' attribute to save the title of node DOM.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\ttitle: \"fullName\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.key.url.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.key.</span>url</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save the node link's url.</p>\n\t\t\t<p class=\"highlight_red\">Special: If the nodes's data can only use the 'url' attribute, and don't use the link to jump feature, you can modify this attribute to any nonexistent attribute.</p>\n\t\t\t<p>Default: \"url\"</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the 'xUrl' attribute to save the node link's url.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tkey: {\n\t\t\turl: \"xUrl\"\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.simpleData.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.data.simpleData.</span>enable</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set zTree's node to accept the simple data format, when zTree is initialized or when ajax get / or when use <span class=\"highlight_red\">addNodes</span> method.</p>\n\t\t\t<p>Don't have to generate the complex nested data.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: zTree's node accept the simple data format.</p>\n\t<p> false means: zTree's node only accept the nested data format.</p>\n\t<p class=\"highlight_red\">If set it is true, you must set the other attributes in 'setting.data.simpleData'. (e.g., idKey, pIdKey, rootPId)  And let the data satisfy the parent-child relationship.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. use the simple data format</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.simpleData.idKey.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.simpleData.</span>idKey</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save node data's unique identifier. It is valid when <span class=\"highlight_red\">[setting.data.simpleData.enable = true]</span></p>\n\t\t\t<p>Default: \"id\"</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. use the simple data format</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.simpleData.pIdKey.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.data.simpleData.</span>pIdKey</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node data's attribute to save its parent node data's unique identifier. It is valid when <span class=\"highlight_red\">[setting.data.simpleData.enable = true]</span></p>\n\t\t\t<p>Default: \"pId\"</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. use the simple data format</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.data.simpleData.rootPId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Number</span><span class=\"path\">setting.data.simpleData.</span>rootPId</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set the default value of root's 'pIdKey' specified attribute values​​. It is valid when <span class=\"highlight_red\">[setting.data.simpleData.enable = true]</span></p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. use the simple data format</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar treeNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.autoExpandTrigger.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.drag.</span>autoExpandTrigger</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag node cause the parent node is automatically expanded, set whether to allow to trigger the 'onExpand' callback. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: trigger the 'onExpand' callback.</p>\n\t<p> false means: don't trigger the 'onExpand' callback.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set to allow to trigger the 'onExpand' callback</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tautoExpandTrigger: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.autoOpenTime.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>autoOpenTime</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Drag to the parent node, the parent node auto expand time interval. (Unit: ms) It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: 500</p>\n\t\t\t<p class=\"highlight_red\">Please adjust the value according to needs.</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. When drag node to other parent node, expand it at once.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tautoOpenTime: 0\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.borderMax.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>borderMax</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag a node to root, the zTree's inner border width. (Unit: px) It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: 10</p>\n\t\t\t<p class=\"highlight_red\">Please adjust the value according to needs.</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. adjust the inner border width is 20px</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tborderMax: 20\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.borderMin.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>borderMin</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag a node to root, the zTree's outer border width. (Unit: px) It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: -5</p>\n\t\t\t<p class=\"highlight_red\">Please adjust the value according to needs.</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. adjust the outer border width is 10px</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tborderMin: -10\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.inner.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNodes, targetNode)</span><span class=\"path\">setting.edit.drag.</span>inner</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag one node to the target node, set whether to allow the node to be the target node's child. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">If the target node is root, so zTree will only trigger 'inner' and not trigger 'prev / next'.</p>\n\t\t\t<p class=\"highlight_red\">This function mainly for the appropriate limit drag and drop (auxiliary arrow), it requires a combination of 'prev, next' together, to achieve full functionality.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: allow the node to be the target node's child.</p>\n\t<p> false means: don't allow the node to be the target node's child.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which has been dragged</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the target node which treeNodes are draged over.</p>\n\t<p class=\"highlight_red\">If the treeNodes will be root node, the targetNode = null</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to drag the node to the target node's inner.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: true,\n\t\t\tinner: false\n\t\t}\n\t}\n};\n......</code></pre>\n\t<h4>2. disable to drag the node to be root node's child.</h4>\n\t<pre xmlns=\"\"><code>function canInner(treeId, nodes, targetNode) {\n\treturn !(targetNode && targetNode.level === 0);\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: true,\n\t\t\tinner: canInner\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.isCopy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.drag.</span>isCopy</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag-drop node, set whether to allow to copy node. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Rules Description</h3>\n\t<div class=\"desc\">\n\t<p>1. If isCopy = true and isMove = true, when drag-drop node, press Ctrl-Key or Cmd-key can copy node, don't press Ctrl-Key or Cmd-key can move node.</p>\n\t<p>2. If isCopy = true and isMove = false, when drag-drop node, will copy node.</p>\n\t<p>3. If isCopy = false and isMove = true, when drag-drop node, will move node.</p>\n\t<p>4. If isCopy = false and isMove = false, so disable to drag-drop node.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. all of the drag-drop operation will copy node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tisCopy: true,\n\t\t\tisMove: false\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.isMove.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.drag.</span>isMove</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag-drop node, set whether to allow to move node. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Rules Description</h3>\n\t<div class=\"desc\">\n\t<p>1. If isCopy = true and isMove = true, when drag-drop node, press Ctrl-Key or Cmd-key can copy node, don't press Ctrl-Key or Cmd-key can move node.</p>\n\t<p>2. If isCopy = true and isMove = false, when drag-drop node, will copy node.</p>\n\t<p>3. If isCopy = false and isMove = true, when drag-drop node, will move node.</p>\n\t<p>4. If isCopy = false and isMove = false, so disable to drag-drop node.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. all of the drag-drop operation will move node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tisCopy: false,\n\t\t\tisMove: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.maxShowNodeNum.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>maxShowNodeNum</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When dragging more than one sibling node, the floating layer shows the maximum number of nodes. zTree using '...' instead of redundant nodes. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: 5</p>\n\t\t\t<p class=\"highlight_red\">Please adjust the value according to needs.</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the maximum number is 10</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tmaxShowNodeNum: 10\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.minMoveSize.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">setting.edit.drag.</span>minMoveSize</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The minimum offset which used to determine the drag operator start. (Unit: px) It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Please adjust the value according to needs. Note: If it is too small, will easily lead to misoperation when you click mouse.</p>\n\t\t\t<p>Default: 5</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the minimum offset is 10px.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tminMoveSize: 10\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.next.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNodes, targetNode)</span><span class=\"path\">setting.edit.drag.</span>next</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag one node to the target node, set whether to allow the node to be the target node's next sibling. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">If the target node is root, so zTree will only trigger 'inner' and not trigger 'prev / next'.</p>\n\t\t\t<p class=\"highlight_red\">This function mainly for the appropriate limit drag and drop (auxiliary arrow), it requires a combination of 'prev, inner' together, to achieve full functionality.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: allow the node to be the target node's next sibling.</p>\n\t<p> false means: don't allow the node to be the target node's next sibling.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which has been dragged</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the target node which treeNodes are draged over.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to drag the node to the target node's next sibling.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: false,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n\t<h4>2. disable to drag the node to be all of the parent nodes's next sibling.</h4>\n\t<pre xmlns=\"\"><code>function canNext(treeId, nodes, targetNode) {\n\treturn !targetNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: true,\n\t\t\tnext: canNext,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.drag.prev.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNodes, targetNode)</span><span class=\"path\">setting.edit.drag.</span>prev</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When drag one node to the target node, set whether to allow the node to be the target node's previous sibling. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">If the target node is root, so zTree will only trigger 'inner' and not trigger 'prev / next'.</p>\n\t\t\t<p class=\"highlight_red\">This function mainly for the appropriate limit drag and drop (auxiliary arrow), it requires a combination of 'next, inner' together, to achieve full functionality.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: allow the node to be the target node's previous sibling.</p>\n\t<p> false means: don't allow the node to be the target node's previous sibling.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>A collection of the nodes which has been dragged</p>\n\t<h4 class=\"topLine\"><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the target node which treeNodes are draged over.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return true or false</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. disable to drag the node to the target node's previous sibling.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: false,\n\t\t\tnext: true,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n\t<h4>2. disable to drag the node to be all of the parent nodes's previous sibling.</h4>\n\t<pre xmlns=\"\"><code>function canPrev(treeId, nodes, targetNode) {\n\treturn !targetNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tdrag: {\n\t\t\tprev: canPrev,\n\t\t\tnext: true,\n\t\t\tinner: true\n\t\t}\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.editNameSelectAll.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.</span>editNameSelectAll</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When edit node's name, the text in input is selected or unselected. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: when show the input, the text in input is selected</p>\n\t<p> false means: when show the input, the text in input is not selected</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. When edit node's name, the text in input is selected.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\teditNameSelectAll: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.enable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.edit.</span>enable</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set zTree is in edit mode</p>\n\t\t\t<p class=\"highlight_red\">Please set this attribute before zTree initialization. If you need to change the edit mode after the initialization, please use zTreeObj.setEditable() method.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: zTree is in edit mode.</p>\n\t<p> false means: zTree is not in edit mode.</p>\n\t</div>\n\t<h3>Editing Rules Description</h3>\n\t<div class=\"desc\">\n\t<p>1. When click the node, it will not open '<span class=\"highlight_red\">node.url</span>' specified URL.\n<br/>2. Support for dynamic tree editing.\n<br/>3. You can drag-drop nodes, and support drag-drop nodes between multiple trees.\n<br/>4. Support use drag-drop to copy or move the node. (Reference: <span class=\"highlight_red\">setting.edit.drag.isCopy / setting.edit.drag.isMove</span>)\n<br/>5. You can use the Edit button to modify the name attribute.\n<br/>6. You can use the Remove button to remove the node.\n<br/>\n\t</p>\n\t<p class=\"highlight_red\">Please note that letter case, do not change.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. edit the tree</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.removeTitle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>removeTitle</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>the title of the remove button DOM. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true & setting.edit.showRemoveBtn = true]</span></p>\n\t\t\t<p>Default: \"remove\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>When the mouse over the remove button, the browser auto pop-up message content.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which show the remove button</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>String</span></h4>\n\t<p>Return value is same as 'String Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Set title is 'remove the node' about all the remove button</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: true,\n\t\tremoveTitle: \"remove the node\"\n\t}\n};\n......</code></pre>\n\t<h4>2. Set title is 'remove the parent node' about the parent node, and is 'remove the leaf node' about the leaf node</h4>\n\t<pre xmlns=\"\"><code>function setRemoveTitle(treeId, treeNode) {\n\treturn treeNode.isParent ? \"remove the parent node\":\"remove the leaf node\";\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: true,\n\t\tremoveTitle: setRemoveTitle\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.renameTitle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>renameTitle</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>the title of the rename button DOM. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true & setting.edit.showRenameBtn = true]</span></p>\n\t\t\t<p>Default: \"rename\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>When the mouse over the rename button, the browser auto pop-up message content.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which show the rename button</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>String</span></h4>\n\t<p>return value is same as 'String Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Set title is 'rename the node' about all the rename button</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: true,\n\t\trenameTitle: \"rename the node\"\n\t}\n};\n......</code></pre>\n\t<h4>2. Set title is 'rename the parent node' about the parent node, and is 'rename the leaf node' about the leaf node</h4>\n\t<pre xmlns=\"\"><code>function setRenameTitle(treeId, treeNode) {\n\treturn treeNode.isParent ? \"rename the parent node\":\"rename the leaf node\";\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: true,\n\t\trenameTitle: setRenameTitle\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.showRemoveBtn.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>showRemoveBtn</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to show or hide the remove button. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>When you click the remove button:</p>\n\t\t\t<p>1. zTree will trigger the <span class=\"highlight_red\">setting.callback.beforeRemove</span> callback, and you can decide whether to allow delete.</p>\n\t\t\t<p>2. If you don't set the 'beforeRemove' or  the 'beforeRemove' callback return true, so zTree will trigger the <span class=\"highlight_red\">setting.callback.onRemove</span> callback after remove the node.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: show the remove button</p>\n\t<p> false means: hide the remove button</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which show the remove button</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>Return value is same as 'Boolean Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Hide the remove button</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: false\n\t}\n};\n......</code></pre>\n\t<h4>2. Hide the remove button of parent node</h4>\n\t<pre xmlns=\"\"><code>function setRemoveBtn(treeId, treeNode) {\n\treturn !treeNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRemoveBtn: setRemoveBtn\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.edit.showRenameBtn.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.edit.</span>showRenameBtn</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to show or hide the rename button. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p>When you click the rename button:</p>\n\t\t\t<p>1. Click the rename button, you can rename the node.</p>\n\t\t\t<p>2. After rename operation (the input DOM blur or press the Enter Key), zTree will trigger the <span class=\"highlight_red\">setting.callback.beforeRename</span> callback, and you can decide whether to allow rename.</p>\n\t\t\t<p>3. If the 'beforeRename' callback return false, so zTree will keep the edit status. (Press the ESC key, can be restored to the original state.</p>\n\t\t\t<p>4. If you don't set the 'beforeRename' or  the 'beforeRename' callback return true, so zTree will trigger the <span class=\"highlight_red\">setting.callback.onRename</span> callback after rename the node.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: show the rename button</p>\n\t<p> false means: hide the rename button</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which show the rename button</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>Return value is same as 'Boolean Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Hide the rename button</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: false\n\t}\n};\n......</code></pre>\n\t<h4>2. Hide the rename button of parent node</h4>\n\t<pre xmlns=\"\"><code>function setRenameBtn(treeId, treeNode) {\n\treturn !treeNode.isParent;\n}\nvar setting = {\n\tedit: {\n\t\tenable: true,\n\t\tshowRenameBtn: setRenameBtn\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.treeId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">setting.</span>treeId</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree unique identifier. After the initialization, it equals to the id attribute value of the user-defined zTree container.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is an internal argument.</p>\n\t\t</div>\n\t</div>\n\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.treeObj.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Object</span><span class=\"path\">setting.</span>treeObj</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>zTree DOM's jQuery object, the main function: easy to internal operations.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is an internal argument.</p>\n\t\t</div>\n\t</div>\n\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.addDiyDom.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>addDiyDom</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>This function used to display the custom control on the node.</p>\n\t\t\t<p class=\"highlight_red\">1. If you have huge node data, please note: this function will affect the initialization performance. If not required, it is recommended not to use this function.</p>\n\t\t\t<p class=\"highlight_red\">2. This function is an advanced application, please make sure that a better understanding of zTree before you use it.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which display the custom control.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Display button in all nodes.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\taddDiyDom: addDiyDom\n\t}\n};\nfunction addDiyDom(treeId, treeNode) {\n\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\tvar editStr = \"&lt;span id='diyBtn_space_\" +treeNode.id+ \"' &gt; &lt;/span&gt;\"\n\t\t+ \"&lt;button type='button' class='diyBtn1' id='diyBtn_\" + treeNode.id\n\t\t+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'&gt;&lt;/button&gt;\";\n\taObj.append(editStr);\n\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.addHoverDom.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>addHoverDom</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to display custom control when mouse move over the node. (e.g. the rename and remove button)</p>\n\t\t\t<p class=\"highlight_red\">If you use this function, so must set <span class=\"highlight_red\">setting.view.removeHoverDom</span>, please make sure that a better understanding of zTree before you use it.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to display the custom control.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Display a button when mouse move over the node, and hide the button when mouse move out.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\taddHoverDom: addHoverDom,\n\t\tremoveHoverDom: removeHoverDom,\n\t\t......\n\t}\n};\nfunction addHoverDom(treeId, treeNode) {\n\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\tvar editStr = \"&lt;span id='diyBtn_space_\" +treeNode.id+ \"' &gt;&nbsp;&lt;/span&gt;\"\n\t\t+ \"&lt;button type='button' class='diyBtn1' id='diyBtn_\" + treeNode.id\n\t\t+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'&gt;&lt;/button&gt;\";\n\taObj.append(editStr);\n\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n};\nfunction removeHoverDom(treeId, treeNode) {\n\t$(\"#diyBtn_\"+treeNode.id).unbind().remove();\n\t$(\"#diyBtn_space_\" +treeNode.id).unbind().remove();\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.autoCancelSelected.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>autoCancelSelected</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When click the selected node while pressing the Ctrl-key or Cmd-key, allow to cancel selected the node.</p>\n\t\t\t<p class=\"highlight_red\">If you don't need this function, please set to false.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: press the Ctrl-key or Cmd-key, can cancel selected node.</p>\n\t<p> false means: press the Ctrl-key or Cmd-key, can't cancel selected node.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Press the Ctrl-key or Cmd-key, can't cancel selected node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tautoCancelSelected: false\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.dblClickExpand.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>dblClickExpand</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>When double-click the parent node, 'dblClickExpand' is used to decide whether to expand the parent node.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: When double-click the parent node, zTree will expand the parent node.</p>\n\t<p> false means: When double-click the parent node, zTree will not expand the parent node.</p>\n\t</div>\n\t<h3>Function Pamameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which be double-clicked.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>Return value is same as 'Boolean Format'</p>\n\t</div>\n\t<h3>Example of setting</h3>\n\t<h4>1. When double-click the parent node, zTree will not expand the parent node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tdblClickExpand: false\n\t}\n};\n......</code></pre>\n\t<h4>2. When double-click the parent node, zTree will expand the parent node which level>0.</h4>\n\t<pre xmlns=\"\"><code>function dblClickExpand(treeId, treeNode) {\n\treturn treeNode.level > 0;\n};\nvar setting = {\n\tview: {\n\t\tdblClickExpand: dblClickExpand\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.expandSpeed.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String / Number</span><span class=\"path\">setting.view.</span>expandSpeed</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The animation speed of expand or collapse node. As same as 'speed' parameter in jQuery</p>\n\t\t\t<p class=\"highlight_red\">In order to ensure zTree operating speed,  if use the IE6,  zTree will not use animation.</p>\n\t\t\t<p>Default: \"fast\"</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>e.g. \"slow\", \"normal\", or \"fast\"</p>\n\t<p class=\"highlight_red\">If set to \"\", zTree will not use animation.</p>\n\t</div>\n\t<h3>Number Format</h3>\n\t<div class=\"desc\">\n\t<p>How long the animation will run. [Unit: ms] (e.g. 1000)</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set the animation speed to slow</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\texpandSpeed: \"slow\"\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.fontCss.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>fontCss</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Personalized text style, only applies to &lt;A&gt; object in the node DOM</p>\n\t\t\t<p>Default: {}</p>\n\t\t</div>\n\t</div>\n\t<h3>JSON Format</h3>\n\t<div class=\"desc\">\n\t<p>As same as .css() method in jQuery. e.g. <span class=\"highlight_red\">{color:\"#ff0011\", background:\"blue\"}</span></p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which use the personalized text style</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>Return value is same as 'JSON Format'. e.g. <span class=\"highlight_red\">{color:\"#ff0011\", background:\"blue\"}</span></p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Don't modify css file, and set the node name's color to red</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tfontCss : {color:\"red\"}\n\t}\n};</code></pre>\n\t<h4>2. Don't modify css file, and set the root node name's color to red</h4>\n\t<pre xmlns=\"\"><code>function setFontCss(treeId, treeNode) {\n\treturn treeNode.level == 0 ? {color:\"red\"} : {};\n};\nvar setting = {\n\tview: {\n\t\tfontCss: setFontCss\n\t}\n};</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.nameIsHTML.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>nameIsHTML</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to use HTML in 'name' attribute.</p>\n\t\t\t<p class=\"highlight_red\">If allow HTML, please do check to avoid security issues, e.g. JavaScript Injection...</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: 'name' attribute can be HTML.</p>\n\t<p> false means: 'name' attribute is only TEXT.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Set to allow HTML</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tnameIsHTML: true\n\t}\n};\nvar node = {\"name\":\"&lt;font color='red'&gt;test&lt;/font&gt;\"};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.removeHoverDom.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>removeHoverDom</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to hide custom control when mouse move out the node. (e.g. the rename and remove button)</p>\n\t\t\t<p class=\"highlight_red\">If you use this function, so must set <span class=\"highlight_red\">setting.view.addHoverDom</span>, please make sure that a better understanding of zTree before you use it.</p>\n\t\t\t<p>Default: null</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to hide the custom control.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Display a button when mouse move over the node, and hide the button when mouse move out.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\taddHoverDom: addHoverDom,\n\t\tremoveHoverDom: removeHoverDom,\n\t\t......\n\t}\n};\nfunction addHoverDom(treeId, treeNode) {\n\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\tvar editStr = \"&lt;span id='diyBtn_space_\" +treeNode.id+ \"' &gt;&nbsp;&lt;/span&gt;\"\n\t\t+ \"&lt;button type='button' class='diyBtn1' id='diyBtn_\" + treeNode.id\n\t\t+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'&gt;&lt;/button&gt;\";\n\taObj.append(editStr);\n\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n};\nfunction removeHoverDom(treeId, treeNode) {\n\t$(\"#diyBtn_\"+treeNode.id).unbind().remove();\n\t$(\"#diyBtn_space_\" +treeNode.id).unbind().remove();\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.selectedMulti.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>selectedMulti</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set whether to allow select multiple nodes.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true mean: you can select multiple nodes.</p>\n\t<p> false mean: you can only select one node.</p>\n\t<p class=\"highlight_red\">1. Press Ctrl-key or Cmd-key, you can select multiple nodes.</p>\n\t<p class=\"highlight_red\">2、This attribute don't affect the feature of cancel select node. ( please see setting.view.autoCancelSelected )</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Only select one node.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tselectedMulti: false\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.showIcon.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>showIcon</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to show or hide node icon.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: show node icon.</p>\n\t<p> false means: hide node icon.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to show icon.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>Return value is same as 'Boolean Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Hide node icon</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tshowIcon: false\n\t}\n};\n......</code></pre>\n\t<h4>2. Hide node icon which level=2</h4>\n\t<pre xmlns=\"\"><code>function showIconForTree(treeId, treeNode) {\n\treturn treeNode.level != 2;\n};\nvar setting = {\n\tview: {\n\t\tshowIcon: showIconForTree\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.showLine.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>showLine</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to show or hide line.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: show line.</p>\n\t<p> false means: hide line.</p>\n\t</div>\n\t<h3>Examples of setting</h3>\n\t<h4>1. Hide line</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tshowLine: false\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.showTitle.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean / Function(treeId, treeNode)</span><span class=\"path\">setting.view.</span>showTitle</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to show or hide the 'title' attribute of node DOM.</p>\n\t\t\t<p class=\"highlight_red\">Please see the <span class=\"highlight_red\">setting.data.key.title</span> attribute</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: show the 'title' attribute of node DOM.</p>\n\t<p> false means: hide the 'title' attribute of node DOM.</p>\n\t<p class=\"highlight_red\">When setting.view.showTitle = true & setting.data.key.title = '', zTree will set the 'setting.data.key.name' attribute to the 'setting.data.key.title'.</p>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeId</b><span>String</span></h4>\n\t<p>zTree unique identifier: <b class=\"highlight_red\">treeId</b>.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to show title.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>Return value is same as 'Boolean Format'</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Hide the 'title' attribute of node DOM.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\tshowTitle: false\n\t}\n};\n......</code></pre>\n\t<h4>2. Hide the 'title' attribute of node DOM which level=2.</h4>\n\t<pre xmlns=\"\"><code>function showTitleForTree(treeId, treeNode) {\n\treturn treeNode.level != 2;\n};\nvar setting = {\n\tview: {\n\t\tshowTitle: showTitleForTree\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/setting.view.txtSelectedEnable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">setting.view.</span>txtSelectedEnable</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set to allow or don't allow to select the text which in zTree's DOM.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: Allow to select the txt which in zTree's DOM.</p>\n\t<p> false means: Don't allow to select the txt which in zTree's DOM.</p>\n\t</div>\n\t<h3>Examples of setting & function</h3>\n\t<h4>1. Allow to select the txt which in zTree's DOM.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tview: {\n\t\ttxtSelectedEnable: true\n\t}\n};\n......</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.check_Child_State.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">treeNode.</span>check_Child_State</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to record the node's half-checked state about its all child nodes's checkbox or radio. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">zTree v3.x provides treeNode.getCheckStatus () method to get an accurate the half-checked status.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is an internal argument.</p>\n\t\t\t<p>Default: true</p>\n\t\t</div>\n\t</div>\n\t<h3>Number Format</h3>\n\t<div class=\"desc\">\n\t<p>Rules:</p>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"checkbox\"</td></tr>\n\t\t\t<tr><td>treeNode.check_Child_State</td><td>Checked Status Description</td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-1</td><td>Has no child nodes or all child nodes's 'nocheck' attribute is true.</td></tr>\n\t\t\t<tr><td>0</td><td>All of the child nodes has not been checked.</td></tr>\n\t\t\t<tr><td>1</td><td>Some of the child nodes has been checked.</td></tr>\n\t\t\t<tr><td>2</td><td>All of the child nodes has been checked.</td></tr>\n\t\t</tbody>\n\t</table>\n\t<br/>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"radio\"</td></tr>\n\t\t\t<tr><td>treeNode.check_Child_State</td><td>Checked Status Description</td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-1</td><td>Has no child nodes or all child nodes's 'nocheck' attribute is true.</td></tr>\n\t\t\t<tr><td>0</td><td>All of the child nodes has not been checked.</td></tr>\n\t\t\t<tr><td>2</td><td>Some of the child nodes has been checked.</td></tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.check_Focus.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>check_Focus</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to record the status which the checkbox or radio get focus. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is an internal argument.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p>true means: mouse move over the checkbox</p>\n\t<p>false means: mouse move out the checkbox</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.checked.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>checked</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The checked status about node's checkbox or radio. It is valid when <span class=\"highlight_red\">[setting.check.enable = true & treeNode.nocheck = false]</span></p>\n\t\t\t<p class=\"highlight_red\">1. If change the 'checked' to other attribute, please set the 'setting.data.key.checked' attribute.</p>\n\t\t\t<p class=\"highlight_red\">2. If you create node data, and set 'checked' attribute to true, zTree will check this node's checkbox or radio when zTree is initialized.</p>\n\t\t\t<p class=\"highlight_red\">3. Use the treeObj.checkNode or checkAllNodes or updateNode method, you can check or uncheck the node. Please see the API about these methods.</p>\n\t\t\t<p class=\"highlight_red\">4. zTree support identification string 'true' & 'false'.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p>true means: check the checkbox or radio when zTree is initialized.</p>\n\t<p>false means: uncheck the checkbox or radio when zTree is initialized.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. check the checkbox when zTree is initialized</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n{ \"id\":1, \"name\":\"test1\", checked:true },\n{ \"id\":2, \"name\":\"test2\", checked:true }\n]</code></pre>\n\t<h4>2. Get the checked status of the first root node</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar checked = treeObj.getNodes()[0].checked;\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.checkedOld.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>checkedOld</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The checked status about node's checkbox or radio when zTree was initialized. It is valid when <span class=\"highlight_red\">[setting.check.enable = true & treeNode.nocheck = false]</span></p>\n\t\t\t<p class=\"highlight_red\">1. Do not initialize it, it will be initialized when the node is initialized.</p>\n\t\t\t<p class=\"highlight_red\">2. If you need to achieve special features, you can use the zTreeObj.getChangeCheckedNodes method and modify the value of 'checkedOld' attribute.</p>\n\t\t\t<p>Default: the value of 'checked' attribute when zTree is initialized</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p>true means: the checkbox or radio is checked when zTree is initialized.</p>\n\t<p>false means: the checkbox or radio is not checked when zTree is initialized.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the original checked status of the first root node</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar checkedOld = treeObj.getNodes()[0].checkedOld;\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.children.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Array(JSON)</span><span class=\"path\">treeNode.</span>children</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The data collections of node's child nodes.</p>\n\t\t\t<p class=\"highlight_red\">1. If change the 'children' to other attribute, please set the 'setting.data.key.children' attribute.</p>\n\t\t\t<p class=\"highlight_red\">2. If you set to use dynamic tree, when a node is expanded which 'isParent' attribute is true and which has no child nodes, zTree will use ajax to get its child nodes.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>Array(JSON) Format</h3>\n\t<div class=\"desc\">\n\t<p>Standard JSON Data object</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Use the standard JSON data object.</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n{ \"id\":1, \"name\":\"test1\",\n\tchildren: [\n\t{ \"id\":3, \"name\":\"test3\"},\n\t{ \"id\":4, \"name\":\"test4\"},\n\t{ \"id\":5, \"name\":\"test5\"}\n\t]\n},\n{ \"id\":2, \"name\":\"test2\"  }\n]</code></pre>\n\t<h4>2. Get the first root node's child nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes()[0].children;\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.chkDisabled.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>chkDisabled</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>1. Set node's checkbox / radio to disabled. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">2. zTree support identification string 'true' & 'false'.</p>\n\t\t\t<p class=\"highlight_red\">3. Please don't change this attribute of the nodes which have been created. If you want to disable or undisable the nodes, please use 'setChkDisabled()' methods.</p>\n\t\t\t<p class=\"highlight_red\">4. When zTree initialize the nodes, if you need to the child nodes automatically inherit the 'chkDisabled' attribute, please see 'setting.check.chkDisabledInherit'.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">true means: this node's checkbox / radio is disabled.</p>\n\t<p class=\"highlight_red\">false means: this node's checkbox / radio is able.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. disable some node's checkbox / radio </h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\", \"checked\":true, \"chkDisabled\":true},\n\t{ \"id\":2, \"name\":\"test2\", \"chkDisabled\":true},\n\t{ \"id\":3, \"name\":\"test3\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.click.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>click</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Simple click event operations. As same as : (onclick =\"...\") the code. If the operation is more complex, please use the onClick callback.</p>\n\t\t\t<p class=\"highlight_red\">Because IE is different to other browsers in operating the event of ‘onclick’ and ‘click’ coexistence, please do not use this parameter to control whether to allow the redirection operation (for example: treeNode.click = \"return false;\"). If there is similar requirements, please do not use the 'url' attribute to save the website address, but use the 'onClick' callback to control jumps.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>Standard javascript syntax, for example: alert (\"test\"); etc.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. When click this node, will alert msg.</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"Google CN\", \"url\":\"http://g.cn\", \"click\":\"alert('test');\"},\n\t......\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.diy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>?</span><span class=\"path\">treeNode.</span>* DIY *</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to save other custom data of node, do not use the same attribute name with ztree used, the user can freely set.</p>\n\t\t</div>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Use 'ename' attribute to save more info</h4>\n\t<pre xmlns=\"\"><code>var node = { \"id\":1, \"name\":\"test1\", \"ename\":\"test eName\"};</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.editNameFlag.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>editNameFlag</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to save the node editing name status. It is valid when <span class=\"highlight_red\">[setting.edit.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is an internal argument.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p>true means: node is being edited.</p>\n\t<p>false means: node is not being edited.</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.getCheckStatus.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getCheckStatus</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the node's half-checked status of checkbox or radio. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return</b><span>JSON</span></h4>\n\t<pre xmlns=\"\"><code>{\n\tchecked: true, //As same as 'treeNode.checked'\n\thalf: true  //Rule the table below\n}</code></pre>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"checkbox\"</td></tr>\n\t\t\t<tr><td>treeNode.checked</td><td>treeNode.check_Child_State</td><td>treeNode.halfCheck</td><td> half </td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-</td><td>-</td><td>true</td><td>true</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>true</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>true</td><td>0</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td>true</td><td>1</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td>true</td><td>2</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>false</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>0</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>1</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td>false</td><td>2</td><td>false</td><td>true</td></tr>\n\t\t</tbody>\n\t</table>\n\t<br/>\n\t<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\">\n\t\t<thead>\n\t\t\t<tr><td colspan=\"4\">setting.check.checkType = \"radio\"</td></tr>\n\t\t\t<tr><td>treeNode.checked</td><td>treeNode.check_Child_State</td><td>treeNode.halfCheck</td><td> half </td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr><td>-</td><td>-</td><td>true</td><td>true</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>true</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>true</td><td>0</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>true</td><td>2</td><td>false</td><td>true</td></tr>\n\t\t\t<tr><td colspan=\"4\">&nbsp;</td></tr>\n\t\t\t<tr><td>false</td><td>-1</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>0</td><td>false</td><td>false</td></tr>\n\t\t\t<tr><td>false</td><td>2</td><td>false</td><td>true</td></tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first root node's half-checked status</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar halfCheck = treeObj.getNodes()[0].getCheckStatus();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.getIndex.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getIndex</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the treeNode's index in its parent node's children.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return</b><span>Number</span></h4>\n\t<p>the treeNode's index in its parent node's children. ( start at 0 )</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's index.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getIndex();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.getNextNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getNextNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the treeNode's next sibling node.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return</b><span>JSON</span></h4>\n\t<p>JSON data object of the treeNode's next sibling node</p>\n\t<p class=\"highlight_red\">If have not the next node, return null.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's next sibling node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getNextNode();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.getParentNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getParentNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the treeNode's parent node.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return</b><span>JSON</span></h4>\n\t<p>JSON data object of treeNode's parent node.</p>\n\t<p class=\"highlight_red\">If treeNode is root, return null.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's parent node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getParentNode();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.getPath.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getPath</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the treeNode's all parent nodes. (Include itself)</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return</b><span>Array (JSON)</span></h4>\n\t<p>Array of treeNode's all parent nodes. (Include itself)</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's all parent nodes.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getPath();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.getPreNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">treeNode.</span>getPreNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the treeNode's previous sibling node.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return</b><span>JSON</span></h4>\n\t<p>JSON data object of the treeNode's previous sibling node</p>\n\t<p class=\"highlight_red\">If have not the previous node, return null.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's previous sibling node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar node = sNodes[0].getPreNode();\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.halfCheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>halfCheck</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Force node checkBox / radio to the half-checked status. It is valid when <span class=\"highlight_red\">[setting.check.enable = true & treeNode.nocheck = false]</span></p>\n\t\t\t<p class=\"highlight_red\">1. If you force to the half-checked status, zTree will not automatically calculated the half-checked status about this node.</p>\n\t\t\t<p class=\"highlight_red\">2. Until you set treeNode.halfCheck to false or null, zTree will automatically calculated the half-checked status about this node.</p>\n\t\t\t<p class=\"highlight_red\">3. zTree support identification string 'true' & 'false'.</p>\n\t\t\t<p>Defaul: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p>true means: the checkbox or radio is half-checked when zTree is initialized.</p>\n\t<p>false means: the half-checked status will be automatically calculated</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. set the half-checked status when zTree is initialized</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n{ \"id\":1, \"name\":\"test1\", isParent:true, checked:true, halfCheck:true },\n{ \"id\":2, \"name\":\"test2\", isParent:true, checked:false, halfCheck:true },\n{ \"id\":3, \"name\":\"test3\", isParent:true, checked:true },\n{ \"id\":4, \"name\":\"test4\", isParent:true, checked:false }\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.icon.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>icon</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>URL path of node's custom icon.</p>\n\t\t\t<p class=\"highlight_red\">1. If you only set the 'icon' attribute to parent node, the parent node will only show one icon when it is expanded or collapsed.</p>\n\t\t\t<p class=\"highlight_red\">2. If you need to show two icons when it is expanded or collapsed, please set the 'treeNode.iconOpen' and 'treeNode.iconClose' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. If you need to use css to set the custom icon, please set the 'treeNode.iconSkin' attribute.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>Icon image url can be a relative path or absolute path.</p>\n\t<p class=\"highlight_red\">If use a relative path, please note the relationship between icon image and the page, ensure the correct image path.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Set the custom icon</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t//Only show one icon when it is expanded or collapsed.\n\t{ name:\"Parent Node 1\", icon:\"/img/parent.gif\"},\n\n\t//Show two icons when it is expanded or collapsed.\n\t{ name:\"Parent Node 2\", iconOpen:\"/img/open.gif\", iconClose:\"/img/close.gif\"},\n\n\t//the custom icon for leaf node\n\t{ name:\"Leaf Node\", icon:\"/img/leaf.gif\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.iconClose.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>iconClose</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>URL path of parent node's custom icon when it is collapsed.</p>\n\t\t\t<p class=\"highlight_red\">1. Only parent node support this attribute.</p>\n\t\t\t<p class=\"highlight_red\">2. This attribute must be used simultaneously with 'iconOpen' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. If you need to use css to set the custom icon, please set the 'treeNode.iconSkin' attribute.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>Icon image url can be a relative path or absolute path.</p>\n\t<p class=\"highlight_red\">If use a relative path, please note the relationship between icon image and the page, ensure the correct image path.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Set the custom icon</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t//Only show one icon when it is expanded or collapsed.\n\t{ name:\"Parent Node 1\", icon:\"/img/parent.gif\"},\n\n\t//Show two icons when it is expanded or collapsed.\n\t{ name:\"Parent Node 2\", iconOpen:\"/img/open.gif\", iconClose:\"/img/close.gif\"},\n\n\t//the custom icon for leaf node\n\t{ name:\"Leaf Node\", icon:\"/img/leaf.gif\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.iconOpen.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>iconOpen</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>URL path of parent node's custom icon when it is expanded.</p>\n\t\t\t<p class=\"highlight_red\">1. Only parent node support this attribute.</p>\n\t\t\t<p class=\"highlight_red\">2. This attribute must be used simultaneously with 'iconClose' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. If you need to use css to set the custom icon, please set the 'treeNode.iconSkin' attribute.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>Icon image url can be a relative path or absolute path.</p>\n\t<p class=\"highlight_red\">If use a relative path, please note the relationship between icon image and the page, ensure the correct image path.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Set the custom icon</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t//Only show one icon when it is expanded or collapsed.\n\t{ name:\"Parent Node 1\", icon:\"/img/parent.gif\"},\n\n\t//Show two icons when it is expanded or collapsed.\n\t{ name:\"Parent Node 2\", iconOpen:\"/img/open.gif\", iconClose:\"/img/close.gif\"},\n\n\t//the custom icon for leaf node\n\t{ name:\"Leaf Node\", icon:\"/img/leaf.gif\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.iconSkin.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>iconSkin</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The className of node's custom icon.</p>\n\t\t\t<p class=\"highlight_red\">1. You need to modify the css, add the definition of className.</p>\n\t\t\t<p class=\"highlight_red\">2. The css is simple, convenient, and support the parent node to switch icons when it is expanded or collapsed.</p>\n\t\t\t<p class=\"highlight_red\">3. Recommend the use of CSS Sprites, can reduce repeating load the image, to avoid image flicker.</p>\n\t\t\t<p class=\"highlight_red\">4. The 'iconSkin' support IE6 in zTree v3.x.</p>\n\t\t\t<p class=\"highlight_red\">5. If you need to use image's URL to set the custom icon, please set the 'treeNode.icon' or 'treeNode.iconOpen' or 'treeNode.iconClose' attribute.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>The string about custom icon's className.</p>\n\t</div>\n\t<h3>Examples of css & treeNode</h3>\n\t<h4>1. Set the custom icon</h4>\n\t<pre xmlns=\"\"><code>css example：\n.ztree li span.button.diy01_ico_open, .ztree li span.button.diy01_ico_close{...}\n\n.ztree li span.button.diy02_ico_open{...}\n.ztree li span.button.diy02_ico_close{...}\n\n.ztree li span.button.diy03_ico_docu{...}\n\nnode's data example：\nvar nodes = [\n\t//Only show one icon when it is expanded or collapsed.\n\t{ name:\"Parent Node 1\", iconSkin:\"diy01\"},\n\n\t//Show two icons when it is expanded or collapsed.\n\t{ name:\"Parent Node 2\", iconSkin:\"diy02\"},\n\n\t//the custom icon for leaf node\n\t{ name:\"Leaf Node\", iconSkin:\"diy03\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.isAjaxing.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isAjaxing</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Judge whether the node's child nodes being loaded asynchronously.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: the node's child nodes is being loaded asynchronously</p>\n\t<p> false means: the node's child nodes is not being loaded asynchronously</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Judge whether the first selected node's child nodes being loaded asynchronously</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isAjaxing = sNodes[0].isAjaxing;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.isFirstNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isFirstNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Judge whether the node is the sibling nodes's first node.</p>\n\t\t\t<p class=\"highlight_red\">If you use the 'exhide' pack, so this attribute will only support the node which be shown. </p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: the node is first node.</p>\n\t<p> false means: the node is not first node.</p>\n\t<p class=\"highlight_red\">If the node has been hidden, isFirstNode = false</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Judge whether the first selected node is the sibling nodes's first node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isFirstNode = sNodes[0].isFirstNode;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.isHidden.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isHidden</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exhide</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Judge whether the node has been hidden.</p>\n\t\t\t<p class=\"highlight_red\">1. When initialize zTree, the nodes which be set 'isHidden = true' will be hidden.</p>\n\t\t\t<p class=\"highlight_red\"></p>\n\t\t\t<p class=\"highlight_red\">2. Please don't change this attribute of the nodes which have been created. If you want to hide or show nodes, please use 'hideNode() / hideNodes() / showNode() / showNodes()' methods.</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: this node is hidden.</p>\n\t<p> false means: this node is shown.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Judge whether the first root node has been hidden.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getNodes();\nif (sNodes.length > 0) {\n\tvar isHidden = sNodes[0].isHidden;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.isHover.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isHover</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to record the hover status of node's DOM. For 'setting.view.addHoverDom / removeHoverDom'.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is an internal argument.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p>true means: the node's DOM is in hover.</p>\n\t<p>false means: the node's DOM is not in hover.</p>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.isLastNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isLastNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Judge whether the node is the sibling nodes's last node.</p>\n\t\t\t<p class=\"highlight_red\">If you use the 'exhide' pack, so this attribute will only support the node which be shown. </p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: the node is last node.</p>\n\t<p> false means: the node is not last node.</p>\n\t<p class=\"highlight_red\">If the node has been hidden, isLastNode = false</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Judge whether the first selected node is the sibling nodes's last node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isLastNode = sNodes[0].isLastNode;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.isParent.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>isParent</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Judge whether the node is the parent node.</p>\n\t\t\t<p class=\"highlight_red\">1. When zTree initialize the node data, the node which has children is set to true, otherwise false.</p>\n\t\t\t<p class=\"highlight_red\">2. When zTree initialize the node data, if set treeNode.isParent to true, the node will be set to be parent node.</p>\n\t\t\t<p class=\"highlight_red\">3. In order to solve the problem of someone make json data, supporting \"false\", \"true\" format of the data string.</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: the node is parent node.</p>\n\t<p> false means: the node is not parent node.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Judge whether the first selected node is the parent node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isParent = sNodes[0].isParent;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.level.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Number</span><span class=\"path\">treeNode.</span>level</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The level of node</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>Number Format</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">The root node's level = 0, and next level = 1, ...</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's level</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar level = sNodes[0].level;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.name.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>name</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The node's name</p>\n\t\t\t<p class=\"highlight_red\">1. If you want to change 'name' attribute, please modify the 'setting.data.key.name' attribute.</p>\n\t\t\t<p>Default: undenfined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>String object. The HTML special characters are escaped</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Set node's name to 'test1', 'test2', 'test3'</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\"},\n\t{ \"id\":2, \"name\":\"test2\"},\n\t{ \"id\":3, \"name\":\"test3\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.nocheck.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>nocheck</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>1. Set node to hide the checkbox or radio. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">2. zTree support identification string 'true' & 'false'.</p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p class=\"highlight_red\">true means: the node hide the checkbox or radio, and don't affect the checked association, and don't affect its parent node's half-checked status.</p>\n\t<p class=\"highlight_red\">false means: the node show the checkbox or radio.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Hide some node's checkbox / radio </h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\", \"nocheck\":true},\n\t{ \"id\":2, \"name\":\"test2\"},\n\t{ \"id\":3, \"name\":\"test3\"}\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.open.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>open</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to record the parent node's expand status.</p>\n\t\t\t<p class=\"highlight_red\">1. When zTree initialize the node data, if you set treeNode.open = true, zTree will default expand this parent node.</p>\n\t\t\t<p class=\"highlight_red\">2. Leaf node's 'open' attribute is false.</p>\n\t\t\t<p class=\"highlight_red\">3. In order to solve the problem of someone make json data, supporting \"false\", \"true\" format of the data string.</p>\n\t\t\t<p class=\"highlight_red\">4. When setting.async.enable = false, the parent node will be expanded which have no child nodes and its attribute 'open' is true. (v3.5.15+)  </p>\n\t\t\t<p>Default: false</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: the parent node is expanded.</p>\n\t<p> false means: the parent node is collapsed.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's expand status.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar isOpen = sNodes[0].open;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.parentTId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>parentTId</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The unique identifier of node's parent node.</p>\n\t\t\t<p class=\"highlight_red\">1. zTree v3.x using 'parentTId' replaced the original 'parentNode' attribute, and increased getParentNode () method, in order to avoid the original 'parentNode' cause the clone () method infinite loop.</p>\n\t\t\t<p class=\"highlight_red\">2. Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>String object of node's parent node's tId. please see API about 'treeNode.tId'</p>\n\t<p class=\"highlight_red\">If treeNode is root node, parentTId is null.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's parent node's tId</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar parentTId = sNodes[0].parentTId;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.tId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>tId</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The unique identifier of node.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>tId rules: setting.treeId + \"_\" + zTree counter</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Get the first selected node's tId</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar tId = sNodes[0].tId;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.target.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>target</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Used to set the target where the node is clicked to open url. It is valid when <span class=\"highlight_red\">[treeNode.url exists]</span></p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>As same as &lt;a&gt; tag's 'target' attribute. e.g.  '_blank', '_self' or other window name.</p>\n\t<p>if this attribute is omitted, zTree default set it to '_blank'</p>\n\t</div>\n\t<h3>Exmaples of treeNode</h3>\n\t<h4>1. Set target is '_blank'</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"test1\", \"url\":\"http://myTest.com\", \"target\":\"_blank\"},\n\t......\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.url.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>String</span><span class=\"path\">treeNode.</span>url</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The URL of node link</p>\n\t\t\t<p class=\"highlight_red\">1. In edit mode (setting.edit.enable = true) , this feature fails. If you must use a similar feature, please use the 'onClick' callback for their own control.</p>\n\t\t\t<p class=\"highlight_red\">2. If you use  the 'onClick' callback function to control opening URL , then set the URL  in the other custom attribute, do not use the 'url' attribute.</p>\n\t\t\t<p>Default: undefined</p>\n\t\t</div>\n\t</div>\n\t<h3>String Format</h3>\n\t<div class=\"desc\">\n\t<p>As same as &lt;a&gt; tag's 'href' attribute.</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Set the URL is 'g.cn'</h4>\n\t<pre xmlns=\"\"><code>var nodes = [\n\t{ \"id\":1, \"name\":\"Google CN\", \"url\":\"http://g.cn\"},\n\t......\n]</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/treeNode.zAsync.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Boolean</span><span class=\"path\">treeNode.</span>zAsync</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Judge whether the parent node's child nodes will be loaded asynchronously when the parent node is expanded.</p>\n\t\t\t<p class=\"highlight_red\">Do not initialize or modify it, it is created by the zTree.</p>\n\t\t\t<p class=\"highlight_red\">Default：false (the parent node which have no child nodes); true (the parent node which have child nodes or the leaf node)</p>\n\t\t</div>\n\t</div>\n\t<h3>Boolean Format</h3>\n\t<div class=\"desc\">\n\t<p> true means: the node's child nodes will not be loaded asynchronously when the parent node is expanded.</p>\n\t<p> false means: the node's child nodes will be loaded asynchronously when the parent node is expanded.</p>\n\t<p class=\"highlight_red\"> This attribute will not effect to 'reAsyncChildNodes()' method</p>\n\t</div>\n\t<h3>Examples of treeNode</h3>\n\t<h4>1. Judge whether the first selected node's child nodes has been loaded asynchronously</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar sNodes = treeObj.getSelectedNodes();\nif (sNodes.length > 0) {\n\tvar zAsync = sNodes[0].zAsync;\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.addNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(parentNode, [index], newNodes, isSilent)</span><span class=\"path\">zTreeObj.</span>addNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Add nodes</p>\n\t\t\t<p class=\"highlight_red\">In order to avoid duplication data resulting from repeated initialization, zTree v3.x will automatically clone node data when zTree initialized or add nodes. If you need to get the data objects within the zTree, please get the return value of this method.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>parentNode</b><span>JSON</span></h4>\n\t<p>The additional node's parent node. If additional node is root node, please the parentNode is null.</p>\n\t<p class=\"highlight_red\">Please ensure this node data object is a data object within zTree.</p>\n\t<h4><b>[index]</b><span>Number</span></h4>\n\t<p>The index of the parentNode's children where the newnodes will be added (the value start from 0)</p>\n\t<p>When index = -1, the newnodes will be added to the last</p>\n\t<p>This parameter can be ignore.</p>\n\t<p class=\"highlight_red\">v3.5.19+</p>\n\t<h4 class=\"topLine\"><b>newNodes</b><span>JSON / Array(JSON)</span></h4>\n\t<p>The node data's JSON object collection which need to increase, refer to 'treeNode treeNode data details'</p>\n\t<p class=\"highlight_red\">1. zTree v3.x support to add single node, that is, if you only add a node, you can don't use the array.</p>\n\t<p class=\"highlight_red\">2. If you use simple data model, please refer to the attributes within the 'setting.data.simpleData'.</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>Set whether to automatically expand the parent node, after add nodes.</p>\n\t<p>isSilent = true means: don't auto expand the parent node. Otherwise auto expand.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>return the new nodes in zTree</p>\n\t<p class=\"highlight_red\">If the newNodes is single data object, the return value is a array with length is 1.</p>\n\t<p class=\"highlight_red\">Note: the node data JSON object in the return value is not equal to the JSON object in the 'newNodes'.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Add one root node to zTree which id is 'tree'</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar newNode = {name:\"newNode1\"};\nnewNode = treeObj.addNodes(null, newNode);\n</code></pre>\n\t<h4>2. Add three root nodes to zTree which id is 'tree'</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar newNodes = [{name:\"newNode1\"}, {name:\"newNode2\"}, {name:\"newNode3\"}];\nnewNodes = treeObj.addNodes(null, newNodes);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.cancelEditName.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(newName)</span><span class=\"path\">zTreeObj.</span>cancelEditName</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Cancel the edit name status. Can restore the original name, and can also force assigned to a new name.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>newName</b><span>String</span></h4>\n\t<p>Re given a new name</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, then restore the original name.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Cancel edit name, and restore the original name.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.cancelEditName();\n</code></pre>\n\t<h4>2. Cancel edit name , and set the new name.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.cancelEditName(\"test_new_name\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.cancelSelectedNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>cancelSelectedNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>To cancel the selected node.</p>\n\t\t\t<p class=\"highlight_red\">zTree v3.x support to select multiple nodes, so you can cancel a single selected node, and you can cancel all of the selected nodes too.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to cancel selected.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<p class=\"highlight_red\">If you omit this parameter,  zTree will cancel all of the selected nodes.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Cancel all of the selected nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.cancelSelectedNode();\n</code></pre>\n\t<h4>2. Cancel the first node of the selected nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) { \n\ttreeObj.cancelSelectedNode(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.checkAllNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(checked)</span><span class=\"path\">zTreeObj.</span>checkAllNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Check or unCheck all nodes which have been initialized. It is valid when <span class=\"highlight_red\">[setting.check.enable = true & setting.check.chkStyle = \"checkbox\"]</span></p>\n\t\t\t<p class=\"highlight_red\">This method does not trigger 'beforeCheck' or 'onCheck' callback function.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>checked</b><span>Boolean</span></h4>\n\t<p>checked = true means: check all nodes.</p>\n\t<p>checked = false means: uncheck all nodes.</p>\n\t<p class=\"highlight_red\">Don't affect the node which 'nocheck' attribute is true.</p>\n\t<p class=\"highlight_red\">Don't affect the node is not loaded.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. check all nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.checkAllNodes(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.checkNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, checked, checkTypeFlag, callbackFlag)</span><span class=\"path\">zTreeObj.</span>checkNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Check or unCheck a single node. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Use checkNode() method of zTree v3.x can trigger 'beforeCheck' or 'onCheck' callback function. for reduce redundant code.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to be checked or unchecked.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>checked</b><span>Boolean</span></h4>\n\t<p>checked = true means: check node.</p>\n\t<p>checked = false means: uncheck node.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, then toggle check or uncheck depend this node's expanded state.</p>\n\t<p class=\"highlight_red\">Don't affect the node which 'nocheck' attribute is true.</p>\n\t<h4 class=\"topLine\"><b>checkTypeFlag</b><span>Boolean</span></h4>\n\t<p>checkTypeFlag = true means: According to 'setting.check.chkboxType' attribute automatically check or uncheck the parent and child nodes.</p>\n\t<p>checkTypeFlag = false means: only check or uncheck this node, don't affect its parent and child nodes.</p>\n\t<p class=\"highlight_red\">When checkTypeFlag = false and treeNode.checked = checked, will not trigger callback function.</p>\n\t<p class=\"highlight_red\">Don't affect the parent and child nodes which 'nocheck' attribute is true.</p>\n\t<h4 class=\"topLine\"><b>callbackFlag</b><span>Boolean</span></h4>\n\t<p>callbackFlag = true means: call this method, will trigger 'beforeCheck' & 'onCheck' callback.</p>\n\t<p>callbackFlag = false means: call this method, will not trigger callback.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'callbackFlag = false'</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. check the selected nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nfor (var i=0, l=nodes.length; i < l; i++) {\n\ttreeObj.checkNode(nodes[i], true, true);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.copyNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(targetNode, treeNode, moveType, isSilent)</span><span class=\"path\">zTreeObj.</span>copyNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Copy the node</p>\n\t\t\t<p class=\"highlight_red\">When copy nodes, zTree v3.x will clone nodes. If you need to get the data object in zTree, please get the return value of this method.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be target.</p>\n\t<p class=\"highlight_red\">If copy the node to root node, please set the 'targetNode' to null.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be copied.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>Copied to the target node's relative position.</p>\n\t<p class=\"highlight_red\">\"inner\" means: to be taregetNode's child node.</p>\n\t<p class=\"highlight_red\">\"prev\" means: to be taregetNode's previous sibling node.</p>\n\t<p class=\"highlight_red\">\"next\" means: to be taregetNode's next sibling node.</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>After copy the node, whether to automatically expand its parent node.</p>\n\t<p>isSilent = true means: don't expand its parent node.</p>\n\t<p>isSilent = false or omit this parameter means: expand its parent node.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>return the new node in zTree</p>\n\t<p class=\"highlight_red\">Note: the node data JSON object in the return value is not equal to the treeNode.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Copy the second root node to the first root node's child node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.copyNode(nodes[0], nodes[1], \"inner\");\n</code></pre>\n\t<h4>2. Copy the second root node to the first root node's previous sibling node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.copyNode(nodes[0], nodes[1], \"before\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.destroy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeId)</span><span class=\"path\">zTreeObj.</span>destroy</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>From zTree v3.4, zTree support the method for destruction.</p>\n\t\t\t<p>1. This method can destroy the zTreeObj's zTree.</p>\n\t\t\t<p class=\"highlight_red\">2. If you want to destory all of the zTrees, you can use the '$.fn.zTree.destroy()' method.</p>\n\t\t\t<p class=\"highlight_red\">3. If you want to use the tree which has been destroyed, you must use the 'init()' method at first.</p>\n\t\t</div>\n\t</div>\n        <h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. destroy the zTree which its id is 'treeDemo'</h4>\n\t<pre xmlns=\"\"><code>var zTreeObj = $.fn.zTree.getZTreeObj(\"treeDemo\");\nzTreeObj.destroy();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.editName.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>editName</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Start editing the node's name.</p>\n\t\t\t<p class=\"highlight_red\">1. If need to cancel editing the node's name, please use cancelEditName(newName) method.</p>\n\t\t\t<p class=\"highlight_red\">2. This method can be used to set the editing node‘s input box to get focus.</p>\n\t\t\t<p class=\"highlight_red\">3. Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be editing name</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Retrun </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Start editing the first selected node's name.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.editName(nodes[0]);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.expandAll.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(expandFlag)</span><span class=\"path\">zTreeObj.</span>expandAll</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Expand or collapse all nodes.</p>\n\t\t\t<p class=\"highlight_red\">This method does not trigger 'beforeExpand / onExpand' or 'beforeCollapse / onCollapse' callback function.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>expandFlag</b><span>Boolean</span></h4>\n\t<p>expandFlag = true means: expand all nodes.</p>\n\t<p>expandFlag =  false means: collapse all nodes.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return the result of expand or collapse.</p>\n\t<p>true means: expand all nodes</p>\n\t<p>false means: collapse all nodes</p>\n\t<p>null means: have no parent node to expand or collapse.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Expand all nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.expandAll(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.expandNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, expandFlag, sonSign, focus, callbackFlag)</span><span class=\"path\">zTreeObj.</span>expandNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Expand or collapse single node.</p>\n\t\t\t<p class=\"highlight_red\">Use expandNode() method of zTree v3.x can trigger 'beforeExpand / onExpand' or 'beforeCollapse / onCollapse' callback function. for reduce redundant code.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be expanded or collapsed</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>expandFlag</b><span>Boolean</span></h4>\n\t<p>expandFlag = true means: expand the node.</p>\n\t<p>expandFlag = false means: collapse the node.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, then toggle expand or collapse depend this node's expanded state.</p>\n\t<h4 class=\"topLine\"><b>sonSign</b><span>Boolean</span></h4>\n\t<p>sonSign = true means: expand or collapse all of the child nodes depend the 'expandFlag' parameter.</p>\n\t<p>sonSign = false means: only expand or collapse this node.</p>\n\t<p class=\"highlight_red\">When sonSign = false and treeNode.open = expandFlag, will not trigger the callback.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'sonSign = false'.</p>\n\t<h4 class=\"topLine\"><b>focus</b><span>Boolean</span></h4>\n\t<p>focus = true means: after expand or collapse, set the focus of this node for view.</p>\n\t<p>focus =  false means: after expand or coolapse, don't set the focus of this node.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'focus = true'.</p>\n\t<h4 class=\"topLine\"><b>callbackFlag</b><span>Boolean</span></h4>\n\t<p>callbackFlag = true means: call this method, will trigger 'beforeExpand / onExpand' or 'beforeCollapse / onCollapse' callback.</p>\n\t<p>callbackFlag = false means: call this method, will not trigger callback.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'callbackFlag = false'</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Boolean</span></h4>\n\t<p>return the result of expand or collapse.</p>\n\t<p>true means: expand node</p>\n\t<p>false means: collapse node</p>\n\t<p>null means: the node is not parent node.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Expand the first selected node. (and expand this node's child nodes)</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\ttreeObj.expandNode(nodes[0], true, true, true);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getChangeCheckedNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>getChangeCheckedNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the collection of nodes which be changed checked status. (Compared with the original data checkedOld) It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>return the collection of nodes which be changed checked status (Array)</p>\n\t<p class=\"highlight_red\">If you need to get the collection of nodes which changed the checked status, when nodes be checked or unchecked, so please set treeNode.checkedOld = treeNode.checked ( for all of the be changed checked status nodes ).</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Get the collection of nodes which be changed checked status</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getChangeCheckedNodes();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getCheckedNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(checked)</span><span class=\"path\">zTreeObj.</span>getCheckedNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the collection of nodes which be checked or unchecked. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>checked</b><span>Boolean</span></h4>\n\t<p>checked = true means: get the collection of nodes which be checked</p>\n\t<p>checked = false means: get the collection of nodes which be unchecked</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'checked = true'</p>\n\t<p class=\"highlight_red\">Don't get the nodes which 'nocheck' attribute is true.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>return the collection of nodes which be checked or unchecked. (Array)</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Get the collection of nodes which be checked.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getCheckedNodes(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodeByParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(key, value, parentNode)</span><span class=\"path\">zTreeObj.</span>getNodeByParam</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>According to the node data attribute, search the node which exactly matches, and get the JSON object of node.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>key</b><span>String</span></h4>\n\t<p>The name of attribute which need to exactly match</p>\n\t<h4 class=\"topLine\"><b>value</b><span>?</span></h4>\n\t<p>The value which need to exactly match, can be any type, please ensure its type consistent with the attribute values.</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>The search range, you can search node from a parent node's child nodes.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, zTree will search node from all nodes.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>JSON data object of the node which be searched.</p>\n\t<p class=\"highlight_red\">1. If search none node, return null.</p>\n\t<p class=\"highlight_red\">2. If there are many nodes can be searched, return the first node.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Search the node which its 'id' attribute is 1.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodeByParam(\"id\", 1, null);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodeByTId.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(tId)</span><span class=\"path\">zTreeObj.</span>getNodeByTId</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>According the unique identifier tId of zTree, quick get the node's JSON data object.</p>\n\t\t\t<p class=\"highlight_red\">Get the node from the cache, don't need to search from all nodes.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>tId</b><span>String</span></h4>\n\t<p>The unique identifier of node.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>JSON data object of the node which be searched.</p>\n\t<p class=\"highlight_red\">If no result, return null.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. 1. Search the node which its 'tId' attribute is 'tree_10'</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodeByTId(\"tree_10\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodeIndex.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>getNodeIndex</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the node's index in the same level nodes. (start from 0)</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to get index.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Number</span></h4>\n\t<p class=\"highlight_red\">return the index. (start from 0)</p>\n\t<p class=\"highlight_red\">If there is no this node, return -1.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Get the first selected node's index in the same level nodes.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\tvar index = treeObj.getNodeIndex(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>getNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get all of the nodes in zTree</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>return all of the nodes</p>\n\t<p class=\"highlight_red\">1. This array is a collection of the root nodes  (the default child nodes are in the 'children' attributes);</p>\n\t<p class=\"highlight_red\">2. Traverse all the nodes need to use recursion, or the use of transformToArray() method make the nodes to be a simple array.</p>\n\t<p class=\"highlight_red\">3. For the asynchronous loading mode, can't get the nodes which are yet loaded.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Get all of the nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodesByFilter.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(filter, isSingle, parentNode, invokeParam)</span><span class=\"path\">zTreeObj.</span>getNodesByFilter</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Search the single node's data or collection of nodes's data by custom rules.</p>\n\t\t\t<p class=\"highlight_red\">Can be customized complex search rules.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>filter</b><span>Function</span></h4>\n\t<p>Custom search function. e.g. function filter(node) {...}</p>\n\t<p>filter's parameter: node (node's data -- JSON)</p>\n\t<p>filter's return: boolean (true means: match the rules; false means: don't match the rules)</p>\n\t<h4 class=\"topLine\"><b>isSingle</b><span>Boolean</span></h4>\n\t<p>isSingle = true means: search only one node</p>\n\t<p>isSingle = false means: search the array of the nodes</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, as same as false</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>The search range, you can search node from a parent node's child nodes.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, zTree will search node from all nodes.</p>\n\t<h4 class=\"topLine\"><b>invokeParam</b><span>anything</span></h4>\n\t<p>Custom data object by user, used to calculate in the filter function.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON) / JSON</span></h4>\n\t<p>If isSingle = true, will return the first node's data (JSON) what be matched. If no match, return null.</p>\n\t<p>If isSingle = false, will return the array of all nodes's data what be matched. if no match, return [ ].</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Search the nodes which their 'name' contains 'test' and 'level' is 2.</h4>\n\t<pre xmlns=\"\"><code>function filter(node) {\n    return (node.level == 2 && node.name.indexOf(\"test\")>-1);\n}\n......\nvar treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodesByFilter(filter, true); // search only one node\nvar nodes = treeObj.getNodesByFilter(filter); // search the array of the nodes\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodesByParam.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(key, value, parentNode)</span><span class=\"path\">zTreeObj.</span>getNodesByParam</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>According to the node data attribute, search the nodes which exactly matches, and get the JSON objects collection of nodes.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>key</b><span>String</span></h4>\n\t<p>The name of attribute which need to exactly match</p>\n\t<h4 class=\"topLine\"><b>value</b><span>?</span></h4>\n\t<p>The value which need to exactly match, can be any type, please ensure its type consistent with the attribute values.</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>The search range, you can search node from a parent node's child nodes.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, zTree will search node from all nodes.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>The JSON data objects collection of the nodes which be searched.</p>\n\t<p class=\"highlight_red\">If search none node, return [ ].</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Search the nodes which their 'name' attribute is 'test'.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodesByParam(\"name\", \"test\", null);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getNodesByParamFuzzy.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(key, value, parentNode)</span><span class=\"path\">zTreeObj.</span>getNodesByParamFuzzy</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>According to the node data attribute, search the nodes which fuzzy matches, and get the JSON objects collection of nodes.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>key</b><span>String</span></h4>\n\t<p>The name of attribute which need to fuzzy match</p>\n\t<h4 class=\"topLine\"><b>value</b><span>String</span></h4>\n\t<p>The value which need to fuzzy match.</p>\n\t<p class=\"highlight_red\">The type of value can only be String</p>\n\t<h4 class=\"topLine\"><b>parentNode</b><span>JSON</span></h4>\n\t<p>The search range, you can search node from a parent node's child nodes.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, zTree will search node from all nodes.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>The JSON data objects collection of the nodes which be searched.</p>\n\t<p class=\"highlight_red\">If search none node, return [ ].</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Search the nodes which their 'name' attribute contains the string 'test'.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodesByParamFuzzy(\"name\", \"test\", null);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.getSelectedNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>getSelectedNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Get the JSON data objects collection of the selected nodes in zTree.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>The JSON data objects collection of the selected nodes.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. get the selected nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.hideNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>hideNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exhide</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>To hide any node.</p>\n\t\t\t<p class=\"highlight_red\">1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.</p>\n\t\t\t<p class=\"highlight_red\">2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be hidden</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Retrun </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. hide the first root node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.hideNode(nodes[0]);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.hideNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNodes)</span><span class=\"path\">zTreeObj.</span>hideNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exhide</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>To hide a group of nodes.</p>\n\t\t\t<p class=\"highlight_red\">1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.</p>\n\t\t\t<p class=\"highlight_red\">2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>the array of the nodes which will be hidden</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Retrun </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. hide the first root node's children.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.hideNodes(nodes[0].children);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.moveNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(targetNode, treeNode, moveType, isSilent)</span><span class=\"path\">zTreeObj.</span>moveNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Move the node</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>targetNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be target.</p>\n\t<p class=\"highlight_red\">If move the node to root node, please set the 'targetNode' to null.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be moved.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>moveType</b><span>String</span></h4>\n\t<p>Moved to the target node's relative position.</p>\n\t<p class=\"highlight_red\">\"inner\" means: to be taregetNode's child node.</p>\n\t<p class=\"highlight_red\">\"prev\" means: to be taregetNode's previous sibling node.</p>\n\t<p class=\"highlight_red\">\"next\" means: to be taregetNode's next sibling node.</p>\n\t<h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n\t<p>After move the node, whether to automatically expand its parent node.</p>\n\t<p>isSilent = true means: don't expand its parent node.</p>\n\t<p>isSilent = false or omit this parameter means: expand its parent node.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>JSON</span></h4>\n\t<p>return the node which be moved, it is same as the 'treeNode' parameter.</p>\n\t<p class=\"highlight_red\">Return null means: move node has failed. The cause:<br/>\n\t\t&nbsp;1. the targetNode is the treeNode's parent node, and moveType = \"inner\"<br/>\n\t\t&nbsp;2. the targetNode is the treeNode's child node.\n\t</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Move the second root node to the first root node's child node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.moveNode(nodes[0], nodes[1], \"inner\");\n</code></pre>\n\t<h4>2. Move the second root node to the first root node's previous sibling node.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\ntreeObj.moveNode(nodes[0], nodes[1], \"prev\");\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.reAsyncChildNodes.html",
    "content": "<div class=\"apiDetail\">\n    <div>\n        <h2><span>Function(parentNode, reloadType, isSilent, callback)</span><span class=\"path\">zTreeObj.</span>reAsyncChildNodes\n        </h2>\n        <h3>Overview<span class=\"h3_info\">[ depends on <span\n            class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n        <div class=\"desc\">\n            <p></p>\n            <div class=\"longdesc\">\n                <p>Forced asynchronous loading child nodes of parent node. It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span>\n                </p>\n                <p class=\"highlight_red\">You can use this method to reload child nodes.</p>\n                <p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n            </div>\n        </div>\n        <h3>Function Parameter Descriptions</h3>\n        <div class=\"desc\">\n            <h4><b>parentNode</b><span>JSON</span></h4>\n            <p>The parent node which will asynchronous loading child nodes.</p>\n            <p class=\"highlight_red\">1. If parentNode = null, it is same as reload root nodes.</p>\n            <p class=\"highlight_red\">2. If parentNode.isParent = false, don't load nodes.</p>\n            <p class=\"highlight_red\">3. Please ensure that this data object is an internal node data object in\n                zTree.</p>\n            <h4 class=\"topLine\"><b>reloadType</b><span>String</span></h4>\n            <p>reloadType = \"refresh\" means: reload child nodes.</p>\n            <p>reloadType != \"refresh\" means: append to load child nodes.</p>\n            <h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n            <p>Set whether to automatically expand the parent node, after load nodes.</p>\n            <p>isSilent = true means: don't auto expand the parent node. Otherwise auto expand.</p>\n            <h4 class=\"topLine\"><b>callback</b><span>function</span></h4>\n            <p>zTree will trigger this callback() function after reAsyncChildNodes()</p>\n            <h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n            <p>no return value</p>\n        </div>\n        <h3>Examples of function</h3>\n        <h4>1. reload root nodes</h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.reAsyncChildNodes(null, \"refresh\");\n</code></pre>\n        <h4>2. reload the first selected node's child nodes.</h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\ttreeObj.reAsyncChildNodes(nodes[0], \"refresh\");\n}\n</code></pre>\n    </div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.reAsyncChildNodesPromise.html",
    "content": "<div class=\"apiDetail\">\n    <div>\n        <h2><span>Function(parentNode, reloadType, isSilent)</span><span class=\"path\">zTreeObj.</span>reAsyncChildNodesPromise\n        </h2>\n        <h3>Overview<span class=\"h3_info\">[ depends on <span\n            class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n        <div class=\"desc\">\n            <p></p>\n            <div class=\"longdesc\">\n                <p>Forced asynchronous loading child nodes of parent node ( for ES6 Promise ). It is valid when <span class=\"highlight_red\">[setting.async.enable = true]</span>\n                </p>\n                <p class=\"highlight_red\">You can use this method to reload child nodes.</p>\n                <p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n                <p class=\"highlight_red\">v3.5.29+</p>\n            </div>\n        </div>\n        <h3>Function Parameter Descriptions</h3>\n        <div class=\"desc\">\n            <h4><b>parentNode</b><span>JSON</span></h4>\n            <p>The parent node which will asynchronous loading child nodes.</p>\n            <p class=\"highlight_red\">1. If parentNode = null, it is same as reload root nodes.</p>\n            <p class=\"highlight_red\">2. If parentNode.isParent = false, don't load nodes.</p>\n            <p class=\"highlight_red\">3. Please ensure that this data object is an internal node data object in\n                zTree.</p>\n            <h4 class=\"topLine\"><b>reloadType</b><span>String</span></h4>\n            <p>reloadType = \"refresh\" means: reload child nodes.</p>\n            <p>reloadType != \"refresh\" means: append to load child nodes.</p>\n            <h4 class=\"topLine\"><b>isSilent</b><span>Boolean</span></h4>\n            <p>Set whether to automatically expand the parent node, after load nodes.</p>\n            <p>isSilent = true means: don't auto expand the parent node. Otherwise auto expand.</p>\n            <h4 class=\"topLine\"><b>Return </b><span>ES6 Promise</span></h4>\n            <p>Promise Object of ES6</p>\n        </div>\n        <h3>Examples of function</h3>\n        <h4>1. reload root nodes</h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.reAsyncChildNodes(null, \"refresh\");\n</code></pre>\n        <h4>2. reload the first selected node's child nodes.</h4>\n        <pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes.length>0) {\n\ttreeObj.reAsyncChildNodes(nodes[0], \"refresh\");\n}\n</code></pre>\n    </div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.refresh.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function()</span><span class=\"path\">zTreeObj.</span>refresh</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Refresh zTree</p>\n\t\t\t<p class=\"highlight_red\">If you have no special need, try not to use this method. If you refresh single node, please use updateNode() method. If you refresh child nodes in dynamic mode, please use the reAsyncChildNodes() method.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. refresh zTree </h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.refresh();\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.removeChildNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(parentNode)</span><span class=\"path\">zTreeObj.</span>removeChildNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Remove a parent node's child nodes</p>\n\t\t\t<p class=\"highlight_red\">1. After remove child nodes, the parent node will become a leaf node. Such as the need to maintain the parent node is still a parent node, set 'setting.data.keep.parent' attribute.</p>\n\t\t\t<p class=\"highlight_red\">2. Do not use this method to empty the root. If you need to empty the root, you can initialization zTree, and set the initial nodes is null.</p>\n\t\t\t<p class=\"highlight_red\">3. This method does not trigger any callback function.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>parentNode</b><span>JSON</span></h4>\n\t<p>The parent node which need to clear its child nodes.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>Return the parent node's child nodes which have been removed. If has no child nodes, return null.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Remove the first selected node's child nodes</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nif (nodes && nodes.length>0) {\n\ttreeObj.removeChildNodes(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.removeNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, callbackFlag)</span><span class=\"path\">zTreeObj.</span>removeNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Remove a node</p>\n\t\t\t<p class=\"highlight_red\">Use removeNode() method of zTree v3.x can trigger 'beforeRemove / onRemove' callback function. for reduce redundant code.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be removed.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>callbackFlag</b><span>Boolean</span></h4>\n\t<p>callbackFlag = true means: call this method, will trigger 'beforeRemove' & 'onRemove' callback.</p>\n\t<p>callbackFlag = false means: call this method, will not trigger callback.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'callbackFlag = false'</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Remove all of the selected nodes.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nfor (var i=0, l=nodes.length; i < l; i++) {\n\ttreeObj.removeNode(nodes[i]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.selectNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, addFlag, isSilent)</span><span class=\"path\">zTreeObj.</span>selectNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Select a node</p>\n\t\t\t<p class=\"highlight_red\">zTree v3.x supports select multiple nodes.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node to be selected.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>addFlag</b><span>Boolean</span></h4>\n\t<p>addFlag = true means: append to select node, don't affect the previously selected node, can select multiple nodes.</p>\n\t<p>addFlag = false (default) means: select single node, prior the selected node is deselected.</p>\n\t<p class=\"highlight_red\">If setting.view.selectedMulti = false, this para, this parameter is not valid, always select single node</p>\n\t<p>isSilent = true means: when you select node, zTree will not scroll the node into view.</p>\n\t<p>isSilent = false (default) means: when you select node, zTree will scroll the node into view.</p>\n\t<p class=\"highlight_red\">(v3.5.23+)</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Exampleso of function</h3>\n\t<h4>1. Select single node which be first selected.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\nif (nodes.length>0) {\n\ttreeObj.selectNode(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.setChkDisabled.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(node, disabled, inheritParent, inheritChildren)</span><span class=\"path\">zTreeObj.</span>setChkDisabled</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.excheck</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Set the node's checkbox or radio is disabled or remove disabled. It is valid when <span class=\"highlight_red\">[setting.check.enable = true]</span></p>\n\t\t\t<p class=\"highlight_red\">1. After the node's checkbox / radio is disabled, it can not be checked or unchecked, but it can affect the half-checked status of the parent node.</p>\n\t\t\t<p class=\"highlight_red\">2. Please do not directly modify the 'chkDisabled' attribute of the loaded node.</p>\n\t\t\t<p class=\"highlight_red\">3. Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to be checked or unchecked.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>disabled</b><span>Boolean</span></h4>\n\t<p>disabled = true means: the node's checkbox / radio is disabled.</p>\n\t<p>disabled = false means: the node's checkbox / radio is removed disabled.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as disabled = false </p>\n\t<p class=\"highlight_red\">Don't affect the node which 'nocheck' attribute is true.</p>\n\t<h4 class=\"topLine\"><b>inheritParent</b><span>Boolean</span></h4>\n\t<p>inheritParent = true means: all parent nodes's disabled status will be same as this node.</p>\n\t<p>inheritParent = false means: all parent nodes's disabled status will be not affected.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'inheritParent = false'</p>\n\t<h4 class=\"topLine\"><b>inheritChildren</b><span>Boolean</span></h4>\n\t<p>inheritChildren = true means: all child nodes's disabled status will be same as this node.</p>\n\t<p>inheritChildren = false means: all child nodes's disabled status will be not affected.</p>\n\t<p class=\"highlight_red\">If this parameter is omitted, it is same as 'inheritChildren = false'</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Set the selected nodes's checkbox / radio to disable.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getSelectedNodes();\nfor (var i=0, l=nodes.length; i < l; i++) {\n\ttreeObj.setChkDisabled(nodes[i], true);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.setEditable.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(editable)</span><span class=\"path\">zTreeObj.</span>setEditable</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exedit</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Edit mode and normal mode switch.</p>\n\t\t\t<p class=\"highlight_red\">To use edit mode, please set the attributes in 'setting.edit'</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>editable</b><span>Boolean</span></h4>\n\t<p>true means: set zTree to edit mode.</p>\n\t<p>false means: set zTree to normal mode.</p>\n\t<h4><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. set zTree to edit mode</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\ntreeObj.setEditable(true);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.setting.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>JSON</span><span class=\"path\">zTreeObj.</span>setting</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>The configuration data of zTree, refer to \"<span class=\"highlight_red\">setting details</span>\" </p>\n\t\t\t<p class=\"highlight_red\">zTree v3.x to cancel the original operation setting method, so users can modify.</p>\n\t\t\t<p class=\"highlight_red\">Note: Modify the parameters which affect zTree initialization will not work, please first understand the different attributes.</p>\n\t\t</div>\n\t</div>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.showNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode)</span><span class=\"path\">zTreeObj.</span>showNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exhide</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>To hide any node which be hidden.</p>\n\t\t\t<p class=\"highlight_red\">1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.</p>\n\t\t\t<p class=\"highlight_red\">2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>JSON data object of the node to be shown</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Retrun </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. show someone node which be hidden.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar node = treeObj.getNodeByParam(\"isHidden\", true);\nif (node) {\n  treeObj.showNode(node);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.showNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNodes)</span><span class=\"path\">zTreeObj.</span>showNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.exhide</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>To show a group of nodes which be hidden.</p>\n\t\t\t<p class=\"highlight_red\">1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.</p>\n\t\t\t<p class=\"highlight_red\">2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.</p>\n\t\t\t<p class=\"highlight_red\">3. Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON)</span></h4>\n\t<p>the array of the nodes which will be shown</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>Retrun </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. show all of the nodes which be hidden.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodesByParam(\"isHidden\", true);\ntreeObj.showNodes(nodes);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.transformToArray.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNodes)</span><span class=\"path\">zTreeObj.</span>transformToArray</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p></p>\n\t\t\t<p>Transform the zTree nodes data into simple array.  (To avoid the user to write code to traverse all nodes)</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNodes</b><span>Array(JSON) / JSON</span></h4>\n\t<p>JSON data object of the node which need to be transformed.</p>\n\t<p>or JSON data objects collection of the nodes which need to be transformed.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>The JSON data objects array of the nodes which be transformed.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Transform the zTree nodes data into simple array.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.transformToArray(treeObj.getNodes());\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.transformTozTreeNodes.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(simpleNodes)</span><span class=\"path\">zTreeObj.</span>transformTozTreeNodes</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Transform the simple array into zTree nodes data.</p>\n\t\t\t<p class=\"highlight_red\">If you use this method, you must set 'setting.data.simpleData.idKey' and 'setting.data.simpleData.pIdKey' attribute, and let the data are consistent with parent-child relationship.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>simpleNodes</b><span>Array(JSON) / JSON</span></h4>\n\t<p>JSON data object of the node which need to be transformed.</p>\n\t<p>or JSON data objects array of the nodes which need to be transformed.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>Array(JSON)</span></h4>\n\t<p>Standard data which zTree use. The child nodes are stored in the parent node's 'children' attribute.</p>\n\t<p class=\"highlight_red\">If simpleNodes is a single JSON, so the return array's length is 1.</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Transform the simple array data into zTree nodes format.</h4>\n\t<pre xmlns=\"\"><code>var setting = {\n\tdata: {\n\t\tsimpleData: {\n\t\t\tenable: true,\n\t\t\tidKey: \"id\",\n\t\t\tpIdKey: \"pId\",\n\t\t\trootPId: 0\n\t\t}\n\t}\n};\nvar simpleNodes = [\n    {\"id\":1, \"pId\":0, \"name\":\"test1\"},\n    {\"id\":11, \"pId\":1, \"name\":\"test11\"},\n    {\"id\":12, \"pId\":1, \"name\":\"test12\"},\n    {\"id\":111, \"pId\":11, \"name\":\"test111\"}\n];\nvar treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.transformTozTreeNodes(simpleNodes);\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/api/en/zTreeObj.updateNode.html",
    "content": "<div class=\"apiDetail\">\n<div>\n\t<h2><span>Function(treeNode, checkTypeFlag)</span><span class=\"path\">zTreeObj.</span>updateNode</h2>\n\t<h3>Overview<span class=\"h3_info\">[ depends on <span class=\"highlight_green\">jquery.ztree.core</span> js ]</span></h3>\n\t<div class=\"desc\">\n\t\t<p></p>\n\t\t<div class=\"longdesc\">\n\t\t\t<p>Update node data. Primarily used to update the node's DOM.</p>\n\t\t\t<p class=\"highlight_red\">1. Can update the attributes for display (e.g. 'name', 'target', 'url', 'icon', 'iconSkin', 'checked', 'nocheck'), do not update the other attributes. For example: If you need to expand the node, please use expandNode() method, do not modify the 'open' attribute.</p>\n\t\t\t<p class=\"highlight_red\">2. Use updateNode() method of zTree can't trigger 'beforeCheck' or 'onCheck' callback function.</p>\n\t\t\t<p class=\"highlight_red\">Please use zTree object to executing the method.</p>\n\t\t</div>\n\t</div>\n\t<h3>Function Parameter Descriptions</h3>\n\t<div class=\"desc\">\n\t<h4><b>treeNode</b><span>JSON</span></h4>\n\t<p>JSON data object of the node which need to update.</p>\n\t<p class=\"highlight_red\">Please ensure that this data object is an internal node data object in zTree.</p>\n\t<h4 class=\"topLine\"><b>checkTypeFlag</b><span>Boolean</span></h4>\n\t<p>checkTypeFlag = true means: According to 'setting.check.chkboxType' attribute automatically check or uncheck the parent and child nodes.</p>\n\t<p>checkTypeFlag = false means: only check or uncheck this node, don't affect its parent and child nodes.</p>\n\t<p class=\"highlight_red\">This parameter is valid when 'setting.check.enable = true' and 'setting.check.chkStyle = \"checkbox\"'</p>\n\t<p class=\"highlight_red\">Don't affect the parent and child nodes which 'nocheck' attribute is true.</p>\n\t<h4 class=\"topLine\"><b>Return </b><span>none</span></h4>\n\t<p>no return value</p>\n\t</div>\n\t<h3>Examples of function</h3>\n\t<h4>1. Modify the first selected node's name, and update it.</h4>\n\t<pre xmlns=\"\"><code>var treeObj = $.fn.zTree.getZTreeObj(\"tree\");\nvar nodes = treeObj.getNodes();\nif (nodes.length>0) {\n\tnodes[0].name = \"test\";\n\ttreeObj.updateNode(nodes[0]);\n}\n</code></pre>\n</div>\n</div>"
  },
  {
    "path": "lib/zTree_v3/css/awesomeStyle/awesome.css",
    "content": "/*-------------------------------------\nzTree Style using fontawesome instead of images\n\nversion:    1.1\nauthor:     Mike King\nemail:      mikkelking @ hotmail . com\nwebsite:    http://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n/* Definitions ----------------------*/\n/* End of Definitions ---------------*/\n/* Imports  -------------------------*/\n/* End of Imports  ------------------*/\n.ztree * {\n  padding: 0;\n  margin: 0;\n  font-size: 12px;\n  font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif;\n  background-color: #af0000;\n}\n.ztree {\n  margin: 0;\n  padding: 5px;\n  color: #ffffff;\n  background-color: #af0000;\n}\n.ztree li {\n  padding: 0;\n  margin: 0;\n  list-style: none;\n  line-height: 17px;\n  text-align: left;\n  white-space: nowrap;\n  outline: 0;\n}\n.ztree li ul {\n  margin: 0px;\n  padding: 0 0 0 18px;\n}\n.ztree li a {\n  padding-right: 3px;\n  margin: 0;\n  cursor: pointer;\n  height: 17px;\n  color: #ffffff;\n  background-color: transparent;\n  text-decoration: none;\n  vertical-align: top;\n  display: inline-block;\n}\n.ztree li a input.rename {\n  height: 14px;\n  width: 80px;\n  padding: 0;\n  margin: 0;\n  color: #af0000;\n  background-color: #ffffff;\n  font-size: 12px;\n  border: 1px #585956 solid;\n  *border: 0px;\n}\n.ztree li a:hover {\n  text-decoration: underline;\n}\n.ztree li a.curSelectedNode {\n  padding-top: 0px;\n  background-color: #af4040;\n  color: #ffff00;\n  height: 17px;\n  opacity: 0.8;\n}\n.ztree li a.curSelectedNode_Edit {\n  padding-top: 0px;\n  background-color: transparent;\n  color: #ffff00;\n  height: 17px;\n  border: 1px #666 solid;\n  opacity: 0.8;\n}\n.ztree li a.tmpTargetNode_inner {\n  padding-top: 0px;\n  background-color: #aaa;\n  color: #ffff00;\n  height: 17px;\n  border: 1px #666 solid;\n  opacity: 0.8;\n  filter: alpha(opacity=80);\n}\n.ztree li span {\n  line-height: 17px;\n  margin-right: 2px;\n  background-color: transparent;\n}\n.ztree li span.button {\n  line-height: 0;\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 17px;\n  display: inline-block;\n  vertical-align: top;\n  border: 0px solid;\n  cursor: pointer;\n  outline: none;\n  background-color: transparent;\n  background-repeat: no-repeat;\n  background-attachment: scroll;\n}\n.ztree li span.button::before {\n  color: #ffffff;\n  font-family: FontAwesome;\n  padding-top: 10px;\n}\n.ztree li span.button.chk {\n  margin: 0px;\n  cursor: auto;\n  width: 12px;\n  display: inline-block;\n  padding-top: 10px;\n  padding-left: 2px;\n}\n.ztree li span.button.chk.checkbox_false_full::before {\n  content: \"\\f096\";\n}\n.ztree li span.button.chk.checkbox_false_full_focus::before {\n  content: \"\\f096\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.checkbox_false_part::before {\n  content: \"\\f096\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.checkbox_false_part_focus::before {\n  content: \"\\f096\";\n  color: #cad96c;\n}\n.ztree li span.button.chk.checkbox_false_disable::before {\n  content: \"\\f096\";\n  color: #808080;\n}\n.ztree li span.button.chk.checkbox_true_full::before {\n  content: \"\\f046\";\n}\n.ztree li span.button.chk.checkbox_true_full_focus::before {\n  content: \"\\f046\";\n}\n.ztree li span.button.chk.checkbox_true_part::before {\n  content: \"\\f14a\";\n}\n.ztree li span.button.chk.checkbox_true_part_focus::before {\n  content: \"\\f14a\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.checkbox_true_full_focus::before {\n  content: \"\\f046\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.checkbox_true_part::before {\n  content: \"\\f046\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.checkbox_true_part_focus::before {\n  content: \"\\f046\";\n  color: #cad96c;\n}\n.ztree li span.button.chk.checkbox_true_disable::before {\n  content: \"\\f046\";\n  color: #808080;\n}\n.ztree li span.button.chk.radio_false_full::before {\n  content: \"\\f10c\";\n}\n.ztree li span.button.chk.radio_false_full_focus::before {\n  content: \"\\f10c\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.radio_false_part::before {\n  content: \"\\f10c\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.radio_false_part_focus::before {\n  content: \"\\f10c\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.radio_false_disable::before {\n  content: \"\\f1db\";\n  color: #808080;\n}\n.ztree li span.button.chk.radio_true_full::before {\n  content: \"\\f192\";\n}\n.ztree li span.button.chk.radio_true_full_focus::before {\n  content: \"\\f192\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.radio_true_part::before {\n  content: \"\\f192\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.radio_true_part_focus::before {\n  content: \"\\f192\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.radio_true_disable::before {\n  content: \"\\f1db\";\n  color: #808080;\n}\n.ztree li span.button.switch {\n  width: 15px;\n  height: 17px;\n}\n.ztree li span.button.root_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.root_close::before {\n  content: \"\\f115\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.roots_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.roots_close::before {\n  content: \"\\f054\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.center_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.center_close::before {\n  content: \"\\f054\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.bottom_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.bottom_close::before {\n  content: \"\\f054\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.root_docu {\n  background: none;\n}\n.ztree li span.button.roots_docu::before {\n  content: \"\\f022\";\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.center_docu::before {\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.bottom_docu::before {\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.noline_docu {\n  background: none;\n}\n.ztree li span.button.ico_open::before {\n  content: \"\\f115\";\n  font-family: FontAwesome;\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.ico_close::before {\n  content: \"\\f114\";\n  font-family: FontAwesome;\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.ico_docu::before {\n  content: \"\\f022\";\n  font-family: FontAwesome;\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.edit {\n  margin-left: 4px;\n  margin-right: -1px;\n  vertical-align: top;\n  *vertical-align: middle;\n  padding-top: 10px;\n}\n.ztree li span.button.edit::before {\n  content: \"\\f044\";\n  font-family: FontAwesome;\n}\n.ztree li span.button.remove {\n  margin-left: 4px;\n  margin-right: -1px;\n  vertical-align: top;\n  *vertical-align: middle;\n  padding-top: 10px;\n}\n.ztree li span.button.remove::before {\n  content: \"\\f1f8\";\n  font-family: FontAwesome;\n}\n.ztree li span.button.add {\n  margin-left: 4px;\n  margin-right: -1px;\n  vertical-align: top;\n  *vertical-align: middle;\n  padding-top: 10px;\n}\n.ztree li span.button.add::before {\n  content: \"\\f067\";\n  font-family: FontAwesome;\n}\n.ztree li span.button.ico_loading {\n  margin-right: 2px;\n  background: url(./img/loading.gif) no-repeat scroll 0 0 transparent;\n  vertical-align: top;\n  *vertical-align: middle;\n}\nul.tmpTargetzTree {\n  background-color: #FFE6B0;\n  opacity: 0.8;\n  filter: alpha(opacity=80);\n}\nspan.tmpzTreeMove_arrow {\n  width: 16px;\n  height: 17px;\n  display: inline-block;\n  padding: 0;\n  margin: 2px 0 0 1px;\n  border: 0 none;\n  position: absolute;\n  background-color: transparent;\n  background-attachment: scroll;\n}\nspan.tmpzTreeMove_arrow::before {\n  content: \"\\f04b\";\n  font-family: FontAwesome;\n  color: #ffff00;\n}\nul.ztree.zTreeDragUL {\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  width: auto;\n  height: auto;\n  overflow: hidden;\n  background-color: #cfcfcf;\n  border: 1px #ffff00 dotted;\n  opacity: 0.8;\n  filter: alpha(opacity=80);\n}\n.ztreeMask {\n  z-index: 10000;\n  background-color: #cfcfcf;\n  opacity: 0.0;\n  filter: alpha(opacity=0);\n  position: absolute;\n}\n"
  },
  {
    "path": "lib/zTree_v3/css/awesomeStyle/awesome.less",
    "content": "/*-------------------------------------\nzTree Style using fontawesome instead of images\n\nversion:    1.1\nauthor:     Mike King\nemail:      mikkelking @ hotmail . com\nwebsite:    http://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n/* Definitions ----------------------*/\n@font-size: 12px;\n// Regular icon and text color is white, which suits any medium -> dark background \n@color-normal: white;\n// Background color\n@color-bg: #af0000;\n// Highlight color\n@color-highlight: yellow;\n// Partially selected (checkboxes, radio buttons)\n@color-partial: #aaaaaa;\n// Partially selected and focused (checkboxes, radio buttons)\n@color-partfocus: #cad96c;\n// Disabled altogether\n@color-disabled: #808080;\n// Editing color\n@color-edit: yellow;\n@w: 15px;\n@h: 17px;\n@pad-left: 2px;\n@pad-top: 10px;\n/* End of Definitions ---------------*/\n\n/* Imports  -------------------------*/\n@import \"fa.less\";\n/* End of Imports  ------------------*/\n\n.ztree * {padding:0; margin:0; font-size:@font-size; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; background-color: @color-bg;}\n.ztree {\n    margin:0; padding:5px; color:@color-normal; background-color: @color-bg;\n    li {\n        padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0;\n        ul { \n            margin: 0px; padding:0 0 0 18px;\n        }\n        ul.line { }\n        a {padding-right:3px; margin:0; cursor:pointer; height:@h; color:@color-normal; background-color: transparent; \n            text-decoration:none; vertical-align:top; display: inline-block;\n            input.rename {height:14px; width:80px; padding:0; margin:0;\n                          color: @color-bg; background-color: @color-normal;\n                        font-size:@font-size; border:1px #585956 solid; *border:0px}\n        }\n        a:hover {text-decoration:underline}\n        a.curSelectedNode {padding-top:0px; background-color:#af4040; color:@color-highlight; height:@h; opacity:0.8;}\n        a.curSelectedNode_Edit {padding-top:0px; background-color:transparent; color:@color-highlight; height:@h; border:1px #666 solid; opacity:0.8;}\n        a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:@color-highlight; height:@h; border:1px #666 solid;\n          opacity:0.8; filter:alpha(opacity=80)}\n        a.tmpTargetNode_prev {}\n        a.tmpTargetNode_next {}\n        span {line-height:@h; margin-right:2px; background-color:transparent;}\n        span.button {line-height:0; margin:0; padding: 0; width:@w; height:@h; display: inline-block; vertical-align:top;\n          border:0px solid; cursor: pointer;outline:none;\n          background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n \n            &::before{color: @color-normal; font-family: FontAwesome; padding-top:@pad-top;}\n            &.chk { margin:0px; cursor: auto; width: 12px;\n                display: inline-block;padding-top:@pad-top;padding-left:@pad-left;\n                \n                &.checkbox_false_full::before {content: @fa-square-o;}\n                &.checkbox_false_full_focus::before {content: @fa-square-o; color:@color-highlight;}\n                &.checkbox_false_part::before {content: @fa-square-o;color: @color-partial;}\n                &.checkbox_false_part_focus::before {content: @fa-square-o; color:@color-partfocus;}\n                &.checkbox_false_disable::before {content: @fa-square-o; color:@color-disabled;}\n                &.checkbox_true_full::before {content: @fa-check-square-o;}\n                &.checkbox_true_full_focus::before {content: @fa-check-square-o;}\n                &.checkbox_true_part::before {content: @fa-check-square;}\n                &.checkbox_true_part_focus::before {content: @fa-check-square; color: @color-highlight}\n                &.checkbox_true_full_focus::before {content: @fa-check-square-o; color: @color-highlight}\n                &.checkbox_true_part::before {content: @fa-check-square-o;color: @color-partial}\n                &.checkbox_true_part_focus::before {content: @fa-check-square-o;color: @color-partfocus;}\n                &.checkbox_true_disable::before {content: @fa-check-square-o;color: @color-disabled}\n                 \n                &.radio_false_full::before {content: @fa-circle-o;}\n                &.radio_false_full_focus::before {content: @fa-circle-o;color: @color-highlight}\n                &.radio_false_part::before {content: @fa-circle-o;color: @color-partial}\n                &.radio_false_part_focus::before {content: @fa-circle-o;color: @color-highlight}\n                &.radio_false_disable::before {content: @fa-circle-thin;color: @color-disabled}\n                &.radio_true_full::before {content: @fa-dot-circle-o;}\n                &.radio_true_full_focus::before {content: @fa-dot-circle-o;color: @color-highlight}\n                &.radio_true_part::before {content: @fa-dot-circle-o;color: @color-partial}\n                &.radio_true_part_focus::before {content: @fa-dot-circle-o;color: @color-partial;}\n                &.radio_true_disable::before {content: @fa-circle-thin;color: @color-disabled}\n                \n            }\n            &.switch  {width:@w; height:@h}\n            &.root_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.root_close::before{content: @fa-folder-open-o;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.roots_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.roots_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.center_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.center_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.bottom_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.bottom_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}  \n            &.noline_open{}\n            &.noline_close{}\n            &.root_docu{ background:none;}\n            &.roots_docu::before{content: @fa-list-alt;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.center_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.bottom_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.noline_docu{ background:none;}\n    \n            &.ico_open::before {content: @fa-folder-open-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.ico_close::before {content: @fa-folder-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.ico_docu::before{content: @fa-list-alt;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            \n            &.edit {margin-left:4px; margin-right: -1px;  vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}\n            &.edit::before{content: @fa-pencil-square-o;font-family: FontAwesome;}\n    \n            &.remove {margin-left:4px; margin-right: -1px;  vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}\n            &.remove::before{content: @fa-trash;font-family: FontAwesome;}\n\n    \n            &.add {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}\n            &.add::before{content: @fa-plus;font-family: FontAwesome;}\n\n            &.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n        }\n\n    }\n}\n\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\n// this is the arrow that moves \nspan.tmpzTreeMove_arrow{width:16px; height:@h; display: inline-block; \n                                padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n                                background-color:transparent;  background-attachment: scroll;\n                                 }\nspan.tmpzTreeMove_arrow::before{content: @fa-play;font-family: FontAwesome;color: @color-highlight;\n                                 }\n// outline\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; \n             background-color:#cfcfcf; border:1px @color-highlight dotted; opacity:0.8; filter:alpha(opacity=80)}\n.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n\n"
  },
  {
    "path": "lib/zTree_v3/css/awesomeStyle/fa.less",
    "content": "@fa-glass: \"\\f000\";\n@fa-music: \"\\f001\";\n@fa-search: \"\\f002\";\n@fa-envelope-o: \"\\f003\";\n@fa-heart: \"\\f004\";\n@fa-star: \"\\f005\";\n@fa-star-o: \"\\f006\";\n@fa-user: \"\\f007\";\n@fa-film: \"\\f008\";\n@fa-th-large: \"\\f009\";\n@fa-th: \"\\f00a\";\n@fa-th-list: \"\\f00b\";\n@fa-check: \"\\f00c\";\n@fa-times: \"\\f00d\";\n@fa-search-plus: \"\\f00e\";\n@fa-search-minus: \"\\f010\";\n@fa-power-off: \"\\f011\";\n@fa-signal: \"\\f012\";\n@fa-cog: \"\\f013\";\n@fa-trash-o: \"\\f014\";\n@fa-home: \"\\f015\";\n@fa-file-o: \"\\f016\";\n@fa-clock-o: \"\\f017\";\n@fa-road: \"\\f018\";\n@fa-download: \"\\f019\";\n@fa-arrow-circle-o-down: \"\\f01a\";\n@fa-arrow-circle-o-up: \"\\f01b\";\n@fa-inbox: \"\\f01c\";\n@fa-play-circle-o: \"\\f01d\";\n@fa-repeat: \"\\f01e\";\n@fa-refresh: \"\\f021\";\n@fa-list-alt: \"\\f022\";\n@fa-lock: \"\\f023\";\n@fa-flag: \"\\f024\";\n@fa-headphones: \"\\f025\";\n@fa-volume-off: \"\\f026\";\n@fa-volume-down: \"\\f027\";\n@fa-volume-up: \"\\f028\";\n@fa-qrcode: \"\\f029\";\n@fa-barcode: \"\\f02a\";\n@fa-tag: \"\\f02b\";\n@fa-tags: \"\\f02c\";\n@fa-book: \"\\f02d\";\n@fa-bookmark: \"\\f02e\";\n@fa-print: \"\\f02f\";\n@fa-camera: \"\\f030\";\n@fa-font: \"\\f031\";\n@fa-bold: \"\\f032\";\n@fa-italic: \"\\f033\";\n@fa-text-height: \"\\f034\";\n@fa-text-width: \"\\f035\";\n@fa-align-left: \"\\f036\";\n@fa-align-center: \"\\f037\";\n@fa-align-right: \"\\f038\";\n@fa-align-justify: \"\\f039\";\n@fa-list: \"\\f03a\";\n@fa-outdent: \"\\f03b\";\n@fa-indent: \"\\f03c\";\n@fa-video-camera: \"\\f03d\";\n@fa-picture-o: \"\\f03e\";\n@fa-pencil: \"\\f040\";\n@fa-map-marker: \"\\f041\";\n@fa-adjust: \"\\f042\";\n@fa-tint: \"\\f043\";\n@fa-pencil-square-o: \"\\f044\";\n@fa-share-square-o: \"\\f045\";\n@fa-check-square-o: \"\\f046\";\n@fa-arrows: \"\\f047\";\n@fa-step-backward: \"\\f048\";\n@fa-fast-backward: \"\\f049\";\n@fa-backward: \"\\f04a\";\n@fa-play: \"\\f04b\";\n@fa-pause: \"\\f04c\";\n@fa-stop: \"\\f04d\";\n@fa-forward: \"\\f04e\";\n@fa-fast-forward: \"\\f050\";\n@fa-step-forward: \"\\f051\";\n@fa-eject: \"\\f052\";\n@fa-chevron-left: \"\\f053\";\n@fa-chevron-right: \"\\f054\";\n@fa-plus-circle: \"\\f055\";\n@fa-minus-circle: \"\\f056\";\n@fa-times-circle: \"\\f057\";\n@fa-check-circle: \"\\f058\";\n@fa-question-circle: \"\\f059\";\n@fa-info-circle: \"\\f05a\";\n@fa-crosshairs: \"\\f05b\";\n@fa-times-circle-o: \"\\f05c\";\n@fa-check-circle-o: \"\\f05d\";\n@fa-ban: \"\\f05e\";\n@fa-arrow-left: \"\\f060\";\n@fa-arrow-right: \"\\f061\";\n@fa-arrow-up: \"\\f062\";\n@fa-arrow-down: \"\\f063\";\n@fa-share: \"\\f064\";\n@fa-expand: \"\\f065\";\n@fa-compress: \"\\f066\";\n@fa-plus: \"\\f067\";\n@fa-minus: \"\\f068\";\n@fa-asterisk: \"\\f069\";\n@fa-exclamation-circle: \"\\f06a\";\n@fa-gift: \"\\f06b\";\n@fa-leaf: \"\\f06c\";\n@fa-fire: \"\\f06d\";\n@fa-eye: \"\\f06e\";\n@fa-eye-slash: \"\\f070\";\n@fa-exclamation-triangle: \"\\f071\";\n@fa-plane: \"\\f072\";\n@fa-calendar: \"\\f073\";\n@fa-random: \"\\f074\";\n@fa-comment: \"\\f075\";\n@fa-magnet: \"\\f076\";\n@fa-chevron-up: \"\\f077\";\n@fa-chevron-down: \"\\f078\";\n@fa-retweet: \"\\f079\";\n@fa-shopping-cart: \"\\f07a\";\n@fa-folder: \"\\f07b\";\n@fa-folder-open: \"\\f07c\";\n@fa-arrows-v: \"\\f07d\";\n@fa-arrows-h: \"\\f07e\";\n@fa-bar-chart: \"\\f080\";\n@fa-twitter-square: \"\\f081\";\n@fa-facebook-square: \"\\f082\";\n@fa-camera-retro: \"\\f083\";\n@fa-key: \"\\f084\";\n@fa-cogs: \"\\f085\";\n@fa-comments: \"\\f086\";\n@fa-thumbs-o-up: \"\\f087\";\n@fa-thumbs-o-down: \"\\f088\";\n@fa-star-half: \"\\f089\";\n@fa-heart-o: \"\\f08a\";\n@fa-sign-out: \"\\f08b\";\n@fa-linkedin-square: \"\\f08c\";\n@fa-thumb-tack: \"\\f08d\";\n@fa-external-link: \"\\f08e\";\n@fa-sign-in: \"\\f090\";\n@fa-trophy: \"\\f091\";\n@fa-github-square: \"\\f092\";\n@fa-upload: \"\\f093\";\n@fa-lemon-o: \"\\f094\";\n@fa-phone: \"\\f095\";\n@fa-square-o: \"\\f096\";\n@fa-bookmark-o: \"\\f097\";\n@fa-phone-square: \"\\f098\";\n@fa-twitter: \"\\f099\";\n@fa-facebook: \"\\f09a\";\n@fa-github: \"\\f09b\";\n@fa-unlock: \"\\f09c\";\n@fa-credit-card: \"\\f09d\";\n@fa-rss: \"\\f09e\";\n@fa-hdd-o: \"\\f0a0\";\n@fa-bullhorn: \"\\f0a1\";\n@fa-bell: \"\\f0f3\";\n@fa-certificate: \"\\f0a3\";\n@fa-hand-o-right: \"\\f0a4\";\n@fa-hand-o-left: \"\\f0a5\";\n@fa-hand-o-up: \"\\f0a6\";\n@fa-hand-o-down: \"\\f0a7\";\n@fa-arrow-circle-left: \"\\f0a8\";\n@fa-arrow-circle-right: \"\\f0a9\";\n@fa-arrow-circle-up: \"\\f0aa\";\n@fa-arrow-circle-down: \"\\f0ab\";\n@fa-globe: \"\\f0ac\";\n@fa-wrench: \"\\f0ad\";\n@fa-tasks: \"\\f0ae\";\n@fa-filter: \"\\f0b0\";\n@fa-briefcase: \"\\f0b1\";\n@fa-arrows-alt: \"\\f0b2\";\n@fa-users: \"\\f0c0\";\n@fa-link: \"\\f0c1\";\n@fa-cloud: \"\\f0c2\";\n@fa-flask: \"\\f0c3\";\n@fa-scissors: \"\\f0c4\";\n@fa-files-o: \"\\f0c5\";\n@fa-paperclip: \"\\f0c6\";\n@fa-floppy-o: \"\\f0c7\";\n@fa-square: \"\\f0c8\";\n@fa-bars: \"\\f0c9\";\n@fa-list-ul: \"\\f0ca\";\n@fa-list-ol: \"\\f0cb\";\n@fa-strikethrough: \"\\f0cc\";\n@fa-underline: \"\\f0cd\";\n@fa-table: \"\\f0ce\";\n@fa-magic: \"\\f0d0\";\n@fa-truck: \"\\f0d1\";\n@fa-pinterest: \"\\f0d2\";\n@fa-pinterest-square: \"\\f0d3\";\n@fa-google-plus-square: \"\\f0d4\";\n@fa-google-plus: \"\\f0d5\";\n@fa-money: \"\\f0d6\";\n@fa-caret-down: \"\\f0d7\";\n@fa-caret-up: \"\\f0d8\";\n@fa-caret-left: \"\\f0d9\";\n@fa-caret-right: \"\\f0da\";\n@fa-columns: \"\\f0db\";\n@fa-sort: \"\\f0dc\";\n@fa-sort-desc: \"\\f0dd\";\n@fa-sort-asc: \"\\f0de\";\n@fa-envelope: \"\\f0e0\";\n@fa-linkedin: \"\\f0e1\";\n@fa-undo: \"\\f0e2\";\n@fa-gavel: \"\\f0e3\";\n@fa-tachometer: \"\\f0e4\";\n@fa-comment-o: \"\\f0e5\";\n@fa-comments-o: \"\\f0e6\";\n@fa-bolt: \"\\f0e7\";\n@fa-sitemap: \"\\f0e8\";\n@fa-umbrella: \"\\f0e9\";\n@fa-clipboard: \"\\f0ea\";\n@fa-lightbulb-o: \"\\f0eb\";\n@fa-exchange: \"\\f0ec\";\n@fa-cloud-download: \"\\f0ed\";\n@fa-cloud-upload: \"\\f0ee\";\n@fa-user-md: \"\\f0f0\";\n@fa-stethoscope: \"\\f0f1\";\n@fa-suitcase: \"\\f0f2\";\n@fa-bell-o: \"\\f0a2\";\n@fa-coffee: \"\\f0f4\";\n@fa-cutlery: \"\\f0f5\";\n@fa-file-text-o: \"\\f0f6\";\n@fa-building-o: \"\\f0f7\";\n@fa-hospital-o: \"\\f0f8\";\n@fa-ambulance: \"\\f0f9\";\n@fa-medkit: \"\\f0fa\";\n@fa-fighter-jet: \"\\f0fb\";\n@fa-beer: \"\\f0fc\";\n@fa-h-square: \"\\f0fd\";\n@fa-plus-square: \"\\f0fe\";\n@fa-angle-double-left: \"\\f100\";\n@fa-angle-double-right: \"\\f101\";\n@fa-angle-double-up: \"\\f102\";\n@fa-angle-double-down: \"\\f103\";\n@fa-angle-left: \"\\f104\";\n@fa-angle-right: \"\\f105\";\n@fa-angle-up: \"\\f106\";\n@fa-angle-down: \"\\f107\";\n@fa-desktop: \"\\f108\";\n@fa-laptop: \"\\f109\";\n@fa-tablet: \"\\f10a\";\n@fa-mobile: \"\\f10b\";\n@fa-circle-o: \"\\f10c\";\n@fa-quote-left: \"\\f10d\";\n@fa-quote-right: \"\\f10e\";\n@fa-spinner: \"\\f110\";\n@fa-circle: \"\\f111\";\n@fa-reply: \"\\f112\";\n@fa-github-alt: \"\\f113\";\n@fa-folder-o: \"\\f114\";\n@fa-folder-open-o: \"\\f115\";\n@fa-smile-o: \"\\f118\";\n@fa-frown-o: \"\\f119\";\n@fa-meh-o: \"\\f11a\";\n@fa-gamepad: \"\\f11b\";\n@fa-keyboard-o: \"\\f11c\";\n@fa-flag-o: \"\\f11d\";\n@fa-flag-checkered: \"\\f11e\";\n@fa-terminal: \"\\f120\";\n@fa-code: \"\\f121\";\n@fa-reply-all: \"\\f122\";\n@fa-star-half-o: \"\\f123\";\n@fa-location-arrow: \"\\f124\";\n@fa-crop: \"\\f125\";\n@fa-code-fork: \"\\f126\";\n@fa-chain-broken: \"\\f127\";\n@fa-question: \"\\f128\";\n@fa-info: \"\\f129\";\n@fa-exclamation: \"\\f12a\";\n@fa-superscript: \"\\f12b\";\n@fa-subscript: \"\\f12c\";\n@fa-eraser: \"\\f12d\";\n@fa-puzzle-piece: \"\\f12e\";\n@fa-microphone: \"\\f130\";\n@fa-microphone-slash: \"\\f131\";\n@fa-shield: \"\\f132\";\n@fa-calendar-o: \"\\f133\";\n@fa-fire-extinguisher: \"\\f134\";\n@fa-rocket: \"\\f135\";\n@fa-maxcdn: \"\\f136\";\n@fa-chevron-circle-left: \"\\f137\";\n@fa-chevron-circle-right: \"\\f138\";\n@fa-chevron-circle-up: \"\\f139\";\n@fa-chevron-circle-down: \"\\f13a\";\n@fa-html5: \"\\f13b\";\n@fa-css3: \"\\f13c\";\n@fa-anchor: \"\\f13d\";\n@fa-unlock-alt: \"\\f13e\";\n@fa-bullseye: \"\\f140\";\n@fa-ellipsis-h: \"\\f141\";\n@fa-ellipsis-v: \"\\f142\";\n@fa-rss-square: \"\\f143\";\n@fa-play-circle: \"\\f144\";\n@fa-ticket: \"\\f145\";\n@fa-minus-square: \"\\f146\";\n@fa-minus-square-o: \"\\f147\";\n@fa-level-up: \"\\f148\";\n@fa-level-down: \"\\f149\";\n@fa-check-square: \"\\f14a\";\n@fa-pencil-square: \"\\f14b\";\n@fa-external-link-square: \"\\f14c\";\n@fa-share-square: \"\\f14d\";\n@fa-compass: \"\\f14e\";\n@fa-caret-square-o-down: \"\\f150\";\n@fa-caret-square-o-up: \"\\f151\";\n@fa-caret-square-o-right: \"\\f152\";\n@fa-eur: \"\\f153\";\n@fa-gbp: \"\\f154\";\n@fa-usd: \"\\f155\";\n@fa-inr: \"\\f156\";\n@fa-jpy: \"\\f157\";\n@fa-rub: \"\\f158\";\n@fa-krw: \"\\f159\";\n@fa-btc: \"\\f15a\";\n@fa-file: \"\\f15b\";\n@fa-file-text: \"\\f15c\";\n@fa-sort-alpha-asc: \"\\f15d\";\n@fa-sort-alpha-desc: \"\\f15e\";\n@fa-sort-amount-asc: \"\\f160\";\n@fa-sort-amount-desc: \"\\f161\";\n@fa-sort-numeric-asc: \"\\f162\";\n@fa-sort-numeric-desc: \"\\f163\";\n@fa-thumbs-up: \"\\f164\";\n@fa-thumbs-down: \"\\f165\";\n@fa-youtube-square: \"\\f166\";\n@fa-youtube: \"\\f167\";\n@fa-xing: \"\\f168\";\n@fa-xing-square: \"\\f169\";\n@fa-youtube-play: \"\\f16a\";\n@fa-dropbox: \"\\f16b\";\n@fa-stack-overflow: \"\\f16c\";\n@fa-instagram: \"\\f16d\";\n@fa-flickr: \"\\f16e\";\n@fa-adn: \"\\f170\";\n@fa-bitbucket: \"\\f171\";\n@fa-bitbucket-square: \"\\f172\";\n@fa-tumblr: \"\\f173\";\n@fa-tumblr-square: \"\\f174\";\n@fa-long-arrow-down: \"\\f175\";\n@fa-long-arrow-up: \"\\f176\";\n@fa-long-arrow-left: \"\\f177\";\n@fa-long-arrow-right: \"\\f178\";\n@fa-apple: \"\\f179\";\n@fa-windows: \"\\f17a\";\n@fa-android: \"\\f17b\";\n@fa-linux: \"\\f17c\";\n@fa-dribbble: \"\\f17d\";\n@fa-skype: \"\\f17e\";\n@fa-foursquare: \"\\f180\";\n@fa-trello: \"\\f181\";\n@fa-female: \"\\f182\";\n@fa-male: \"\\f183\";\n@fa-gittip: \"\\f184\";\n@fa-sun-o: \"\\f185\";\n@fa-moon-o: \"\\f186\";\n@fa-archive: \"\\f187\";\n@fa-bug: \"\\f188\";\n@fa-vk: \"\\f189\";\n@fa-weibo: \"\\f18a\";\n@fa-renren: \"\\f18b\";\n@fa-pagelines: \"\\f18c\";\n@fa-stack-exchange: \"\\f18d\";\n@fa-arrow-circle-o-right: \"\\f18e\";\n@fa-arrow-circle-o-left: \"\\f190\";\n@fa-caret-square-o-left: \"\\f191\";\n@fa-dot-circle-o: \"\\f192\";\n@fa-wheelchair: \"\\f193\";\n@fa-vimeo-square: \"\\f194\";\n@fa-try: \"\\f195\";\n@fa-plus-square-o: \"\\f196\";\n@fa-space-shuttle: \"\\f197\";\n@fa-slack: \"\\f198\";\n@fa-envelope-square: \"\\f199\";\n@fa-wordpress: \"\\f19a\";\n@fa-openid: \"\\f19b\";\n@fa-university: \"\\f19c\";\n@fa-graduation-cap: \"\\f19d\";\n@fa-yahoo: \"\\f19e\";\n@fa-google: \"\\f1a0\";\n@fa-reddit: \"\\f1a1\";\n@fa-reddit-square: \"\\f1a2\";\n@fa-stumbleupon-circle: \"\\f1a3\";\n@fa-stumbleupon: \"\\f1a4\";\n@fa-delicious: \"\\f1a5\";\n@fa-digg: \"\\f1a6\";\n@fa-pied-piper: \"\\f1a7\";\n@fa-pied-piper-alt: \"\\f1a8\";\n@fa-drupal: \"\\f1a9\";\n@fa-joomla: \"\\f1aa\";\n@fa-language: \"\\f1ab\";\n@fa-fax: \"\\f1ac\";\n@fa-building: \"\\f1ad\";\n@fa-child: \"\\f1ae\";\n@fa-paw: \"\\f1b0\";\n@fa-spoon: \"\\f1b1\";\n@fa-cube: \"\\f1b2\";\n@fa-cubes: \"\\f1b3\";\n@fa-behance: \"\\f1b4\";\n@fa-behance-square: \"\\f1b5\";\n@fa-steam: \"\\f1b6\";\n@fa-steam-square: \"\\f1b7\";\n@fa-recycle: \"\\f1b8\";\n@fa-car: \"\\f1b9\";\n@fa-taxi: \"\\f1ba\";\n@fa-tree: \"\\f1bb\";\n@fa-spotify: \"\\f1bc\";\n@fa-deviantart: \"\\f1bd\";\n@fa-soundcloud: \"\\f1be\";\n@fa-database: \"\\f1c0\";\n@fa-file-pdf-o: \"\\f1c1\";\n@fa-file-word-o: \"\\f1c2\";\n@fa-file-excel-o: \"\\f1c3\";\n@fa-file-powerpoint-o: \"\\f1c4\";\n@fa-file-image-o: \"\\f1c5\";\n@fa-file-archive-o: \"\\f1c6\";\n@fa-file-audio-o: \"\\f1c7\";\n@fa-file-video-o: \"\\f1c8\";\n@fa-file-code-o: \"\\f1c9\";\n@fa-vine: \"\\f1ca\";\n@fa-codepen: \"\\f1cb\";\n@fa-jsfiddle: \"\\f1cc\";\n@fa-life-ring: \"\\f1cd\";\n@fa-circle-o-notch: \"\\f1ce\";\n@fa-rebel: \"\\f1d0\";\n@fa-empire: \"\\f1d1\";\n@fa-git-square: \"\\f1d2\";\n@fa-git: \"\\f1d3\";\n@fa-hacker-news: \"\\f1d4\";\n@fa-tencent-weibo: \"\\f1d5\";\n@fa-qq: \"\\f1d6\";\n@fa-weixin: \"\\f1d7\";\n@fa-paper-plane: \"\\f1d8\";\n@fa-paper-plane-o: \"\\f1d9\";\n@fa-history: \"\\f1da\";\n@fa-circle-thin: \"\\f1db\";\n@fa-header: \"\\f1dc\";\n@fa-paragraph: \"\\f1dd\";\n@fa-sliders: \"\\f1de\";\n@fa-share-alt: \"\\f1e0\";\n@fa-share-alt-square: \"\\f1e1\";\n@fa-bomb: \"\\f1e2\";\n@fa-futbol-o: \"\\f1e3\";\n@fa-tty: \"\\f1e4\";\n@fa-binoculars: \"\\f1e5\";\n@fa-plug: \"\\f1e6\";\n@fa-slideshare: \"\\f1e7\";\n@fa-twitch: \"\\f1e8\";\n@fa-yelp: \"\\f1e9\";\n@fa-newspaper-o: \"\\f1ea\";\n@fa-wifi: \"\\f1eb\";\n@fa-calculator: \"\\f1ec\";\n@fa-paypal: \"\\f1ed\";\n@fa-google-wallet: \"\\f1ee\";\n@fa-cc-visa: \"\\f1f0\";\n@fa-cc-mastercard: \"\\f1f1\";\n@fa-cc-discover: \"\\f1f2\";\n@fa-cc-amex: \"\\f1f3\";\n@fa-cc-paypal: \"\\f1f4\";\n@fa-cc-stripe: \"\\f1f5\";\n@fa-bell-slash: \"\\f1f6\";\n@fa-bell-slash-o: \"\\f1f7\";\n@fa-trash: \"\\f1f8\";\n@fa-copyright: \"\\f1f9\";\n@fa-at: \"\\f1fa\";\n@fa-eyedropper: \"\\f1fb\";\n@fa-paint-brush: \"\\f1fc\";\n@fa-birthday-cake: \"\\f1fd\";\n@fa-area-chart: \"\\f1fe\";\n@fa-pie-chart: \"\\f200\";\n@fa-line-chart: \"\\f201\";\n@fa-lastfm: \"\\f202\";\n@fa-lastfm-square: \"\\f203\";\n@fa-toggle-off: \"\\f204\";\n@fa-toggle-on: \"\\f205\";\n@fa-bicycle: \"\\f206\";\n@fa-bus: \"\\f207\";\n@fa-ioxhost: \"\\f208\";\n@fa-angellist: \"\\f209\";\n@fa-cc: \"\\f20a\";\n@fa-ils: \"\\f20b\";\n@fa-meanpath: \"\\f20c\";\n\n"
  },
  {
    "path": "lib/zTree_v3/css/demo.css",
    "content": "html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {\n\tmargin: 0;padding: 0;border: 0;outline: 0;font-weight: inherit;font-style: inherit;font-size: 100%;font-family: inherit;vertical-align: baseline;}\nbody {color: #2f332a;font: 15px/21px Arial, Helvetica, simsun, sans-serif;background: #f0f6e4 \\9;}\nh1, h2, h3, h4, h5, h6 {color: #2f332a;font-weight: bold;font-family: Helvetica, Arial, sans-serif;padding-bottom: 5px;}\nh1 {font-size: 24px;line-height: 34px;text-align: center;}\nh2 {font-size: 14px;line-height: 24px;padding-top: 5px;}\nh6 {font-weight: normal;font-size: 12px;letter-spacing: 1px;line-height: 24px;text-align: center;}\na {color:#3C6E31;text-decoration: underline;}\na:hover {background-color:#3C6E31;color:white;}\ninput.radio {margin: 0 2px 0 8px;}\ninput.radio.first {margin-left:0;}\ninput.empty {color: lightgray;}\ncode {color: #2f332a;}\n.highlight_red {color:#A60000;}\n.highlight_green {color:#A7F43D;}\nli {list-style: circle;font-size: 12px;}\nli.title {list-style: none;}\nul.list {margin-left: 17px;}\n\ndiv.content_wrap {width: 600px;height:380px;}\ndiv.content_wrap div.left{float: left;width: 250px;}\ndiv.content_wrap div.right{float: right;width: 340px;}\ndiv.zTreeDemoBackground {width:250px;height:362px;text-align:left;}\n\nul.ztree {margin-top: 10px;border: 1px solid #617775;background: #f0f6e4;width:220px;height:360px;overflow-y:scroll;overflow-x:auto;}\nul.log {border: 1px solid #617775;background: #f0f6e4;width:300px;height:170px;overflow: hidden;}\nul.log.small {height:45px;}\nul.log li {color: #666666;list-style: none;padding-left: 10px;}\nul.log li.dark {background-color: #E3E3E3;}\n\n/* ruler */\ndiv.ruler {height:20px; width:220px; background-color:#f0f6e4;border: 1px solid #333; margin-bottom: 5px; cursor: pointer}\ndiv.ruler div.cursor {height:20px; width:30px; background-color:#3C6E31; color:white; text-align: right; padding-right: 5px; cursor: pointer}"
  },
  {
    "path": "lib/zTree_v3/css/metroStyle/metroStyle.css",
    "content": "/*-------------------------------------\nzTree Style\n\nversion:    3.4\nauthor:     Hunter.z\nemail:      hunter.z@263.net\nwebsite:    http://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}\n.ztree {margin:0; padding:5px; color:#333}\n.ztree li{padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0}\n.ztree li ul{ margin:0; padding:0 0 0 18px}\n.ztree li ul.line{ background:url(./img/line_conn.png) 0 0 repeat-y;}\n\n.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; color:#333; background-color: transparent; text-decoration:none; vertical-align:top; display: inline-block}\n.ztree li a:hover {text-decoration:underline}\n.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; opacity:0.8;}\n.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; border:1px #666 solid; opacity:0.8;}\n.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 solid;\n  opacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_prev {}\n.ztree li a.tmpTargetNode_next {}\n.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;\n  font-size:12px; border:1px #585956 solid; *border:0px}\n.ztree li span {line-height:21px; margin-right:2px}\n.ztree li span.button {line-height:0; margin:0; padding: 0; width:21px; height:21px; display: inline-block; vertical-align:middle;\n  border:0 none; cursor: pointer;outline:none;\n  background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n  background-image:url(\"./img/metro.png\"); *background-image:url(\"./img/metro.gif\")}\n\n.ztree li span.button.chk {width:13px; height:13px; margin:0 2px; cursor: auto}\n.ztree li span.button.chk.checkbox_false_full {background-position: -5px -5px;}\n.ztree li span.button.chk.checkbox_false_full_focus {background-position: -5px -26px;}\n.ztree li span.button.chk.checkbox_false_part {background-position: -5px -48px;}\n.ztree li span.button.chk.checkbox_false_part_focus {background-position: -5px -68px;}\n.ztree li span.button.chk.checkbox_false_disable {background-position: -5px -89px;}\n.ztree li span.button.chk.checkbox_true_full {background-position: -26px -5px;}\n.ztree li span.button.chk.checkbox_true_full_focus {background-position: -26px -26px;}\n.ztree li span.button.chk.checkbox_true_part {background-position: -26px -48px;}\n.ztree li span.button.chk.checkbox_true_part_focus {background-position: -26px -68px;}\n.ztree li span.button.chk.checkbox_true_disable {background-position: -26px -89px;}\n.ztree li span.button.chk.radio_false_full {background-position: -47px -5px;}\n.ztree li span.button.chk.radio_false_full_focus {background-position: -47px -26px;}\n.ztree li span.button.chk.radio_false_part {background-position: -47px -47px;}\n.ztree li span.button.chk.radio_false_part_focus {background-position: -47px -68px;}\n.ztree li span.button.chk.radio_false_disable {background-position: -47px -89px;}\n.ztree li span.button.chk.radio_true_full {background-position: -68px -5px;}\n.ztree li span.button.chk.radio_true_full_focus {background-position: -68px -26px;}\n.ztree li span.button.chk.radio_true_part {background-position: -68px -47px;}\n.ztree li span.button.chk.radio_true_part_focus {background-position: -68px -68px;}\n.ztree li span.button.chk.radio_true_disable {background-position: -68px -89px;}\n\n.ztree li span.button.switch {width:21px; height:21px}\n.ztree li span.button.root_open{background-position:-105px -63px}\n.ztree li span.button.root_close{background-position:-126px -63px}\n.ztree li span.button.roots_open{background-position: -105px 0;}\n.ztree li span.button.roots_close{background-position: -126px 0;}\n.ztree li span.button.center_open{background-position: -105px -21px;}\n.ztree li span.button.center_close{background-position: -126px -21px;}\n.ztree li span.button.bottom_open{background-position: -105px -42px;}\n.ztree li span.button.bottom_close{background-position: -126px -42px;}\n.ztree li span.button.noline_open{background-position: -105px -84px;}\n.ztree li span.button.noline_close{background-position: -126px -84px;}\n.ztree li span.button.root_docu{ background:none;}\n.ztree li span.button.roots_docu{background-position: -84px 0;}\n.ztree li span.button.center_docu{background-position: -84px -21px;}\n.ztree li span.button.bottom_docu{background-position: -84px -42px;}\n.ztree li span.button.noline_docu{ background:none;}\n\n.ztree li span.button.ico_open{margin-right:2px; background-position: -147px -21px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_close{margin-right:2px; margin-right:2px; background-position: -147px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_docu{margin-right:2px; background-position: -147px -42px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit {margin-left:2px; margin-right: -1px; background-position: -189px -21px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit:hover {\n  background-position: -168px -21px;\n}\n.ztree li span.button.remove {margin-left:2px; margin-right: -1px; background-position: -189px -42px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.remove:hover {\n  background-position: -168px -42px;\n}\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position: -189px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.add:hover {\n  background-position: -168px 0;\n}\n.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\nspan.tmpzTreeMove_arrow {width:16px; height:21px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n    background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n    background-position:-168px -84px; background-image:url(\"./img/metro.png\"); *background-image:url(\"./img/metro.gif\")}\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}\n.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n"
  },
  {
    "path": "lib/zTree_v3/css/zTreeStyle/zTreeStyle.css",
    "content": "/*-------------------------------------\nzTree Style\n\nversion:\t3.5.19\nauthor:\t\tHunter.z\nemail:\t\thunter.z@263.net\nwebsite:\thttp://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}\n.ztree {margin:0; padding:5px; color:#333}\n.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}\n.ztree li ul{ margin:0; padding:0 0 0 18px}\n.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}\n\n.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;\n\ttext-decoration:none; vertical-align:top; display: inline-block}\n.ztree li a:hover {text-decoration:underline}\n.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}\n.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}\n.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;\n\topacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_prev {}\n.ztree li a.tmpTargetNode_next {}\n.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;\n\tfont-size:12px; border:1px #7EC4CC solid; *border:0px}\n.ztree li span {line-height:16px; margin-right:2px}\n.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;\n\tborder:0 none; cursor: pointer;outline:none;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-image:url(\"./img/zTreeStandard.png\"); *background-image:url(\"./img/zTreeStandard.gif\")}\n\n.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}\n.ztree li span.button.chk.checkbox_false_full {background-position:0 0}\n.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}\n.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}\n.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}\n.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}\n.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}\n.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}\n.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}\n.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}\n.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}\n.ztree li span.button.chk.radio_false_full {background-position:-28px 0}\n.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}\n.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}\n.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}\n.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}\n.ztree li span.button.chk.radio_true_full {background-position:-42px 0}\n.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}\n.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}\n.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}\n.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}\n\n.ztree li span.button.switch {width:18px; height:18px}\n.ztree li span.button.root_open{background-position:-92px -54px}\n.ztree li span.button.root_close{background-position:-74px -54px}\n.ztree li span.button.roots_open{background-position:-92px 0}\n.ztree li span.button.roots_close{background-position:-74px 0}\n.ztree li span.button.center_open{background-position:-92px -18px}\n.ztree li span.button.center_close{background-position:-74px -18px}\n.ztree li span.button.bottom_open{background-position:-92px -36px}\n.ztree li span.button.bottom_close{background-position:-74px -36px}\n.ztree li span.button.noline_open{background-position:-92px -72px}\n.ztree li span.button.noline_close{background-position:-74px -72px}\n.ztree li span.button.root_docu{ background:none;}\n.ztree li span.button.roots_docu{background-position:-56px 0}\n.ztree li span.button.center_docu{background-position:-56px -18px}\n.ztree li span.button.bottom_docu{background-position:-56px -36px}\n.ztree li span.button.noline_docu{ background:none;}\n\n.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}\n\n.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\nspan.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-position:-110px -80px; background-image:url(\"./img/zTreeStandard.png\"); *background-image:url(\"./img/zTreeStandard.gif\")}\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}\n.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n\n/* level style*/\n/*.ztree li span.button.level0 {\n\tdisplay:none;\n}\n.ztree li ul.level0 {\n\tpadding:0;\n\tbackground:none;\n}*/"
  },
  {
    "path": "lib/zTree_v3/demo/cn/asyncData/getNodes.php",
    "content": "<?php ?>\n[<?php\n$pId = \"0\";\n$pName = \"\";\n$pLevel = \"\";\n$pCheck = \"\";\nif(array_key_exists( 'id',$_REQUEST)) {\n\t$pId=$_REQUEST['id'];\n}\nif(array_key_exists( 'lv',$_REQUEST)) {\n\t$pLevel=$_REQUEST['lv'];\n}\nif(array_key_exists('n',$_REQUEST)) {\n\t$pName=$_REQUEST['n'];\n}\nif(array_key_exists('chk',$_REQUEST)) {\n\t$pCheck=$_REQUEST['chk'];\n}\nif ($pId==null || $pId==\"\") $pId = \"0\";\nif ($pLevel==null || $pLevel==\"\") $pLevel = \"0\";\nif ($pName==null) $pName = \"\";\nelse $pName = $pName.\".\";\n\n$pId = htmlspecialchars($pId);\n\n$pName = htmlspecialchars($pName);\n\n//for ($i=1; $i<9999; $i++) {\n//\tfor ($j=1; $j<999; $j++) {\n//\n//\t}\n//}\n\nfor ($i=1; $i<5; $i++) {\n\t$nId = $pId.$i;\n\t$nName = $pName.\"n\".$i;\n\techo \"{ id:'\".$nId.\"',\tname:'\".$nName.\"',\tisParent:\".(( $pLevel < \"2\" && ($i%2)!=0)?\"true\":\"false\").($pCheck==\"\"?\"\":((($pLevel < \"2\" && ($i%2)!=0)?\", halfCheck:true\":\"\").($i==3?\", checked:true\":\"\"))).\"}\";\n\tif ($i<4) {\n\t\techo \",\";\n\t}\n}\n?>]\n"
  },
  {
    "path": "lib/zTree_v3/demo/cn/asyncData/getNodesForBigData.php",
    "content": "<?php ?>\n[<?php\n$pId = \"-1\";\nif(array_key_exists( 'id',$_REQUEST)) {\n\t$pId=$_REQUEST['id'];\n}\n$pCount = \"10\";\nif(array_key_exists( 'count',$_REQUEST)) {\n\t$pCount=$_REQUEST['count'];\n}\nif ($pId==null || $pId==\"\") $pId = \"0\";\nif ($pCount==null || $pCount==\"\") $pCount = \"10\";\n\n$pId = htmlspecialchars($pId);\n\n$max = (int)$pCount;\nfor ($i=1; $i<=$max; $i++) {\n\t$nId = $pId.\"_\".$i;\n\t$nName = \"tree\".$nId;\n\techo \"{ id:'\".$nId.\"',\tname:'\".$nName.\"'}\";\n\tif ($i<$max) {\n\t\techo \",\";\n\t}\n\t\n}\n?>]\n"
  },
  {
    "path": "lib/zTree_v3/demo/cn/bigdata/common.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - big data common</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonNodeCreated: onNodeCreated\n\t\t\t}\n\t\t};\n\n\t\tvar dataMaker = function(count) {\n\t\t\tvar nodes = [], pId = -1,\n\t\t\tmin = 10, max = 90, level = 0, curLevel = [], prevLevel = [], levelCount,\n\t\t\ti = 0,j,k,l,m;\n\n\t\t\twhile (i<count) {\n\t\t\t\tif (level == 0) {\n\t\t\t\t\tpId = -1;\n\t\t\t\t\tlevelCount = Math.round(Math.random() * max) + min;\n\t\t\t\t\tfor (j=0; j<levelCount && i<count; j++, i++) {\n\t\t\t\t\t\tvar n = {id:i, pId:pId, name:\"Big-\" +i};\n\t\t\t\t\t\tnodes.push(n);\n\t\t\t\t\t\tcurLevel.push(n);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (l=0, m=prevLevel.length; l<m && i<count; l++) {\n\t\t\t\t\t\tpId = prevLevel[l].id;\n\t\t\t\t\t\tlevelCount = Math.round(Math.random() * max) + min;\n\t\t\t\t\t\tfor (j=0; j<levelCount && i<count; j++, i++) {\n\t\t\t\t\t\t\tvar n = {id:i, pId:pId, name:\"Big-\" +i};\n\t\t\t\t\t\t\tnodes.push(n);\n\t\t\t\t\t\t\tcurLevel.push(n);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tprevLevel = curLevel;\n\t\t\t\tcurLevel = [];\n\t\t\t\tlevel++;\n\t\t\t}\n\t\t\treturn nodes;\n\t\t}\n\n\t\tvar ruler = {\n\t\t\tdoc: null,\n\t\t\truler: null,\n\t\t\tcursor: null,\n\t\t\tminCount: 5000,\n\t\t\tcount: 5000,\n\t\t\tstepCount:500,\n\t\t\tminWidth: 30,\n\t\t\tmaxWidth: 215,\n\t\t\tinit: function() {\n\t\t\t\truler.doc = $(document);\n\t\t\t\truler.ruler = $(\"#ruler\");\n\t\t\t\truler.cursor = $(\"#cursor\");\n\t\t\t\tif (ruler.ruler) {\n\t\t\t\t\truler.ruler.bind(\"mousedown\", ruler.onMouseDown);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t},\n\t\t\tonMouseDown: function(e) {\n\t\t\t\truler.drawRuler(e, true);\n\t\t\t\truler.doc.bind(\"mousemove\", ruler.onMouseMove);\n\t\t\t\truler.doc.bind(\"mouseup\", ruler.onMouseUp);\n\t\t\t\truler.doc.bind(\"selectstart\", ruler.onSelect);\n\t\t\t\t$(\"body\").css(\"cursor\", \"pointer\");\n\t\t\t},\n\t\t\tonMouseMove: function(e) {\n\t\t\t\truler.drawRuler(e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tonMouseUp: function(e) {\n\t\t\t\t$(\"body\").css(\"cursor\", \"auto\");\n\t\t\t\truler.doc.unbind(\"mousemove\", ruler.onMouseMove);\n\t\t\t\truler.doc.unbind(\"mouseup\", ruler.onMouseUp);\n\t\t\t\truler.doc.unbind(\"selectstart\", ruler.onSelect);\n\t\t\t\truler.drawRuler(e);\n\t\t\t},\n\t\t\tonSelect: function (e) {\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tgetCount: function(end) {\n\t\t\t\tvar start = ruler.ruler.offset().left+1;\n\t\t\t\tvar c = Math.max((end - start), ruler.minWidth);\n\t\t\t\tc = Math.min(c, ruler.maxWidth);\n\t\t\t\treturn {width:c, count:(c - ruler.minWidth)*ruler.stepCount + ruler.minCount};\n\t\t\t},\n\t\t\tdrawRuler: function(e, animate) {\n\t\t\t\tvar c = ruler.getCount(e.clientX);\n\t\t\t\truler.cursor.stop();\n\t\t\t\tif ($.browser.msie || !animate) {\n\t\t\t\t\truler.cursor.css({width:c.width});\n\t\t\t\t} else {\n\t\t\t\t\truler.cursor.animate({width:c.width}, {duration: \"fast\",easing: \"swing\", complete:null});\n\t\t\t\t}\n\t\t\t\truler.count = c.count;\n\t\t\t\truler.cursor.text(c.count);\n\t\t\t}\n\t\t}\n\t\tvar showNodeCount = 0;\n\t\tfunction onNodeCreated(event, treeId, treeNode) {\n\t\t\tshowNodeCount++;\n\t\t}\n\n\t\tfunction createTree () {\n\t\t\tvar zNodes = dataMaker(ruler.count);\n\t\t\tshowNodeCount = 0;\n\t\t\t$(\"#treeDemo\").empty();\n\t\t\tsetting.check.enable = $(\"#showChk\").attr(\"checked\");\n\t\t\tvar time1 = new Date();\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tvar time2 = new Date();\n\n\t\t\talert(\"节点共 \" + zNodes.length + \" 个, 初始化生成 DOM 的节点共 \" + showNodeCount + \" 个\"\n\t\t\t\t+ \"\\n\\n 初始化 zTree 共耗时: \" + (time2.getTime() - time1.getTime()) + \" ms\");\n\t\t}\n\n\n\t\t$(document).ready(function(){\n\t\t\truler.init(\"ruler\");\n\t\t\t$(\"#createTree\").bind(\"click\", createTree);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>一次性加载大数据量</h1>\n<h6>[ 文件路径: bigdata/common.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul>\n\t\t<li><span>调整总节点数，测试加载速度：</span>\n\t\t\t<div id=\"ruler\" class=\"ruler\" title=\"拖拽可调整节点数\">\n\t\t\t\t<div id=\"cursor\" class=\"cursor\">5000</div>\n\t\t\t</div>\n\t\t\t<div style=\"width:220px; text-align: center;\">\n\t\t\t\t<span>checkbox</span><input type=\"checkbox\" id=\"showChk\" title=\"是否显示 checkbox\" class=\"checkbox first\" />&nbsp;&nbsp;&nbsp;&nbsp;\n\t\t\t\t[ <a id=\"createTree\" href=\"#\" title=\"初始化 zTree\" onclick=\"return false;\">初始化 zTree</a> ]\n\t\t\t</div>\n\t\t</li>\n\t\t</ul>\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、大数据量加载说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1)、zTree v3.x 针对大数据量一次性加载进行了更深入的优化，实现了延迟加载功能，即不展开的节点不创建子节点的 DOM。</li>\n\t\t\t\t<li class=\"highlight_red\">2)、对于每级节点最多一百左右，但总节点数几千甚至几万，且不是全部展开的数据，一次性加载的效果最明显，速度非常快。</li>\n\t\t\t\t<li class=\"highlight_red\">3)、对于某一级节点数就多达几千的情况 延迟加载无效，这种情况建议考虑分页异步加载。</li>\n\t\t\t\t<li class=\"highlight_red\">4)、对于全部节点都展开显示的情况，延迟加载无效，这种情况建议不要全部展开。</li>\n\t\t\t\t<li>5)、显示 checkbox / radio 会造成一定程度的性能下降。</li>\n\t\t\t\t<li>6)、利用 addDiyDom 功能增加自定义控件会影响速度，影响程度受节点数量而定。</li>\n\t\t\t\t<li>7)、利用 onNodeCreated 事件回调函数对节点 DOM 进行操作会影响速度，影响程度受节点数量而定。</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>不需要进行特殊的配置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/bigdata/diy_async.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - big data async</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl: getUrl\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\texpandSpeed: \"\"\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess,\n\t\t\t\tonAsyncError: onAsyncError\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{name:\"500个节点\", id:\"1\", count:500, times:1, isParent:true},\n\t\t\t{name:\"1000个节点\", id:\"2\", count:1000, times:1, isParent:true},\n\t\t\t{name:\"2000个节点\", id:\"3\", count:2000, times:1, isParent:true}\n\t\t];\n\n\t\tvar log, className = \"dark\",\n\t\tstartTime = 0, endTime = 0, perCount = 100, perTime = 100;\n\t\tfunction getUrl(treeId, treeNode) {\n\t\t\tvar curCount = (treeNode.children) ? treeNode.children.length : 0;\n\t\t\tvar getCount = (curCount + perCount) > treeNode.count ? (treeNode.count - curCount) : perCount;\n\t\t\tvar param = \"id=\"+treeNode.id+\"_\"+(treeNode.times++) +\"&count=\"+getCount;\n\t\t\treturn \"../asyncData/getNodesForBigData.php?\" + param;\n\t\t}\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\tstartTime = new Date();\n\t\t\t\ttreeNode.times = 1;\n\t\t\t\tajaxGetNodes(treeNode, \"refresh\");\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\talert(\"zTree 正在下载数据中，请稍后展开节点。。。\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tif (!msg || msg.length == 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttotalCount = treeNode.count;\n\t\t\tif (treeNode.children.length < totalCount) {\n\t\t\t\tsetTimeout(function() {ajaxGetNodes(treeNode);}, perTime);\n\t\t\t} else {\n\t\t\t\ttreeNode.icon = \"\";\n\t\t\t\tzTree.updateNode(treeNode);\n\t\t\t\tzTree.selectNode(treeNode.children[0]);\n\t\t\t\tendTime = new Date();\n\t\t\t\tvar usedTime = (endTime.getTime() - startTime.getTime())/1000;\n\t\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\t\tshowLog(\"[ \"+getTime()+\" ]&nbsp;&nbsp;treeNode:\" + treeNode.name );\n\t\t\t\tshowLog(\"加载完毕，共进行 \"+ (treeNode.times-1) +\" 次异步加载, 耗时：\"+ usedTime + \" 秒\");\n\t\t\t}\n\t\t}\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\talert(\"异步获取数据出现异常。\");\n\t\t\ttreeNode.icon = \"\";\n\t\t\tzTree.updateNode(treeNode);\n\t\t}\n\t\tfunction ajaxGetNodes(treeNode, reloadType) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (reloadType == \"refresh\") {\n\t\t\t\ttreeNode.icon = \"../../../css/zTreeStyle/img/loading.gif\";\n\t\t\t\tzTree.updateNode(treeNode);\n\t\t\t}\n\t\t\tzTree.reAsyncChildNodes(treeNode, reloadType, true);\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 4) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>分批异步加载大数据量</h1>\n<h6>[ 文件路径: bigdata/diy_async.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul>\n\t\t\t<li class=\"highlight_red\">&nbsp;&nbsp;&nbsp;&nbsp;此 Demo 专门用于测试分批异步加载，每次展开节点都要重新进行异步加载。</li>\n\t\t</ul>\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、大数据量加载说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1)、对于某一级节点数多达几千个的时候，zTree 默认的延迟加载是无效的，此 Demo 演示了一种原先 zTree v2.6 时的分批加载节点的方法。</li>\n\t\t\t\t<li class=\"highlight_red\">2)、此方法适用于1、2千个节点必须全部显示的需求。</li>\n\t\t\t\t<li class=\"highlight_red\">3)、此方法并不能解决加载慢的问题，相反只会让最终结果出现的更慢，只是可以有限度的避免浏览器假死，而且显示的节点越多就越慢。</li>\n\t\t\t\t<li>4)、对于某一级节点数至少几千个的情况，另一个解决方案是：分页异步加载。<br/>\n\t\t\t\t\tasync load log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:85px\"></ul></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>需要设置 setting.async 异步加载部分的参数</li>\n\t\t\t\t<li>建议关闭动画效果 setting.view.expandSpeed = \"\";</li>\n\t\t\t\t<li>其他不需要进行特殊的配置，根据自己的需求自行设置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/bigdata/page.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - big data page</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl: getUrl\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess,\n\t\t\t\tonAsyncError: onAsyncError\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{name:\"分页测试\", t:\"请点击分页按钮\", id:\"1\", count:2000, page:0, pageSize:100, isParent:true}\n\t\t];\n\t\tvar curPage = 0;\n\t\tfunction getUrl(treeId, treeNode) {\n\t\t\tvar param = \"id=\"+ treeNode.id +\"_\"+treeNode.page +\"&count=\"+treeNode.pageSize,\n\t\t\taObj = $(\"#\" + treeNode.tId + \"_a\");\n\t\t\taObj.attr(\"title\", \"当前第 \" + treeNode.page + \" 页 / 共 \" + treeNode.maxPage + \" 页\")\n\t\t\treturn \"../asyncData/getNodesForBigData.php?\" + param;\n\t\t}\n\t\tfunction goPage(treeNode, page) {\n\t\t\ttreeNode.page = page;\n\t\t\tif (treeNode.page<1) treeNode.page = 1;\n\t\t\tif (treeNode.page>treeNode.maxPage) treeNode.page = treeNode.maxPage;\n\t\t\tif (curPage == treeNode.page) return;\n\t\t\tcurPage = treeNode.page;\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.reAsyncChildNodes(treeNode, \"refresh\");\n\t\t}\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tif (treeNode.page == 0) treeNode.page = 1;\n\t\t\treturn !treeNode.isAjaxing;\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\t\n\t\t}\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\talert(\"异步获取数据出现异常。\");\n\t\t\ttreeNode.icon = \"\";\n\t\t\tzTree.updateNode(treeNode);\n\t\t}\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tif (treeNode.level>0) return;\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\t\t\tif ($(\"#addBtn_\"+treeNode.id).length>0) return;\n\t\t\tvar addStr = \"<span class='button lastPage' id='lastBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='last page' onfocus='this.blur();'></span><span class='button nextPage' id='nextBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='next page' onfocus='this.blur();'></span><span class='button prevPage' id='prevBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='prev page' onfocus='this.blur();'></span><span class='button firstPage' id='firstBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='first page' onfocus='this.blur();'></span>\";\n\t\t\taObj.after(addStr);\n\t\t\tvar first = $(\"#firstBtn_\"+treeNode.id);\n\t\t\tvar prev = $(\"#prevBtn_\"+treeNode.id);\n\t\t\tvar next = $(\"#nextBtn_\"+treeNode.id);\n\t\t\tvar last = $(\"#lastBtn_\"+treeNode.id);\n\t\t\ttreeNode.maxPage = Math.round(treeNode.count/treeNode.pageSize - .5) + (treeNode.count%treeNode.pageSize == 0 ? 0:1);\n\t\t\tfirst.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, 1);\n\t\t\t\t}\n\t\t\t});\n\t\t\tlast.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, treeNode.maxPage);\n\t\t\t\t}\n\t\t\t});\n\t\t\tprev.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, treeNode.page-1);\n\t\t\t\t}\n\t\t\t});\n\t\t\tnext.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, treeNode.page+1);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.firstPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -16px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.prevPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -48px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.nextPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -64px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.lastPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -32px; vertical-align:top; *vertical-align:middle}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>分页加载大数据量</h1>\n<h6>[ 文件路径: bigdata/page.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、大数据量加载说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1)、分页方案可以有效解决某一级节点数据超大的情况。</li>\n\t\t\t\t<li>2)、分页按钮通过自定义控件的方法实现。</li>\n\t\t\t\t<li class=\"highlight_red\">3)、分页方案对于 checkbox 的关联关系无能为力，只能每次翻页后进行修正。由于时间关系，Demo 中不对 checkbox 的关联进行任何修正处理。</li>\n\t\t\t\t<li class=\"highlight_red\">4)、分页方案中，从 zTree 得到的节点数据只有当前页的节点数据，可以在每次翻页后自行保存每页的数据，作为缓存，具体情况要根据实际需求来决定。</li>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>需要设置 setting.async 异步加载部分的参数</li>\n\t\t\t\t<li>其他不需要进行特殊的配置，根据自己的需求自行设置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/async.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Async</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>异步加载节点数据的树</h1>\n<h6>[ 文件路径: core/async.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用异步加载，必须设置 setting.async 中的各个属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>异步加载功能对于 treeNode 节点数据没有特别要求，如果采用简单 JSON 数据，请设置 setting.data.simple 中的属性</li>\n\t\t\t\t<li>如果异步加载每次都只返回单层的节点数据，那么可以不设置简单 JSON 数据模式</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">观察 autoParam 和 otherParam 请使用 firebug 或 浏览器的开发人员工具</li>\n\t\t\t\t<li class=\"highlight_red\">此 Demo 只能加载到第 4 级节点（level=3）</li>\n\t\t\t\t<li class=\"highlight_red\">此 Demo 利用 dataFilter 对节点的 name 进行了修改</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/async_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - reAsyncChildNodes</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tbeforeAsync: beforeAsync,\n\t\t\t\tonAsyncError: onAsyncError,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tif (!treeNode.isParent) {\n\t\t\t\talert(\"请选择父节点\");\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeAsync(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeAsync ]&nbsp;&nbsp;&nbsp;&nbsp;\" + ((!!treeNode && !!treeNode.name) ? treeNode.name : \"root\") );\n\t\t\treturn true;\n\t\t}\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onAsyncError ]&nbsp;&nbsp;&nbsp;&nbsp;\" + ((!!treeNode && !!treeNode.name) ? treeNode.name : \"root\") );\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onAsyncSuccess ]&nbsp;&nbsp;&nbsp;&nbsp;\" + ((!!treeNode && !!treeNode.name) ? treeNode.name : \"root\") );\n\t\t}\n\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction refreshNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tsilent = e.data.silent,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个父节点\");\n\t\t\t}\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.reAsyncChildNodes(nodes[i], type, silent);\n\t\t\t\tif (!silent) zTree.selectNode(nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t\t$(\"#refreshNode\").bind(\"click\", {type:\"refresh\", silent:false}, refreshNode);\n\t\t\t$(\"#refreshNodeSilent\").bind(\"click\", {type:\"refresh\", silent:true}, refreshNode);\n\t\t\t$(\"#addNode\").bind(\"click\", {type:\"add\", silent:false}, refreshNode);\n\t\t\t$(\"#addNodeSilent\").bind(\"click\", {type:\"add\", silent:true}, refreshNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\n</HEAD>\n\n<BODY>\n<h1>用 zTree 方法异步加载节点数据</h1>\n<h6>[ 文件路径: core/async_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、reAsyncChildNodes 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 zTreeObj.reAsyncChildNodes 方法，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>此 Demo 只能同时选中一个父节点<br/>\n\t\t\t\t\t试试看：[ <a id=\"refreshNode\" href=\"#\" onclick=\"return false;\">重新加载</a> ]&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addNode\" href=\"#\" onclick=\"return false;\">追加</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">“悄悄地”操作只能针对 折叠状态 的父节点</span><br/>\n\t\t\t\t\t试试看：[ <a id=\"refreshNodeSilent\" href=\"#\" onclick=\"return false;\">悄悄地 重新加载</a> ]&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addNodeSilent\" href=\"#\" onclick=\"return false;\">悄悄地 追加</a> ]<br/>\n\t\t\t\t\tasync log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 zTree 提供的 reAsyncChildNodes 方法也必须设置 setting.async 中的各个属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"异步加载 节点数据\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>4、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"异步加载 节点数据\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/click.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeClick / onClick</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle:\"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"普通的父节点\", t:\"我很普通，随便点我吧\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 - 1\", t:\"我很普通，随便点我吧\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 - 2\", t:\"我很普通，随便点我吧\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 - 3\", t:\"我很普通，随便点我吧\"},\n\t\t\t{ id:2, pId:0, name:\"NB的父节点\", t:\"点我可以，但是不能点我的子节点，有本事点一个你试试看？\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点2 - 1\", t:\"你哪个单位的？敢随便点我？小心点儿..\", click:false},\n\t\t\t{ id:22, pId:2, name:\"叶子节点2 - 2\", t:\"我有老爸罩着呢，点击我的小心点儿..\", click:false},\n\t\t\t{ id:23, pId:2, name:\"叶子节点2 - 3\", t:\"好歹我也是个领导，别普通群众就来点击我..\", click:false},\n\t\t\t{ id:3, pId:0, name:\"郁闷的父节点\", t:\"别点我，我好害怕...我的子节点随便点吧...\", open:true, click:false },\n\t\t\t{ id:31, pId:3, name:\"叶子节点3 - 1\", t:\"唉，随便点我吧\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点3 - 2\", t:\"唉，随便点我吧\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点3 - 3\", t:\"唉，随便点我吧\"}\n\t\t];\n\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeClick(treeId, treeNode, clickFlag) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeClick ]&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.click != false);\n\t\t}\n\t\tfunction onClick(event, treeId, treeNode, clickFlag) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onClick ]&nbsp;&nbsp;clickFlag = \" + clickFlag + \" (\" + (clickFlag===1 ? \"普通选中\": (clickFlag===0 ? \"<b>取消选中</b>\" : \"<b>追加选中</b>\")) + \")\");\n\t\t}\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds();\n\t\t\treturn (h+\":\"+m+\":\"+s);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>单击节点控制</h1>\n<h6>[ 文件路径: core/click.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、beforeClick / onClick 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 click 事件回调函数 可以进行各种其他的附加操作，这里简单演示如何监控此事件</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">请尝试按下 <b>Ctrl</b> 或 <b>Cmd</b> 键进行 多节点选择 和 取消选择</span><br/>\n\t\t\t\t\tclick log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">需要设置 setting.callback.beforeClick 和  setting.callback.onClick 属性, 详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/custom_font.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Custom Font</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tfontCss: getFont,\n\t\t\t\tnameIsHTML: true\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ name:\"粗体字\", font:{'font-weight':'bold'} },\n\t\t\t{ name:\"斜体字\", font:{'font-style':'italic'}},\n\t\t\t{ name:\"有背景的字\", font:{'background-color':'black', 'color':'white'}},\n\t\t\t{ name:\"红色字\", font:{'color':'red'}},\n\t\t\t{ name:\"蓝色字\", font:{'color':'blue'}},\n\t\t\t{ name:\"<span style='color:blue;margin-right:0px;'>view</span>.<span style='color:red;margin-right:0px;'>nameIsHTML</span>\"},\n\t\t\t{ name:\"zTree 默认样式\"}\n\t\t];\n\n\t\tfunction getFont(treeId, node) {\n\t\t\treturn node.font ? node.font : {};\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>显示自定义字体的树</h1>\n<h6>[ 文件路径: core/custom_font.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1、节点自定义字体请设置 setting.view.fontCss 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">2、setting.view.nameIsHTML 属性可以允许节点名称支持 HTML 内容，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>设置字体不需要 treeNode 设置特殊数据，但如果用于为了区别不同类型的节点，设置不同的样式，可以对相应的数据设置自定义属性</li>\n\t\t\t\t<li>此 Demo 利用 treeNode 保存样式定义</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/custom_icon.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Custom Icon </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"展开、折叠 自定义图标不同\", open:true, iconOpen:\"../../../css/zTreeStyle/img/diy/1_open.png\", iconClose:\"../../../css/zTreeStyle/img/diy/1_close.png\"},\n\t\t\t{ id:11, pId:1, name:\"叶子节点1\", icon:\"../../../css/zTreeStyle/img/diy/2.png\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点2\", icon:\"../../../css/zTreeStyle/img/diy/3.png\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点3\", icon:\"../../../css/zTreeStyle/img/diy/5.png\"},\n\t\t\t{ id:2, pId:0, name:\"展开、折叠 自定义图标相同\", open:true, icon:\"../../../css/zTreeStyle/img/diy/4.png\"},\n\t\t\t{ id:21, pId:2, name:\"叶子节点1\", icon:\"../../../css/zTreeStyle/img/diy/6.png\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点2\", icon:\"../../../css/zTreeStyle/img/diy/7.png\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点3\", icon:\"../../../css/zTreeStyle/img/diy/8.png\"},\n\t\t\t{ id:3, pId:0, name:\"不使用自定义图标\", open:true },\n\t\t\t{ id:31, pId:3, name:\"叶子节点1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点3\"}\n\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>自定义图标 -- icon 属性</h1>\n<h6>[ 文件路径: core/custom_icon.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>自定义图标不需要对 setting 进行特殊配置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 节点数据的 icon / iconOpen / iconClose 属性实现自定义图标</li>\n\t\t\t\t<li class=\"highlight_red\">详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">由于时间关系，例子直接采用 png 图片，如果需要解决 ie6 下 png 图片的透明问题，请针对 ie6 制作特殊的 gif 图片或者利用 css filter 解决</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/custom_iconSkin.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Custom Icon Skin </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"展开、折叠 自定义图标不同\", open:true, iconSkin:\"pIcon01\"},\n\t\t\t{ id:11, pId:1, name:\"叶子节点1\", iconSkin:\"icon01\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点2\", iconSkin:\"icon02\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点3\", iconSkin:\"icon03\"},\n\t\t\t{ id:2, pId:0, name:\"展开、折叠 自定义图标相同\", open:true, iconSkin:\"pIcon02\"},\n\t\t\t{ id:21, pId:2, name:\"叶子节点1\", iconSkin:\"icon04\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点2\", iconSkin:\"icon05\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点3\", iconSkin:\"icon06\"},\n\t\t\t{ id:3, pId:0, name:\"不使用自定义图标\", open:true },\n\t\t\t{ id:31, pId:3, name:\"叶子节点1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点3\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.pIcon01_ico_open{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_open.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.pIcon01_ico_close{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_close.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.pIcon02_ico_open, .ztree li span.button.pIcon02_ico_close{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/2.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon01_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/3.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon02_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/4.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon03_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/5.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon04_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/6.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon05_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/7.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon06_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/8.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>自定义图标 -- iconSkin 属性</h1>\n<h6>[ 文件路径: core/custom_iconSkin.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>自定义图标不需要对 setting 进行特殊配置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 节点数据的 iconSkin 属性 配合 css 实现自定义图标</li>\n\t\t\t\t<li class=\"highlight_red\">详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">由于时间关系，例子直接采用 png 图片，如果需要解决 ie6 下 png 图片的透明问题，请针对 ie6 制作特殊的 gif 图片或者利用 css filter 解决</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/expand.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeExpand / onExpand && beforeCollapse / onCollapse</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle:\"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tbeforeCollapse: beforeCollapse,\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonCollapse: onCollapse,\n\t\t\t\tonExpand: onExpand\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"可折腾的父节点 1\", t:\"我很普通，随便 展开/折叠 我吧\", open:false},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 - 1\", t:\"我老爸很普通，随便折腾他吧\"},\n\t\t\t{ id:12, pId:1, name:\"可折腾的父节点 2\", t:\"我和我老爸都很普通，随便折腾我和他吧\", open: false},\n\t\t\t{ id:121, pId:12, name:\"父节点 - 121\", t:\"我老爸很普通，随便折腾他吧\", open:true},\n\t\t\t{ id:1211, pId:121, name:\"父节点 - 1211\", t:\"我老爸很普通，随便折腾他吧\", open:false},\n\t\t\t{ id:1212, pId:1211, name:\"叶子节点 - 1212\", t:\"我老爸很普通，随便折腾他吧\"},\n\t\t\t{ id:1213, pId:121, name:\"父节点 - 1213\", t:\"我老爸很普通，随便折腾他吧\", open:false},\n\t\t\t{ id:1214, pId:1213, name:\"叶子节点 - 1214\", t:\"我老爸很普通，随便折腾他吧\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点 - 23\", t:\"我老爸很普通，随便折腾他吧\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 - 3\", t:\"我老爸很普通，随便折腾他吧\"},\n\t\t\t{ id:2, pId:1, name:\"无法折叠的父节点\", t:\"休想让我折叠起来...除非你用 expandAll 方法\", open:false, collapse:false},\n\t\t\t{ id:21, pId:2, name:\"叶子节点2 - 1\", t:\"哈哈哈，我老爸NB吧，不能折叠吧？\"},\n\t\t\t{ id:22, pId:21, name:\"叶子节点2 - 2\", t:\"哈哈哈，我老爸NB吧，不能折叠吧？\"},\n\t\t\t{ id:23, pId:21, name:\"叶子节点2 - 3\", t:\"哈哈哈，我老爸NB吧，不能折叠吧？\"},\n\t\t\t{ id:3, pId:2, name:\"无法展开的父节点\", t:\"就凭你也想展开我？难呀...嘿嘿, 除非你用 expandAll 方法\", open:false, expand:false},\n\t\t\t{ id:31, pId:3, name:\"叶子节点3 - 1\", t:\"居然让你看到了...莫非你用了全部节点展开？\"},\n\t\t\t{ id:32, pId:31, name:\"叶子节点3 - 2\", t:\"居然让你看到了...莫非你用了全部节点展开？\"},\n\t\t\t{ id:33, pId:31, name:\"叶子节点3 - 3\", t:\"居然让你看到了...莫非你用了全部节点展开？\"},\n\t\t\t{ id:4, pId:3, name:\"空空的父节点 1\", t:\"一无所有...除了我自己\", isParent:true, open:false}\n\t\t];\n\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tif (treeNode.isParent) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\talert(\"这个 Demo 是用来测试 展开 / 折叠 的...\\n\\n去点击父节点吧... \");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction beforeCollapse(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeCollapse ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.collapse !== false);\n\t\t}\n\t\tfunction onCollapse(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onCollapse ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name);\n\t\t}\t\t\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeExpand ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.expand !== false);\n\t\t}\n\t\tfunction onExpand(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onExpand ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name);\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction expandNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (type.indexOf(\"All\")<0 && nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个父节点\");\n\t\t\t}\n\n\t\t\tif (type == \"expandAll\") {\n\t\t\t\tzTree.expandAll(true);\n\t\t\t} else if (type == \"collapseAll\") {\n\t\t\t\tzTree.expandAll(false);\n\t\t\t} else {\n\t\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tzTree.setting.view.fontCss = {};\n\t\t\t\t\tif (type == \"expand\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], true, null, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"collapse\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], false, null, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"toggle\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], null, null, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"expandSon\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], true, true, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"collapseSon\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], false, true, null, callbackFlag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#expandBtn\").bind(\"click\", {type:\"expand\"}, expandNode);\n\t\t\t$(\"#collapseBtn\").bind(\"click\", {type:\"collapse\"}, expandNode);\n\t\t\t$(\"#toggleBtn\").bind(\"click\", {type:\"toggle\"}, expandNode);\n\t\t\t$(\"#expandSonBtn\").bind(\"click\", {type:\"expandSon\"}, expandNode);\n\t\t\t$(\"#collapseSonBtn\").bind(\"click\", {type:\"collapseSon\"}, expandNode);\n\t\t\t$(\"#expandAllBtn\").bind(\"click\", {type:\"expandAll\"}, expandNode);\n\t\t\t$(\"#collapseAllBtn\").bind(\"click\", {type:\"collapseAll\"}, expandNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>展开 / 折叠父节点控制</h1>\n<h6>[ 文件路径: core/expand.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、beforeCollapse / onCollapse<br/>&nbsp;&nbsp;beforeExpand / onExpand 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 collapse / expand 事件回调函数 可以控制父节点是否允许 展开 / 折叠，这里简单演示如何监控此事件</li>\n\t\t\t\t<li><p>试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> expandNode 方法是否触发 callback<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;单个节点--[ <a id=\"expandBtn\" href=\"#\" title=\"不想展开我就不展开你...\" onclick=\"return false;\">展开</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"collapseBtn\" href=\"#\" title=\"不想折叠我就不折叠你...\" onclick=\"return false;\">折叠</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"toggleBtn\" href=\"#\" title=\"你想怎样？...\" onclick=\"return false;\">展开 / 折叠 切换</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;单个节点（包括子节点）--[ <a id=\"expandSonBtn\" href=\"#\" title=\"不想展开我就不展开你...\" onclick=\"return false;\">展开</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"collapseSonBtn\" href=\"#\" title=\"不想折叠我就不折叠你...\" onclick=\"return false;\">折叠</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;全部节点--[ <a id=\"expandAllBtn\" href=\"#\" title=\"不管你有多NB，统统都要听我的！！\" onclick=\"return false;\">展开</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"collapseAllBtn\" href=\"#\" title=\"不管你有多NB，统统都要听我的！！\" onclick=\"return false;\">折叠</a> ]</p>\n\t\t\t\t<li><p><span class=\"highlight_red\">使用 zTreeObj.expandNode 方法，详细请参见 API 文档中的相关内容</span><br/>\n\t\t\t\t\tcollapse / expand log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">事件回调函数的使用，详细请参见 API 文档中 setting.callback 的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">如果需要调整 展开 / 折叠 的动画效果， 详细请参见 API 文档中 setting.view.expandSpeed 的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/noicon.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - noIcon </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowIcon: showIconForTree\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1 - 展开\", open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点11 - 折叠\"},\n\t\t\t{ id:111, pId:11, name:\"叶子节点111\"},\n\t\t\t{ id:112, pId:11, name:\"叶子节点112\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点113\"},\n\t\t\t{ id:114, pId:11, name:\"叶子节点114\"},\n\t\t\t{ id:12, pId:1, name:\"父节点12 - 折叠\"},\n\t\t\t{ id:121, pId:12, name:\"叶子节点121\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点122\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点123\"},\n\t\t\t{ id:124, pId:12, name:\"叶子节点124\"},\n\t\t\t{ id:13, pId:1, name:\"父节点13 - 没有子节点\", isParent:true},\n\t\t\t{ id:2, pId:0, name:\"父节点2 - 折叠\"},\n\t\t\t{ id:21, pId:2, name:\"父节点21 - 展开\", open:true},\n\t\t\t{ id:211, pId:21, name:\"叶子节点211\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点212\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点213\"},\n\t\t\t{ id:214, pId:21, name:\"叶子节点214\"},\n\t\t\t{ id:22, pId:2, name:\"父节点22 - 折叠\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点221\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点222\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点223\"},\n\t\t\t{ id:224, pId:22, name:\"叶子节点224\"},\n\t\t\t{ id:23, pId:2, name:\"父节点23 - 折叠\"},\n\t\t\t{ id:231, pId:23, name:\"叶子节点231\"},\n\t\t\t{ id:232, pId:23, name:\"叶子节点232\"},\n\t\t\t{ id:233, pId:23, name:\"叶子节点233\"},\n\t\t\t{ id:234, pId:23, name:\"叶子节点234\"},\n\t\t\t{ id:3, pId:0, name:\"父节点3 - 没有子节点\", isParent:true}\n\t\t];\n\n\t\tfunction showIconForTree(treeId, treeNode) {\n\t\t\treturn !treeNode.isParent;\n\t\t};\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\n</HEAD>\n\n<BODY>\n<h1>不显示节点图标的树</h1>\n<h6>[ 文件路径: core/noicon.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 利用 Function 设置了使父节点不显示图标的规则</li>\n\t\t\t\t<li class=\"highlight_red\">是否显示节点图标请设置 setting.view.showIcon 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>是否显示图标，不需要 treeNode 节点数据提供特殊设置，但如果用户需要根据不同节点动态设置，可以对节点数据增加特殊属性，用于判别</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/noline.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - noLine </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowLine: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1 - 展开\", open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点11 - 折叠\"},\n\t\t\t{ id:111, pId:11, name:\"叶子节点111\"},\n\t\t\t{ id:112, pId:11, name:\"叶子节点112\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点113\"},\n\t\t\t{ id:114, pId:11, name:\"叶子节点114\"},\n\t\t\t{ id:12, pId:1, name:\"父节点12 - 折叠\"},\n\t\t\t{ id:121, pId:12, name:\"叶子节点121\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点122\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点123\"},\n\t\t\t{ id:124, pId:12, name:\"叶子节点124\"},\n\t\t\t{ id:13, pId:1, name:\"父节点13 - 没有子节点\", isParent:true},\n\t\t\t{ id:2, pId:0, name:\"父节点2 - 折叠\"},\n\t\t\t{ id:21, pId:2, name:\"父节点21 - 展开\", open:true},\n\t\t\t{ id:211, pId:21, name:\"叶子节点211\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点212\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点213\"},\n\t\t\t{ id:214, pId:21, name:\"叶子节点214\"},\n\t\t\t{ id:22, pId:2, name:\"父节点22 - 折叠\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点221\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点222\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点223\"},\n\t\t\t{ id:224, pId:22, name:\"叶子节点224\"},\n\t\t\t{ id:23, pId:2, name:\"父节点23 - 折叠\"},\n\t\t\t{ id:231, pId:23, name:\"叶子节点231\"},\n\t\t\t{ id:232, pId:23, name:\"叶子节点232\"},\n\t\t\t{ id:233, pId:23, name:\"叶子节点233\"},\n\t\t\t{ id:234, pId:23, name:\"叶子节点234\"},\n\t\t\t{ id:3, pId:0, name:\"父节点3 - 没有子节点\", isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\n</HEAD>\n\n<BODY>\n<h1>不显示连接线的树</h1>\n<h6>[ 文件路径: core/noline.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">是否显示连接线请设置 setting.view.showLine 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>是否显示连线，不需要 treeNode 节点数据提供特殊设置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/otherMouse.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Other Mouse Event</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle:\"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeMouseDown: beforeMouseDown,\n\t\t\t\tbeforeMouseUp: beforeMouseUp,\n\t\t\t\tbeforeRightClick: beforeRightClick,\n\t\t\t\tonMouseDown: onMouseDown,\n\t\t\t\tonMouseUp: onMouseUp,\n\t\t\t\tonRightClick: onRightClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"不能 右键 0\", t:\"试试右键，没有 onRightClick 吧？\", open:true, right:false},\n\t\t\t{ id:11, pId:1, name:\"不能 右键 1\", t:\"试试右键，没有 onRightClick 吧？\", right:false},\n\t\t\t{ id:12, pId:1, name:\"不能 右键 2\", t:\"试试右键，没有 onRightClick 吧？\", right:false},\n\t\t\t{ id:13, pId:1, name:\"不能 右键 3\", t:\"试试右键，没有 onRightClick 吧？\", right:false},\n\t\t\t{ id:2, pId:0, name:\"不能 Down 0\", t:\"试试 MouseDown ，没有 onMouseDown 吧？\", open:true, down:false},\n\t\t\t{ id:21, pId:2, name:\"不能 Down 1\", t:\"试试 MouseDown ，没有 onMouseDown 吧？\", down:false},\n\t\t\t{ id:22, pId:2, name:\"不能 Down 2\", t:\"试试 MouseDown ，没有 onMouseDown 吧？\", down:false},\n\t\t\t{ id:23, pId:2, name:\"不能 Down 3\", t:\"试试 MouseDown ，没有 onMouseDown 吧？\", down:false},\n\t\t\t{ id:3, pId:0, name:\"不能 Up 0\", t:\"试试 MouseUp ，没有 onMouseUp 吧？\", open:true, up:false},\n\t\t\t{ id:31, pId:3, name:\"不能 Up 1\", t:\"试试 MouseUp ，没有 onMouseUp 吧？\", up:false},\n\t\t\t{ id:32, pId:3, name:\"不能 Up 2\", t:\"试试 MouseUp ，没有 onMouseUp 吧？\", up:false},\n\t\t\t{ id:33, pId:3, name:\"不能 Up 3\", t:\"试试 MouseUp ，没有 onMouseUp 吧？\", up:false}\n\t\t];\n\n\t\tvar log, className = {down:\"dark\", up:\"dark\", right:\"dark\"};\n\t\tfunction beforeMouseDown(treeId, treeNode) {\n\t\t\tclassName.down = (className.down === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeMouseDown ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"down\" );\n\t\t\treturn (!treeNode || treeNode.down != false);\n\t\t}\n\t\tfunction onMouseDown(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onMouseDown ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"down\" );\n\t\t}\n\t\tfunction beforeMouseUp(treeId, treeNode) {\n\t\t\tclassName.up = (className.up === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeMouseUp ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"up\" );\n\t\t\treturn (!treeNode || treeNode.up != false);\n\t\t}\n\t\tfunction onMouseUp(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onMouseUp ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"up\" );\n\t\t}\n\t\tfunction beforeRightClick(treeId, treeNode) {\n\t\t\tclassName.right = (className.right === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeRightClick ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"right\" );\n\t\t\treturn (!treeNode || treeNode.right != false);\n\t\t}\n\t\tfunction onRightClick(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onRightClick ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"right\" );\n\t\t}\n\t\tfunction showLog(str, logType) {\n\t\t\tlog = $(\"#log\" + \"_\" + logType);\n\t\t\tlog.append(\"<li class='\"+className[logType]+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 2) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>其他鼠标事件监听</h1>\n<h6>[ 文件路径: core/otherMouse.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、mousedown / mouseup / rightClick 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree 提供 这几种鼠标事件响应，主要是为了便于用户针对一些特殊需求进行扩展开发，不会对 zTree 造成任何影响，这里简单演示如何监控此事件</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">请尝试鼠标在 zTree 上胡乱点击（左键、右键）吧，顺便看看 log</span><br/>\n\t\t\t\t\tmousedown event log:<br/>\n\t\t\t\t\t<ul id=\"log_down\" class=\"log small\"></ul>\n\t\t\t\t\tmouseup event log:<br/>\n\t\t\t\t\t<ul id=\"log_up\" class=\"log small\"></ul>\n\t\t\t\t\trightClick event log:<br/>\n\t\t\t\t\t<ul id=\"log_right\" class=\"log small\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">事件回调函数的使用，详细请参见 API 文档中 setting.callback 的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/searchNodes.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - getNodeByParam / getNodesByParam / getNodesByParamFuzzy</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\t\t\t\t\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tfontCss: getFontCss\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"节点搜索演示 1\", t:\"id=1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"关键字可以是名字\", t:\"id=11\"},\n\t\t\t{ id:12, pId:1, name:\"关键字可以是level\", t:\"id=12\"},\n\t\t\t{ id:13, pId:1, name:\"关键字可以是id\", t:\"id=13\"},\n\t\t\t{ id:14, pId:1, name:\"关键字可以是各种属性\", t:\"id=14\"},\n\t\t\t{ id:2, pId:0, name:\"节点搜索演示 2\", t:\"id=2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"可以只搜索一个节点\", t:\"id=21\"},\n\t\t\t{ id:22, pId:2, name:\"可以搜索节点集合\", t:\"id=22\"},\n\t\t\t{ id:23, pId:2, name:\"搜我吧\", t:\"id=23\"},\n\t\t\t{ id:3, pId:0, name:\"节点搜索演示 3\", t:\"id=3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"我的 id 是: 31\", t:\"id=31\"},\n\t\t\t{ id:32, pId:31, name:\"我的 id 是: 32\", t:\"id=32\"},\n\t\t\t{ id:33, pId:32, name:\"我的 id 是: 33\", t:\"id=33\"}\n\t\t];\n\n\t\tfunction focusKey(e) {\n\t\t\tif (key.hasClass(\"empty\")) {\n\t\t\t\tkey.removeClass(\"empty\");\n\t\t\t}\n\t\t}\n\t\tfunction blurKey(e) {\n\t\t\tif (key.get(0).value === \"\") {\n\t\t\t\tkey.addClass(\"empty\");\n\t\t\t}\n\t\t}\n\t\tvar lastValue = \"\", nodeList = [], fontCss = {};\n\t\tfunction clickRadio(e) {\n\t\t\tlastValue = \"\";\n\t\t\tsearchNode(e);\n\t\t}\n\t\tfunction searchNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (!$(\"#getNodesByFilter\").attr(\"checked\")) {\n\t\t\t\tvar value = $.trim(key.get(0).value);\n\t\t\t\tvar keyType = \"\";\n\t\t\t\tif ($(\"#name\").attr(\"checked\")) {\n\t\t\t\t\tkeyType = \"name\";\n\t\t\t\t} else if ($(\"#level\").attr(\"checked\")) {\n\t\t\t\t\tkeyType = \"level\";\n\t\t\t\t\tvalue = parseInt(value);\n\t\t\t\t} else if ($(\"#id\").attr(\"checked\")) {\n\t\t\t\t\tkeyType = \"id\";\n\t\t\t\t\tvalue = parseInt(value);\n\t\t\t\t}\n\t\t\t\tif (key.hasClass(\"empty\")) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t}\n\t\t\t\tif (lastValue === value) return;\n\t\t\t\tlastValue = value;\n\t\t\t\tif (value === \"\") return;\n\t\t\t\tupdateNodes(false);\n\n\t\t\t\tif ($(\"#getNodeByParam\").attr(\"checked\")) {\n\t\t\t\t\tvar node = zTree.getNodeByParam(keyType, value);\n\t\t\t\t\tif (node === null) {\n\t\t\t\t\t\tnodeList = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodeList = [node];\n\t\t\t\t\t}\n\t\t\t\t} else if ($(\"#getNodesByParam\").attr(\"checked\")) {\n\t\t\t\t\tnodeList = zTree.getNodesByParam(keyType, value);\n\t\t\t\t} else if ($(\"#getNodesByParamFuzzy\").attr(\"checked\")) {\n\t\t\t\t\tnodeList = zTree.getNodesByParamFuzzy(keyType, value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tupdateNodes(false);\n\t\t\t\tnodeList = zTree.getNodesByFilter(filter);\n\t\t\t}\n\t\t\tupdateNodes(true);\n\n\t\t}\n\t\tfunction updateNodes(highlight) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor( var i=0, l=nodeList.length; i<l; i++) {\n\t\t\t\tnodeList[i].highlight = highlight;\n\t\t\t\tzTree.updateNode(nodeList[i]);\n\t\t\t}\n\t\t}\n\t\tfunction getFontCss(treeId, treeNode) {\n\t\t\treturn (!!treeNode.highlight) ? {color:\"#A60000\", \"font-weight\":\"bold\"} : {color:\"#333\", \"font-weight\":\"normal\"};\n\t\t}\n\t\tfunction filter(node) {\n\t\t\treturn !node.isParent && node.isFirstNode;\n\t\t}\n\n\t\tvar key;\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tkey = $(\"#key\");\n\t\t\tkey.bind(\"focus\", focusKey)\n\t\t\t.bind(\"blur\", blurKey)\n\t\t\t.bind(\"propertychange\", searchNode)\n\t\t\t.bind(\"input\", searchNode);\n\t\t\t$(\"#name\").bind(\"change\", clickRadio);\n\t\t\t$(\"#level\").bind(\"change\", clickRadio);\n\t\t\t$(\"#id\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodeByParam\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodesByParam\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodesByParamFuzzy\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodesByFilter\").bind(\"change\", clickRadio);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>根据参数查找节点</h1>\n<h6>[ 文件路径: core/searchNodes.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、getNodeByParam / getNodesByParam / getNodesByParamFuzzy 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 zTreeObj.getNodeByParam / getNodesByParam / getNodesByParamFuzzy / getNodeByTId 方法，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>搜索试试看：<br/>\n\t\t\t\t\t\t属性值( value )：<input type=\"text\" id=\"key\" value=\"\" class=\"empty\" /><br/>\n\t\t\t\t\t\t属性( key )：<input type=\"radio\" id=\"name\" name=\"keyType\" class=\"radio first\" checked /><span>name (string)</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"level\" name=\"keyType\" class=\"radio\" style=\"margin-left:68px;\" /><span>level (number) ... 根节点 level = 0</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"id\" name=\"keyType\" class=\"radio\" style=\"margin-left:68px;\" /><span>id (number)</span><br/>\n\t\t\t\t\t\t方法：<input type=\"radio\" id=\"getNodeByParam\" name=\"funType\" class=\"radio first\" /><span>getNodeByParam</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"getNodesByParam\" name=\"funType\" class=\"radio\" style=\"margin-left:36px;\" /><span>getNodesByParam</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"getNodesByParamFuzzy\" name=\"funType\" class=\"radio\" style=\"margin-left:36px;\" checked /><span>getNodesByParamFuzzy (only string)</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"getNodesByFilter\" name=\"funType\" class=\"radio\" style=\"margin-left:36px;\" /><span>getNodesByFilter (参考本页源码中 function filter)</span><br/>\n\t\t\t\t\t</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>不需要对 setting 进行特殊设置</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">请注意各个方法使用时保证传入查找的参数类型与设定要查找的属性的类型一致</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/simpleData.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Simple Data</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1 - 展开\", open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点11 - 折叠\"},\n\t\t\t{ id:111, pId:11, name:\"叶子节点111\"},\n\t\t\t{ id:112, pId:11, name:\"叶子节点112\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点113\"},\n\t\t\t{ id:114, pId:11, name:\"叶子节点114\"},\n\t\t\t{ id:12, pId:1, name:\"父节点12 - 折叠\"},\n\t\t\t{ id:121, pId:12, name:\"叶子节点121\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点122\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点123\"},\n\t\t\t{ id:124, pId:12, name:\"叶子节点124\"},\n\t\t\t{ id:13, pId:1, name:\"父节点13 - 没有子节点\", isParent:true},\n\t\t\t{ id:2, pId:0, name:\"父节点2 - 折叠\"},\n\t\t\t{ id:21, pId:2, name:\"父节点21 - 展开\", open:true},\n\t\t\t{ id:211, pId:21, name:\"叶子节点211\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点212\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点213\"},\n\t\t\t{ id:214, pId:21, name:\"叶子节点214\"},\n\t\t\t{ id:22, pId:2, name:\"父节点22 - 折叠\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点221\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点222\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点223\"},\n\t\t\t{ id:224, pId:22, name:\"叶子节点224\"},\n\t\t\t{ id:23, pId:2, name:\"父节点23 - 折叠\"},\n\t\t\t{ id:231, pId:23, name:\"叶子节点231\"},\n\t\t\t{ id:232, pId:23, name:\"叶子节点232\"},\n\t\t\t{ id:233, pId:23, name:\"叶子节点233\"},\n\t\t\t{ id:234, pId:23, name:\"叶子节点234\"},\n\t\t\t{ id:3, pId:0, name:\"父节点3 - 没有子节点\", isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>最简单的树 -- 简单 JSON 数据</h1>\n<h6>[ 文件路径: core/simpleData.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">必须设置 setting.data.simple 内的属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>与显示相关的内容请参考 API 文档中 setting.view 内的配置信息</li>\n\t\t\t\t<li>name、children、title 等属性定义更改请参考 API 文档中 setting.data.key 内的配置信息</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">简单模式的 JSON 数据需要使用 id / pId 表示节点的父子包含关系，如使用其他属性设置父子关联关系请参考 setting.data.simple 内各项说明\n\t\t\t\t<div><pre xmlns=\"\"><code>例如：\nvar nodes = [\n\t{id:1, pId:0, name: \"父节点1\"},\n\t{id:11, pId:1, name: \"子节点1\"},\n\t{id:12, pId:1, name: \"子节点2\"}\n];</code></pre></div></li>\n\t\t\t\t<li>默认展开的节点，请设置 treeNode.open 属性</li>\n\t\t\t\t<li>无子节点的父节点，请设置 treeNode.isParent 属性</li>\n\t\t\t\t<li>其他属性说明请参考 API 文档中 \"treeNode 节点数据详解\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Demo 中绝大部分都采用简单 JSON 数据模式，以便于大家学习</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/standardData.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Standard Data </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\t};\n\n\t\tvar zNodes =[\n\t\t\t{ name:\"父节点1 - 展开\", open:true,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ name:\"父节点11 - 折叠\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"叶子节点111\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点112\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点113\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点114\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"父节点12 - 折叠\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"叶子节点121\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点122\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点123\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点124\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"父节点13 - 没有子节点\", isParent:true}\n\t\t\t\t]},\n\t\t\t{ name:\"父节点2 - 折叠\",\n\t\t\t\tchildren: [\n\t\t\t\t\t{ name:\"父节点21 - 展开\", open:true,\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"叶子节点211\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点212\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点213\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点214\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"父节点22 - 折叠\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"叶子节点221\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点222\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点223\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点224\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"父节点23 - 折叠\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"叶子节点231\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点232\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点233\"},\n\t\t\t\t\t\t\t{ name:\"叶子节点234\"}\n\t\t\t\t\t\t]}\n\t\t\t\t]},\n\t\t\t{ name:\"父节点3 - 没有子节点\", isParent:true}\n\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>最简单的树 -- 标准 JSON 数据</h1>\n<h6>[ 文件路径: core/standardData.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">普通使用，无必须设置的参数</li>\n\t\t\t\t<li>与显示相关的内容请参考 API 文档中 setting.view 内的配置信息</li>\n\t\t\t\t<li>name、children、title 等属性定义更改请参考 API 文档中 setting.data.key 内的配置信息</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">标准的 JSON 数据需要嵌套表示节点的父子包含关系\n\t\t\t\t\t<div><pre xmlns=\"\"><code>例如：\nvar nodes = [\n\t{name: \"父节点1\", children: [\n\t\t{name: \"子节点1\"},\n\t\t{name: \"子节点2\"}\n\t]}\n];</code></pre></div>\n\t\t\t\t</li>\n\t\t\t\t<li>默认展开的节点，请设置 treeNode.open 属性</li>\n\t\t\t\t<li>无子节点的父节点，请设置 treeNode.isParent 属性</li>\n\t\t\t\t<li>其他属性说明请参考 API 文档中 \"treeNode 节点数据详解\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/update_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - updateNode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"叶子节点1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点3\"}\n\t\t];\n\n\t\tvar nameCount = 0, iconCount = 1, color = [0, 0, 0];\n\t\tfunction updateNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t}\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.setting.view.fontCss = {};\n\t\t\t\tif (type == \"rename\") {\n\t\t\t\t\tnodes[i].name = nodes[i].name.replace(/_[\\d]*$/g, \"\") + \"_\" + (nameCount++);\n\t\t\t\t} else if (type == \"icon\") {\n\t\t\t\t\tif (iconCount > 8) {\n\t\t\t\t\t\tnodes[i].iconSkin = null;\n\t\t\t\t\t\ticonCount = 1;\n\t\t\t\t\t} else if (nodes[i].isParent) {\n\t\t\t\t\t\tnodes[i].iconSkin = nodes[i].iconSkin ? null : \"pIcon01\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodes[i].iconSkin = \"icon0\" + (iconCount++);\n\t\t\t\t\t}\n\t\t\t\t} else if (type == \"color\") {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t\tvar r1 = Math.round(Math.random()*3 - 0.5);\n\t\t\t\t\tcolor[r1] = 15;\n\t\t\t\t\tvar r2 = Math.round(Math.random()*3 - 0.5);\n\t\t\t\t\twhile (r2 === r1) {\n\t\t\t\t\t\tr2 = Math.round(Math.random()*3 - 0.5);\n\t\t\t\t\t}\n\t\t\t\t\tcolor[r2] = Math.round(Math.random()*16-0.5);\n\t\t\t\t\tzTree.setting.view.fontCss[\"color\"] = \"#\"+color[0].toString(16)+color[1].toString(16)+color[2].toString(16);\n\t\t\t\t} else if (type == \"font\") {\n\t\t\t\t\tvar style = $(\"#\" + nodes[i].tId + \"_a\").css(\"font-style\") ;\n\t\t\t\t\tstyle = (style==\"italic\" ? \"normal\" : \"italic\");\n\t\t\t\t\tzTree.setting.view.fontCss[\"font-style\"] = style;\n\t\t\t\t}\n\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#rename\").bind(\"click\", {type:\"rename\"}, updateNode);\n\t\t\t$(\"#changeIcon\").bind(\"click\", {type:\"icon\"}, updateNode);\n\t\t\t$(\"#changeColor\").bind(\"click\", {type:\"color\"}, updateNode);\n\t\t\t$(\"#changeFont\").bind(\"click\", {type:\"font\"}, updateNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.pIcon01_ico_open{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_open.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.pIcon01_ico_close{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_close.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon01_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/2.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon02_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/3.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon03_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/4.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon04_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/5.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon05_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/6.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon06_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/7.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon07_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/8.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon08_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/9.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>用 zTree 方法 更新 节点数据</h1>\n<h6>[ 文件路径: core/update_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、updateNode 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 zTreeObj.updateNode 方法，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>此 Demo 只能同时选中一个节点<br/>\n\t\t\t\t\t试试看：[ <a id=\"rename\" href=\"#\" onclick=\"return false;\">换名字</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"changeIcon\" href=\"#\" onclick=\"return false;\">换图标</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"changeColor\" href=\"#\" onclick=\"return false;\">换颜色</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"changeFont\" href=\"#\" onclick=\"return false;\">斜体</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>不需要对 setting 进行特殊设置</li>\n\t\t\t\t<li class=\"highlight_red\">配合 setting.view.fontCss 可以修改节点文字样式</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">zTreeObj.updateNode 方法的 API 文档中有详细说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>4、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 是针对 核心 js 包 core 制作的，因此不包括 checkbox 的更新操作</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/core/url.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - url</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"zTree Home\", url:\"http://www.treejs.cn/\", target:\"_blank\"},\n\t\t\t{ id:2, pId:0, name:\"zTree in Google\", url:\"http://code.google.com/p/jquerytree/\", target:\"_blank\"},\n\t\t\t{ id:3, pId:0, name:\"zTree in Iteye\", url:\"http://ztreeapi.iteye.com/\", target:\"_blank\"},\n\t\t\t{ id:4, pId:0, name:\"Nothing...\", url:\"\", target:\"_blank\", click:\"alert('我是不会跳转的...');\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>超链接演示</h1>\n<h6>[ 文件路径: core/url.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>普通使用，无必须设置的参数</li>\n\t\t\t\t<li class=\"highlight_red\">如果需要灵活控制超链接跳转，请利用 onClick 事件回调函数进行控制，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1、url 属性用于设置 页面跳转的路径</li>\n\t\t\t\t<li class=\"highlight_red\">2、target 属性用于设置 页面跳转的窗口目标</li>\n\t\t\t\t<li class=\"highlight_red\">3、click 属性用于设置简单的 onClick 事件</li>\n\t\t\t\t<li>其他属性说明请参考 API 文档中 \"treeNode 节点数据详解\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/checkbox.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - checkbox</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"随意勾选 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"随意勾选 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"随意勾选 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"随意勾选 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"随意勾选 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\"}\n\t\t];\n\t\t\n\t\tvar code;\n\t\t\n\t\tfunction setCheck() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tpy = $(\"#py\").attr(\"checked\")? \"p\":\"\",\n\t\t\tsy = $(\"#sy\").attr(\"checked\")? \"s\":\"\",\n\t\t\tpn = $(\"#pn\").attr(\"checked\")? \"p\":\"\",\n\t\t\tsn = $(\"#sn\").attr(\"checked\")? \"s\":\"\",\n\t\t\ttype = { \"Y\":py + sy, \"N\":pn + sn};\n\t\t\tzTree.setting.check.chkboxType = type;\n\t\t\tshowCode('setting.check.chkboxType = { \"Y\" : \"' + type.Y + '\", \"N\" : \"' + type.N + '\" };');\n\t\t}\n\t\tfunction showCode(str) {\n\t\t\tif (!code) code = $(\"#code\");\n\t\t\tcode.empty();\n\t\t\tcode.append(\"<li>\"+str+\"</li>\");\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\n\t\t\t$(\"#py\").bind(\"change\", setCheck);\n\t\t\t$(\"#sy\").bind(\"change\", setCheck);\n\t\t\t$(\"#pn\").bind(\"change\", setCheck);\n\t\t\t$(\"#sn\").bind(\"change\", setCheck);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox 勾选操作</h1>\n<h6>[ 文件路径: excheck/checkbox.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 checkbox，必须设置 setting.check 中的各个属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>父子关联关系：<br/>\n\t\t\t\t\t\t被勾选时：<input type=\"checkbox\" id=\"py\" class=\"checkbox first\" checked /><span>关联父</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"sy\" class=\"checkbox first\" checked /><span>关联子</span><br/>\n\t\t\t\t\t\t取消勾选时：<input type=\"checkbox\" id=\"pn\" class=\"checkbox first\" checked /><span>关联父</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"sn\" class=\"checkbox first\" checked /><span>关联子</span><br/>\n\t\t\t\t\t\t<ul id=\"code\" class=\"log\" style=\"height:20px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、如果需要初始化默认节点被勾选，请设置 treeNode.checked 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">2)、如果某节点禁用 checkbox，请设置 treeNode.chkDisabled 属性，详细请参见 API 文档中的相关内容 和 'chkDisabled 演示'</li>\n\t\t\t\t<li class=\"highlight_red\">3)、如果某节点不显示 checkbox，请设置 treeNode.nocheck 属性，详细请参见 API 文档中的相关内容 和 'nocheck 演示'</li>\n\t\t\t\t<li class=\"highlight_red\">4)、如果更换 checked 属性，请参考 API 文档中 setting.data.key.checked 的详细说明</li>\n\t\t\t\t<li>5)、其他请参考 API 文档中 treeNode.checkedOld / getCheckStatus / check_Child_State / check_Focus 的详细说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/checkbox_chkDisabled.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Checkbox chkDisabled</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkDisabledInherit: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"disabled 1-1-1\", chkDisabled:true},\n\t\t\t{ id:112, pId:11, name:\"随意勾选 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"disabled 1-2\", chkDisabled:true, checked:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"disabled 1-2-1\", checked:true},\n\t\t\t{ id:122, pId:12, name:\"disabled 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\"}\n\t\t];\n\n\t\tfunction disabledNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tdisabled = e.data.disabled,\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\tinheritParent = false, inheritChildren = false;\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t}\n\t\t\tif (disabled) {\n\t\t\t\tinheritParent = $(\"#py\").attr(\"checked\");\n\t\t\t\tinheritChildren = $(\"#sy\").attr(\"checked\");\n\t\t\t} else {\n\t\t\t\tinheritParent = $(\"#pn\").attr(\"checked\");\n\t\t\t\tinheritChildren = $(\"#sn\").attr(\"checked\");\n\t\t\t}\n\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.setChkDisabled(nodes[i], disabled, inheritParent, inheritChildren);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#disabledTrue\").bind(\"click\", {disabled: true}, disabledNode);\n\t\t\t$(\"#disabledFalse\").bind(\"click\", {disabled: false}, disabledNode);\n\t\t\t\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox chkDisabled 演示</h1>\n<h6>[ 文件路径: excheck/checkbox_chkDisabled.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setChkDisabled 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>setChkDisabled 方法可以设置节点 checkbox / radio 禁用 或 取消禁用，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>试试看：<br/>\n\t\t\t\t\t禁用时：<input type=\"checkbox\" id=\"py\" class=\"checkbox first\"/><span>关联父</span>\n\t\t\t\t\t<input type=\"checkbox\" id=\"sy\" class=\"checkbox first\" checked /><span>关联子</span><br/>\n\t\t\t\t\t取消禁用时：<input type=\"checkbox\" id=\"pn\" class=\"checkbox first\" checked /><span>关联父</span>\n\t\t\t\t\t<input type=\"checkbox\" id=\"sn\" class=\"checkbox first\" checked /><span>关联子</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledTrue\" href=\"#\" title=\"set checkbox to be disabled.\" onclick=\"return false;\">禁用</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledFalse\" href=\"#\" title=\"set checkbox to be abled.\" onclick=\"return false;\">取消禁用</a> ]\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>这个 Demo 只简单演示 chkDisabled 的使用方法，详细配置信息请参考 ‘Checkbox 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、如果某节点禁用 checkbox，请设置 treeNode.chkDisabled 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>2)、其他请参考 ‘Checkbox 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/checkbox_count.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - getChangeCheckedNodes / getCheckedNodes</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"随意勾选  1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"随意勾选 1-2-1\", checked:true},\n\t\t\t{ id:122, pId:12, name:\"随意勾选 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"随意勾选 1-2-3\"},\n\t\t\t{ id:13, pId:1, name:\"随意勾选 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:223, pId:22, name:\"随意勾选 2-2-3\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\", checked:true}\n\t\t];\n\n\t\tvar clearFlag = false;\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tcount();\n\t\t\tif (clearFlag) {\n\t\t\t\tclearCheckedOldNodes();\n\t\t\t}\n\t\t}\n\t\tfunction clearCheckedOldNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getChangeCheckedNodes();\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tnodes[i].checkedOld = nodes[i].checked;\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tcheckCount = zTree.getCheckedNodes(true).length,\n\t\t\tnocheckCount = zTree.getCheckedNodes(false).length,\n\t\t\tchangeCount = zTree.getChangeCheckedNodes().length;\n\t\t\t$(\"#checkCount\").text(checkCount);\n\t\t\t$(\"#nocheckCount\").text(nocheckCount);\n\t\t\t$(\"#changeCount\").text(changeCount);\n\n\t\t}\n\t\tfunction createTree() {\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tcount();\n\t\t\tclearFlag = $(\"#last\").attr(\"checked\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\tcreateTree();\t\t\t\n\t\t\t$(\"#init\").bind(\"change\", createTree);\n\t\t\t$(\"#last\").bind(\"change\", createTree);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>checkbox 勾选统计</h1>\n<h6>[ 文件路径: excheck/checkbox_count.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、getChangeCheckedNodes / getCheckedNodes 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 zTreeObj.getChangeCheckedNodes / getCheckedNodes 方法，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>去勾选 checkbox 比较下面的数字变化：<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:110px;\">\n\t\t\t\t\t\t<li>当前被勾选的节点共 <span id=\"checkCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>当前未被勾选的节点共 <span id=\"nocheckCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>勾选状态对比规则：<input type=\"radio\" id=\"init\" name=\"stateType\" class=\"radio first\" checked /><span>与 zTree 初始化时对比</span><br/>\n\t\t\t\t\t\t\t<input type=\"radio\" id=\"last\" name=\"stateType\" class=\"radio first\" style=\"margin-left:108px;\"/><span>与上一次勾选后对比</span></li>\n\t\t\t\t\t\t<li>当前被修改勾选状态的节点共 <span id=\"changeCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"checkbox 勾选操作\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"checkbox 勾选操作\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/checkbox_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeCheck / onCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeCheck: beforeCheck,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"随意勾选 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"随意勾选 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"随意勾选 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"禁止勾选 2\", open:true, doCheck:false},\n\t\t\t{ id:21, pId:2, name:\"禁止勾选 2-1\", doCheck:false},\n\t\t\t{ id:22, pId:2, name:\"禁止勾选 2-2\", checked:true, open:true, doCheck:false},\n\t\t\t{ id:221, pId:22, name:\"禁止勾选 2-2-1\", doCheck:false},\n\t\t\t{ id:222, pId:22, name:\"禁止勾选 2-2-2\", checked:true, doCheck:false},\n\t\t\t{ id:23, pId:2, name:\"禁止勾选 2-3\", doCheck:false}\n\t\t];\n\t\t\n\t\tvar code, log, className = \"dark\";\n\t\tfunction beforeCheck(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.doCheck !== false);\n\t\t}\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t}\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 6) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction checkNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (type.indexOf(\"All\")<0 && nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t}\n\n\t\t\tif (type == \"checkAllTrue\") {\n\t\t\t\tzTree.checkAllNodes(true);\n\t\t\t} else if (type == \"checkAllFalse\") {\n\t\t\t\tzTree.checkAllNodes(false);\n\t\t\t} else {\n\t\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tif (type == \"checkTrue\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, false, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalse\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, false, callbackFlag);\n\t\t\t\t\t} else if (type == \"toggle\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], null, false, callbackFlag);\n\t\t\t\t\t}else if (type == \"checkTruePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, true, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalsePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, true, callbackFlag);\n\t\t\t\t\t} else if (type == \"togglePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], null, true, callbackFlag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction setAutoTrigger(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.setting.check.autoCheckTrigger = $(\"#autoCallbackTrigger\").attr(\"checked\");\n\t\t\t$(\"#autoCheckTriggerValue\").html(zTree.setting.check.autoCheckTrigger ? \"true\" : \"false\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#checkTrue\").bind(\"click\", {type:\"checkTrue\"}, checkNode);\n\t\t\t$(\"#checkFalse\").bind(\"click\", {type:\"checkFalse\"}, checkNode);\n\t\t\t$(\"#toggle\").bind(\"click\", {type:\"toggle\"}, checkNode);\n\t\t\t$(\"#checkTruePS\").bind(\"click\", {type:\"checkTruePS\"}, checkNode);\n\t\t\t$(\"#checkFalsePS\").bind(\"click\", {type:\"checkFalsePS\"}, checkNode);\n\t\t\t$(\"#togglePS\").bind(\"click\", {type:\"togglePS\"}, checkNode);\n\t\t\t$(\"#checkAllTrue\").bind(\"click\", {type:\"checkAllTrue\"}, checkNode);\n\t\t\t$(\"#checkAllFalse\").bind(\"click\", {type:\"checkAllFalse\"}, checkNode);\n\n\t\t\t$(\"#autoCallbackTrigger\").bind(\"change\", {}, setAutoTrigger);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>用 zTree 方法 勾选 checkbox</h1>\n<h6>[ 文件路径: excheck/checkbox_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、beforeCheck / onCheck 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 beforeCheck / onCheck 事件回调函数 可以控制是否允许 更改 节点勾选状态，这里简单演示如何监控此事件</li>\n\t\t\t\t<li><p>这里还演示了 checkNode / checkAllNodes 方法触发 beforeCheck / onCheck 事件回调函数的情况，试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"autoCallbackTrigger\" /> setting.check.autoCheckTrigger: <span id=\"autoCheckTriggerValue\">false</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> 执行勾选方法是否触发 callback <br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;单节点--[ <a id=\"checkTrue\" href=\"#\" title=\"不想勾选我就不勾选你...\" onclick=\"return false;\">勾选</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkFalse\" href=\"#\" title=\"不想取消勾选我就不取消你...\" onclick=\"return false;\">取消勾选</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"toggle\" href=\"#\" title=\"你想怎样？...\" onclick=\"return false;\">勾选 切换</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;单节点 ( 影响父子 )--[ <a id=\"checkTruePS\" href=\"#\" title=\"不想勾选我就不勾选你...\" onclick=\"return false;\">勾选</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkFalsePS\" href=\"#\" title=\"不想取消勾选我就不取消你...\" onclick=\"return false;\">取消勾选</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"togglePS\" href=\"#\" title=\"你想怎样？...\" onclick=\"return false;\">勾选 切换</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;全部节点--[ <a id=\"checkAllTrue\" href=\"#\" title=\"不管你有多NB，统统都要听我的！！\" onclick=\"return false;\">勾选</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkAllFalse\" href=\"#\" title=\"不管你有多NB，统统都要听我的！！\" onclick=\"return false;\">取消勾选</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">使用 zTreeObj.checkNode / checkAllNodes 方法，详细请参见 API 文档中的相关内容</span><br/>\n\t\t\t\t\tbeforeCheck / onCheck log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:130px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"checkbox 勾选操作\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"checkbox 勾选操作\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/checkbox_halfCheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Checkbox halfCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"chk\":\"chk\"},\n\t\t\t\tdataFilter: dataFilter\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tautoCheckTrigger: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess\n\t\t\t}\n\t\t};\n\n\t\tfunction dataFilter(treeId, parentNode, childNodes) {\n\t\t\tif (parentNode.checkedEx === true) {\n\t\t\t\tfor(var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\t\tchildNodes[i].checked = parentNode.checked;\n\t\t\t\t\tchildNodes[i].halfCheck = false;\n\t\t\t\t\tchildNodes[i].checkedEx = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\t\tfunction onCheck(event, treeId, treeNode) {\n\t\t\tcancelHalf(treeNode)\n\t\t\ttreeNode.checkedEx = true;\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tcancelHalf(treeNode);\n\t\t}\n\t\tfunction cancelHalf(treeNode) {\n\t\t\tif (treeNode.checkedEx) return;\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\ttreeNode.halfCheck = false;\n\t\t\tzTree.updateNode(treeNode);\t\t\t\n\t\t}\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"半勾选 1\", halfCheck:true, isParent:true},\n\t\t\t{ id:2, pId:0, name:\"半勾选 2\", halfCheck:true, checked:true, isParent:true},\n\t\t\t{ id:3, pId:0, name:\"随意勾选 3\", checked:true, isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox halfCheck 演示</h1>\n<h6>[ 文件路径: excheck/checkbox_halfCheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、演示说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>这个演示式实现了 异步加载模式 下简单的勾选操作</li>\n\t\t\t\t<li class=\"highlight_red\">1)、加载子节点后，父节点的 halfCheck 立刻失效</li>\n\t\t\t\t<li class=\"highlight_red\">2)、勾选父节点，可以影响之后加载的子节点的勾选状态</li>\n\t\t\t\t<li class=\"highlight_red\">3)、勾选父节点，可以让其子节点的 halfCheck 属性失效</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>实现半勾选功能，不需要配置任何参数。但半勾选功能属于辅助功能，无法单独使用，因此也需要根据自己的需求配置特定参数。</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、请在节点初始化之前，设置 treeNode.halfCheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>2)、其他请参考 ‘Checkbox 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/checkbox_nocheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - no checkbox</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tnocheckInherit: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"无 checkbox 1-1-1\", nocheck:true},\n\t\t\t{ id:112, pId:11, name:\"随意勾选 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"无 checkbox 1-2\", nocheck:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"无 checkbox 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"无 checkbox 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\"}\n\t\t];\n\n\t\tfunction nocheckNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnocheck = e.data.nocheck,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t}\n\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tnodes[i].nocheck = nocheck;\n\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#nocheckTrue\").bind(\"click\", {nocheck: true}, nocheckNode);\n\t\t\t$(\"#nocheckFalse\").bind(\"click\", {nocheck: false}, nocheckNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox nocheck 演示</h1>\n<h6>[ 文件路径: excheck/checkbox_nocheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>这个 Demo 只简单演示 nocheck 的使用方法，详细配置信息请参考 ‘Checkbox 勾选操作’</li>\n\t\t\t\t<li class=\"highlight_red\">setting.check.nocheckInherit 可以设置子节点自动继承父节点的 nocheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"nocheckTrue\" href=\"#\" title=\"set checkbox to be hidden.\" onclick=\"return false;\">隐藏</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"nocheckFalse\" href=\"#\" title=\"set checkbox to be show.\" onclick=\"return false;\">显示</a> ]\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、如果某节点不显示 checkbox，请设置 treeNode.nocheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>2)、其他请参考 ‘Checkbox 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - radio</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"随意勾选 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"随意勾选 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"随意勾选 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"随意勾选 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"随意勾选 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\"}\n\t\t];\n\t\t\n\t\tvar code;\t\t\n\t\tfunction setCheck() {\n\t\t\tvar type = $(\"#level\").attr(\"checked\")? \"level\":\"all\";\n\t\t\tsetting.check.radioType = type;\n\t\t\tshowCode('setting.check.radioType = \"' + type + '\";');\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n\t\tfunction showCode(str) {\n\t\t\tif (!code) code = $(\"#code\");\n\t\t\tcode.empty();\n\t\t\tcode.append(\"<li>\"+str+\"</li>\");\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\tsetCheck();\t\t\t\n\t\t\t$(\"#level\").bind(\"change\", setCheck);\n\t\t\t$(\"#all\").bind(\"change\", setCheck);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio 勾选操作</h1>\n<h6>[ 文件路径: excheck/radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">使用 radio，必须设置 setting.check 中的各个属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>radio 分组范围：<input type=\"radio\" id=\"level\" class=\"radio first\" name=\"radioGroup\" checked /><span>同一级内</span>\n\t\t\t\t\t\t<input type=\"radio\" id=\"all\" class=\"radio\" name=\"radioGroup\"/><span>整棵树内</span><br/>\n\t\t\t\t\t\t<ul id=\"code\" class=\"log\" style=\"height:20px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、如果需要初始化默认节点被勾选，请设置 treeNode.checked 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">2)、如果某节点不显示 radio，请设置 treeNode.nocheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">3)、如果更换 checked 属性，请参考 API 文档中 setting.data.key.checked 的详细说明</li>\n\t\t\t\t<li>4)、其他请参考 API 文档中 treeNode.checkedOld / getCheckStatus / check_Child_State / check_Focus 的详细说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/radio_chkDisabled.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Radio chkDisabled</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"disabled 1-1-1\", chkDisabled:true, checked:true},\n\t\t\t{ id:112, pId:11, name:\"随意勾选 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"disabled 1-2\", chkDisabled:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"disabled 1-2-1\", checked:true},\n\t\t\t{ id:122, pId:12, name:\"disabled 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\"}\n\t\t];\n\t\t\n\t\tfunction disabledNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tdisabled = e.data.disabled,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t}\n\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.setChkDisabled(nodes[i], disabled);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#disabledTrue\").bind(\"click\", {disabled: true}, disabledNode);\n\t\t\t$(\"#disabledFalse\").bind(\"click\", {disabled: false}, disabledNode);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio chkDisabled 演示</h1>\n<h6>[ 文件路径: excheck/radio_chkDisabled.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setChkDisabled 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>setChkDisabled 方法可以设置节点 checkbox / radio 禁用 或 取消禁用，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledTrue\" href=\"#\" title=\"set checkbox to be disabled.\" onclick=\"return false;\">禁用</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledFalse\" href=\"#\" title=\"set checkbox to be abled.\" onclick=\"return false;\">取消禁用</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>这个 Demo 只简单演示 chkDisabled 的使用方法，详细配置信息请参考 ‘Radio 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、如果某节点不显示 radio，请设置 treeNode.chkDisabled 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>2)、其他请参考 ‘Radio 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/radio_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeCheck / onCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeCheck: beforeCheck,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"无 radio 1-1\", nocheck:true},\n\t\t\t{ id:12, pId:1, name:\"随意勾选 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"随意勾选 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"随意勾选 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"无 radio 1-2-3\", nocheck:true},\n\t\t\t{ id:13, pId:1, name:\"随意勾选 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"禁止勾选 2\", open:true, doCheck:false},\n\t\t\t{ id:21, pId:2, name:\"禁止勾选 2-1\", doCheck:false},\n\t\t\t{ id:22, pId:2, name:\"禁止勾选 2-2\", checked:true, open:true, doCheck:false},\n\t\t\t{ id:221, pId:22, name:\"禁止勾选 2-2-1\", doCheck:false},\n\t\t\t{ id:222, pId:22, name:\"禁止勾选 2-2-2\", checked:true, doCheck:false},\n\t\t\t{ id:223, pId:22, name:\"禁止勾选 2-2-3\", doCheck:false},\n\t\t\t{ id:23, pId:2, name:\"禁止勾选 2-3\", doCheck:false}\n\t\t];\n\t\t\n\t\tvar code, log, className = \"dark\";\n\t\tfunction beforeCheck(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.doCheck !== false);\n\t\t}\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t}\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 6) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction checkNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (type.indexOf(\"All\")<0 && nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t}\n\n\t\t\tif (type == \"checkAllTrue\") {\n\t\t\t\tzTree.checkAllNodes(true);\n\t\t\t} else if (type == \"checkAllFalse\") {\n\t\t\t\tzTree.checkAllNodes(false);\n\t\t\t} else {\n\t\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tif (type == \"checkTrue\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalse\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, null, callbackFlag);\n\t\t\t\t\t}else if (type == \"checkTruePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, true, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalsePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, true, callbackFlag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#checkTrue\").bind(\"click\", {type:\"checkTrue\"}, checkNode);\n\t\t\t$(\"#checkFalse\").bind(\"click\", {type:\"checkFalse\"}, checkNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>用 zTree 方法 勾选 radio</h1>\n<h6>[ 文件路径: excheck/radio_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、beforeCheck / onCheck 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 beforeCheck / onCheck 事件回调函数 可以控制是否允许 更改 节点勾选状态，这里简单演示如何监控此事件</li>\n\t\t\t\t<li><p>试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> checkNode 方法是否触发 callback<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkTrue\" href=\"#\" title=\"不想勾选我就不勾选你...\" onclick=\"return false;\">勾选</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkFalse\" href=\"#\" title=\"不想取消勾选我就不取消你...\" onclick=\"return false;\">取消勾选</a> ]</p>\n\t\t\t\t<li><p><span class=\"highlight_red\">使用 zTreeObj.checkNode 方法，详细请参见 API 文档中的相关内容</span><br/>\n\t\t\t\t\tbeforeCheck / onCheck log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:130px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"radio 勾选操作\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"radio 勾选操作\" 中的说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/radio_halfCheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Radio halfCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"chk\":\"chk\"}\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tautoCheckTrigger: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonAsyncSuccess: onAsyncSuccess\n\t\t\t}\n\t\t};\n\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tcancelHalf(treeNode);\n\t\t}\n\t\tfunction cancelHalf(treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\ttreeNode.halfCheck = false;\n\t\t\tzTree.updateNode(treeNode);\t\t\t\n\t\t}\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"半勾选 1\", halfCheck:true, isParent:true},\n\t\t\t{ id:2, pId:0, name:\"半勾选 2\", halfCheck:true, checked:true, isParent:true},\n\t\t\t{ id:3, pId:0, name:\"随意勾选 3\", isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio halfCheck 演示</h1>\n<h6>[ 文件路径: excheck/radio_halfCheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、演示说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>这个演示式实现了 异步加载模式 下简单的勾选操作</li>\n\t\t\t\t<li class=\"highlight_red\">1)、加载子节点后，父节点的 halfCheck 立刻失效</li>\n\t\t\t\t<li class=\"highlight_red\">2)、勾选父节点，不会影响子节点的勾选状态</li>\n\t\t\t\t<li class=\"highlight_red\">3)、勾选父节点，不会让其子节点的 halfCheck 属性失效</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>实现半勾选功能，不需要配置任何参数。但半勾选功能属于辅助功能，无法单独使用，因此也需要根据自己的需求配置特定参数。</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、请在节点初始化之前，设置 treeNode.halfCheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>2)、其他请参考 ‘Radio 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/excheck/radio_nocheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - no radio</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意勾选 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意勾选 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"无 radio 1-1-1\", nocheck:true},\n\t\t\t{ id:112, pId:11, name:\"随意勾选 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"无 radio 1-2\", nocheck:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"无 radio 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"无 radio 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"随意勾选 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"随意勾选 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"随意勾选 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"随意勾选 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"随意勾选 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"随意勾选 2-3\"}\n\t\t];\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio nocheck 演示</h1>\n<h6>[ 文件路径: excheck/radio_nocheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>这个 Demo 只简单演示 nocheck 的使用方法，详细配置信息请参考 ‘Radio 勾选操作’</li>\n\t\t\t\t<li class=\"highlight_red\">setting.check.nocheckInherit 可以设置子节点自动继承父节点的 nocheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、如果某节点不显示 radio，请设置 treeNode.nocheck 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li>2)、其他请参考 ‘Radio 勾选操作’</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/async_edit.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - async & edit</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter\n\t\t\t},\n\t\t\tview: {expandSpeed:\"\",\n\t\t\t\taddHoverDom: addHoverDom,\n\t\t\t\tremoveHoverDom: removeHoverDom,\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeRemove: beforeRemove,\n\t\t\t\tbeforeRename: beforeRename\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\t\tfunction beforeRemove(treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.selectNode(treeNode);\n\t\t\treturn confirm(\"确认删除 节点 -- \" + treeNode.name + \" 吗？\");\n\t\t}\t\t\n\t\tfunction beforeRename(treeId, treeNode, newName) {\n\t\t\tif (newName.length == 0) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\t\tzTree.cancelEditName();\n\t\t\t\t\talert(\"节点名称不能为空.\");\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tvar newCount = 1;\n\t\tfunction addHoverDom(treeId, treeNode) {\n\t\t\tvar sObj = $(\"#\" + treeNode.tId + \"_span\");\n\t\t\tif (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n\t\t\tvar addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n\t\t\t\t+ \"' title='add node' onfocus='this.blur();'></span>\";\n\t\t\tsObj.after(addStr);\n\t\t\tvar btn = $(\"#addBtn_\"+treeNode.tId);\n\t\t\tif (btn) btn.bind(\"click\", function(){\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tzTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t};\n\t\tfunction removeHoverDom(treeId, treeNode) {\n\t\t\t$(\"#addBtn_\"+treeNode.tId).unbind().remove();\n\t\t};\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>异步加载 & 编辑功能 共存</h1>\n<h6>[ 文件路径: exedit/async_edit.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、异步加载 & 编辑功能 共存说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1)、此 Demo 是基于 \"高级 增 / 删 / 改 节点\" 修改的，并且开放了拖拽功能，可与其进行对比</li>\n\t\t\t\t<li>2)、只需要同时开启编辑模式和异步加载模式即可实现共存</li>\n\t\t\t\t<li class=\"highlight_red\">3)、zTree 完善了异步加载模式下的编辑功能，对于未加载子节点的父节点，增加子节点时，会首先进行异步加载。</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1)、使用 编辑功能，请参考 \"拖拽节点基本控制\" 和 \"基本 增 / 删 / 改 节点\" Demo 中关于 setting 的配置要求</li>\n\t\t\t\t<li class=\"highlight_red\">2)、使用 异步加载功能，请参考 \"异步加载 节点数据\" Demo 中关于 setting 的配置要求</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>两种模式共存，对数据无特殊要求，请分别参考 \"异步加载 节点数据\" & \"拖拽 节点 基本控制\" & \"基本 增 / 删 / 改 节点\" 中的相关说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/drag.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - drag & drop</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeDrop: beforeDrop\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意拖拽 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意拖拽 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"随意拖拽 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"随意拖拽 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"随意拖拽 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"随意拖拽 1-2-3\"},\n\t\t\t{ id:13, pId:1, name:\"禁止拖拽 1-3\", open:true, drag:false},\n\t\t\t{ id:131, pId:13, name:\"禁止拖拽 1-3-1\", drag:false},\n\t\t\t{ id:132, pId:13, name:\"禁止拖拽 1-3-2\", drag:false},\n\t\t\t{ id:133, pId:13, name:\"随意拖拽 1-3-3\"},\n\t\t\t{ id:2, pId:0, name:\"随意拖拽 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"随意拖拽 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"禁止拖拽到我身上 2-2\", open:true, drop:false},\n\t\t\t{ id:221, pId:22, name:\"随意拖拽 2-2-1\"},\n\t\t\t{ id:222, pId:22, name:\"随意拖拽 2-2-2\"},\n\t\t\t{ id:223, pId:22, name:\"随意拖拽 2-2-3\"},\n\t\t\t{ id:23, pId:2, name:\"随意拖拽 2-3\"}\n\t\t];\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\tfor (var i=0,l=treeNodes.length; i<l; i++) {\n\t\t\t\tif (treeNodes[i].drag === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDrop(treeId, treeNodes, targetNode, moveType) {\n\t\t\treturn targetNode ? targetNode.drop !== false : true;\n\t\t}\n\t\t\n\t\tfunction setCheck() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tisCopy = $(\"#copy\").attr(\"checked\"),\n\t\t\tisMove = $(\"#move\").attr(\"checked\"),\n\t\t\tprev = $(\"#prev\").attr(\"checked\"),\n\t\t\tinner = $(\"#inner\").attr(\"checked\"),\n\t\t\tnext = $(\"#next\").attr(\"checked\");\n\t\t\tzTree.setting.edit.drag.isCopy = isCopy;\n\t\t\tzTree.setting.edit.drag.isMove = isMove;\n\t\t\tshowCode(1, ['setting.edit.drag.isCopy = ' + isCopy, 'setting.edit.drag.isMove = ' + isMove]);\n\n\t\t\tzTree.setting.edit.drag.prev = prev;\n\t\t\tzTree.setting.edit.drag.inner = inner;\n\t\t\tzTree.setting.edit.drag.next = next;\n\t\t\tshowCode(2, ['setting.edit.drag.prev = ' + prev, 'setting.edit.drag.inner = ' + inner, 'setting.edit.drag.next = ' + next]);\n\t\t}\n\t\tfunction showCode(id, str) {\n\t\t\tvar code = $(\"#code\" + id);\n\t\t\tcode.empty();\n\t\t\tfor (var i=0, l=str.length; i<l; i++) {\n\t\t\t\tcode.append(\"<li>\"+str[i]+\"</li>\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\n\t\t\t$(\"#copy\").bind(\"change\", setCheck);\n\t\t\t$(\"#move\").bind(\"change\", setCheck);\n\t\t\t$(\"#prev\").bind(\"change\", setCheck);\n\t\t\t$(\"#inner\").bind(\"change\", setCheck);\n\t\t\t$(\"#next\").bind(\"change\", setCheck);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>拖拽节点基本控制</h1>\n<h6>[ 文件路径: exedit/drag.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 仅从功能上演示实现拖拽的基本方法和配置参数</li>\n\t\t\t\t<li class=\"highlight_red\">1)、使用 拖拽功能，必须设置 setting.edit 中的各个属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">2)、使用 拖拽功能的事件回调函数，必须设置 setting.callback.beforeDrag / onDrag / beforeDrop / onDrop 等属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li><p>基本拖拽设置：<br/>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"copy\" class=\"checkbox first\" checked /><span>允许复制</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"move\" class=\"checkbox \" checked /><span>允许移动</span><br/>\n\t\t\t\t\t\t<ul id=\"code1\" class=\"log\" style=\"height:42px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t<li><p>拖拽相对位置设置：<br/>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"prev\" class=\"checkbox first\" checked /><span>prev</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"inner\" class=\"checkbox \" checked /><span>inner</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"next\" class=\"checkbox \" checked /><span>next</span><br/>\n\t\t\t\t\t\t<ul id=\"code2\" class=\"log\" style=\"height:65px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/drag_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - copyNode / moveNode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeClick: beforeClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"叶子节点 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点 3-3\"}\n\t\t];\n\n\t\tfunction fontCss(treeNode) {\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\t\t\taObj.removeClass(\"copy\").removeClass(\"cut\");\n\t\t\tif (treeNode === curSrcNode) {\n\t\t\t\tif (curType == \"copy\") {\n\t\t\t\t\taObj.addClass(curType);\n\t\t\t\t} else {\n\t\t\t\t\taObj.addClass(curType);\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\treturn !treeNode.isCur;\n\t\t}\n\n\t\tvar curSrcNode, curType;\n\t\tfunction setCurSrcNode(treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (curSrcNode) {\n\t\t\t\tdelete curSrcNode.isCur;\n\t\t\t\tvar tmpNode = curSrcNode;\n\t\t\t\tcurSrcNode = null;\n\t\t\t\tfontCss(tmpNode);\n\t\t\t}\n\t\t\tcurSrcNode = treeNode;\n\t\t\tif (!treeNode) return;\n\n\t\t\tcurSrcNode.isCur = true;\t\t\t\n\t\t\tzTree.cancelSelectedNode();\n\t\t\tfontCss(curSrcNode);\n\t\t}\n\t\tfunction copy(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurType = \"copy\";\n\t\t\tsetCurSrcNode(nodes[0]);\n\t\t}\n\t\tfunction cut(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurType = \"cut\";\n\t\t\tsetCurSrcNode(nodes[0]);\n\t\t}\n\t\tfunction paste(e) {\n\t\t\tif (!curSrcNode) {\n\t\t\t\talert(\"请先选择一个节点进行 复制 / 剪切\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttargetNode = nodes.length>0? nodes[0]:null;\n\t\t\tif (curSrcNode === targetNode) {\n\t\t\t\talert(\"不能移动，源节点 与 目标节点相同\");\n\t\t\t\treturn;\n\t\t\t} else if (curType === \"cut\" && ((!!targetNode && curSrcNode.parentTId === targetNode.tId) || (!targetNode && !curSrcNode.parentTId))) {\n\t\t\t\talert(\"不能移动，源节点 已经存在于 目标节点中\");\n\t\t\t\treturn;\n\t\t\t} else if (curType === \"copy\") {\n\t\t\t\ttargetNode = zTree.copyNode(targetNode, curSrcNode, \"inner\");\n\t\t\t} else if (curType === \"cut\") {\n\t\t\t\ttargetNode = zTree.moveNode(targetNode, curSrcNode, \"inner\");\n\t\t\t\tif (!targetNode) {\n\t\t\t\t\talert(\"剪切失败，源节点是目标节点的父节点\");\n\t\t\t\t}\n\t\t\t\ttargetNode = curSrcNode;\n\t\t\t}\n\t\t\tsetCurSrcNode();\n\t\t\tdelete targetNode.isCur;\n\t\t\tzTree.selectNode(targetNode);\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#copy\").bind(\"click\", copy);\n\t\t\t$(\"#cut\").bind(\"click\", cut);\n\t\t\t$(\"#paste\").bind(\"click\", paste);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li a.copy{padding-top:0; background-color:#316AC5; color:white; border:1px #316AC5 solid;}\n.ztree li a.cut{padding-top:0; background-color:silver; color:#111; border:1px #316AC5 dotted;}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>用 zTree 方法 移动 / 复制节点</h1>\n<h6>[ 文件路径: exedit/drag_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、copyNode / moveNode 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 copyNode / moveNode 方法也可以实现 复制 / 移动 节点的目的，这里简单演示使用方法</li>\n\t\t\t\t<li><p>对节点进行 复制 / 剪切，试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"copy\" href=\"#\" title=\"复制\" onclick=\"return false;\">复制</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"cut\" href=\"#\" title=\"剪切\" onclick=\"return false;\">剪切</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"paste\" href=\"#\" title=\"粘贴\" onclick=\"return false;\">粘贴</a> ]</p>\n\t\t\t\t<li class=\"highlight_red\">使用 zTreeObj.copyNode / moveNode 方法，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"拖拽 节点 基本控制\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"拖拽 节点 基本控制\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/drag_super.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeDrag / onDrag / beforeDrop / onDrop</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tdrag: {\n\t\t\t\t\tautoExpandTrigger: true,\n\t\t\t\t\tprev: dropPrev,\n\t\t\t\t\tinner: dropInner,\n\t\t\t\t\tnext: dropNext\n\t\t\t\t},\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeDrop: beforeDrop,\n\t\t\t\tbeforeDragOpen: beforeDragOpen,\n\t\t\t\tonDrag: onDrag,\n\t\t\t\tonDrop: onDrop,\n\t\t\t\tonExpand: onExpand\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"随意拖拽 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"随意拖拽 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"随意拖拽 1-2\"},\n\t\t\t{ id:121, pId:12, name:\"随意拖拽 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"随意拖拽 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"随意拖拽 1-2-3\"},\n\t\t\t{ id:13, pId:1, name:\"禁止拖拽 1-3\", open:true, drag:false},\n\t\t\t{ id:131, pId:13, name:\"禁止拖拽 1-3-1\", drag:false},\n\t\t\t{ id:132, pId:13, name:\"禁止拖拽 1-3-2\", drag:false},\n\t\t\t{ id:132, pId:13, name:\"禁止拖拽 1-3-3\", drag:false},\n\t\t\t{ id:2, pId:0, name:\"禁止子节点移走 2\", open:true, childOuter:false},\n\t\t\t{ id:21, pId:2, name:\"我不想成为父节点 2-1\", dropInner:false},\n\t\t\t{ id:22, pId:2, name:\"我不要成为根节点 2-2\", dropRoot:false},\n\t\t\t{ id:23, pId:2, name:\"拖拽试试看 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"禁止子节点排序/增加 3\", open:true, childOrder:false, dropInner:false},\n\t\t\t{ id:31, pId:3, name:\"随意拖拽 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"随意拖拽 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"随意拖拽 3-3\"}\n\t\t];\n\n\t\tfunction dropPrev(treeId, nodes, targetNode) {\n\t\t\tvar pNode = targetNode.getParentNode();\n\t\t\tif (pNode && pNode.dropInner === false) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tfor (var i=0,l=curDragNodes.length; i<l; i++) {\n\t\t\t\t\tvar curPNode = curDragNodes[i].getParentNode();\n\t\t\t\t\tif (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction dropInner(treeId, nodes, targetNode) {\n\t\t\tif (targetNode && targetNode.dropInner === false) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tfor (var i=0,l=curDragNodes.length; i<l; i++) {\n\t\t\t\t\tif (!targetNode && curDragNodes[i].dropRoot === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (curDragNodes[i].parentTId && curDragNodes[i].getParentNode() !== targetNode && curDragNodes[i].getParentNode().childOuter === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction dropNext(treeId, nodes, targetNode) {\n\t\t\tvar pNode = targetNode.getParentNode();\n\t\t\tif (pNode && pNode.dropInner === false) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tfor (var i=0,l=curDragNodes.length; i<l; i++) {\n\t\t\t\t\tvar curPNode = curDragNodes[i].getParentNode();\n\t\t\t\t\tif (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tvar log, className = \"dark\", curDragNodes, autoExpandNode;\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeDrag ]&nbsp;&nbsp;&nbsp;&nbsp; drag: \" + treeNodes.length + \" nodes.\" );\n\t\t\tfor (var i=0,l=treeNodes.length; i<l; i++) {\n\t\t\t\tif (treeNodes[i].drag === false) {\n\t\t\t\t\tcurDragNodes = null;\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (treeNodes[i].parentTId && treeNodes[i].getParentNode().childDrag === false) {\n\t\t\t\t\tcurDragNodes = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurDragNodes = treeNodes;\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDragOpen(treeId, treeNode) {\n\t\t\tautoExpandNode = treeNode;\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDrop(treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeDrop ]&nbsp;&nbsp;&nbsp;&nbsp; moveType:\" + moveType);\n\t\t\tshowLog(\"target: \" + (targetNode ? targetNode.name : \"root\") + \"  -- is \"+ (isCopy==null? \"cancel\" : isCopy ? \"copy\" : \"move\"));\n\t\t\treturn true;\n\t\t}\n\t\tfunction onDrag(event, treeId, treeNodes) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" onDrag ]&nbsp;&nbsp;&nbsp;&nbsp; drag: \" + treeNodes.length + \" nodes.\" );\n\t\t}\n\t\tfunction onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" onDrop ]&nbsp;&nbsp;&nbsp;&nbsp; moveType:\" + moveType);\n\t\t\tshowLog(\"target: \" + (targetNode ? targetNode.name : \"root\") + \"  -- is \"+ (isCopy==null? \"cancel\" : isCopy ? \"copy\" : \"move\"))\n\t\t}\n\t\tfunction onExpand(event, treeId, treeNode) {\n\t\t\tif (treeNode === autoExpandNode) {\n\t\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\t\tshowLog(\"[ \"+getTime()+\" onExpand ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name);\n\t\t\t}\n\t\t}\n\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction setTrigger() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.setting.edit.drag.autoExpandTrigger = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#callbackTrigger\").bind(\"change\", {}, setTrigger);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>拖拽节点高级控制</h1>\n<h6>[ 文件路径: exedit/drag_super.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、beforeDrag / onDrag<br/>&nbsp;&nbsp;beforeDrop / onDrop 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 演示合理利用配置参数实现更加灵活、更加合理的拖拽规则，操作时可以对比\"基本控制\"的例子</li>\n\t\t\t\t<li>此 Demo 默认 允许复制 / 移动</li>\n\t\t\t\t<li class=\"highlight_red\">此 Demo 中拖拽相对位置设置为 function，可以根据节点动态设定，从而可以放弃使用 beforeDrop 回调函数，拖拽时的效果会更好</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">在对这些灵活的配置熟悉以后，相信你能够做出更加合理的拖拽规则！</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> 拖拽节点时自动展开父节点是否触发 callback<br/>\n\t\t\t\t\tdrag / drop log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"拖拽 节点 基本控制\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"拖拽 节点 基本控制\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/edit.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - edit</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点 3\", open:true},\n\t\t\t{ id:31, pId:3, name:\"叶子节点 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点 3-3\"}\n\t\t];\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tfunction setEdit() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tremove = $(\"#remove\").attr(\"checked\"),\n\t\t\trename = $(\"#rename\").attr(\"checked\"),\n\t\t\tremoveTitle = $.trim($(\"#removeTitle\").get(0).value),\n\t\t\trenameTitle = $.trim($(\"#renameTitle\").get(0).value);\n\t\t\tzTree.setting.edit.showRemoveBtn = remove;\n\t\t\tzTree.setting.edit.showRenameBtn = rename;\n\t\t\tzTree.setting.edit.removeTitle = removeTitle;\n\t\t\tzTree.setting.edit.renameTitle = renameTitle;\n\t\t\tshowCode(['setting.edit.showRemoveBtn = ' + remove, 'setting.edit.showRenameBtn = ' + rename,\n\t\t\t\t'setting.edit.removeTitle = \"' + removeTitle +'\"', 'setting.edit.renameTitle = \"' + renameTitle + '\"']);\n\t\t}\n\t\tfunction showCode(str) {\n\t\t\tvar code = $(\"#code\");\n\t\t\tcode.empty();\n\t\t\tfor (var i=0, l=str.length; i<l; i++) {\n\t\t\t\tcode.append(\"<li>\"+str[i]+\"</li>\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetEdit();\n\t\t\t$(\"#remove\").bind(\"change\", setEdit);\n\t\t\t$(\"#rename\").bind(\"change\", setEdit);\n\t\t\t$(\"#removeTitle\").bind(\"propertychange\", setEdit)\n\t\t\t.bind(\"input\", setEdit);\n\t\t\t$(\"#renameTitle\").bind(\"propertychange\", setEdit)\n\t\t\t.bind(\"input\", setEdit);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>基本 增 / 删 / 改 节点</h1>\n<h6>[ 文件路径: exedit/edit.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 仅从功能上演示编辑节点的基本方法和配置参数</li>\n\t\t\t\t<li class=\"highlight_red\">1)、使用 编辑功能，必须设置 setting.edit 中的各个属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">2)、使用 编辑功能的事件回调函数，必须设置 setting.callback.beforeRemove / onRemove / beforeRename / onRename 等属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t<li class=\"highlight_red\">3)、zTree 不提供默认的增加按钮，如需实现请利用自定义控件的方法 addHoverDom / removeHoverDom ，详细请参见 API 文档中的相关内容；另外也可以参考 \"高级 增 / 删 / 改 节点\" 的 Demo</li>\n\t\t\t\t<li><p>基本编辑按钮设置：<br/>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"remove\" class=\"checkbox first\" checked /><span>显示删除按钮</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"rename\" class=\"checkbox \" checked /><span>显示编辑按钮</span><br/>\n\t\t\t\t\t\tremove 按钮的 title: <input type=\"text\" id=\"removeTitle\" value=\"remove\" /><br/>\n\t\t\t\t\t\trename 按钮的 title: <input type=\"text\" id=\"renameTitle\" value=\"rename\" />\n\t\t\t\t\t\t<ul id=\"code\" class=\"log\" style=\"height:85px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/edit_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - addNodes / editName / removeNode / removeChildNodes</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkeep: {\n\t\t\t\t\tparent:true,\n\t\t\t\t\tleaf:true\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeRemove: beforeRemove,\n\t\t\t\tbeforeRename: beforeRename,\n\t\t\t\tonRemove: onRemove\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点 3\", open:true},\n\t\t\t{ id:31, pId:3, name:\"叶子节点 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点 3-3\"}\n\t\t];\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\t\tfunction beforeRemove(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t\treturn confirm(\"确认删除 节点 -- \" + treeNode.name + \" 吗？\");\n\t\t}\n\t\tfunction onRemove(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t}\n\t\tfunction beforeRename(treeId, treeNode, newName) {\n\t\t\tif (newName.length == 0) {\n\t\t\t\talert(\"节点名称不能为空.\");\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tsetTimeout(function(){zTree.editName(treeNode)}, 10);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tvar newCount = 1;\n\t\tfunction add(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tisParent = e.data.isParent,\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (treeNode) {\n\t\t\t\ttreeNode = zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, isParent:isParent, name:\"new node\" + (newCount++)});\n\t\t\t} else {\n\t\t\t\ttreeNode = zTree.addNodes(null, {id:(100 + newCount), pId:0, isParent:isParent, name:\"new node\" + (newCount++)});\n\t\t\t}\n\t\t\tif (treeNode) {\n\t\t\t\tzTree.editName(treeNode[0]);\n\t\t\t} else {\n\t\t\t\talert(\"叶子节点被锁定，无法增加子节点\");\n\t\t\t}\n\t\t};\n\t\tfunction edit() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.editName(treeNode);\n\t\t};\n\t\tfunction remove(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请先选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\tzTree.removeNode(treeNode, callbackFlag);\n\t\t};\n\t\tfunction clearChildren(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (nodes.length == 0 || !nodes[0].isParent) {\n\t\t\t\talert(\"请先选择一个父节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.removeChildNodes(treeNode);\n\t\t};\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#addParent\").bind(\"click\", {isParent:true}, add);\n\t\t\t$(\"#addLeaf\").bind(\"click\", {isParent:false}, add);\n\t\t\t$(\"#edit\").bind(\"click\", edit);\n\t\t\t$(\"#remove\").bind(\"click\", remove);\n\t\t\t$(\"#clearChildren\").bind(\"click\", clearChildren);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>用 zTree 方法 增 / 删 / 改 节点</h1>\n<h6>[ 文件路径: exedit/edit_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、addNodes / editName / removeNode / removeChildNodes 方法操作说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 addNodes / editName / removeNode / removeChildNodes 方法也可以实现 增 / 删 / 改 节点的目的，这里简单演示使用方法</li>\n\t\t\t\t<li>cancelEditName 方法仅仅是在节点进入名称编辑状态时有效，请在必要时使用，Demo 不进行此方法的演示</li>\n\t\t\t\t<li class=\"highlight_red\">利用 setting.data.keep.parent / leaf 属性 实现了父节点、叶子节点的状态锁定</li>\n\t\t\t\t<li><p>对节点进行 增 / 删 / 改，试试看：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> removeNode 方法是否触发 callback<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addParent\" href=\"#\" title=\"增加父节点\" onclick=\"return false;\">增加父节点</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addLeaf\" href=\"#\" title=\"增加叶子节点\" onclick=\"return false;\">增加叶子节点</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"edit\" href=\"#\" title=\"编辑名称\" onclick=\"return false;\">编辑名称</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"remove\" href=\"#\" title=\"删除节点\" onclick=\"return false;\">删除节点</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"clearChildren\" href=\"#\" title=\"清空子节点\" onclick=\"return false;\">清空子节点</a> ]<br/>\n\t\t\t\t\tremove log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">使用 zTreeObj.addNodes / cancelEditName / editName / removeNode / removeChildNodes 方法，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"基本 增 / 删 / 改 节点\"</li>\n\t\t\t\t<li class=\"highlight_red\">保持 父 / 叶子 节点状态，需要设置 setting.data.keep.parent / leaf 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"基本 增 / 删 / 改 节点\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/edit_super.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeEditName / beforeRemove / onRemove / beforeRename / onRename</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\taddHoverDom: addHoverDom,\n\t\t\t\tremoveHoverDom: removeHoverDom,\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\teditNameSelectAll: true,\n\t\t\t\tshowRemoveBtn: showRemoveBtn,\n\t\t\t\tshowRenameBtn: showRenameBtn\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeEditName: beforeEditName,\n\t\t\t\tbeforeRemove: beforeRemove,\n\t\t\t\tbeforeRename: beforeRename,\n\t\t\t\tonRemove: onRemove,\n\t\t\t\tonRename: onRename\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点 3\", open:true},\n\t\t\t{ id:31, pId:3, name:\"叶子节点 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点 3-3\"}\n\t\t];\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\t\tfunction beforeEditName(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeEditName ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.selectNode(treeNode);\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (confirm(\"进入节点 -- \" + treeNode.name + \" 的编辑状态吗？\")) {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tzTree.editName(treeNode);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t\treturn false;\n\t\t}\n\t\tfunction beforeRemove(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.selectNode(treeNode);\n\t\t\treturn confirm(\"确认删除 节点 -- \" + treeNode.name + \" 吗？\");\n\t\t}\n\t\tfunction onRemove(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t}\n\t\tfunction beforeRename(treeId, treeNode, newName, isCancel) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog((isCancel ? \"<span style='color:red'>\":\"\") + \"[ \"+getTime()+\" beforeRename ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name + (isCancel ? \"</span>\":\"\"));\n\t\t\tif (newName.length == 0) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\t\tzTree.cancelEditName();\n\t\t\t\t\talert(\"节点名称不能为空.\");\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction onRename(e, treeId, treeNode, isCancel) {\n\t\t\tshowLog((isCancel ? \"<span style='color:red'>\":\"\") + \"[ \"+getTime()+\" onRename ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name + (isCancel ? \"</span>\":\"\"));\n\t\t}\n\t\tfunction showRemoveBtn(treeId, treeNode) {\n\t\t\treturn !treeNode.isFirstNode;\n\t\t}\n\t\tfunction showRenameBtn(treeId, treeNode) {\n\t\t\treturn !treeNode.isLastNode;\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tvar newCount = 1;\n\t\tfunction addHoverDom(treeId, treeNode) {\n\t\t\tvar sObj = $(\"#\" + treeNode.tId + \"_span\");\n\t\t\tif (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n\t\t\tvar addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n\t\t\t\t+ \"' title='add node' onfocus='this.blur();'></span>\";\n\t\t\tsObj.after(addStr);\n\t\t\tvar btn = $(\"#addBtn_\"+treeNode.tId);\n\t\t\tif (btn) btn.bind(\"click\", function(){\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tzTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t};\n\t\tfunction removeHoverDom(treeId, treeNode) {\n\t\t\t$(\"#addBtn_\"+treeNode.tId).unbind().remove();\n\t\t};\n\t\tfunction selectAll() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.setting.edit.editNameSelectAll =  $(\"#selectAll\").attr(\"checked\");\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#selectAll\").bind(\"click\", selectAll);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>高级 增 / 删 / 改 节点</h1>\n<h6>[ 文件路径: exedit/edit_super.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、beforeEditName<br/>&nbsp;&nbsp;beforeRemove / onRemove<br/>&nbsp;&nbsp;beforeRename / onRename 事件回调函数控制</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 演示合理利用自定义控件、事件回调函数配合以增强用户体验，操作时可以对比\"基本 增 / 删 / 改 节点\"的 Demo</li>\n\t\t\t\t<li>此 Demo 实现增加节点按钮</li>\n\t\t\t\t<li>此 Demo 实现删除节点时进行确认</li>\n\t\t\t\t<li>此 Demo 利用 showRenameBtn 对 isLastNode = true 的节点不显示编辑按钮 </li>\n\t\t\t\t<li>此 Demo 利用 showRemoveBtn 对 isFirstNode = true 的节点不显示删除按钮 </li>\n\t\t\t\t<li class=\"highlight_red\">可以利用 beforeEditName 触发自定义的编辑操作</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">在对这些灵活的配置熟悉以后，相信你能够做出更加合理的编辑界面！</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"selectAll\" checked /> 编辑名称时是否全选 text<br/>\n\t\t\t\t\tremove / rename log:&nbsp;&nbsp;<span style=\"color:red\">红色</span> 表示取消编辑操作 (v3.5.13+)<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"基本 增 / 删 / 改 节点\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>同 \"基本 增 / 删 / 改 节点\"</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exedit/multiTree.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - multiTree</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeDrop: beforeDrop\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点 3\", open:true},\n\t\t\t{ id:31, pId:3, name:\"叶子节点 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点 3-3\"}\n\t\t];\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\tfor (var i=0,l=treeNodes.length; i<l; i++) {\n\t\t\t\tif (treeNodes[i].drag === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDrop(treeId, treeNodes, targetNode, moveType) {\n\t\t\treturn targetNode ? targetNode.drop !== false : true;\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$.fn.zTree.init($(\"#treeDemo2\"), setting);\n\t\t\t\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>多棵树之间 的 数据交互</h1>\n<h6>[ 文件路径: exedit/multiTree.html ]</h6>\n<div class=\"content_wrap\">\n\t<div>\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree 对于多棵树之间拖拽的操作非常简单，只需要创建两棵可拖拽的树即可，同时可根据 各种事件回调函数 以及 zTree 的方法配合实现较复杂的操作规则，这里只是基本演示。</li>\n\t\t\t\t<li class=\"highlight_red\">关于配置信息请参考拖拽、编辑等 Demo 的详细说明</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul id=\"treeDemo2\" class=\"ztree\"></ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exhide/checkbox.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Hide With Checkbox Mode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"title\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1\", title:\"\", checked:true, open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点11\", title:\"\", checked:true},\n\t\t\t{ id:111, pId:11, name:\"叶子节点111\", title:\"\", checked:true, isHidden:true},\n\t\t\t{ id:112, pId:11, name:\"叶子节点112\", title:\"\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点113\", title:\"\"},\n\t\t\t{ id:12, pId:1, name:\"父节点12\", title:\"\", isHidden:true},\n\t\t\t{ id:121, pId:12, name:\"叶子节点121\", title:\"\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点122\", title:\"\", isHidden:true},\n\t\t\t{ id:123, pId:12, name:\"叶子节点123\", title:\"\"},\n\t\t\t{ id:2, pId:0, name:\"父节点2\", title:\"\"},\n\t\t\t{ id:21, pId:2, name:\"父节点21\", title:\"\", isHidden:true},\n\t\t\t{ id:211, pId:21, name:\"叶子节点211\", title:\"\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点212\", title:\"\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点213\", title:\"\"},\n\t\t\t{ id:22, pId:2, name:\"父节点22\", title:\"\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点221\", title:\"\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点222\", title:\"\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点223\", title:\"\"}\n\t\t];\n\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tcount();\n\t\t}\n\n\t\tfunction setTitle(node) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tvar nodes = node ? [node]:zTree.transformToArray(zTree.getNodes());\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tn.title = \"[\" + n.id + \"] isFirstNode = \" + n.isFirstNode + \", isLastNode = \" + n.isLastNode;\n\t\t\t\tzTree.updateNode(n);\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tfunction isForceHidden(node) {\n\t\t\t\tif (!node.parentTId) return false;\n\t\t\t\tvar p = node.getParentNode();\n\t\t\t\treturn !!p.isHidden ? true : isForceHidden(p);\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tcheckCount = zTree.getCheckedNodes(true).length,\n\t\t\tnocheckCount = zTree.getCheckedNodes(false).length,\n\t\t\thiddenNodes = zTree.getNodesByParam(\"isHidden\", true),\n\t\t\thiddenCount = hiddenNodes.length;\n\n\t\t\tfor (var i=0, j=hiddenNodes.length; i<j; i++) {\n\t\t\t\tvar n = hiddenNodes[i];\n\t\t\t\tif (isForceHidden(n)) {\n\t\t\t\t\thiddenCount -= 1;\n\t\t\t\t} else if (n.isParent) {\n\t\t\t\t\thiddenCount += zTree.transformToArray(n.children).length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$(\"#isHiddenCount\").text(hiddenNodes.length);\n\t\t\t$(\"#hiddenCount\").text(hiddenCount);\n\t\t\t$(\"#checkCount\").text(checkCount);\n\t\t\t$(\"#nocheckCount\").text(nocheckCount);\n\t\t}\n\t\tfunction showNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getNodesByParam(\"isHidden\", true);\n\t\t\tzTree.showNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\t\tfunction hideNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请至少选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.hideNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#hideNodesBtn\").bind(\"click\", {type:\"rename\"}, hideNodes);\n\t\t\t$(\"#showNodesBtn\").bind(\"click\", {type:\"icon\"}, showNodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>配合 checkbox 的隐藏</h1>\n<h6>[ 文件路径: exhide/checkbox.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>使用隐藏功能，无需设置任何参数</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">初始化时，设置 treeNode.isHidden = true; 可以让节点隐藏</li>\n\t\t\t\t<li><p>隐藏、显示节点，看看树的变化：<br/><br/>\n\t\t\t\t\t试试看：[ <a id=\"hideNodesBtn\" href=\"#\" onclick=\"return false;\">隐藏选中的节点</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"showNodesBtn\" href=\"#\" onclick=\"return false;\">显示全部被隐藏的节点</a> ]<br/><br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:125px;\">\n\t\t\t\t\t\t<li>isHidden = true 的节点共 <span id=\"isHiddenCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>被隐藏的节点共 <span id=\"hiddenCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>当前被勾选的节点共 <span id=\"checkCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>当前未被勾选的节点共 <span id=\"nocheckCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>隐藏节点后，可以看看仍显示节点的 isFirstNode 和 isLastNode 属性</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>隐藏节点操作，会影响 isFirstNode 和 isLastNode 属性，但是对于 getPreNode() 和 getNextNode() 方法无影响</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exhide/common.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Hide Ordinary Node</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"title\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1\", title:\"\", open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点11\", title:\"\"},\n\t\t\t{ id:111, pId:11, name:\"叶子节点111\", title:\"\", isHidden:true},\n\t\t\t{ id:112, pId:11, name:\"叶子节点112\", title:\"\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点113\", title:\"\"},\n\t\t\t{ id:12, pId:1, name:\"父节点12\", title:\"\", isHidden:true},\n\t\t\t{ id:121, pId:12, name:\"叶子节点121\", title:\"\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点122\", title:\"\", isHidden:true},\n\t\t\t{ id:123, pId:12, name:\"叶子节点123\", title:\"\"},\n\t\t\t{ id:2, pId:0, name:\"父节点2\", title:\"\"},\n\t\t\t{ id:21, pId:2, name:\"父节点21\", title:\"\", isHidden:true},\n\t\t\t{ id:211, pId:21, name:\"叶子节点211\", title:\"\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点212\", title:\"\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点213\", title:\"\"},\n\t\t\t{ id:22, pId:2, name:\"父节点22\", title:\"\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点221\", title:\"\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点222\", title:\"\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点223\", title:\"\"}\n\t\t];\n\t\tfunction setTitle(node) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tvar nodes = node ? [node]:zTree.transformToArray(zTree.getNodes());\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tn.title = \"[\" + n.id + \"] isFirstNode = \" + n.isFirstNode + \", isLastNode = \" + n.isLastNode;\n\t\t\t\tzTree.updateNode(n);\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\thiddenCount = zTree.getNodesByParam(\"isHidden\", true).length;\n\t\t\t$(\"#hiddenCount\").text(hiddenCount);\n\t\t}\n\t\tfunction showNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getNodesByParam(\"isHidden\", true);\n\t\t\tzTree.showNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\t\tfunction hideNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请至少选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.hideNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#hideNodesBtn\").bind(\"click\", {type:\"rename\"}, hideNodes);\n\t\t\t$(\"#showNodesBtn\").bind(\"click\", {type:\"icon\"}, showNodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>隐藏普通节点</h1>\n<h6>[ 文件路径: exhide/common.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>使用此功能，无需设置任何参数</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">初始化时，设置 treeNode.isHidden = true; 可以让节点隐藏</li>\n\t\t\t\t<li><p>隐藏、显示节点，看看树的变化：<br/><br/>\n\t\t\t\t\t试试看：[ <a id=\"hideNodesBtn\" href=\"#\" onclick=\"return false;\">隐藏选中的节点</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"showNodesBtn\" href=\"#\" onclick=\"return false;\">显示全部被隐藏的节点</a> ]<br/><br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:65px;\">\n\t\t\t\t\t\t<li>isHidden = true 的节点共 <span id=\"hiddenCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>隐藏节点后，可以看看仍显示节点的 isFirstNode 和 isLastNode 属性</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>隐藏节点操作，会影响 isFirstNode 和 isLastNode 属性，但是对于 getPreNode() 和 getNextNode() 方法无影响</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/exhide/radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Hide With Radio Mode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"title\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点1\", title:\"\", checked:true, open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点11\", title:\"\", checked:true},\n\t\t\t{ id:111, pId:11, name:\"叶子节点111\", title:\"\", checked:true, isHidden:true},\n\t\t\t{ id:112, pId:11, name:\"叶子节点112\", title:\"\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点113\", title:\"\"},\n\t\t\t{ id:12, pId:1, name:\"父节点12\", title:\"\", isHidden:true},\n\t\t\t{ id:121, pId:12, name:\"叶子节点121\", title:\"\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点122\", title:\"\", isHidden:true},\n\t\t\t{ id:123, pId:12, name:\"叶子节点123\", title:\"\"},\n\t\t\t{ id:2, pId:0, name:\"父节点2\", title:\"\"},\n\t\t\t{ id:21, pId:2, name:\"父节点21\", title:\"\", isHidden:true},\n\t\t\t{ id:211, pId:21, name:\"叶子节点211\", title:\"\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点212\", title:\"\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点213\", title:\"\"},\n\t\t\t{ id:22, pId:2, name:\"父节点22\", title:\"\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点221\", title:\"\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点222\", title:\"\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点223\", title:\"\"}\n\t\t];\n\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tcount();\n\t\t}\n\n\t\tfunction setTitle(node) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tvar nodes = node ? [node]:zTree.transformToArray(zTree.getNodes());\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tn.title = \"[\" + n.id + \"] isFirstNode = \" + n.isFirstNode + \", isLastNode = \" + n.isLastNode;\n\t\t\t\tzTree.updateNode(n);\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tfunction isForceHidden(node) {\n\t\t\t\tif (!node.parentTId) return false;\n\t\t\t\tvar p = node.getParentNode();\n\t\t\t\treturn !!p.isHidden ? true : isForceHidden(p);\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tcheckCount = zTree.getCheckedNodes(true).length,\n\t\t\tnocheckCount = zTree.getCheckedNodes(false).length,\n\t\t\thiddenNodes = zTree.getNodesByParam(\"isHidden\", true),\n\t\t\thiddenCount = hiddenNodes.length;\n\n\t\t\tfor (var i=0, j=hiddenNodes.length; i<j; i++) {\n\t\t\t\tvar n = hiddenNodes[i];\n\t\t\t\tif (isForceHidden(n)) {\n\t\t\t\t\thiddenCount -= 1;\n\t\t\t\t} else if (n.isParent) {\n\t\t\t\t\thiddenCount += zTree.transformToArray(n.children).length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$(\"#isHiddenCount\").text(hiddenNodes.length);\n\t\t\t$(\"#hiddenCount\").text(hiddenCount);\n\t\t\t$(\"#checkCount\").text(checkCount);\n\t\t\t$(\"#nocheckCount\").text(nocheckCount);\n\t\t}\n\t\tfunction showNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getNodesByParam(\"isHidden\", true);\n\t\t\tzTree.showNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\t\tfunction hideNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"请至少选择一个节点\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.hideNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#hideNodesBtn\").bind(\"click\", {type:\"rename\"}, hideNodes);\n\t\t\t$(\"#showNodesBtn\").bind(\"click\", {type:\"icon\"}, showNodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>配合 radio 的隐藏</h1>\n<h6>[ 文件路径: exhide/radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>使用隐藏功能，无需设置任何参数</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">初始化时，设置 treeNode.isHidden = true; 可以让节点隐藏</li>\n\t\t\t\t<li><p>隐藏、显示节点，看看树的变化：<br/><br/>\n\t\t\t\t\t试试看：[ <a id=\"hideNodesBtn\" href=\"#\" onclick=\"return false;\">隐藏选中的节点</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"showNodesBtn\" href=\"#\" onclick=\"return false;\">显示全部被隐藏的节点</a> ]<br/><br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:125px;\">\n\t\t\t\t\t\t<li>isHidden = true 的节点共 <span id=\"isHiddenCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>被隐藏的节点共 <span id=\"hiddenCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>当前被勾选的节点共 <span id=\"checkCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>当前未被勾选的节点共 <span id=\"nocheckCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>隐藏节点后，可以看看仍显示节点的 isFirstNode 和 isLastNode 属性</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、其他说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>隐藏节点操作，会影响 isFirstNode 和 isLastNode 属性，但是对于 getPreNode() 和 getNextNode() 方法无影响</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<HTML>\n<HEAD>\n  <TITLE> ZTREE DEMO </TITLE>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n  <link rel=\"stylesheet\" href=\"../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n  <style>\n    body {\n      background-color: white;\n      margin: 0;\n      padding: 0;\n      text-align: center;\n    }\n\n    div, p, table, th, td {\n      list-style: none;\n      margin: 0;\n      padding: 0;\n      color: #333;\n      font-size: 12px;\n      font-family: dotum, Verdana, Arial, Helvetica, AppleGothic, sans-serif;\n    }\n\n    #testIframe {\n      margin-left: 10px;\n    }\n  </style>\n  <script type=\"text/javascript\" src=\"../../js/jquery-1.4.4.min.js\"></script>\n  <script type=\"text/javascript\" src=\"../../js/jquery.ztree.core.js\"></script>\n  <SCRIPT type=\"text/javascript\">\n    <!--\n    var zTree;\n    var demoIframe;\n\n    var setting = {\n      view: {\n        dblClickExpand: false,\n        showLine: true,\n        selectedMulti: false\n      },\n      data: {\n        simpleData: {\n          enable: true,\n          idKey: \"id\",\n          pIdKey: \"pId\",\n          rootPId: \"\"\n        }\n      },\n      callback: {\n        beforeClick: function (treeId, treeNode) {\n          var zTree = $.fn.zTree.getZTreeObj(\"tree\");\n          if (treeNode.isParent) {\n            zTree.expandNode(treeNode);\n            return false;\n          } else {\n            demoIframe.attr(\"src\", treeNode.file + \".html\");\n            return true;\n          }\n        }\n      }\n    };\n\n    var zNodes = [\n      {id: 1, pId: 0, name: \"[core] 基本功能 演示\", open: true},\n      {id: 101, pId: 1, name: \"最简单的树 --  标准 JSON 数据\", file: \"core/standardData\"},\n      {id: 102, pId: 1, name: \"最简单的树 --  简单 JSON 数据\", file: \"core/simpleData\"},\n      {id: 103, pId: 1, name: \"不显示 连接线\", file: \"core/noline\"},\n      {id: 104, pId: 1, name: \"不显示 节点 图标\", file: \"core/noicon\"},\n      {id: 105, pId: 1, name: \"自定义图标 --  icon 属性\", file: \"core/custom_icon\"},\n      {id: 106, pId: 1, name: \"自定义图标 --  iconSkin 属性\", file: \"core/custom_iconSkin\"},\n      {id: 107, pId: 1, name: \"自定义字体\", file: \"core/custom_font\"},\n      {id: 115, pId: 1, name: \"超链接演示\", file: \"core/url\"},\n      {id: 108, pId: 1, name: \"异步加载 节点数据\", file: \"core/async\"},\n      {id: 109, pId: 1, name: \"用 zTree 方法 异步加载 节点数据\", file: \"core/async_fun\"},\n      {id: 110, pId: 1, name: \"用 zTree 方法 更新 节点数据\", file: \"core/update_fun\"},\n      {id: 111, pId: 1, name: \"单击 节点 控制\", file: \"core/click\"},\n      {id: 112, pId: 1, name: \"展开 / 折叠 父节点 控制\", file: \"core/expand\"},\n      {id: 113, pId: 1, name: \"根据 参数 查找 节点\", file: \"core/searchNodes\"},\n      {id: 114, pId: 1, name: \"其他 鼠标 事件监听\", file: \"core/otherMouse\"},\n\n      {id: 2, pId: 0, name: \"[excheck] 复/单选框功能 演示\", open: false},\n      {id: 201, pId: 2, name: \"Checkbox 勾选操作\", file: \"excheck/checkbox\"},\n      {id: 206, pId: 2, name: \"Checkbox nocheck 演示\", file: \"excheck/checkbox_nocheck\"},\n      {id: 207, pId: 2, name: \"Checkbox chkDisabled 演示\", file: \"excheck/checkbox_chkDisabled\"},\n      {id: 208, pId: 2, name: \"Checkbox halfCheck 演示\", file: \"excheck/checkbox_halfCheck\"},\n      {id: 202, pId: 2, name: \"Checkbox 勾选统计\", file: \"excheck/checkbox_count\"},\n      {id: 203, pId: 2, name: \"用 zTree 方法 勾选 Checkbox\", file: \"excheck/checkbox_fun\"},\n      {id: 204, pId: 2, name: \"Radio 勾选操作\", file: \"excheck/radio\"},\n      {id: 209, pId: 2, name: \"Radio nocheck 演示\", file: \"excheck/radio_nocheck\"},\n      {id: 210, pId: 2, name: \"Radio chkDisabled 演示\", file: \"excheck/radio_chkDisabled\"},\n      {id: 211, pId: 2, name: \"Radio halfCheck 演示\", file: \"excheck/radio_halfCheck\"},\n      {id: 205, pId: 2, name: \"用 zTree 方法 勾选 Radio\", file: \"excheck/radio_fun\"},\n\n      {id: 3, pId: 0, name: \"[exedit] 编辑功能 演示\", open: false},\n      {id: 301, pId: 3, name: \"拖拽 节点 基本控制\", file: \"exedit/drag\"},\n      {id: 302, pId: 3, name: \"拖拽 节点 高级控制\", file: \"exedit/drag_super\"},\n      {id: 303, pId: 3, name: \"用 zTree 方法 移动 / 复制 节点\", file: \"exedit/drag_fun\"},\n      {id: 304, pId: 3, name: \"基本 增 / 删 / 改 节点\", file: \"exedit/edit\"},\n      {id: 305, pId: 3, name: \"高级 增 / 删 / 改 节点\", file: \"exedit/edit_super\"},\n      {id: 306, pId: 3, name: \"用 zTree 方法 增 / 删 / 改 节点\", file: \"exedit/edit_fun\"},\n      {id: 307, pId: 3, name: \"异步加载 & 编辑功能 共存\", file: \"exedit/async_edit\"},\n      {id: 308, pId: 3, name: \"多棵树之间 的 数据交互\", file: \"exedit/multiTree\"},\n\n      {id: 4, pId: 0, name: \"大数据量 演示\", open: false},\n      {id: 401, pId: 4, name: \"一次性加载大数据量\", file: \"bigdata/common\"},\n      {id: 402, pId: 4, name: \"分批异步加载大数据量\", file: \"bigdata/diy_async\"},\n      {id: 403, pId: 4, name: \"分批异步加载大数据量\", file: \"bigdata/page\"},\n\n      {id: 5, pId: 0, name: \"组合功能 演示\", open: false},\n      {id: 501, pId: 5, name: \"冻结根节点\", file: \"super/oneroot\"},\n      {id: 502, pId: 5, name: \"单击展开/折叠节点\", file: \"super/oneclick\"},\n      {id: 503, pId: 5, name: \"保持展开单一路径\", file: \"super/singlepath\"},\n      {id: 516, pId: 5, name: \"模糊查找节点\", file: \"super/fuzzySearch\"},\n      {id: 504, pId: 5, name: \"添加 自定义控件\", file: \"super/diydom\"},\n      {id: 505, pId: 5, name: \"checkbox / radio 共存\", file: \"super/checkbox_radio\"},\n      {id: 506, pId: 5, name: \"左侧菜单\", file: \"super/left_menu\"},\n      {id: 513, pId: 5, name: \"OutLook 风格\", file: \"super/left_menuForOutLook\"},\n      {id: 515, pId: 5, name: \"Awesome 风格\", file: \"super/awesome\"},\n      {id: 514, pId: 5, name: \"Metro 风格\", file: \"super/metro\"},\n      {id: 507, pId: 5, name: \"下拉菜单\", file: \"super/select_menu\"},\n      {id: 509, pId: 5, name: \"带 checkbox 的多选下拉菜单\", file: \"super/select_menu_checkbox\"},\n      {id: 510, pId: 5, name: \"带 radio 的单选下拉菜单\", file: \"super/select_menu_radio\"},\n      {id: 508, pId: 5, name: \"右键菜单 的 实现\", file: \"super/rightClickMenu\"},\n      {id: 511, pId: 5, name: \"与其他 DOM 拖拽互动\", file: \"super/dragWithOther\"},\n      {id: 512, pId: 5, name: \"异步加载模式下全部展开\", file: \"super/asyncForAll\"},\n\n      {id: 6, pId: 0, name: \"其他扩展功能 演示\", open: false},\n      {id: 601, pId: 6, name: \"隐藏普通节点\", file: \"exhide/common\"},\n      {id: 602, pId: 6, name: \"配合 checkbox 的隐藏\", file: \"exhide/checkbox\"},\n      {id: 603, pId: 6, name: \"配合 radio 的隐藏\", file: \"exhide/radio\"}\n    ];\n\n    $(document).ready(function () {\n      var t = $(\"#tree\");\n      t = $.fn.zTree.init(t, setting, zNodes);\n      demoIframe = $(\"#testIframe\");\n      demoIframe.bind(\"load\", loadReady);\n      var zTree = $.fn.zTree.getZTreeObj(\"tree\");\n      zTree.selectNode(zTree.getNodeByParam(\"id\", 101));\n\n    });\n\n    function loadReady() {\n      var bodyH = demoIframe.contents().find(\"body\").get(0).scrollHeight,\n        htmlH = demoIframe.contents().find(\"html\").get(0).scrollHeight,\n        maxH = Math.max(bodyH, htmlH), minH = Math.min(bodyH, htmlH),\n        h = demoIframe.height() >= maxH ? minH : maxH;\n      if (h < 530) h = 530;\n      demoIframe.height(h);\n    }\n\n    //-->\n  </SCRIPT>\n</HEAD>\n\n<BODY>\n<TABLE border=0 height=600px align=left>\n  <TR>\n    <TD width=260px align=left valign=top style=\"BORDER-RIGHT: #999999 1px dashed\">\n      <ul id=\"tree\" class=\"ztree\" style=\"width:260px; overflow:auto;\"></ul>\n    </TD>\n    <TD width=770px align=left valign=top>\n      <IFRAME ID=\"testIframe\" Name=\"testIframe\" FRAMEBORDER=0 SCROLLING=AUTO width=100% height=600px\n              SRC=\"core/standardData.html\"></IFRAME>\n    </TD>\n  </TR>\n</TABLE>\n\n</BODY>\n</HTML>\n"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/asyncForAll.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - async for All</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar demoMsg = {\n\t\t\tasync:\"正在进行异步加载，请等一会儿再点击...\",\n\t\t\texpandAllOver: \"全部展开完毕\",\n\t\t\tasyncAllOver: \"后台异步加载完毕\",\n\t\t\tasyncAll: \"已经异步加载完毕，不再重新加载\",\n\t\t\texpandAll: \"已经异步加载完毕，使用 expandAll 方法\"\n\t\t}\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter,\n\t\t\t\ttype: \"get\"\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeAsync: beforeAsync,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess,\n\t\t\t\tonAsyncError: onAsyncError\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\n\t\tfunction beforeAsync() {\n\t\t\tcurAsyncCount++;\n\t\t}\n\t\t\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tcurAsyncCount--;\n\t\t\tif (curStatus == \"expand\") {\n\t\t\t\texpandNodes(treeNode.children);\n\t\t\t} else if (curStatus == \"async\") {\n\t\t\t\tasyncNodes(treeNode.children);\n\t\t\t}\n\n\t\t\tif (curAsyncCount <= 0) {\n\t\t\t\tif (curStatus != \"init\" && curStatus != \"\") {\n\t\t\t\t\t$(\"#demoMsg\").text((curStatus == \"expand\") ? demoMsg.expandAllOver : demoMsg.asyncAllOver);\n\t\t\t\t\tasyncForAll = true;\n\t\t\t\t}\n\t\t\t\tcurStatus = \"\";\n\t\t\t}\n\t\t}\n\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tcurAsyncCount--;\n\n\t\t\tif (curAsyncCount <= 0) {\n\t\t\t\tcurStatus = \"\";\n\t\t\t\tif (treeNode!=null) asyncForAll = true;\n\t\t\t}\n\t\t}\n\n\t\tvar curStatus = \"init\", curAsyncCount = 0, asyncForAll = false,\n\t\tgoAsync = false;\n\t\tfunction expandAll() {\n\t\t\tif (!check()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (asyncForAll) {\n\t\t\t\t$(\"#demoMsg\").text(demoMsg.expandAll);\n\t\t\t\tzTree.expandAll(true);\n\t\t\t} else {\n\t\t\t\texpandNodes(zTree.getNodes());\n\t\t\t\tif (!goAsync) {\n\t\t\t\t\t$(\"#demoMsg\").text(demoMsg.expandAll);\n\t\t\t\t\tcurStatus = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction expandNodes(nodes) {\n\t\t\tif (!nodes) return;\n\t\t\tcurStatus = \"expand\";\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.expandNode(nodes[i], true, false, false);\n\t\t\t\tif (nodes[i].isParent && nodes[i].zAsync) {\n\t\t\t\t\texpandNodes(nodes[i].children);\n\t\t\t\t} else {\n\t\t\t\t\tgoAsync = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction asyncAll() {\n\t\t\tif (!check()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (asyncForAll) {\n\t\t\t\t$(\"#demoMsg\").text(demoMsg.asyncAll);\n\t\t\t} else {\n\t\t\t\tasyncNodes(zTree.getNodes());\n\t\t\t\tif (!goAsync) {\n\t\t\t\t\t$(\"#demoMsg\").text(demoMsg.asyncAll);\n\t\t\t\t\tcurStatus = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction asyncNodes(nodes) {\n\t\t\tif (!nodes) return;\n\t\t\tcurStatus = \"async\";\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tif (nodes[i].isParent && nodes[i].zAsync) {\n\t\t\t\t\tasyncNodes(nodes[i].children);\n\t\t\t\t} else {\n\t\t\t\t\tgoAsync = true;\n\t\t\t\t\tzTree.reAsyncChildNodes(nodes[i], \"refresh\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction reset() {\n\t\t\tif (!check()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tasyncForAll = false;\n\t\t\tgoAsync = false;\n\t\t\t$(\"#demoMsg\").text(\"\");\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t}\n\n\t\tfunction check() {\n\t\t\tif (curAsyncCount > 0) {\n\t\t\t\t$(\"#demoMsg\").text(demoMsg.async);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t\t$(\"#expandAllBtn\").bind(\"click\", expandAll);\n\t\t\t$(\"#asyncAllBtn\").bind(\"click\", asyncAll);\n\t\t\t$(\"#resetBtn\").bind(\"click\", reset);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>异步加载模式下全部展开</h1>\n<h6>[ 文件路径: super/asyncForAll.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 onAsyncSuccess / onAsyncError 回调函数 和 reAsyncChildNodes 或 expandNode 方法可以实现全部功能。</li>\n\t\t\t\t<li class=\"highlight_red\">如果父节点数量很大，请注意利用延时进行控制，避免异步进程过多。</li>\n\t\t\t\t<li class=\"highlight_red\">建议：演示时请利用调试工具查看 network 的 ajax 加载过程。</li>\n\t\t\t\t<li>演示操作\n\t\t\t\t\t<br/><br/>\n\t\t\t\t[ <a id=\"expandAllBtn\" href=\"#\" onclick=\"return false;\">全部展开</a> ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n\t\t\t\t[ <a id=\"asyncAllBtn\" href=\"#\" onclick=\"return false;\">后台自动全部加载</a> ]<br/><br/>\n\t\t\t\t[ <a id=\"resetBtn\" href=\"#\" onclick=\"return false;\">Reset zTree</a> ]<br/><br/>\n\t\t\t\t<p class=\"highlight_red\" id=\"demoMsg\"></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/awesome.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n    <TITLE> ZTREE DEMO - awesome 风格</TITLE>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n<!-- Include font-awesome here, CDN is ok, or locally installed by bower to your project -->\n    <link rel=\"stylesheet\" href=\"http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css\">\n    \n    <link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n    <link rel=\"stylesheet\" href=\"../../../css/awesomeStyle/awesome.css\" type=\"text/css\">\n    <script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n    <SCRIPT type=\"text/javascript\">\n        <!--\n        var setting = {\n            view: {\n                addHoverDom: addHoverDom,\n                removeHoverDom: removeHoverDom,\n                selectedMulti: false\n            },\n            check: {\n                enable: true\n                ,chkStyle: 'radio'\n                ,radioType: \"level\"\n            },\n            data: {\n                simpleData: {\n                    enable: true\n                }\n            },\n            edit: {\n                enable: true\n            }\n        };\n\n        var zNodes =[\n            { id:1, pId:0, name:\"pNode 1\", open:true},\n            { id:11, pId:1, name:\"pNode 11\"},\n            { id:111, pId:11, name:\" sNode 111\"},\n            { id:112, pId:11, name:\"sNode 112\"},\n            { id:113, pId:11, name:\"sNode 113\"},\n            { id:114, pId:11, name:\"sNode 114\"},\n            { id:12, pId:1, name:\"pNode 12\"},\n            { id:121, pId:12, name:\"sNode 121\"},\n            { id:122, pId:12, name:\"sNode 122\"},\n            { id:123, pId:12, name:\"sNode 123\"},\n            { id:124, pId:12, name:\"sNode 124\"},\n            { id:13, pId:1, name:\"pNode 13\", isParent:true},\n            { id:2, pId:0, name:\"pNode 2\"},\n            { id:21, pId:2, name:\"pNode 21\", open:true},\n            { id:211, pId:21, name:\"sNode 211\"},\n            { id:212, pId:21, name:\"sNode 212\"},\n            { id:213, pId:21, name:\"sNode 213\"},\n            { id:214, pId:21, name:\"sNode 214\"},\n            { id:22, pId:2, name:\"pNode 22\"},\n            { id:221, pId:22, name:\"sNode 221\"},\n            { id:222, pId:22, name:\"sNode 222\"},\n            { id:223, pId:22, name:\"sNode 223\"},\n            { id:224, pId:22, name:\"sNode 224\"},\n            { id:23, pId:2, name:\"pNode 23\"},\n            { id:231, pId:23, name:\"sNode 231\"},\n            { id:232, pId:23, name:\"sNode 232\"},\n            { id:233, pId:23, name:\"sNode 233\"},\n            { id:234, pId:23, name:\"sNode 234\"},\n            { id:3, pId:0, name:\"pNode 3\", isParent:true}\n        ];\n\t\tfunction setCheck() {\n\t\t\tsetting.check.chkStyle = $(\"#r1\").attr(\"checked\")? \"checkbox\":\"radio\";\n                        setting.check.enable = (!$(\"#disablechk\").attr(\"checked\"));\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n        $(document).ready(function(){\n            $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\t\t\t\n\t\t\t$(\"#r1\").bind(\"change\", setCheck);\n\t\t\t$(\"#r2\").bind(\"change\", setCheck);\n\t\t\t$(\"#disablechk\").bind(\"change\", setCheck);\n        });\n\n        var newCount = 1;\n        function addHoverDom(treeId, treeNode) {\n            var sObj = $(\"#\" + treeNode.tId + \"_span\");\n            if (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n            var addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n                + \"' title='add node' onfocus='this.blur();'></span>\";\n            sObj.after(addStr);\n            var btn = $(\"#addBtn_\"+treeNode.tId);\n            if (btn) btn.bind(\"click\", function(){\n                var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n                zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n                return false;\n            });\n        };\n        function removeHoverDom(treeId, treeNode) {\n            $(\"#addBtn_\"+treeNode.tId).unbind().remove();\n        };\n        //-->\n    </SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Awesome 风格</h1>\n<h6>[ 文件路径: super/awesome.html ]</h6>\n<div class=\"content_wrap\">\n    <div class=\"bg left\">\n        <ul id=\"treeDemo\" class=\"ztree\"></ul>\n    </div>\n    <div class=\"right\">\n        <ul class=\"info\">\n            <li class=\"title\"><h2>实现方法说明</h2>\n                <ul class=\"list\">\n                    <li>你需要在页面中引入 fontawesome 样式 （http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css）</li>\n                    <li> <i class=\"fa fa-car\"></i> &lt;= 小汽车图标 (如果 fontawesome 样式被正常加载，你可以正常看到)</li>\n                    <li class=\"highlight_red\">引入 适配 zTree 的 样式文件: 'css/awesomeStyle'</li>\n                    <li>感谢 mikkelking 提供这个 Demo. （仅供参考）</li>\n                    \n                    <li><p>Mode: <br/>\n                            <label ><input type=\"radio\" id=\"r1\" class=\"radio first\" name=\"r\" value=\"checkbox\" checked />\n                                Checkbox</label>\n                            <label><input type=\"radio\" id=\"r2\" class=\"radio\" name=\"r\" value=\"radio\" /> Radio</label>\n                            <label><input type=\"checkbox\" id=\"disablechk\" > Disable</label>\n                                <br/>\n    \t\t\t\t</li>\n\t\t\t\t</ul>\n\n                </ul>\n            </li>\n        </ul>\n    </div>\n</div>\n \n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/checkbox_radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - checkbox & radio</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar IDMark_A = \"_a\";\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"父节点 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"叶子节点 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"叶子节点 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"叶子节点 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"父节点 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"叶子节点 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"叶子节点 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"叶子节点 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"父节点 3\", open:true},\n\t\t\t{ id:31, pId:3, name:\"叶子节点 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"叶子节点 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"叶子节点 3-3\"}\n\t\t];\n\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + IDMark_A);\n\t\t\tif (treeNode.level == 0) {\n\t\t\t\tvar editStr = \"<input type='checkbox' class='checkboxBtn' id='checkbox_\" +treeNode.id+ \"' onfocus='this.blur();'></input>\";\n\t\t\t\taObj.before(editStr);\n\t\t\t\tvar btn = $(\"#checkbox_\"+treeNode.id);\n\t\t\tif (btn) btn.bind(\"change\", function() {checkAccessories(treeNode, btn);});\n\t\t\t} else if (treeNode.level == 1) {\n\t\t\t\tvar editStr = \"<input type='radio' class='radioBtn' id='radio_\" +treeNode.id+ \"' name='radio_\"+treeNode.getParentNode().id+\"' onfocus='this.blur();'></input>\";\n\t\t\t\taObj.before(editStr);\n\t\t\t\tvar btn = $(\"#radio_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function() {checkBrand(treeNode, btn);});\n\t\t\t}\n\t\t}\n\n\t\tfunction checkAccessories(treeNode, btn) {\n\t\t\tvar checkedRadio = getCheckedRadio(\"radio_\"+treeNode.id);\n\t\t\tif (btn.attr(\"checked\")) {\n\t\t\t\tif (!checkedRadio) {\n\t\t\t\t\t$(\"#radio_\" + treeNode.children[0].id).attr(\"checked\", true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcheckedRadio.attr(\"checked\", false);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkBrand(treeNode, btn) {\n\t\t\tif (btn.attr(\"checked\")) {\n\t\t\t\tvar pObj = $(\"#checkbox_\" + treeNode.getParentNode().id);\n\t\t\t\tif (!pObj.attr(\"checked\")) {\n\t\t\t\t\tpObj.attr(\"checked\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getCheckedRadio(radioName) {\n\t\t\tvar r = document.getElementsByName(radioName);\n\t\t\tfor(var i=0; i<r.length; i++)    {\n\t\t\t\tif(r[i].checked)    {\n\t\t\t\t\treturn $(r[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t  .radioBtn {height: 16px;vertical-align: middle;}\n\t  .checkboxBtn {vertical-align: middle;margin-right: 2px;}\n\t  </style>\n </HEAD>\n\n<BODY>\n<h1>checkbox / radio 共存</h1>\n<h6>[ 文件路径: super/checkbox_radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree 默认的 checkbox 和 radio 是无法共存的，但可以利用 自定义控件 的功能实现此需求，具体需求可以参考 \"添加 自定义控件\" 的详细说明</li>\n\t\t\t\t<li class=\"highlight_red\">对于 checkbox / radio 的联动规则，请根据需求制定自己的规则</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/diydom.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - addHoverDom / removeHoverDom / addDiyDom</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\n\t\tvar IDMark_Switch = \"_switch\",\n\t\tIDMark_Icon = \"_ico\",\n\t\tIDMark_Span = \"_span\",\n\t\tIDMark_Input = \"_input\",\n\t\tIDMark_Check = \"_check\",\n\t\tIDMark_Edit = \"_edit\",\n\t\tIDMark_Remove = \"_remove\",\n\t\tIDMark_Ul = \"_ul\",\n\t\tIDMark_A = \"_a\";\n\t\t\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\taddHoverDom: addHoverDom,\n\t\t\t\tremoveHoverDom: removeHoverDom,\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, name:\"hover事件显示控件\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:11, name:\"按钮1\"},\n\t\t\t\t\t   {id:12, name:\"按钮2\"},\n\t\t\t\t\t   {id:13, name:\"下拉框\"},\n\t\t\t\t\t   {id:141, name:\"文本1\"},\n\t\t\t\t\t   {id:142, name:\"文本2\"},\n\t\t\t\t\t   {id:15, name:\"超链接\"}\n\n\t\t\t\t]},\n\t\t\t{id:2, name:\"始终显示控件\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:21, name:\"按钮1\"},\n\t\t\t\t\t   {id:22, name:\"按钮2\"},\n\t\t\t\t\t   {id:23, name:\"下拉框\"},\n\t\t\t\t\t   {id:24, name:\"文本\"},\n\t\t\t\t\t   {id:25, name:\"超链接\"}\n\t\t\t\t]}\n\t \t];\n\n\t\tfunction addHoverDom(treeId, treeNode) {\n\t\t\tif (treeNode.parentNode && treeNode.parentNode.id!=1) return;\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + IDMark_A);\n\t\t\tif (treeNode.id == 11) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span id='diyBtn_space_\" +treeNode.id+ \"' >&nbsp;</span><span class='button icon03' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'></span>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 12) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span class='button icon04' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'></span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 13) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span id='diyBtn_space_\" +treeNode.id+ \"' >&nbsp;</span><select class='selDemo ' id='diyBtn_\" +treeNode.id+ \"'><option value=1>1</option><option value=2>2</option><option value=3>3</option></select>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"change\", function(){alert(\"diy Select value=\"+btn.attr(\"value\")+\" for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 141) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span class='test' id='diyBtn_\" +treeNode.id+ \"'>Text Demo...</span>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t} else if (treeNode.id == 142) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span id='diyBtn_\" +treeNode.id+ \"'>Text Demo...</span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t} else if (treeNode.id == 15) {\n\t\t\t\tif ($(\"#diyBtn1_\"+treeNode.id).length>0) return;\n\t\t\t\tif ($(\"#diyBtn2_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<a id='diyBtn1_\" +treeNode.id+ \"' onclick='alert(1);return false;' style='margin:0 0 0 5px;'>链接1</a>\" +\n\t\t\t\t\t\"<a id='diyBtn2_\" +treeNode.id+ \"' onclick='alert(2);return false;' style='margin:0 0 0 5px;'>链接2</a>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t}\n\t\t}\n\n\t\tfunction removeHoverDom(treeId, treeNode) {\n\t\t\tif (treeNode.parentTId && treeNode.getParentNode().id!=1) return;\n\t\t\tif (treeNode.id == 15) {\n\t\t\t\t$(\"#diyBtn1_\"+treeNode.id).unbind().remove();\n\t\t\t\t$(\"#diyBtn2_\"+treeNode.id).unbind().remove();\n\t\t\t} else {\n\t\t\t\t$(\"#diyBtn_\"+treeNode.id).unbind().remove();\n\t\t\t\t$(\"#diyBtn_space_\" +treeNode.id).unbind().remove();\n\t\t\t}\n\t\t}\n\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tif (treeNode.parentNode && treeNode.parentNode.id!=2) return;\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + IDMark_A);\n\t\t\tif (treeNode.id == 21) {\n\t\t\t\tvar editStr = \"<span class='demoIcon' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'><span class='button icon01'></span></span>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 22) {\n\t\t\t\tvar editStr = \"<span class='demoIcon' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'><span class='button icon02'></span></span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 23) {\n\t\t\t\tvar editStr = \"<select class='selDemo' id='diyBtn_\" +treeNode.id+ \"'><option value=1>1</option><option value=2>2</option><option value=3>3</option></select>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"change\", function(){alert(\"diy Select value=\"+btn.attr(\"value\")+\" for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 24) {\n\t\t\t\tvar editStr = \"<span id='diyBtn_\" +treeNode.id+ \"'>Text Demo...</span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t} else if (treeNode.id == 25) {\n\t\t\t\tvar editStr = \"<a id='diyBtn1_\" +treeNode.id+ \"' onclick='alert(1);return false;'>链接1</a>\" +\n\t\t\t\t\t\"<a id='diyBtn2_\" +treeNode.id+ \"' onclick='alert(2);return false;'>链接2</a>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.demoIcon{padding:0 2px 0 10px;}\n.ztree li span.button.icon01{margin:0; background: url(../../../css/zTreeStyle/img/diy/3.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon02{margin:0; background: url(../../../css/zTreeStyle/img/diy/4.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon03{margin:0; background: url(../../../css/zTreeStyle/img/diy/5.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon04{margin:0; background: url(../../../css/zTreeStyle/img/diy/6.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon05{margin:0; background: url(../../../css/zTreeStyle/img/diy/7.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon06{margin:0; background: url(../../../css/zTreeStyle/img/diy/8.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>添加自定义控件</h1>\n<h6>[ 文件路径: super/diydom.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1、实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 setting.view.addHoverDom / removeHoverDom / addDiyDom 这几个参数的配置可以很容易的实现自定义控件的功能</li>\n\t\t\t\t<li class=\"highlight_red\">添加自定义控件，请务必掌握 zTree 节点对象的命名规则，以保证正常添加 DOM 控件</li>\n\t\t\t\t<li class=\"highlight_red\">如果添加标准的 select / checkbox / radio 等，请注意适当调整 zTree 的布局 css，保证 zTree 能正常显示</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、setting 配置信息说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>使用 setting.view.addHoverDom / removeHoverDom / addDiyDom 属性，详细请参见 API 文档中的相关内容</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、treeNode 节点数据说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对 节点数据 没有特殊要求，用户可以根据自己的需求添加自定义属性</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/dragWithOther.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - drag with other DOM</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar MoveTest = {\n\t\t\terrorMsg: \"放错了...请选择正确的类别！\",\n\t\t\tcurTarget: null,\n\t\t\tcurTmpTarget: null,\n\t\t\tnoSel: function() {\n\t\t\t\ttry {\n\t\t\t\t\twindow.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();\n\t\t\t\t} catch(e){}\n\t\t\t},\n\t\t\tdragTree2Dom: function(treeId, treeNodes) {\n\t\t\t\treturn !treeNodes[0].isParent;\n\t\t\t},\n\t\t\tprevTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tnextTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tinnerTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn targetNode!=null && targetNode.isParent && targetNode.tId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tdragMove: function(e, treeId, treeNodes) {\n\t\t\t\tvar p = null, pId = 'dom_' + treeNodes[0].pId;\n\t\t\t\tif (e.target.id == pId) {\n\t\t\t\t\tp = $(e.target);\n\t\t\t\t} else {\n\t\t\t\t\tp = $(e.target).parent('#' + pId);\n\t\t\t\t\tif (!p.get(0)) {\n\t\t\t\t\t\tp = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$('.domBtnDiv .active').removeClass('active');\n\t\t\t\tif (p) {\n\t\t\t\t\tp.addClass('active');\n\t\t\t\t}\n\t\t\t},\n\t\t\tdropTree2Dom: function(e, treeId, treeNodes, targetNode, moveType) {\n\t\t\t\tvar domId = \"dom_\" + treeNodes[0].getParentNode().id;\n\t\t\t\tif (moveType == null && (domId == e.target.id || $(e.target).parents(\"#\" + domId).length > 0)) {\n\t\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\t\tzTree.removeNode(treeNodes[0]);\n\n\t\t\t\t\tvar newDom = $(\"span[domId=\" + treeNodes[0].id + \"]\");\n\t\t\t\t\tif (newDom.length > 0) {\n\t\t\t\t\t\tnewDom.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\t\tnewDom.addClass(\"domBtn\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(\"#\" + domId).append(\"<span class='domBtn' domId='\" + treeNodes[0].id + \"'>\" + treeNodes[0].name + \"</span>\");\n\t\t\t\t\t}\n\t\t\t\t\tMoveTest.updateType();\n\t\t\t\t} else if ( $(e.target).parents(\".domBtnDiv\").length > 0) {\n\t\t\t\t\talert(MoveTest.errorMsg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdom2Tree: function(e, treeId, treeNode) {\n\t\t\t\tvar target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (!target) return;\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"), parentNode;\n\t\t\t\tif (treeNode != null && treeNode.isParent && \"dom_\" + treeNode.id == target.parent().attr(\"id\")) {\n\t\t\t\t\tparentNode = treeNode;\n\t\t\t\t} else if (treeNode != null && !treeNode.isParent && \"dom_\" + treeNode.getParentNode().id == target.parent().attr(\"id\")) {\n\t\t\t\t\tparentNode = treeNode.getParentNode();\n\t\t\t\t}\n\n\t\t\t\tif (tmpTarget) tmpTarget.remove();\n\t\t\t\tif (!!parentNode) {\n\t\t\t\t\tvar nodes = zTree.addNodes(parentNode, {id:target.attr(\"domId\"), name: target.text()});\n\t\t\t\t\tzTree.selectNode(nodes[0]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\ttarget.addClass(\"domBtn\");\n\t\t\t\t\talert(MoveTest.errorMsg);\n\t\t\t\t}\n\t\t\t\tMoveTest.updateType();\n\t\t\t\tMoveTest.curTarget = null;\n\t\t\t\tMoveTest.curTmpTarget = null;\n\t\t\t},\n\t\t\tupdateType: function() {\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\t\tnodes = zTree.getNodes();\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tvar num = nodes[i].children ? nodes[i].children.length : 0;\n\t\t\t\t\tnodes[i].name = nodes[i].name.replace(/ \\(.*\\)/gi, \"\") + \" (\" + num + \")\";\n\t\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindDom: function() {\n\t\t\t\t$(\".domBtnDiv\").bind(\"mousedown\", MoveTest.bindMouseDown);\n\t\t\t},\n\t\t\tbindMouseDown: function(e) {\n\t\t\t\tvar target = e.target;\n\t\t\t\tif (target!=null && target.className==\"domBtn\") {\n\t\t\t\t\tvar doc = $(document), target = $(target),\n\t\t\t\t\tdocScrollTop = doc.scrollTop(),\n\t\t\t\t\tdocScrollLeft = doc.scrollLeft();\n\t\t\t\t\ttarget.addClass(\"domBtn_Disabled\");\n\t\t\t\t\ttarget.removeClass(\"domBtn\");\n\t\t\t\t\tcurDom = $(\"<span class='dom_tmp domBtn'>\" + target.text() + \"</span>\");\n\t\t\t\t\tcurDom.appendTo(\"body\");\n\n\t\t\t\t\tcurDom.css({\n\t\t\t\t\t\t\"top\": (e.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (e.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\t\t\t\t\tMoveTest.curTarget = target;\n\t\t\t\t\tMoveTest.curTmpTarget = curDom;\n\n\t\t\t\t\tdoc.bind(\"mousemove\", MoveTest.bindMouseMove);\n\t\t\t\t\tdoc.bind(\"mouseup\", MoveTest.bindMouseUp);\n\t\t\t\t\tdoc.bind(\"selectstart\", MoveTest.docSelect);\n\t\t\t\t}\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindMouseMove: function(e) {\n\t\t\t\tMoveTest.noSel();\n\t\t\t\tvar doc = $(document), \n\t\t\t\tdocScrollTop = doc.scrollTop(),\n\t\t\t\tdocScrollLeft = doc.scrollLeft(),\n\t\t\t\ttmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\ttmpTarget.css({\n\t\t\t\t\t\t\"top\": (e.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (e.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tbindMouseUp: function(e) {\n\t\t\t\tvar doc = $(document);\n\t\t\t\tdoc.unbind(\"mousemove\", MoveTest.bindMouseMove);\n\t\t\t\tdoc.unbind(\"mouseup\", MoveTest.bindMouseUp);\n\t\t\t\tdoc.unbind(\"selectstart\", MoveTest.docSelect);\n\n\t\t\t\tvar target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (tmpTarget) tmpTarget.remove();\n\n\t\t\t\tif ($(e.target).parents(\"#treeDemo\").length == 0) {\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\ttarget.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\t\ttarget.addClass(\"domBtn\");\n\t\t\t\t\t}\n\t\t\t\t\tMoveTest.curTarget = null;\n\t\t\t\t\tMoveTest.curTmpTarget = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindSelect: function() {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false,\n\t\t\t\tdrag: {\n\t\t\t\t\tprev: MoveTest.prevTree,\n\t\t\t\t\tnext: MoveTest.nextTree,\n\t\t\t\t\tinner: MoveTest.innerTree\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkeep: {\n\t\t\t\t\tparent: true,\n\t\t\t\t\tleaf: true\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: MoveTest.dragTree2Dom,\n\t\t\t\tonDrop: MoveTest.dropTree2Dom,\n\t\t\t\tonDragMove: MoveTest.dragMove,\n\t\t\t\tonMouseUp: MoveTest.dom2Tree\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"植物\", isParent: true, open:true},\n\t\t\t{ id:2, pId:0, name:\"动物\", isParent: true, open:true},\n\t\t\t{ id:20, pId:2, name:\"大象\"},\n\t\t\t{ id:29, pId:2, name:\"鲨鱼\"},\n\t\t\t{ id:10, pId:1, name:\"大白菜\"},\n\t\t\t{ id:19, pId:1, name:\"西红柿\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tMoveTest.updateType();\n\t\t\tMoveTest.bindDom();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.dom_line {margin:2px;border-bottom:1px gray dotted;height:1px}\n.domBtnDiv {display:block;padding:2px;border:1px gray dotted;background-color:powderblue}\n.categoryDiv {display:inline-block; width:335px}\n.domBtn {display:inline-block;cursor:pointer;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#FFE6B0}\n.domBtn_Disabled {display:inline-block;cursor:default;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#DFDFDF;color:#999999}\n.dom_tmp {position:absolute;font-size:12px;}\n.active {background-color: #93C3CF}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>与其他 DOM 拖拽互动</h1>\n<h6>[ 文件路径: super/dragWithOther.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree v3.2 版本修正了 onDrag/onDrop 中的 event 对象; v3.5.16 版本增加了 onDragMove; 因此可以较容易的控制将节点拖拽到其他 DOM </li>\n\t\t\t\t<li class=\"highlight_red\">将其他 DOM 拖拽到 zTree 需要自己制作相关的拖拽代码</li>\n\t\t\t\t<li class=\"highlight_red\">这仅仅是一个最简单的演示，如果需要更炫的效果，需要制作更复杂的代码</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>请拖拽下面内容到 树节点上</h2>\n\t\t\t\t<div class=\"domBtnDiv\">\n\t\t\t\t\t<div id=\"dom_1\" class=\"categoryDiv\"><span class=\"domBtn\" domId=\"11\">大树</span><span class=\"domBtn\" domId=\"12\">小草</span><span class=\"domBtn\" domId=\"13\">花朵</span></div>\n\t\t\t\t\t<div class=\"dom_line\"></div>\n\t\t\t\t\t<div id=\"dom_2\" class=\"categoryDiv\"><span class=\"domBtn\" domId=\"21\">老虎</span><span class=\"domBtn\" domId=\"22\">狗熊</span><span class=\"domBtn\" domId=\"23\">狮子</span></div>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"highlight_red\">也可以把二级节点拖拽到以上图层 </span>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/fuzzySearch.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - fuzzySearch</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../js/fuzzysearch.js\"></script>\n\t\n\t<SCRIPT type=\"text/javascript\">\n\t\tvar setting = {\n\t\t\t\tcheck: {\n\t\t\t\t\tenable: true//checkbox\n\t\t\t\t},\n\t\t\t\tview: {\n\t\t\t\t\tnameIsHTML: true, //允许name支持html\t\t\t\t\n\t\t\t\t\tselectedMulti: false\n\t\t\t\t},\n\t\t\t\tedit: {\n\t\t\t\t\tenable: false,\n\t\t\t\t\teditNameSelectAll: false\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\tsimpleData: {\n\t\t\t\t\t\tenable: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"模糊搜索演示 1\", t:\"id=1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"[]\\\\^$.|?*+():关键字可以是js正则元字符\", t:\"id=11\"},\n\t\t\t{ id:12, pId:1, name:\"{}<>'\\\"~`!@#%&-;:/,=:关键字可以是其他字符\", t:\"id=12\"},\n\t\t\t{ id:2, pId:0, name:\"模糊搜索演示 2\", t:\"id=2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"大写ABDEFGHINQRT:关键字查找不区分大小写\", t:\"id=21\"},\n\t\t\t{ id:22, pId:2, name:\"小写abdefghinqrt:关键字查找不区分大小写\", t:\"id=21\"},\n\t\t\t{ id:3, pId:0, name:\"模糊搜索演示 3\", t:\"id=3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"空 格:关键字是空格\", t:\"id=31\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tfuzzySearch('treeDemo','#key',null,true); //初始化模糊搜索方法\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>根据关键字模糊查找节点</h1>\n<h6>[ 文件路径: fuzzySearch/fuzzySearch.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\">\n\t\t\t\t<h2>1、fuzzySearch()方法使用说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">\n \t\t\t\t\t@param zTreeId ztree对象的id,不需要#\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\t@param searchField 输入框选择器\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\t@param isHighLight 是否高亮,默认高亮,传入false禁用\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\t@param isExpand 是否展开,默认合拢,传入true展开\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\tfuzzySearch ( zTreeId, searchField, isHighLight, isExpand )\n\t\t\t\t</li>\n\t\t\t\t<li><p>搜索试试看：<br/>\n\t\t\t\t\t\t关键字：<input type=\"text\" id=\"key\" value=\"\" class=\"empty\" placeholder=\"请输入关键字\"/><br/>\n\t\t\t\t\t</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2、依赖的js</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t\t<li>ztree v3.5.19.1及以上,使用到getPath()方法</li>\n\t\t\t\t\t<li>ztree.exhide扩展,使用到hideNode()方法</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/left_menu.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - left_menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar curMenu = null, zTree_Menu = null;\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowLine: true,\n\t\t\t\tselectedMulti: false,\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonNodeCreated: this.onNodeCreated,\n\t\t\t\tbeforeClick: this.beforeClick,\n\t\t\t\tonClick: this.onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"主菜单 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"子菜单 1-1\"},\n\t\t\t{ id:111, pId:11, name:\"叶子节点 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"叶子节点 1-1-2\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点 1-1-3\"},\n\t\t\t{ id:114, pId:11, name:\"叶子节点 1-1-4\"},\n\t\t\t{ id:12, pId:1, name:\"子菜单 1-2\"},\n\t\t\t{ id:121, pId:12, name:\"叶子节点 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点 1-2-3\"},\n\t\t\t{ id:124, pId:12, name:\"叶子节点 1-2-4\"},\n\t\t\t{ id:2, pId:0, name:\"主菜单 2\"},\n\t\t\t{ id:21, pId:2, name:\"子菜单 2-1\"},\n\t\t\t{ id:211, pId:21, name:\"叶子节点 2-1-1\"},\n\t\t\t{ id:212, pId:21, name:\"叶子节点 2-1-2\"},\n\t\t\t{ id:213, pId:21, name:\"叶子节点 2-1-3\"},\n\t\t\t{ id:214, pId:21, name:\"叶子节点 2-1-4\"},\n\t\t\t{ id:22, pId:2, name:\"子菜单 2-2\"},\n\t\t\t{ id:221, pId:22, name:\"叶子节点 2-2-1\"},\n\t\t\t{ id:222, pId:22, name:\"叶子节点 2-2-2\"},\n\t\t\t{ id:223, pId:22, name:\"叶子节点 2-2-3\"},\n\t\t\t{ id:224, pId:22, name:\"叶子节点 2-2-4\"},\n\t\t\t{ id:3, pId:0, name:\"主菜单 3\"},\n\t\t\t{ id:31, pId:3, name:\"子菜单 3-1\"},\n\t\t\t{ id:311, pId:31, name:\"叶子节点 3-1-1\"},\n\t\t\t{ id:312, pId:31, name:\"叶子节点 3-1-2\"},\n\t\t\t{ id:313, pId:31, name:\"叶子节点 3-1-3\"},\n\t\t\t{ id:314, pId:31, name:\"叶子节点 3-1-4\"},\n\t\t\t{ id:32, pId:3, name:\"子菜单 3-2\"},\n\t\t\t{ id:321, pId:32, name:\"叶子节点 3-2-1\"},\n\t\t\t{ id:322, pId:32, name:\"叶子节点 3-2-2\"},\n\t\t\t{ id:323, pId:32, name:\"叶子节点 3-2-3\"},\n\t\t\t{ id:324, pId:32, name:\"叶子节点 3-2-4\"}\t\t\t\n\t\t];\n\n\t\tfunction beforeClick(treeId, node) {\n\t\t\tif (node.isParent) {\n\t\t\t\tif (node.level === 0) {\n\t\t\t\t\tvar pNode = curMenu;\n\t\t\t\t\twhile (pNode && pNode.level !==0) {\n\t\t\t\t\t\tpNode = pNode.getParentNode();\n\t\t\t\t\t}\n\t\t\t\t\tif (pNode !== node) {\n\t\t\t\t\t\tvar a = $(\"#\" + pNode.tId + \"_a\");\n\t\t\t\t\t\ta.removeClass(\"cur\");\n\t\t\t\t\t\tzTree_Menu.expandNode(pNode, false);\n\t\t\t\t\t}\n\t\t\t\t\ta = $(\"#\" + node.tId + \"_a\");\n\t\t\t\t\ta.addClass(\"cur\");\n\n\t\t\t\t\tvar isOpen = false;\n\t\t\t\t\tfor (var i=0,l=node.children.length; i<l; i++) {\n\t\t\t\t\t\tif(node.children[i].open) {\n\t\t\t\t\t\t\tisOpen = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isOpen) {\n\t\t\t\t\t\tzTree_Menu.expandNode(node, true);\n\t\t\t\t\t\tcurMenu = node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tzTree_Menu.expandNode(node.children[0].isParent?node.children[0]:node, true);\n\t\t\t\t\t\tcurMenu = node.children[0];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzTree_Menu.expandNode(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn !node.isParent;\n\t\t}\n\t\tfunction onClick(e, treeId, node) {\n\t\t\talert(\"Do what you want to do!\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tzTree_Menu = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tcurMenu = zTree_Menu.getNodes()[0].children[0].children[0];\n\t\t\tzTree_Menu.selectNode(curMenu);\n\t\t\tvar a = $(\"#\" + zTree_Menu.getNodes()[0].tId + \"_a\");\n\t\t\ta.addClass(\"cur\");\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li a.level0 {width:200px;height: 20px; text-align: center; display:block; background-color: #0B61A4; border:1px silver solid;}\n.ztree li a.level0.cur {background-color: #66A3D2; }\n.ztree li a.level0 span {display: block; color: white; padding-top:3px; font-size:12px; font-weight: bold;word-spacing: 2px;}\n.ztree li a.level0 span.button {\tfloat:right; margin-left: 10px; visibility: visible;display:none;}\n.ztree li span.button.switch.level0 {display:none;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>左侧菜单</h1>\n<h6>[ 文件路径: super/left_menu.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>在 “Demo 演示”中的左侧菜单就是用 zTree 实现的，主要是靠 css 样式负责排版，利用 setting 中的配置进行功能制作，本 Demo 对实现 左侧菜单进行简单的介绍，你也可以通过查看 “Demo 演示”页面的源码深入了解。</li>\n\t\t\t\t<li class=\"highlight_red\">1、关于 css 完全可以根据自己的需要进行个性化调整，例如：此 Demo 的菜单样式 就 与 “Demo 演示”页面的不一样，仅供对比参考</li>\n\t\t\t\t<li class=\"highlight_red\">2、主要用到的配置有：<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;setting.view.showIcon / showLine / selectedMulti / dblClickExpand<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;setting.callback.onNodeCreated / beforeClick / onClick\n\t\t\t\t</li>\n\t\t\t\t<li>3、是否需要限制单一路径展开，完全由你的需求而定，实现代码可参考 \"保持展开单一路径\"</li>\n\t\t\t\t<li>4、其他辅助规则，请根据实际情况自行编写</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>\n"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/left_menuForOutLook.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - left_menu for Outlook</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar curMenu = null, zTree_Menu = null;\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowLine: false,\n\t\t\t\tshowIcon: false,\n\t\t\t\tselectedMulti: false,\n\t\t\t\tdblClickExpand: false,\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"文件夹\", open:true},\n\t\t\t{ id:11, pId:1, name:\"收件箱\"},\n\t\t\t{ id:111, pId:11, name:\"收件箱1\"},\n\t\t\t{ id:112, pId:111, name:\"收件箱2\"},\n\t\t\t{ id:113, pId:112, name:\"收件箱3\"},\n\t\t\t{ id:114, pId:113, name:\"收件箱4\"},\n\t\t\t{ id:12, pId:1, name:\"垃圾邮件\"},\n\t\t\t{ id:13, pId:1, name:\"草稿\"},\n\t\t\t{ id:14, pId:1, name:\"已发送邮件\"},\n\t\t\t{ id:15, pId:1, name:\"已删除邮件\"},\n\t\t\t{ id:3, pId:0, name:\"快速视图\"},\n\t\t\t{ id:31, pId:3, name:\"文档\"},\n\t\t\t{ id:32, pId:3, name:\"照片\"}\n\t\t];\n\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tvar spaceWidth = 5;\n\t\t\tvar switchObj = $(\"#\" + treeNode.tId + \"_switch\"),\n\t\t\ticoObj = $(\"#\" + treeNode.tId + \"_ico\");\n\t\t\tswitchObj.remove();\n\t\t\ticoObj.before(switchObj);\n\n\t\t\tif (treeNode.level > 1) {\n\t\t\t\tvar spaceStr = \"<span style='display: inline-block;width:\" + (spaceWidth * treeNode.level)+ \"px'></span>\";\n\t\t\t\tswitchObj.before(spaceStr);\n\t\t\t}\n\t\t}\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tif (treeNode.level == 0 ) {\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tzTree.expandNode(treeNode);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\tvar treeObj = $(\"#treeDemo\");\n\t\t\t$.fn.zTree.init(treeObj, setting, zNodes);\n\t\t\tzTree_Menu = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tcurMenu = zTree_Menu.getNodes()[0].children[0].children[0];\n\t\t\tzTree_Menu.selectNode(curMenu);\n\n\t\t\ttreeObj.hover(function () {\n\t\t\t\tif (!treeObj.hasClass(\"showIcon\")) {\n\t\t\t\t\ttreeObj.addClass(\"showIcon\");\n\t\t\t\t}\n\t\t\t}, function() {\n\t\t\t\ttreeObj.removeClass(\"showIcon\");\n\t\t\t});\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree * {font-size: 10pt;font-family:\"Microsoft Yahei\",Verdana,Simsun,\"Segoe UI Web Light\",\"Segoe UI Light\",\"Segoe UI Web Regular\",\"Segoe UI\",\"Segoe UI Symbol\",\"Helvetica Neue\",Arial}\n.ztree li ul{ margin:0; padding:0}\n.ztree li {line-height:30px;}\n.ztree li a {width:200px;height:30px;padding-top: 0px;}\n.ztree li a:hover {text-decoration:none; background-color: #E7E7E7;}\n.ztree li a span.button.switch {visibility:hidden}\n.ztree.showIcon li a span.button.switch {visibility:visible}\n.ztree li a.curSelectedNode {background-color:#D4D4D4;border:0;height:30px;}\n.ztree li span {line-height:30px;}\n.ztree li span.button {margin-top: -7px;}\n.ztree li span.button.switch {width: 16px;height: 16px;}\n\n.ztree li a.level0 span {font-size: 150%;font-weight: bold;}\n.ztree li span.button {background-image:url(\"./left_menuForOutLook.png\"); *background-image:url(\"./left_menuForOutLook.gif\")}\n.ztree li span.button.switch.level0 {width: 20px; height:20px}\n.ztree li span.button.switch.level1 {width: 20px; height:20px}\n.ztree li span.button.noline_open {background-position: 0 0;}\n.ztree li span.button.noline_close {background-position: -18px 0;}\n.ztree li span.button.noline_open.level0 {background-position: 0 -18px;}\n.ztree li span.button.noline_close.level0 {background-position: -18px -18px;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>OutLook 样式的左侧菜单</h1>\n<h6>[ 文件路径: super/left_menuForOutLook.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>帮朋友用 zTree 实现了一个貌似 Outlook.com 的菜单，特拿出来分享给大家</li>\n\t\t\t\t<li class=\"highlight_red\">1、请注意本页面源码中的 css 部分</li>\n\t\t\t\t<li class=\"highlight_red\">2、请查看源码中 js 的使用，特别是利用 addDiyDom 回调将 展开按钮 转移到 &lt;a&gt; 标签内</li>\n\t\t\t\t<li class=\"highlight_red\">3、利用添加 zTree 的 class 实现展开按钮的隐藏、显示</li>\n\t\t\t\t<li>4、其他辅助规则，请根据实际情况自行编写</li>\n\t\t\t\t<li>5、当前规则说明:<br/>\n\t\t\t\t&nbsp;&nbsp;单击根节点可以展开、折叠;<br/>\n\t\t\t\t&nbsp;&nbsp;非根节点只有点击 箭头 图标才可以展开、折叠;<br/>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>\n"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/metro.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n    <TITLE> ZTREE DEMO - Simple Data</TITLE>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n    <link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n    <link rel=\"stylesheet\" href=\"../../../css/metroStyle/metroStyle.css\" type=\"text/css\">\n    <script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n    <SCRIPT type=\"text/javascript\">\n        <!--\n        var setting = {\n            view: {\n                addHoverDom: addHoverDom,\n                removeHoverDom: removeHoverDom,\n                selectedMulti: false\n            },\n            check: {\n                enable: true\n            },\n            data: {\n                simpleData: {\n                    enable: true\n                }\n            },\n            edit: {\n                enable: true\n            }\n        };\n\n        var zNodes =[\n            { id:1, pId:0, name:\"父节点1\", open:true},\n            { id:11, pId:1, name:\"父节点11\"},\n            { id:111, pId:11, name:\"叶子节点111\"},\n            { id:112, pId:11, name:\"叶子节点112\"},\n            { id:113, pId:11, name:\"叶子节点113\"},\n            { id:114, pId:11, name:\"叶子节点114\"},\n            { id:12, pId:1, name:\"父节点12\"},\n            { id:121, pId:12, name:\"叶子节点121\"},\n            { id:122, pId:12, name:\"叶子节点122\"},\n            { id:123, pId:12, name:\"叶子节点123\"},\n            { id:124, pId:12, name:\"叶子节点124\"},\n            { id:13, pId:1, name:\"父节点13\", isParent:true},\n            { id:2, pId:0, name:\"父节点2\"},\n            { id:21, pId:2, name:\"父节点21\", open:true},\n            { id:211, pId:21, name:\"叶子节点211\"},\n            { id:212, pId:21, name:\"叶子节点212\"},\n            { id:213, pId:21, name:\"叶子节点213\"},\n            { id:214, pId:21, name:\"叶子节点214\"},\n            { id:22, pId:2, name:\"父节点22\"},\n            { id:221, pId:22, name:\"叶子节点221\"},\n            { id:222, pId:22, name:\"叶子节点222\"},\n            { id:223, pId:22, name:\"叶子节点223\"},\n            { id:224, pId:22, name:\"叶子节点224\"},\n            { id:23, pId:2, name:\"父节点23\"},\n            { id:231, pId:23, name:\"叶子节点231\"},\n            { id:232, pId:23, name:\"叶子节点232\"},\n            { id:233, pId:23, name:\"叶子节点233\"},\n            { id:234, pId:23, name:\"叶子节点234\"},\n            { id:3, pId:0, name:\"父节点3\", isParent:true}\n        ];\n\n        $(document).ready(function(){\n            $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n        });\n\n        var newCount = 1;\n        function addHoverDom(treeId, treeNode) {\n            var sObj = $(\"#\" + treeNode.tId + \"_span\");\n            if (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n            var addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n                + \"' title='add node' onfocus='this.blur();'></span>\";\n            sObj.after(addStr);\n            var btn = $(\"#addBtn_\"+treeNode.tId);\n            if (btn) btn.bind(\"click\", function(){\n                var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n                zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n                return false;\n            });\n        };\n        function removeHoverDom(treeId, treeNode) {\n            $(\"#addBtn_\"+treeNode.tId).unbind().remove();\n        };\n        //-->\n    </SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Metro 风格</h1>\n<h6>[ 文件路径: super/metro.html ]</h6>\n<div class=\"content_wrap\">\n    <div class=\"zTreeDemoBackground left\">\n        <ul id=\"treeDemo\" class=\"ztree\"></ul>\n    </div>\n    <div class=\"right\">\n        <ul class=\"info\">\n            <li class=\"title\"><h2>1、样式文件说明</h2>\n                <ul class=\"list\">\n                    <li class=\"highlight_red\">请使用 css/metroStyle 目录内的样式文件 和 图片</li>\n                    <li>感谢网友 rqx110 提供， 仅供参考</li>\n                </ul>\n            </li>\n        </ul>\n    </div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/oneclick.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - one click</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false,\n\t\t\t\tshowLine: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"根 Root\", open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"叶子节点 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"叶子节点 1-1-2\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点 1-1-3\"},\n\t\t\t{ id:114, pId:11, name:\"叶子节点 1-1-4\"},\n\t\t\t{ id:12, pId:1, name:\"父节点 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"叶子节点 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点 1-2-3\"},\n\t\t\t{ id:124, pId:12, name:\"叶子节点 1-2-4\"},\n\t\t\t{ id:13, pId:1, name:\"父节点 1-3\", open:true},\n\t\t\t{ id:131, pId:13, name:\"叶子节点 1-3-1\"},\n\t\t\t{ id:132, pId:13, name:\"叶子节点 1-3-2\"},\n\t\t\t{ id:133, pId:13, name:\"叶子节点 1-3-3\"},\n\t\t\t{ id:134, pId:13, name:\"叶子节点 1-3-4\"}\n\t\t];\n\n\t\tfunction onClick(e,treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.expandNode(treeNode);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li button.switch {visibility:hidden; width:1px;}\n.ztree li button.switch.roots_docu {visibility:visible; width:16px;}\n.ztree li button.switch.center_docu {visibility:visible; width:16px;}\n.ztree li button.switch.bottom_docu {visibility:visible; width:16px;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>单击展开/折叠节点</h1>\n<h6>[ 文件路径: super/oneclick.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree 默认不提供单击展开节点的功能，但可以利用 onClick 事件回调函数轻松实现此功能</li>\n\t\t\t\t<li class=\"highlight_red\">为了避免与双击功能冲突，建议关闭双击展开节点的功能，请设置 setting.view.dblClickExpand = false </li>\n\t\t\t\t<li class=\"highlight_red\">可以将所有的 +/- 开关隐藏，请查看本页面源码，查看 css 设置 </li>\n\t\t\t\t<li class=\"highlight_red\">由于 +/- 开关与 节点连接线是配套的，所以如果不显示 +/- 开关的话，那么请设置 setting.view.showLine = false 隐藏连接线 </li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/oneroot.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - one root</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: dblClickExpand\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"根 Root\", open:true},\n\t\t\t{ id:11, pId:1, name:\"父节点 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"叶子节点 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"叶子节点 1-1-2\"},\n\t\t\t{ id:113, pId:11, name:\"叶子节点 1-1-3\"},\n\t\t\t{ id:114, pId:11, name:\"叶子节点 1-1-4\"},\n\t\t\t{ id:12, pId:1, name:\"父节点 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"叶子节点 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"叶子节点 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"叶子节点 1-2-3\"},\n\t\t\t{ id:124, pId:12, name:\"叶子节点 1-2-4\"},\n\t\t\t{ id:13, pId:1, name:\"父节点 1-3\", open:true},\n\t\t\t{ id:131, pId:13, name:\"叶子节点 1-3-1\"},\n\t\t\t{ id:132, pId:13, name:\"叶子节点 1-3-2\"},\n\t\t\t{ id:133, pId:13, name:\"叶子节点 1-3-3\"},\n\t\t\t{ id:134, pId:13, name:\"叶子节点 1-3-4\"}\n\t\t];\n\n\t\tfunction dblClickExpand(treeId, treeNode) {\n\t\t\treturn treeNode.level > 0;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.switch.level0 {visibility:hidden; width:1px;}\n.ztree li ul.level0 {padding:0; background:none;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>冻结根节点</h1>\n<h6>[ 文件路径: super/oneroot.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>对于这种只有一个根节点，且不显示 +/- 开关的需求，需要利用 css、setting 配合使用</li>\n\t\t\t\t<li class=\"highlight_red\">zTree v3.x 可以针对指定的 level，进行样式设定，请查看本页面源码，查看 css 设置</li>\n\t\t\t\t<li class=\"highlight_red\">设置 setting.view.dblClickExpand 指向 Function，可以只针对根节点关闭双击展开的操作</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/rightClickMenu.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonRightClick: OnRightClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, name:\"无右键菜单 1\", open:true, noR:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:11, name:\"节点 1-1\", noR:true},\n\t\t\t\t\t   {id:12, name:\"节点 1-2\", noR:true}\n\n\t\t\t\t]},\n\t\t\t{id:2, name:\"右键操作 2\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:21, name:\"节点 2-1\"},\n\t\t\t\t\t   {id:22, name:\"节点 2-2\"},\n\t\t\t\t\t   {id:23, name:\"节点 2-3\"},\n\t\t\t\t\t   {id:24, name:\"节点 2-4\"}\n\t\t\t\t]},\n\t\t\t{id:3, name:\"右键操作 3\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:31, name:\"节点 3-1\"},\n\t\t\t\t\t   {id:32, name:\"节点 3-2\"},\n\t\t\t\t\t   {id:33, name:\"节点 3-3\"},\n\t\t\t\t\t   {id:34, name:\"节点 3-4\"}\n\t\t\t\t]}\n  \t \t];\n\n\t\tfunction OnRightClick(event, treeId, treeNode) {\n\t\t\tif (!treeNode && event.target.tagName.toLowerCase() != \"button\" && $(event.target).parents(\"a\").length == 0) {\n\t\t\t\tzTree.cancelSelectedNode();\n\t\t\t\tshowRMenu(\"root\", event.clientX, event.clientY);\n\t\t\t} else if (treeNode && !treeNode.noR) {\n\t\t\t\tzTree.selectNode(treeNode);\n\t\t\t\tshowRMenu(\"node\", event.clientX, event.clientY);\n\t\t\t}\n\t\t}\n\n\t\tfunction showRMenu(type, x, y) {\n\t\t\t$(\"#rMenu ul\").show();\n\t\t\tif (type==\"root\") {\n\t\t\t\t$(\"#m_del\").hide();\n\t\t\t\t$(\"#m_check\").hide();\n\t\t\t\t$(\"#m_unCheck\").hide();\n\t\t\t} else {\n\t\t\t\t$(\"#m_del\").show();\n\t\t\t\t$(\"#m_check\").show();\n\t\t\t\t$(\"#m_unCheck\").show();\n\t\t\t}\n\n            y += document.body.scrollTop;\n            x += document.body.scrollLeft;\n            rMenu.css({\"top\":y+\"px\", \"left\":x+\"px\", \"visibility\":\"visible\"});\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyMouseDown);\n\t\t}\n\t\tfunction hideRMenu() {\n\t\t\tif (rMenu) rMenu.css({\"visibility\": \"hidden\"});\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyMouseDown);\n\t\t}\n\t\tfunction onBodyMouseDown(event){\n\t\t\tif (!(event.target.id == \"rMenu\" || $(event.target).parents(\"#rMenu\").length>0)) {\n\t\t\t\trMenu.css({\"visibility\" : \"hidden\"});\n\t\t\t}\n\t\t}\n\t\tvar addCount = 1;\n\t\tfunction addTreeNode() {\n\t\t\thideRMenu();\n\t\t\tvar newNode = { name:\"增加\" + (addCount++)};\n\t\t\tif (zTree.getSelectedNodes()[0]) {\n\t\t\t\tnewNode.checked = zTree.getSelectedNodes()[0].checked;\n\t\t\t\tzTree.addNodes(zTree.getSelectedNodes()[0], newNode);\n\t\t\t} else {\n\t\t\t\tzTree.addNodes(null, newNode);\n\t\t\t}\n\t\t}\n\t\tfunction removeTreeNode() {\n\t\t\thideRMenu();\n\t\t\tvar nodes = zTree.getSelectedNodes();\n\t\t\tif (nodes && nodes.length>0) {\n\t\t\t\tif (nodes[0].children && nodes[0].children.length > 0) {\n\t\t\t\t\tvar msg = \"要删除的节点是父节点，如果删除将连同子节点一起删掉。\\n\\n请确认！\";\n\t\t\t\t\tif (confirm(msg)==true){\n\t\t\t\t\t\tzTree.removeNode(nodes[0]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzTree.removeNode(nodes[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction checkTreeNode(checked) {\n\t\t\tvar nodes = zTree.getSelectedNodes();\n\t\t\tif (nodes && nodes.length>0) {\n\t\t\t\tzTree.checkNode(nodes[0], checked, true);\n\t\t\t}\n\t\t\thideRMenu();\n\t\t}\n\t\tfunction resetTree() {\n\t\t\thideRMenu();\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n\n\t\tvar zTree, rMenu;\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tzTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\trMenu = $(\"#rMenu\");\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\ndiv#rMenu {position:absolute; visibility:hidden; top:0; background-color: #555;text-align: left;padding: 2px;}\ndiv#rMenu ul li{\n\tmargin: 1px 0;\n\tpadding: 0 5px;\n\tcursor: pointer;\n\tlist-style: none outside none;\n\tbackground-color: #DFDFDF;\n}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>右键菜单的实现</h1>\n<h6>[ 文件路径: super/rightClickMenu.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>利用 beforeRightClick / onRightClick 事件回调函数简单实现的右键菜单</li>\n\t\t\t\t<li class=\"highlight_red\">Demo 中的菜单比较简陋，你完全可以配合其他自定义样式的菜单图层混合使用</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n<div id=\"rMenu\">\n\t<ul>\n\t\t<li id=\"m_add\" onclick=\"addTreeNode();\">增加节点</li>\n\t\t<li id=\"m_del\" onclick=\"removeTreeNode();\">删除节点</li>\n\t\t<li id=\"m_check\" onclick=\"checkTreeNode(true);\">Check节点</li>\n\t\t<li id=\"m_unCheck\" onclick=\"checkTreeNode(false);\">unCheck节点</li>\n\t\t<li id=\"m_reset\" onclick=\"resetTree();\">恢复zTree</li>\n\t</ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/select_menu.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, pId:0, name:\"北京\"},\n\t\t\t{id:2, pId:0, name:\"天津\"},\n\t\t\t{id:3, pId:0, name:\"上海\"},\n\t\t\t{id:6, pId:0, name:\"重庆\"},\n\t\t\t{id:4, pId:0, name:\"河北省\", open:true},\n\t\t\t{id:41, pId:4, name:\"石家庄\"},\n\t\t\t{id:42, pId:4, name:\"保定\"},\n\t\t\t{id:43, pId:4, name:\"邯郸\"},\n\t\t\t{id:44, pId:4, name:\"承德\"},\n\t\t\t{id:5, pId:0, name:\"广东省\", open:true},\n\t\t\t{id:51, pId:5, name:\"广州\"},\n\t\t\t{id:52, pId:5, name:\"深圳\"},\n\t\t\t{id:53, pId:5, name:\"东莞\"},\n\t\t\t{id:54, pId:5, name:\"佛山\"},\n\t\t\t{id:6, pId:0, name:\"福建省\", open:true},\n\t\t\t{id:61, pId:6, name:\"福州\"},\n\t\t\t{id:62, pId:6, name:\"厦门\"},\n\t\t\t{id:63, pId:6, name:\"泉州\"},\n\t\t\t{id:64, pId:6, name:\"三明\"}\n\t\t ];\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tvar check = (treeNode && !treeNode.isParent);\n\t\t\tif (!check) alert(\"只能选择城市...\");\n\t\t\treturn check;\n\t\t}\n\t\t\n\t\tfunction onClick(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\tv = \"\";\n\t\t\tnodes.sort(function compare(a,b){return a.id-b.id;});\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tv += nodes[i].name + \",\";\n\t\t\t}\n\t\t\tif (v.length > 0 ) v = v.substring(0, v.length-1);\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tcityObj.attr(\"value\", v);\n\t\t}\n\n\t\tfunction showMenu() {\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tvar cityOffset = $(\"#citySel\").offset();\n\t\t\t$(\"#menuContent\").css({left:cityOffset.left + \"px\", top:cityOffset.top + cityObj.outerHeight() + \"px\"}).slideDown(\"fast\");\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction hideMenu() {\n\t\t\t$(\"#menuContent\").fadeOut(\"fast\");\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction onBodyDown(event) {\n\t\t\tif (!(event.target.id == \"menuBtn\" || event.target.id == \"menuContent\" || $(event.target).parents(\"#menuContent\").length>0)) {\n\t\t\t\thideMenu();\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>下拉菜单</h1>\n<h6>[ 文件路径: super/select_menu.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"title\">&nbsp;&nbsp;<span class=\"highlight_red\">选择城市时，按下 Ctrl 或 Cmd 键可以进行多选</span></li>\n\t\t\t<li class=\"title\">&nbsp;&nbsp;城市：<input id=\"citySel\" type=\"text\" readonly value=\"\" style=\"width:120px;\"/>\n\t\t&nbsp;<a id=\"menuBtn\" href=\"#\" onclick=\"showMenu(); return false;\">选择</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>用 zTree 实现这种下拉菜单，应该说是比较容易的，你只需要控制 zTree 所在容器的隐藏/显示，以及位置即可。</li>\n\t\t\t\t<li class=\"highlight_red\">zTree v3.x 实现了多点选中功能，因此对于需要多选的下拉菜单也易如反掌。</li>\n\t\t\t\t<li class=\"highlight_red\">利用 setting 的各项配置参数，完全可以满足大部分的功能需求。</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n\n<div id=\"menuContent\" class=\"menuContent\" style=\"display:none; position: absolute;\">\n\t<ul id=\"treeDemo\" class=\"ztree\" style=\"margin-top:0; width:160px;\"></ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/select_menu_checkbox.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - checkbox select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkboxType: {\"Y\":\"\", \"N\":\"\"}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, pId:0, name:\"北京\"},\n\t\t\t{id:2, pId:0, name:\"天津\"},\n\t\t\t{id:3, pId:0, name:\"上海\"},\n\t\t\t{id:6, pId:0, name:\"重庆\"},\n\t\t\t{id:4, pId:0, name:\"河北省\", open:true, nocheck:true},\n\t\t\t{id:41, pId:4, name:\"石家庄\"},\n\t\t\t{id:42, pId:4, name:\"保定\"},\n\t\t\t{id:43, pId:4, name:\"邯郸\"},\n\t\t\t{id:44, pId:4, name:\"承德\"},\n\t\t\t{id:5, pId:0, name:\"广东省\", open:true, nocheck:true},\n\t\t\t{id:51, pId:5, name:\"广州\"},\n\t\t\t{id:52, pId:5, name:\"深圳\"},\n\t\t\t{id:53, pId:5, name:\"东莞\"},\n\t\t\t{id:54, pId:5, name:\"佛山\"},\n\t\t\t{id:6, pId:0, name:\"福建省\", open:true, nocheck:true},\n\t\t\t{id:61, pId:6, name:\"福州\"},\n\t\t\t{id:62, pId:6, name:\"厦门\"},\n\t\t\t{id:63, pId:6, name:\"泉州\"},\n\t\t\t{id:64, pId:6, name:\"三明\"}\n\t\t ];\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.checkNode(treeNode, !treeNode.checked, null, true);\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getCheckedNodes(true),\n\t\t\tv = \"\";\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tv += nodes[i].name + \",\";\n\t\t\t}\n\t\t\tif (v.length > 0 ) v = v.substring(0, v.length-1);\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tcityObj.attr(\"value\", v);\n\t\t}\n\n\t\tfunction showMenu() {\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tvar cityOffset = $(\"#citySel\").offset();\n\t\t\t$(\"#menuContent\").css({left:cityOffset.left + \"px\", top:cityOffset.top + cityObj.outerHeight() + \"px\"}).slideDown(\"fast\");\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction hideMenu() {\n\t\t\t$(\"#menuContent\").fadeOut(\"fast\");\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction onBodyDown(event) {\n\t\t\tif (!(event.target.id == \"menuBtn\" || event.target.id == \"citySel\" || event.target.id == \"menuContent\" || $(event.target).parents(\"#menuContent\").length>0)) {\n\t\t\t\thideMenu();\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>带 checkbox 的多选下拉菜单  -- zTree</h1>\n<h6>[ 文件路径: super/select_menu_checkbox.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"title\">&nbsp;&nbsp;<span class=\"highlight_red\">勾选 checkbox 或者 点击节点 进行选择</span></li>\n\t\t\t<li class=\"title\">&nbsp;&nbsp;Test: <input id=\"citySel\" type=\"text\" readonly value=\"\" style=\"width:120px;\" onclick=\"showMenu();\" />\n\t\t&nbsp;<a id=\"menuBtn\" href=\"#\" onclick=\"showMenu(); return false;\">select</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>用 checkbox 也可以轻松实现多选的下拉菜单</li>\n\t\t\t\t<li>此 Demo 主要用于 和 其他下拉菜单进行对比</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n\n<div id=\"menuContent\" class=\"menuContent\" style=\"display:none; position: absolute;\">\n\t<ul id=\"treeDemo\" class=\"ztree\" style=\"margin-top:0; width:180px; height: 300px;\"></ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/select_menu_radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - radio select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"all\"\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonClick: onClick,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, pId:0, name:\"北京\"},\n\t\t\t{id:2, pId:0, name:\"天津\"},\n\t\t\t{id:3, pId:0, name:\"上海\"},\n\t\t\t{id:6, pId:0, name:\"重庆\"},\n\t\t\t{id:4, pId:0, name:\"河北省\", open:true, nocheck:true},\n\t\t\t{id:41, pId:4, name:\"石家庄\"},\n\t\t\t{id:42, pId:4, name:\"保定\"},\n\t\t\t{id:43, pId:4, name:\"邯郸\"},\n\t\t\t{id:44, pId:4, name:\"承德\"},\n\t\t\t{id:5, pId:0, name:\"广东省\", open:true, nocheck:true},\n\t\t\t{id:51, pId:5, name:\"广州\"},\n\t\t\t{id:52, pId:5, name:\"深圳\"},\n\t\t\t{id:53, pId:5, name:\"东莞\"},\n\t\t\t{id:54, pId:5, name:\"佛山\"},\n\t\t\t{id:6, pId:0, name:\"福建省\", open:true, nocheck:true},\n\t\t\t{id:61, pId:6, name:\"福州\"},\n\t\t\t{id:62, pId:6, name:\"厦门\"},\n\t\t\t{id:63, pId:6, name:\"泉州\"},\n\t\t\t{id:64, pId:6, name:\"三明\"}\n\t\t ];\n\n\t\tfunction onClick(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.checkNode(treeNode, !treeNode.checked, null, true);\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getCheckedNodes(true),\n\t\t\tv = \"\";\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tv += nodes[i].name + \",\";\n\t\t\t}\n\t\t\tif (v.length > 0 ) v = v.substring(0, v.length-1);\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tcityObj.attr(\"value\", v);\n\t\t}\n\n\t\tfunction showMenu() {\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tvar cityOffset = $(\"#citySel\").offset();\n\t\t\t$(\"#menuContent\").css({left:cityOffset.left + \"px\", top:cityOffset.top + cityObj.outerHeight() + \"px\"}).slideDown(\"fast\");\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction hideMenu() {\n\t\t\t$(\"#menuContent\").fadeOut(\"fast\");\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction onBodyDown(event) {\n\t\t\tif (!(event.target.id == \"menuBtn\" || event.target.id == \"citySel\" || event.target.id == \"menuContent\" || $(event.target).parents(\"#menuContent\").length>0)) {\n\t\t\t\thideMenu();\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>带 radio 的单选下拉菜单  -- zTree</h1>\n<h6>[ 文件路径: super/select_menu_radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"title\">&nbsp;&nbsp;<span class=\"highlight_red\">勾选 radio 或者 点击节点 进行选择</span></li>\n\t\t\t<li class=\"title\">&nbsp;&nbsp;Test: <input id=\"citySel\" type=\"text\" readonly value=\"\" style=\"width:120px;\" onclick=\"showMenu();\" />\n\t\t&nbsp;<a id=\"menuBtn\" href=\"#\" onclick=\"showMenu(); return false;\">select</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>用 radio 也可以轻松实现单选的下拉菜单</li>\n\t\t\t\t<li>单选其实没有必要使用 radio, 此 Demo 主要用于 和 其他下拉菜单进行对比</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n\n<div id=\"menuContent\" class=\"menuContent\" style=\"display:none; position: absolute;\">\n\t<ul id=\"treeDemo\" class=\"ztree\" style=\"margin-top:0; width:180px; height: 300px;\"></ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/cn/super/singlepath.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - single path</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false,\n\t\t\t\tshowLine: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonExpand: onExpand,\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\t\t\n\t\tfunction createNodes(maxNodesNumInLevel, maxLevel, curLevel, curPId) {\n\t\t\tif (maxNodesNumInLevel<5) {\n\t\t\t\tmaxNodesNumInLevel = 5;\n\t\t\t}\n\t\t\tvar nodes = [], num = 0;\n\t\t\twhile(num<3) {\n\t\t\t\tnum = parseInt(Math.random()*1024)%maxNodesNumInLevel+1;\n\t\t\t}\n\t\t\tfor (var i=0; i<num; i++) {\n\t\t\t\tvar id = curPId ? curPId + \"-\" + i : \"\" + i, isParent = (parseInt(Math.random()*9999)%3!=0),\n\t\t\t\tnode = {id: id, pId : curPId, name : \"N\" + id};\n\t\t\t\tnodes.push(node);\n\t\t\t\tif (isParent && curLevel<maxLevel) {\n\t\t\t\t\tnodes = nodes.concat(createNodes(maxNodesNumInLevel, maxLevel, curLevel+1, id));\n\t\t\t\t}\n\t\t\t}\n            return nodes;\n\t\t}\n\t\tvar zNodes =createNodes(5, 5, 0);\n\n\t\tvar curExpandNode = null;\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tvar pNode = curExpandNode ? curExpandNode.getParentNode():null;\n\t\t\tvar treeNodeP = treeNode.parentTId ? treeNode.getParentNode():null;\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor(var i=0, l=!treeNodeP ? 0:treeNodeP.children.length; i<l; i++ ) {\n\t\t\t\tif (treeNode !== treeNodeP.children[i]) {\n\t\t\t\t\tzTree.expandNode(treeNodeP.children[i], false);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pNode) {\n\t\t\t\tif (pNode === treeNode) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tpNode = pNode.getParentNode();\n\t\t\t}\n\t\t\tif (!pNode) {\n\t\t\t\tsinglePath(treeNode);\n\t\t\t}\n\n\t\t}\n\t\tfunction singlePath(newNode) {\n\t\t\tif (newNode === curExpandNode) return;\n\n            var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n                    rootNodes, tmpRoot, tmpTId, i, j, n;\n\n            if (!curExpandNode) {\n                tmpRoot = newNode;\n                while (tmpRoot) {\n                    tmpTId = tmpRoot.tId;\n                    tmpRoot = tmpRoot.getParentNode();\n                }\n                rootNodes = zTree.getNodes();\n                for (i=0, j=rootNodes.length; i<j; i++) {\n                    n = rootNodes[i];\n                    if (n.tId != tmpTId) {\n                        zTree.expandNode(n, false);\n                    }\n                }\n            } else if (curExpandNode && curExpandNode.open) {\n\t\t\t\tif (newNode.parentTId === curExpandNode.parentTId) {\n\t\t\t\t\tzTree.expandNode(curExpandNode, false);\n\t\t\t\t} else {\n\t\t\t\t\tvar newParents = [];\n\t\t\t\t\twhile (newNode) {\n\t\t\t\t\t\tnewNode = newNode.getParentNode();\n\t\t\t\t\t\tif (newNode === curExpandNode) {\n\t\t\t\t\t\t\tnewParents = null;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (newNode) {\n\t\t\t\t\t\t\tnewParents.push(newNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (newParents!=null) {\n\t\t\t\t\t\tvar oldNode = curExpandNode;\n\t\t\t\t\t\tvar oldParents = [];\n\t\t\t\t\t\twhile (oldNode) {\n\t\t\t\t\t\t\toldNode = oldNode.getParentNode();\n\t\t\t\t\t\t\tif (oldNode) {\n\t\t\t\t\t\t\t\toldParents.push(oldNode);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (newParents.length>0) {\n\t\t\t\t\t\t\tzTree.expandNode(oldParents[Math.abs(oldParents.length-newParents.length)-1], false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tzTree.expandNode(oldParents[oldParents.length-1], false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurExpandNode = newNode;\n\t\t}\n\n\t\tfunction onExpand(event, treeId, treeNode) {\n\t\t\tcurExpandNode = treeNode;\n\t\t}\n\n\t\tfunction onClick(e,treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.expandNode(treeNode, null, null, null, true);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li button.switch {visibility:hidden; width:1px;}\n.ztree li button.switch.roots_docu {visibility:visible; width:16px;}\n.ztree li button.switch.center_docu {visibility:visible; width:16px;}\n.ztree li button.switch.bottom_docu {visibility:visible; width:16px;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>保持展开单一路径</h1>\n<h6>[ 文件路径: super/singlepath.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>实现方法说明</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>此 Demo 是在 \"单击展开/折叠节点\" 基础上改造而来，树节点保持始终只展开一条路径。</li>\n\t\t\t\t<li class=\"highlight_red\">利用 setting.callback.beforeExpand / onExpand 事件回调函数实现展开规则</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/asyncData/getNodes.php",
    "content": "<?php ?>\n[<?php\n$pId = \"0\";\n$pName = \"\";\n$pLevel = \"\";\n$pCheck = \"\";\nif(array_key_exists( 'id',$_REQUEST)) {\n\t$pId=$_REQUEST['id'];\n}\nif(array_key_exists( 'lv',$_REQUEST)) {\n\t$pLevel=$_REQUEST['lv'];\n}\nif(array_key_exists('n',$_REQUEST)) {\n\t$pName=$_REQUEST['n'];\n}\nif(array_key_exists('chk',$_REQUEST)) {\n\t$pCheck=$_REQUEST['chk'];\n}\nif ($pId==null || $pId==\"\") $pId = \"0\";\nif ($pLevel==null || $pLevel==\"\") $pLevel = \"0\";\nif ($pName==null) $pName = \"\";\nelse $pName = $pName.\".\";\n\n$pId = htmlspecialchars($pId);\n\n$pName = htmlspecialchars($pName);\n\n//for ($i=1; $i<9999; $i++) {\n//\tfor ($j=1; $j<999; $j++) {\n//\n//\t}\n//}\n\nfor ($i=1; $i<5; $i++) {\n\t$nId = $pId.$i;\n\t$nName = $pName.\"n\".$i;\n\techo \"{ id:'\".$nId.\"',\tname:'\".$nName.\"',\tisParent:\".(( $pLevel < \"2\" && ($i%2)!=0)?\"true\":\"false\").($pCheck==\"\"?\"\":((($pLevel < \"2\" && ($i%2)!=0)?\", halfCheck:true\":\"\").($i==3?\", checked:true\":\"\"))).\"}\";\n\tif ($i<4) {\n\t\techo \",\";\n\t}\n}\n?>]\n"
  },
  {
    "path": "lib/zTree_v3/demo/en/asyncData/getNodesForBigData.php",
    "content": "<?php ?>\n[<?php\n$pId = \"-1\";\nif(array_key_exists( 'id',$_REQUEST)) {\n\t$pId=$_REQUEST['id'];\n}\n$pCount = \"10\";\nif(array_key_exists( 'count',$_REQUEST)) {\n\t$pCount=$_REQUEST['count'];\n}\nif ($pId==null || $pId==\"\") $pId = \"0\";\nif ($pCount==null || $pCount==\"\") $pCount = \"10\";\n\n$pId = htmlspecialchars($pId);\n\n$max = (int)$pCount;\nfor ($i=1; $i<=$max; $i++) {\n\t$nId = $pId.\"_\".$i;\n\t$nName = \"tree\".$nId;\n\techo \"{ id:'\".$nId.\"',\tname:'\".$nName.\"'}\";\n\tif ($i<$max) {\n\t\techo \",\";\n\t}\n\t\n}\n?>]\n"
  },
  {
    "path": "lib/zTree_v3/demo/en/bigdata/common.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - big data common</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonNodeCreated: onNodeCreated\n\t\t\t}\n\t\t};\n\n\t\tvar dataMaker = function(count) {\n\t\t\tvar nodes = [], pId = -1,\n\t\t\tmin = 10, max = 90, level = 0, curLevel = [], prevLevel = [], levelCount,\n\t\t\ti = 0,j,k,l,m;\n\n\t\t\twhile (i<count) {\n\t\t\t\tif (level == 0) {\n\t\t\t\t\tpId = -1;\n\t\t\t\t\tlevelCount = Math.round(Math.random() * max) + min;\n\t\t\t\t\tfor (j=0; j<levelCount && i<count; j++, i++) {\n\t\t\t\t\t\tvar n = {id:i, pId:pId, name:\"Big-\" +i};\n\t\t\t\t\t\tnodes.push(n);\n\t\t\t\t\t\tcurLevel.push(n);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (l=0, m=prevLevel.length; l<m && i<count; l++) {\n\t\t\t\t\t\tpId = prevLevel[l].id;\n\t\t\t\t\t\tlevelCount = Math.round(Math.random() * max) + min;\n\t\t\t\t\t\tfor (j=0; j<levelCount && i<count; j++, i++) {\n\t\t\t\t\t\t\tvar n = {id:i, pId:pId, name:\"Big-\" +i};\n\t\t\t\t\t\t\tnodes.push(n);\n\t\t\t\t\t\t\tcurLevel.push(n);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tprevLevel = curLevel;\n\t\t\t\tcurLevel = [];\n\t\t\t\tlevel++;\n\t\t\t}\n\t\t\treturn nodes;\n\t\t}\n\n\t\tvar ruler = {\n\t\t\tdoc: null,\n\t\t\truler: null,\n\t\t\tcursor: null,\n\t\t\tminCount: 5000,\n\t\t\tcount: 5000,\n\t\t\tstepCount:500,\n\t\t\tminWidth: 30,\n\t\t\tmaxWidth: 215,\n\t\t\tinit: function() {\n\t\t\t\truler.doc = $(document);\n\t\t\t\truler.ruler = $(\"#ruler\");\n\t\t\t\truler.cursor = $(\"#cursor\");\n\t\t\t\tif (ruler.ruler) {\n\t\t\t\t\truler.ruler.bind(\"mousedown\", ruler.onMouseDown);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t},\n\t\t\tonMouseDown: function(e) {\n\t\t\t\truler.drawRuler(e, true);\n\t\t\t\truler.doc.bind(\"mousemove\", ruler.onMouseMove);\n\t\t\t\truler.doc.bind(\"mouseup\", ruler.onMouseUp);\n\t\t\t\truler.doc.bind(\"selectstart\", ruler.onSelect);\n\t\t\t\t$(\"body\").css(\"cursor\", \"pointer\");\n\t\t\t},\n\t\t\tonMouseMove: function(e) {\n\t\t\t\truler.drawRuler(e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tonMouseUp: function(e) {\n\t\t\t\t$(\"body\").css(\"cursor\", \"auto\");\n\t\t\t\truler.doc.unbind(\"mousemove\", ruler.onMouseMove);\n\t\t\t\truler.doc.unbind(\"mouseup\", ruler.onMouseUp);\n\t\t\t\truler.doc.unbind(\"selectstart\", ruler.onSelect);\n\t\t\t\truler.drawRuler(e);\n\t\t\t},\n\t\t\tonSelect: function (e) {\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tgetCount: function(end) {\n\t\t\t\tvar start = ruler.ruler.offset().left+1;\n\t\t\t\tvar c = Math.max((end - start), ruler.minWidth);\n\t\t\t\tc = Math.min(c, ruler.maxWidth);\n\t\t\t\treturn {width:c, count:(c - ruler.minWidth)*ruler.stepCount + ruler.minCount};\n\t\t\t},\n\t\t\tdrawRuler: function(e, animate) {\n\t\t\t\tvar c = ruler.getCount(e.clientX);\n\t\t\t\truler.cursor.stop();\n\t\t\t\tif ($.browser.msie || !animate) {\n\t\t\t\t\truler.cursor.css({width:c.width});\n\t\t\t\t} else {\n\t\t\t\t\truler.cursor.animate({width:c.width}, {duration: \"fast\",easing: \"swing\", complete:null});\n\t\t\t\t}\n\t\t\t\truler.count = c.count;\n\t\t\t\truler.cursor.text(c.count);\n\t\t\t}\n\t\t}\n\t\tvar showNodeCount = 0;\n\t\tfunction onNodeCreated(event, treeId, treeNode) {\n\t\t\tshowNodeCount++;\n\t\t}\n\n\t\tfunction createTree () {\n\t\t\tvar zNodes = dataMaker(ruler.count);\n\t\t\tshowNodeCount = 0;\n\t\t\t$(\"#treeDemo\").empty();\n\t\t\tsetting.check.enable = $(\"#showChk\").attr(\"checked\");\n\t\t\tvar time1 = new Date();\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tvar time2 = new Date();\n\n\t\t\talert(\" \" + zNodes.length + \" nodes are initialized, \" + showNodeCount + \" nodes generate the DOM object.\"\n\t\t\t\t+ \"\\n\\n Initialization zTree total time: \" + (time2.getTime() - time1.getTime()) + \" ms\");\n\t\t}\n\n\n\t\t$(document).ready(function(){\n\t\t\truler.init(\"ruler\");\n\t\t\t$(\"#createTree\").bind(\"click\", createTree);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>One-time Large Data Loading</h1>\n<h6>[ File Path: bigdata/common.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul>\n\t\t<li><span>Adjust the total number of nodes to the test load speed: </span>\n\t\t\t<div id=\"ruler\" class=\"ruler\" title=\"can drag to adjust the number of nodes\">\n\t\t\t\t<div id=\"cursor\" class=\"cursor\">5000</div>\n\t\t\t</div>\n\t\t\t<div style=\"width:220px; text-align: center;\">\n\t\t\t\t<span>checkbox</span><input type=\"checkbox\" id=\"showChk\" title=\"whether to display checkbox\" class=\"checkbox first\" />&nbsp;&nbsp;&nbsp;&nbsp;\n\t\t\t\t[ <a id=\"createTree\" href=\"#\" title=\"Initialize zTree\" onclick=\"return false;\">Initialize zTree</a> ]\n\t\t\t</div>\n\t\t</li>\n\t\t</ul>\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of large data load</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1) zTree v3.x optimized for one-time large data loading capacity, using a lazy loading technique, which does not expand the node does not create child nodes of the DOM.</li>\n\t\t\t\t<li class=\"highlight_red\">2) If a maximum of 100 nodes each, but a total number of several thousand or even tens of thousands of nodes, and the parent node is collapsed by default to optimize the most obvious effect, very fast.</li>\n\t\t\t\t<li class=\"highlight_red\">3) For the next level there are thousands of sub-node case, the optimization of lazy loading is invalid, proposal to consider asynchronous page loading.</li>\n\t\t\t\t<li class=\"highlight_red\">4) if you set the data to all the parent nodes are expanded, the optimization  of lazy loading is invalid, proposal to not expand all parent node when you initialize zTree.</li>\n\t\t\t\t<li>5) set the display checkbox / radio will affect some of the performance.</li>\n\t\t\t\t<li>6) DOM generated using addDiyDom function will affect the speed, the number of nodes determines the number of impact situations.</li>\n\t\t\t\t<li>7) Using 'onNodeCreated' callback function to manipulate nodes object will affect the speed, the degree of influence determined by the number of nodes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special configuration.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/bigdata/diy_async.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - big data async</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl: getUrl\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\texpandSpeed: \"\"\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess,\n\t\t\t\tonAsyncError: onAsyncError\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{name:\"500 nodes\", id:\"1\", count:500, times:1, isParent:true},\n\t\t\t{name:\"1000 nodes\", id:\"2\", count:1000, times:1, isParent:true},\n\t\t\t{name:\"2000 nodes\", id:\"3\", count:2000, times:1, isParent:true}\n\t\t];\n\n\t\tvar log, className = \"dark\",\n\t\tstartTime = 0, endTime = 0, perCount = 100, perTime = 100;\n\t\tfunction getUrl(treeId, treeNode) {\n\t\t\tvar curCount = (treeNode.children) ? treeNode.children.length : 0;\n\t\t\tvar getCount = (curCount + perCount) > treeNode.count ? (treeNode.count - curCount) : perCount;\n\t\t\tvar param = \"id=\"+treeNode.id+\"_\"+(treeNode.times++) +\"&count=\"+getCount;\n\t\t\treturn \"../asyncData/getNodesForBigData.php?\" + param;\n\t\t}\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\tstartTime = new Date();\n\t\t\t\ttreeNode.times = 1;\n\t\t\t\tajaxGetNodes(treeNode, \"refresh\");\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\talert(\"Downloading data, Please wait to expand node...\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tif (!msg || msg.length == 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttotalCount = treeNode.count;\n\t\t\tif (treeNode.children.length < totalCount) {\n\t\t\t\tsetTimeout(function() {ajaxGetNodes(treeNode);}, perTime);\n\t\t\t} else {\n\t\t\t\ttreeNode.icon = \"\";\n\t\t\t\tzTree.updateNode(treeNode);\n\t\t\t\tzTree.selectNode(treeNode.children[0]);\n\t\t\t\tendTime = new Date();\n\t\t\t\tvar usedTime = (endTime.getTime() - startTime.getTime())/1000;\n\t\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\t\tshowLog(\"[ \"+getTime()+\" ]&nbsp;&nbsp;treeNode:\" + treeNode.name );\n\t\t\t\tshowLog(\"Child node has finished loading, a total of \"+ (treeNode.times-1) +\" times the asynchronous load, elapsed time: \"+ usedTime + \" seconds \");\n\t\t\t}\n\t\t}\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\talert(\"ajax error...\");\n\t\t\ttreeNode.icon = \"\";\n\t\t\tzTree.updateNode(treeNode);\n\t\t}\n\t\tfunction ajaxGetNodes(treeNode, reloadType) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (reloadType == \"refresh\") {\n\t\t\t\ttreeNode.icon = \"../../../css/zTreeStyle/img/loading.gif\";\n\t\t\t\tzTree.updateNode(treeNode);\n\t\t\t}\n\t\t\tzTree.reAsyncChildNodes(treeNode, reloadType, true);\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 4) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>Loading Data in Batches</h1>\n<h6>[ File Path: bigdata/diy_async.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul>\n\t\t\t<li class=\"highlight_red\">&nbsp;&nbsp;&nbsp;&nbsp;Demo for testing load data in batches, each node needs to re-start to load.</li>\n\t\t</ul>\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of large data load</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1) If has nodes for as many as thousands in one level, lazy loading is invalid, this demo shows how to load data in batches.</li>\n\t\t\t\t<li class=\"highlight_red\">2) This method applies to thousands of nodes must all display needs.</li>\n\t\t\t\t<li class=\"highlight_red\">3) This method doesn't solve the problem of slow loading, it will only make the final result appear more slowly, but can be limited to avoid browser suspended animation, and more nodes displayed slower.</li>\n\t\t\t\t<li>4) For at least several thousand nodes in one level case, another solution is to: pagination loading.<br/>\n\t\t\t\t\tasync load log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:85px\"></ul></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Need to set the parameters in setting.async</li>\n\t\t\t\t<li>Advised to turn off animation effects: setting.view.expandSpeed = \"\";</li>\n\t\t\t\t<li>No other special configuration, the user can set their own requirements.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/bigdata/page.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - big data page</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl: getUrl\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess,\n\t\t\t\tonAsyncError: onAsyncError\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{name:\"page test\", t:\"Please click the paging buttons.\", id:\"1\", count:2000, page:0, pageSize:100, isParent:true}\n\t\t];\n\t\tvar curPage = 0;\n\t\tfunction getUrl(treeId, treeNode) {\n\t\t\tvar param = \"id=\"+ treeNode.id +\"_\"+treeNode.page +\"&count=\"+treeNode.pageSize,\n\t\t\taObj = $(\"#\" + treeNode.tId + \"_a\");\n\t\t\taObj.attr(\"title\", \"Page \" + treeNode.page + \" / \" + treeNode.maxPage + \"\")\n\t\t\treturn \"../asyncData/getNodesForBigData.php?\" + param;\n\t\t}\n\t\tfunction goPage(treeNode, page) {\n\t\t\ttreeNode.page = page;\n\t\t\tif (treeNode.page<1) treeNode.page = 1;\n\t\t\tif (treeNode.page>treeNode.maxPage) treeNode.page = treeNode.maxPage;\n\t\t\tif (curPage == treeNode.page) return;\n\t\t\tcurPage = treeNode.page;\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.reAsyncChildNodes(treeNode, \"refresh\");\n\t\t}\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tif (treeNode.page == 0) treeNode.page = 1;\n\t\t\treturn !treeNode.isAjaxing;\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\t\n\t\t}\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\talert(\"ajax error...\");\n\t\t\ttreeNode.icon = \"\";\n\t\t\tzTree.updateNode(treeNode);\n\t\t}\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tif (treeNode.level>0) return;\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\t\t\tif ($(\"#addBtn_\"+treeNode.id).length>0) return;\n\t\t\tvar addStr = \"<span class='button lastPage' id='lastBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='last page' onfocus='this.blur();'></span><span class='button nextPage' id='nextBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='next page' onfocus='this.blur();'></span><span class='button prevPage' id='prevBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='prev page' onfocus='this.blur();'></span><span class='button firstPage' id='firstBtn_\" + treeNode.id\n\t\t\t\t+ \"' title='first page' onfocus='this.blur();'></span>\";\n\t\t\taObj.after(addStr);\n\t\t\tvar first = $(\"#firstBtn_\"+treeNode.id);\n\t\t\tvar prev = $(\"#prevBtn_\"+treeNode.id);\n\t\t\tvar next = $(\"#nextBtn_\"+treeNode.id);\n\t\t\tvar last = $(\"#lastBtn_\"+treeNode.id);\n\t\t\ttreeNode.maxPage = Math.round(treeNode.count/treeNode.pageSize - .5) + (treeNode.count%treeNode.pageSize == 0 ? 0:1);\n\t\t\tfirst.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, 1);\n\t\t\t\t}\n\t\t\t});\n\t\t\tlast.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, treeNode.maxPage);\n\t\t\t\t}\n\t\t\t});\n\t\t\tprev.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, treeNode.page-1);\n\t\t\t\t}\n\t\t\t});\n\t\t\tnext.bind(\"click\", function(){\n\t\t\t\tif (!treeNode.isAjaxing) {\n\t\t\t\t\tgoPage(treeNode, treeNode.page+1);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.firstPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -16px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.prevPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -48px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.nextPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -64px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.lastPage {float:right; margin-left:2px; margin-right: 0; background-position:-144px -32px; vertical-align:top; *vertical-align:middle}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Loading Data By Pagination</h1>\n<h6>[ File Path: bigdata/page.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of large data load</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1) Pagination can be an effective solution to the large number of child nodes of the situation.</li>\n\t\t\t\t<li>2) Using custom method to display the pagination button.</li>\n\t\t\t\t<li class=\"highlight_red\">3) Pagination lead to the association  of checkbox can not be achieved, only correction after show each page . Because of the time limitation, Demo does not deal with association of checkbox.</li>\n\t\t\t\t<li class=\"highlight_red\">4) The use of pagination, you can only get the current page node data from zTree. You can save the data after each page loading as the cache, according to the demand to determine the specific methods.</li>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Need to set the parameters in setting.async</li>\n\t\t\t\t<li>No other special configuration, the user can set their own requirements.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/async.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Async</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Dynamic Tree with Ajax</h1>\n<h6>[ File Path: core/async.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">For create dynamic tree with ajax,  you need to set attributes in setting.async, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Dynamic tree with ajax doesn't need to make special treeNode node data, if use simple JSON data model, please set the attributes in setting.data.simple.</li>\n\t\t\t\t<li>If ajax only to return node data in single level, you don't need to use simple JSON data model.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Monitoring autoParam and otherParam use firebug or the developer tools in browser.</li>\n\t\t\t\t<li class=\"highlight_red\">This Demo only loading 4 level nodes (level = 3).</li>\n\t\t\t\t<li class=\"highlight_red\">This Demo use 'dataFilter' to modify the name of the node.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/async_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - reAsyncChildNodes</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tbeforeAsync: beforeAsync,\n\t\t\t\tonAsyncError: onAsyncError,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tif (!treeNode.isParent) {\n\t\t\t\talert(\"Please select one parent node...\");\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeAsync(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeAsync ]&nbsp;&nbsp;&nbsp;&nbsp;\" + ((!!treeNode && !!treeNode.name) ? treeNode.name : \"root\") );\n\t\t\treturn true;\n\t\t}\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onAsyncError ]&nbsp;&nbsp;&nbsp;&nbsp;\" + ((!!treeNode && !!treeNode.name) ? treeNode.name : \"root\") );\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onAsyncSuccess ]&nbsp;&nbsp;&nbsp;&nbsp;\" + ((!!treeNode && !!treeNode.name) ? treeNode.name : \"root\") );\n\t\t}\n\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\t\t\n\t\tfunction refreshNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tsilent = e.data.silent,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one parent node at first...\");\n\t\t\t}\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.reAsyncChildNodes(nodes[i], type, silent);\n\t\t\t\tif (!silent) zTree.selectNode(nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t\t$(\"#refreshNode\").bind(\"click\", {type:\"refresh\", silent:false}, refreshNode);\n\t\t\t$(\"#refreshNodeSilent\").bind(\"click\", {type:\"refresh\", silent:true}, refreshNode);\n\t\t\t$(\"#addNode\").bind(\"click\", {type:\"add\", silent:false}, refreshNode);\n\t\t\t$(\"#addNodeSilent\").bind(\"click\", {type:\"add\", silent:true}, refreshNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\n</HEAD>\n\n<BODY>\n<h1>Dynamic Tree - zTree methods</h1>\n<h6>[ File Path: core/async_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of reAsyncChildNodes</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">How to use zTreeObj.reAsyncChildNodes method,  please see the API documentation.</li>\n\t\t\t\t<li><p>This Demo can only select one parent node<br/>\n\t\t\t\t\tTry: [ <a id=\"refreshNode\" href=\"#\" onclick=\"return false;\">reload</a> ]&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addNode\" href=\"#\" onclick=\"return false;\">append</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">'isSilent' parameter is only for the collapsed state of the parent node.</span><br/>\n\t\t\t\t\tTry: [ <a id=\"refreshNodeSilent\" href=\"#\" onclick=\"return false;\">Quietly reloaded</a> ]&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addNodeSilent\" href=\"#\" onclick=\"return false;\">Quietly append</a> ]<br/>\n\t\t\t\t\tasync log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">For useing reAsyncChildNodes method,  you need to set attributes in setting.async, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Dynamic Tree with Ajax'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>4、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Dynamic Tree with Ajax'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/click.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeClick / onClick</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle:\"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"ordinary parent\", t:\"I am ordinary, just click on me\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\", t:\"I am ordinary, just click on me\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\", t:\"I am ordinary, just click on me\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\", t:\"I am ordinary, just click on me\"},\n\t\t\t{ id:2, pId:0, name:\"strong parent\", t:\"You can click on me, but you can not click on the sub-node!\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\", t:\"You can't click on me..\", click:false},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\", t:\"You can't click on me..\", click:false},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\", t:\"You can't click on me..\", click:false},\n\t\t\t{ id:3, pId:0, name:\"weak parent\", t:\"You can't click on me, but you can click on the sub-node!\", open:true, click:false },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\", t:\"please click on me..\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\", t:\"please click on me..\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\", t:\"please click on me..\"}\n\t\t];\n\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeClick(treeId, treeNode, clickFlag) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeClick ]&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.click != false);\n\t\t}\n\t\tfunction onClick(event, treeId, treeNode, clickFlag) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onClick ]&nbsp;&nbsp;clickFlag = \" + clickFlag + \" (\" + (clickFlag===1 ? \"single selected\": (clickFlag===0 ? \"<b>cancel selected</b>\" : \"<b>multi selected</b>\")) + \")\");\n\t\t}\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds();\n\t\t\treturn (h+\":\"+m+\":\"+s);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Control of Click Node</h1>\n<h6>[ File Path: core/click.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeClick / onClick' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'beforeClick / onClick' callback function can be achieved with the click on the various functions. This simple demo shows how to monitor the click event.</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">Try pressing the <b>Ctrl</b> or <b>Cmd</b> key for multi-node selection and deselection.</span><br/>\n\t\t\t\t\tclick log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">You need to set attributes about setting.callback.beforeClick and setting.callback.onClick, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/custom_font.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Custom Font</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tfontCss: getFont,\n\t\t\t\tnameIsHTML: true\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ name:\"Bold\", font:{'font-weight':'bold'} },\n\t\t\t{ name:\"Italic\", font:{'font-style':'italic'}},\n\t\t\t{ name:\"Background-color\", font:{'background-color':'black', 'color':'white'}},\n\t\t\t{ name:\"Red Font\", font:{'color':'red'}},\n\t\t\t{ name:\"Blue Font\", font:{'color':'blue'}},\n\t\t\t{ name:\"<span style='color:blue;margin-right:0px;'>view</span>.<span style='color:red;margin-right:0px;'>nameIsHTML</span>\"},\n\t\t\t{ name:\"zTree Default\"}\n\t\t];\n\n\t\tfunction getFont(treeId, node) {\n\t\t\treturn node.font ? node.font : {};\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Custom Fonts</h1>\n<h6>[ File Path: core/custom_font.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1. For display custom fonts,  you need to set setting.view.fontCss attribute, see the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">2. If you need the node name support the HTML, please set the 'setting.view.nameIsHTML' attribute, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Set the font does not require to special node data , but if used to differentiate between different types of nodes, the corresponding data can set custom attributes.</li>\n\t\t\t\t<li>The css style of data stored in the nodes within this demo</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/custom_icon.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Custom Icon </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Custom Icon 01\", open:true, iconOpen:\"../../../css/zTreeStyle/img/diy/1_open.png\", iconClose:\"../../../css/zTreeStyle/img/diy/1_close.png\"},\n\t\t\t{ id:11, pId:1, name:\"leaf node 01\", icon:\"../../../css/zTreeStyle/img/diy/2.png\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 02\", icon:\"../../../css/zTreeStyle/img/diy/3.png\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 03\", icon:\"../../../css/zTreeStyle/img/diy/5.png\"},\n\t\t\t{ id:2, pId:0, name:\"Custom Icon 02\", open:true, icon:\"../../../css/zTreeStyle/img/diy/4.png\"},\n\t\t\t{ id:21, pId:2, name:\"leaf node 01\", icon:\"../../../css/zTreeStyle/img/diy/6.png\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 02\", icon:\"../../../css/zTreeStyle/img/diy/7.png\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 03\", icon:\"../../../css/zTreeStyle/img/diy/8.png\"},\n\t\t\t{ id:3, pId:0, name:\"no Custom Icon\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 01\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 02\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 03\"}\n\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Custom Icon - icon</h1>\n<h6>[ File Path: core/custom_icon.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Custom icon does not require special configuration setting.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use node data’s icon / iconOpen / iconClose attribute show custom icon.</li>\n\t\t\t\t<li class=\"highlight_red\">See the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Because of the time limitation, demo uses png images, if you need transparent images in IE6 browser, make a gif image, or use a special 'css filter' on ie6 browser.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/custom_iconSkin.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Custom Icon Skin </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Custom Icon 01\", open:true, iconSkin:\"pIcon01\"},\n\t\t\t{ id:11, pId:1, name:\"leaf node 01\", iconSkin:\"icon01\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 02\", iconSkin:\"icon02\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 03\", iconSkin:\"icon03\"},\n\t\t\t{ id:2, pId:0, name:\"Custom Icon 02\", open:true, iconSkin:\"pIcon02\"},\n\t\t\t{ id:21, pId:2, name:\"leaf node 01\", iconSkin:\"icon04\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 02\", iconSkin:\"icon05\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 03\", iconSkin:\"icon06\"},\n\t\t\t{ id:3, pId:0, name:\"no Custom Icon\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 01\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 02\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 03\"}\n\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.pIcon01_ico_open{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_open.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.pIcon01_ico_close{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_close.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.pIcon02_ico_open, .ztree li span.button.pIcon02_ico_close{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/2.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon01_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/3.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon02_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/4.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon03_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/5.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon04_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/6.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon05_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/7.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon06_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/8.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>Custom Icon - iconSkin</h1>\n<h6>[ File Path: core/custom_iconSkin.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Custom icon does not require special configuration setting.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use the node data iconSkin attributes and  css show custom icon.</li>\n\t\t\t\t<li class=\"highlight_red\">See the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Because of the time limitation, demo uses png images, if you need transparent images in IE6 browser, make a gif image, or use a special 'css filter' on ie6 browser.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/expand.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeExpand / onExpand && beforeCollapse / onCollapse</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle:\"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tbeforeCollapse: beforeCollapse,\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonCollapse: onCollapse,\n\t\t\t\tonExpand: onExpand\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"ordinary parent 1\", t:\"I am ordinary, just expand or collapse on me\", open:false},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\", t:\"...\"},\n\t\t\t{ id:12, pId:1, name:\"ordinary parent 2\", t:\"I am ordinary, just expand or collapse on me\", open:false},\n\t\t\t{ id:121, pId:12, name:\"parent node - 121\", t:\"...\", open:true},\n\t\t\t{ id:1211, pId:121, name:\"parent node - 1211\", t:\"...\", open:false},\n\t\t\t{ id:1212, pId:1211, name:\"leaf node - 1212\", t:\"...\"},\n\t\t\t{ id:1213, pId:121, name:\"parent node - 1213\", t:\"...\", open:false},\n\t\t\t{ id:1214, pId:1213, name:\"leaf node - 1214\", t:\"...\"},\n\t\t\t{ id:123, pId:12, name:\"leaf node 2-3\", t:\"...\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node  1-3\", t:\"...\"},\n\t\t\t{ id:2, pId:0, name:\"can't collapse me\", t:\"can't collapse me...Unless you use expandAll method.\", open:true, collapse:false},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\", t:\"You can't collapse my parent\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\", t:\"You can't collapse my parent\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\", t:\"You can't collapse my parent\"},\n\t\t\t{ id:3, pId:0, name:\"can't expand me\", t:\"can't expand me...Unless you use expandAll method.\", open:false, expand:false},\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\", t:\"OMG, you can see me!! Do you use the expandAll method?\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\", t:\"OMG, you can see me!! Do you use the expandAll method?\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\", t:\"OMG, you can see me!! Do you use the expandAll method?\"},\n\t\t\t{ id:4, pId:0, name:\"empty parent 1\", t:\"I have nothing...\", isParent:true, open:false}\n\t\t];\n\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tif (treeNode.isParent) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\talert(\"This Demo is used to test the parent node expand / collapse...\\n\\nGo to click parent node... \");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfunction beforeCollapse(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeCollapse ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.collapse !== false);\n\t\t}\n\t\tfunction onCollapse(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onCollapse ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name);\n\t\t}\t\t\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeExpand ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.expand !== false);\n\t\t}\n\t\tfunction onExpand(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onExpand ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name);\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction expandNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (type.indexOf(\"All\")<0 && nodes.length == 0) {\n\t\t\t\talert(\"Please select one parent node at first...\");\n\t\t\t}\n\n\t\t\tif (type == \"expandAll\") {\n\t\t\t\tzTree.expandAll(true);\n\t\t\t} else if (type == \"collapseAll\") {\n\t\t\t\tzTree.expandAll(false);\n\t\t\t} else {\n\t\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tzTree.setting.view.fontCss = {};\n\t\t\t\t\tif (type == \"expand\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], true, null, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"collapse\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], false, null, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"toggle\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], null, null, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"expandSon\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], true, true, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"collapseSon\") {\n\t\t\t\t\t\tzTree.expandNode(nodes[i], false, true, null, callbackFlag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#expandBtn\").bind(\"click\", {type:\"expand\"}, expandNode);\n\t\t\t$(\"#collapseBtn\").bind(\"click\", {type:\"collapse\"}, expandNode);\n\t\t\t$(\"#toggleBtn\").bind(\"click\", {type:\"toggle\"}, expandNode);\n\t\t\t$(\"#expandSonBtn\").bind(\"click\", {type:\"expandSon\"}, expandNode);\n\t\t\t$(\"#collapseSonBtn\").bind(\"click\", {type:\"collapseSon\"}, expandNode);\n\t\t\t$(\"#expandAllBtn\").bind(\"click\", {type:\"expandAll\"}, expandNode);\n\t\t\t$(\"#collapseAllBtn\").bind(\"click\", {type:\"collapseAll\"}, expandNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Control of Expand Node</h1>\n<h6>[ File Path: core/expand.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeCollapse / onCollapse'<br/>&nbsp;&nbsp;'beforeExpand / onExpand' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'beforeCollapse / onCollapse' and 'beforeExpand / onExpand' callback function can control whether to allow expand or collapse the parent node\n\t\t\t\t\t. This simple demo shows how to monitor the collapse and expand event.</li>\n\t\t\t\t<li><p>Try: <br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> Whether trigger the callback when execution expandNode() method.<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;Single Node --[ <a id=\"expandBtn\" href=\"#\" title=\"expand...\" onclick=\"return false;\">expand</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"collapseBtn\" href=\"#\" title=\"collapse...\" onclick=\"return false;\">collapse</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"toggleBtn\" href=\"#\" title=\"what do you want?...\" onclick=\"return false;\">toggle</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;Single Node (including child) --[ <a id=\"expandSonBtn\" href=\"#\" title=\"expand (including child)...\" onclick=\"return false;\">expand</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"collapseSonBtn\" href=\"#\" title=\"collapse (including child)...\" onclick=\"return false;\">collapse</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;All Nodes --[ <a id=\"expandAllBtn\" href=\"#\" title=\"expand All!!\" onclick=\"return false;\">expand All</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"collapseAllBtn\" href=\"#\" title=\"collapse All!!\" onclick=\"return false;\">collapse All</a> ]</p>\n\t\t\t\t<li><p><span class=\"highlight_red\">How to use zTreeObj.updateNode method,  please see the API documentation.</span><br/>\n\t\t\t\t\tcollapse / expand log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Set attributes about 'setting.callback.beforeCollapse / onCollapse / beforeExpand / onExpand', please see the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">If you need to adjust the expand / collapse animation effects, please see the API documentation about setting.view.expandSpeed.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/noicon.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - noIcon </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowIcon: showIconForTree\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"pNode 11\"},\n\t\t\t{ id:111, pId:11, name:\"leaf node 111\"},\n\t\t\t{ id:112, pId:11, name:\"leaf node 112\"},\n\t\t\t{ id:113, pId:11, name:\"leaf node 113\"},\n\t\t\t{ id:114, pId:11, name:\"leaf node 114\"},\n\t\t\t{ id:12, pId:1, name:\"pNode 12\"},\n\t\t\t{ id:121, pId:12, name:\"leaf node 121\"},\n\t\t\t{ id:122, pId:12, name:\"leaf node 122\"},\n\t\t\t{ id:123, pId:12, name:\"leaf node 123\"},\n\t\t\t{ id:124, pId:12, name:\"leaf node 124\"},\n\t\t\t{ id:13, pId:1, name:\"pNode 13 - no child\", isParent:true},\n\t\t\t{ id:2, pId:0, name:\"pNode 2\"},\n\t\t\t{ id:21, pId:2, name:\"pNode 21\", open:true},\n\t\t\t{ id:211, pId:21, name:\"leaf node 211\"},\n\t\t\t{ id:212, pId:21, name:\"leaf node 212\"},\n\t\t\t{ id:213, pId:21, name:\"leaf node 213\"},\n\t\t\t{ id:214, pId:21, name:\"leaf node 214\"},\n\t\t\t{ id:22, pId:2, name:\"pNode 22\"},\n\t\t\t{ id:221, pId:22, name:\"leaf node 221\"},\n\t\t\t{ id:222, pId:22, name:\"leaf node 222\"},\n\t\t\t{ id:223, pId:22, name:\"leaf node 223\"},\n\t\t\t{ id:224, pId:22, name:\"leaf node 224\"},\n\t\t\t{ id:23, pId:2, name:\"pNode 23\"},\n\t\t\t{ id:231, pId:23, name:\"leaf node 231\"},\n\t\t\t{ id:232, pId:23, name:\"leaf node 232\"},\n\t\t\t{ id:233, pId:23, name:\"leaf node 233\"},\n\t\t\t{ id:234, pId:23, name:\"leaf node 234\"},\n\t\t\t{ id:3, pId:0, name:\"pNode 3 - no child\", isParent:true}\n\t\t];\n\n\t\tfunction showIconForTree(treeId, treeNode) {\n\t\t\treturn !treeNode.isParent;\n\t\t};\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\n</HEAD>\n\n<BODY>\n<h1>Don't Show Icon</h1>\n<h6>[ File Path: core/noicon.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo using Function set to the parent node does not display the icon.</li>\n\t\t\t\t<li class=\"highlight_red\">Whether to display the icon, you need to set setting.view.showIcon attribute, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>TreeNode data does not require special settings. If you need some node display icon, and some nodes are not displayed, you can add special attributes to the node data for identification.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/noline.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - noLine </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowLine: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"pNode 11\"},\n\t\t\t{ id:111, pId:11, name:\"leaf node 111\"},\n\t\t\t{ id:112, pId:11, name:\"leaf node 112\"},\n\t\t\t{ id:113, pId:11, name:\"leaf node 113\"},\n\t\t\t{ id:114, pId:11, name:\"leaf node 114\"},\n\t\t\t{ id:12, pId:1, name:\"pNode 12\"},\n\t\t\t{ id:121, pId:12, name:\"leaf node 121\"},\n\t\t\t{ id:122, pId:12, name:\"leaf node 122\"},\n\t\t\t{ id:123, pId:12, name:\"leaf node 123\"},\n\t\t\t{ id:124, pId:12, name:\"leaf node 124\"},\n\t\t\t{ id:13, pId:1, name:\"pNode 13 - no child\", isParent:true},\n\t\t\t{ id:2, pId:0, name:\"pNode 2\"},\n\t\t\t{ id:21, pId:2, name:\"pNode 21\", open:true},\n\t\t\t{ id:211, pId:21, name:\"leaf node 211\"},\n\t\t\t{ id:212, pId:21, name:\"leaf node 212\"},\n\t\t\t{ id:213, pId:21, name:\"leaf node 213\"},\n\t\t\t{ id:214, pId:21, name:\"leaf node 214\"},\n\t\t\t{ id:22, pId:2, name:\"pNode 22\"},\n\t\t\t{ id:221, pId:22, name:\"leaf node 221\"},\n\t\t\t{ id:222, pId:22, name:\"leaf node 222\"},\n\t\t\t{ id:223, pId:22, name:\"leaf node 223\"},\n\t\t\t{ id:224, pId:22, name:\"leaf node 224\"},\n\t\t\t{ id:23, pId:2, name:\"pNode 23\"},\n\t\t\t{ id:231, pId:23, name:\"leaf node 231\"},\n\t\t\t{ id:232, pId:23, name:\"leaf node 232\"},\n\t\t\t{ id:233, pId:23, name:\"leaf node 233\"},\n\t\t\t{ id:234, pId:23, name:\"leaf node 234\"},\n\t\t\t{ id:3, pId:0, name:\"pNode 3 - no child\", isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\n</HEAD>\n\n<BODY>\n<h1>Don't Show Line</h1>\n<h6>[ File Path: core/noline.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Whether to display the line, you need to set setting.view.showLine attribute, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>TreeNode data does not require special settings</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/otherMouse.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Other Mouse Event</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle:\"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeMouseDown: beforeMouseDown,\n\t\t\t\tbeforeMouseUp: beforeMouseUp,\n\t\t\t\tbeforeRightClick: beforeRightClick,\n\t\t\t\tonMouseDown: onMouseDown,\n\t\t\t\tonMouseUp: onMouseUp,\n\t\t\t\tonRightClick: onRightClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Can't rClick 0\", t:\"Try RightClick\", open:true, right:false},\n\t\t\t{ id:11, pId:1, name:\"Can't rClick 1\", t:\"Try RightClick\", right:false},\n\t\t\t{ id:12, pId:1, name:\"Can't rClick 2\", t:\"Try RightClick\", right:false},\n\t\t\t{ id:13, pId:1, name:\"Can't rClick 3\", t:\"Try RightClick\", right:false},\n\t\t\t{ id:2, pId:0, name:\"Can't msDown 0\", t:\"Try MouseDown\", open:true, down:false},\n\t\t\t{ id:21, pId:2, name:\"Can't msDown 1\", t:\"Try MouseDown\", down:false},\n\t\t\t{ id:22, pId:2, name:\"Can't msDown 2\", t:\"Try MouseDown\", down:false},\n\t\t\t{ id:23, pId:2, name:\"Can't msDown 3\", t:\"Try MouseDown\", down:false},\n\t\t\t{ id:3, pId:0, name:\"Can't msUp 0\", t:\"Try MouseUp\", open:true, up:false},\n\t\t\t{ id:31, pId:3, name:\"Can't msUp 1\", t:\"Try MouseUp\", up:false},\n\t\t\t{ id:32, pId:3, name:\"Can't msUp 2\", t:\"Try MouseUp\", up:false},\n\t\t\t{ id:33, pId:3, name:\"Can't msUp 3\", t:\"Try MouseUp\", up:false}\n\t\t];\n\n\t\tvar log, className = {down:\"dark\", up:\"dark\", right:\"dark\"};\n\t\tfunction beforeMouseDown(treeId, treeNode) {\n\t\t\tclassName.down = (className.down === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeMouseDown ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"down\" );\n\t\t\treturn (!treeNode || treeNode.down != false);\n\t\t}\n\t\tfunction onMouseDown(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onMouseDown ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"down\" );\n\t\t}\n\t\tfunction beforeMouseUp(treeId, treeNode) {\n\t\t\tclassName.up = (className.up === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeMouseUp ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"up\" );\n\t\t\treturn (!treeNode || treeNode.up != false);\n\t\t}\n\t\tfunction onMouseUp(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onMouseUp ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"up\" );\n\t\t}\n\t\tfunction beforeRightClick(treeId, treeNode) {\n\t\t\tclassName.right = (className.right === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeRightClick ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"right\" );\n\t\t\treturn (!treeNode || treeNode.right != false);\n\t\t}\n\t\tfunction onRightClick(event, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onRightClick ]&nbsp;&nbsp;\" + (treeNode?treeNode.name:\"root\"), \"right\" );\n\t\t}\n\t\tfunction showLog(str, logType) {\n\t\t\tlog = $(\"#log\" + \"_\" + logType);\n\t\t\tlog.append(\"<li class='\"+className[logType]+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 2) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Other Mouse Events for zTree</h1>\n<h6>[ File Path: core/otherMouse.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeMousedown / onMousedown / beforeMouseup / onMouseup / beforeRightClick / onRightClick' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree provide these types of mouse event callbacks, in order to facilitate the user to extend the functionality. And doesn't affect zTree normal function, This simple demo shows how to monitor the mousedown/mouseup/rightClick event.</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">Try clicking with the mouse on the zTree (left or right),  by the way to see log.</span><br/>\n\t\t\t\t\tmousedown event log:<br/>\n\t\t\t\t\t<ul id=\"log_down\" class=\"log small\"></ul>\n\t\t\t\t\tmouseup event log:<br/>\n\t\t\t\t\t<ul id=\"log_up\" class=\"log small\"></ul>\n\t\t\t\t\trightClick event log:<br/>\n\t\t\t\t\t<ul id=\"log_right\" class=\"log small\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Set attributes about 'setting.callback.beforeMousedown / onMousedown / beforeMouseup / onMouseup / beforeRightClick / onRightClick', please see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/searchNodes.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - getNodeByParam / getNodesByParam / getNodesByParamFuzzy</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"t\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tfontCss: getFontCss\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"search node demo 1\", t:\"id=1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can search 'name'\", t:\"id=11\"},\n\t\t\t{ id:12, pId:1, name:\"can search 'level'\", t:\"id=12\"},\n\t\t\t{ id:13, pId:1, name:\"can search 'id'\", t:\"id=13\"},\n\t\t\t{ id:14, pId:1, name:\"can search other attr\", t:\"id=14\"},\n\t\t\t{ id:2, pId:0, name:\"search node demo 2\", t:\"id=2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"can search single node\", t:\"id=21\"},\n\t\t\t{ id:22, pId:2, name:\"can search nodes array\", t:\"id=22\"},\n\t\t\t{ id:23, pId:2, name:\"search me\", t:\"id=23\"},\n\t\t\t{ id:3, pId:0, name:\"search node demo 3\", t:\"id=3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"My id is : 31\", t:\"id=31\"},\n\t\t\t{ id:32, pId:31, name:\"My id is : 32\", t:\"id=32\"},\n\t\t\t{ id:33, pId:32, name:\"My id is : 33\", t:\"id=33\"}\n\t\t];\n\n\t\tfunction focusKey(e) {\n\t\t\tif (key.hasClass(\"empty\")) {\n\t\t\t\tkey.removeClass(\"empty\");\n\t\t\t}\n\t\t}\n\t\tfunction blurKey(e) {\n\t\t\tif (key.get(0).value === \"\") {\n\t\t\t\tkey.addClass(\"empty\");\n\t\t\t}\n\t\t}\n\t\tvar lastValue = \"\", nodeList = [], fontCss = {};\n\t\tfunction clickRadio(e) {\n\t\t\tlastValue = \"\";\n\t\t\tsearchNode(e);\n\t\t}\n\t\tfunction searchNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (!$(\"#getNodesByFilter\").attr(\"checked\")) {\n\t\t\t\tvar value = $.trim(key.get(0).value);\n\t\t\t\tvar keyType = \"\";\n\t\t\t\tif ($(\"#name\").attr(\"checked\")) {\n\t\t\t\t\tkeyType = \"name\";\n\t\t\t\t} else if ($(\"#level\").attr(\"checked\")) {\n\t\t\t\t\tkeyType = \"level\";\n\t\t\t\t\tvalue = parseInt(value);\n\t\t\t\t} else if ($(\"#id\").attr(\"checked\")) {\n\t\t\t\t\tkeyType = \"id\";\n\t\t\t\t\tvalue = parseInt(value);\n\t\t\t\t}\n\t\t\t\tif (key.hasClass(\"empty\")) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t}\n\t\t\t\tif (lastValue === value) return;\n\t\t\t\tlastValue = value;\n\t\t\t\tif (value === \"\") return;\n\t\t\t\tupdateNodes(false);\n\n\t\t\t\tif ($(\"#getNodeByParam\").attr(\"checked\")) {\n\t\t\t\t\tvar node = zTree.getNodeByParam(keyType, value);\n\t\t\t\t\tif (node === null) {\n\t\t\t\t\t\tnodeList = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodeList = [node];\n\t\t\t\t\t}\n\t\t\t\t} else if ($(\"#getNodesByParam\").attr(\"checked\")) {\n\t\t\t\t\tnodeList = zTree.getNodesByParam(keyType, value);\n\t\t\t\t} else if ($(\"#getNodesByParamFuzzy\").attr(\"checked\")) {\n\t\t\t\t\tnodeList = zTree.getNodesByParamFuzzy(keyType, value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tupdateNodes(false);\n\t\t\t\tnodeList = zTree.getNodesByFilter(filter);\n\t\t\t}\n\t\t\tupdateNodes(true);\n\n\t\t}\n\t\tfunction updateNodes(highlight) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor( var i=0, l=nodeList.length; i<l; i++) {\n\t\t\t\tnodeList[i].highlight = highlight;\n\t\t\t\tzTree.updateNode(nodeList[i]);\n\t\t\t}\n\t\t}\n\t\tfunction getFontCss(treeId, treeNode) {\n\t\t\treturn (!!treeNode.highlight) ? {color:\"#A60000\", \"font-weight\":\"bold\"} : {color:\"#333\", \"font-weight\":\"normal\"};\n\t\t}\n\t\tfunction filter(node) {\n\t\t\treturn !node.isParent && node.isFirstNode;\n\t\t}\n\n\t\tvar key;\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tkey = $(\"#key\");\n\t\t\tkey.bind(\"focus\", focusKey)\n\t\t\t.bind(\"blur\", blurKey)\n\t\t\t.bind(\"propertychange\", searchNode)\n\t\t\t.bind(\"input\", searchNode);\n\t\t\t$(\"#name\").bind(\"change\", clickRadio);\n\t\t\t$(\"#level\").bind(\"change\", clickRadio);\n\t\t\t$(\"#id\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodeByParam\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodesByParam\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodesByParamFuzzy\").bind(\"change\", clickRadio);\n\t\t\t$(\"#getNodesByFilter\").bind(\"change\", clickRadio);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Search Nodes</h1>\n<h6>[ File Path: core/searchNodes.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of getNodeByParam / getNodesByParam / getNodesByParamFuzzy</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">How to use ’zTreeObj.getNodeByParam / getNodesByParam / getNodesByParamFuzzy / getNodeByTId‘ method,  please see the API documentation.</li>\n\t\t\t\t<li><p>Try to search: <br/>\n\t\t\t\t\t\tattribute( value ): <input type=\"text\" id=\"key\" value=\"\" class=\"empty\" /><br/>\n\t\t\t\t\t\tattribute( key ): <input type=\"radio\" id=\"name\" name=\"keyType\" class=\"radio first\" checked /><span>name (string)</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"level\" name=\"keyType\" class=\"radio\" style=\"margin-left:68px;\" /><span>level (number) ... root node's level is 0</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"id\" name=\"keyType\" class=\"radio\" style=\"margin-left:68px;\" /><span>id (number)</span><br/>\n\t\t\t\t\t\tmethod: <input type=\"radio\" id=\"getNodeByParam\" name=\"funType\" class=\"radio first\" /><span>getNodeByParam</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"getNodesByParam\" name=\"funType\" class=\"radio\" style=\"margin-left:36px;\" /><span>getNodesByParam</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"getNodesByParamFuzzy\" name=\"funType\" class=\"radio\" style=\"margin-left:36px;\" checked /><span>getNodesByParamFuzzy (only string)</span><br/>\n\t\t\t\t\t\t<input type=\"radio\" id=\"getNodesByFilter\" name=\"funType\" class=\"radio\" style=\"margin-left:36px;\" /><span>getNodesByFilter (see source: function filter)</span><br/>\n\t\t\t\t\t</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Do not need to set the setting.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Note: Please ensure that the incoming value type is  the same as  type of attribute.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/simpleData.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Simple Data</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"pNode 11\"},\n\t\t\t{ id:111, pId:11, name:\"leaf node 111\"},\n\t\t\t{ id:112, pId:11, name:\"leaf node 112\"},\n\t\t\t{ id:113, pId:11, name:\"leaf node 113\"},\n\t\t\t{ id:114, pId:11, name:\"leaf node 114\"},\n\t\t\t{ id:12, pId:1, name:\"pNode 12\"},\n\t\t\t{ id:121, pId:12, name:\"leaf node 121\"},\n\t\t\t{ id:122, pId:12, name:\"leaf node 122\"},\n\t\t\t{ id:123, pId:12, name:\"leaf node 123\"},\n\t\t\t{ id:124, pId:12, name:\"leaf node 124\"},\n\t\t\t{ id:13, pId:1, name:\"pNode 13 - no child\", isParent:true},\n\t\t\t{ id:2, pId:0, name:\"pNode 2\"},\n\t\t\t{ id:21, pId:2, name:\"pNode 21\", open:true},\n\t\t\t{ id:211, pId:21, name:\"leaf node 211\"},\n\t\t\t{ id:212, pId:21, name:\"leaf node 212\"},\n\t\t\t{ id:213, pId:21, name:\"leaf node 213\"},\n\t\t\t{ id:214, pId:21, name:\"leaf node 214\"},\n\t\t\t{ id:22, pId:2, name:\"pNode 22\"},\n\t\t\t{ id:221, pId:22, name:\"leaf node 221\"},\n\t\t\t{ id:222, pId:22, name:\"leaf node 222\"},\n\t\t\t{ id:223, pId:22, name:\"leaf node 223\"},\n\t\t\t{ id:224, pId:22, name:\"leaf node 224\"},\n\t\t\t{ id:23, pId:2, name:\"pNode 23\"},\n\t\t\t{ id:231, pId:23, name:\"leaf node 231\"},\n\t\t\t{ id:232, pId:23, name:\"leaf node 232\"},\n\t\t\t{ id:233, pId:23, name:\"leaf node 233\"},\n\t\t\t{ id:234, pId:23, name:\"leaf node 234\"},\n\t\t\t{ id:3, pId:0, name:\"pNode 3 - no child\", isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>Simple JSON Data</h1>\n<h6>[ File Path: core/simpleData.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Must set setting.data.simple attributes,  see the API documentation for more related contents.</li>\n\t\t\t\t<li>The setting.view in API documentation is associated with the display of the zTree.</li>\n\t\t\t\t<li>To change the 'name', 'children', 'title' attribute, please refer to the API documentation about 'setting.data.key'.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Id / pId that include parent-child relationship between nodes is needed if you use Simple model of the JSON data, and other attributes please refer to the instructions within setting.data.simple.\n\t\t\t\t<div><pre xmlns=\"\"><code>For example:\nvar nodes = [\n\t{id:1, pId:0, name: \"pNode 01\"},\n\t{id:11, pId:1, name: \"child 01\"},\n\t{id:12, pId:1, name: \"child 02\"}\n];</code></pre></div></li>\n\t\t\t\t<li>To set nodes expanded by default, set treeNode.open attribute.</li>\n\t\t\t\t<li>To get parent node which has no child node, set treeNode.isParent attribute.</li>\n\t\t\t\t<li>Please refer to the API documentation \"treeNode data details\" to view other attributes description.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>The simple JSON data model has been used almost everywhere, which can be learned easily.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/standardData.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Standard Data </TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\t};\n\n\t\tvar zNodes =[\n\t\t\t{ name:\"pNode 01\", open:true,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ name:\"pNode 11\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"leaf node 111\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 112\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 113\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 114\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"pNode 12\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"leaf node 121\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 122\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 123\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 124\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"pNode 13 - no child\", isParent:true}\n\t\t\t\t]},\n\t\t\t{ name:\"pNode 02\",\n\t\t\t\tchildren: [\n\t\t\t\t\t{ name:\"pNode 21\", open:true,\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"leaf node 211\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 212\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 213\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 214\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"pNode 22\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"leaf node 221\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 222\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 223\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 224\"}\n\t\t\t\t\t\t]},\n\t\t\t\t\t{ name:\"pNode 23\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t{ name:\"leaf node 231\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 232\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 233\"},\n\t\t\t\t\t\t\t{ name:\"leaf node 234\"}\n\t\t\t\t\t\t]}\n\t\t\t\t]},\n\t\t\t{ name:\"pNode 3 - no child\", isParent:true}\n\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Standard JSON Data</h1>\n<h6>[ File Path: core/standardData.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">No extrally setting needed for basic functions.</li>\n\t\t\t\t<li>The setting.view in API documentation is associated with the display of the zTree.</li>\n\t\t\t\t<li>To change the 'name', 'children', 'title' attribute, please refer to the API documentation about 'setting.data.key'.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Need to use nested JSON data that include parent-child relationship between nodes\n\t\t\t\t\t<div><pre xmlns=\"\"><code>For example:\nvar nodes = [\n\t{name: \"pNode 01\", children: [\n\t\t{name: \"child 01\"},\n\t\t{name: \"child 02\"}\n\t]}\n];</code></pre></div>\n\t\t\t\t</li>\n\t\t\t\t<li>To set nodes expanded by default, set treeNode.open attribute.</li>\n\t\t\t\t<li>No child nodes of parent node, set treeNode.isParent attribute.</li>\n\t\t\t\t<li>Please refer to the API documentation \"treeNode data details\" to view other attributes description.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/update_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - updateNode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 01\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 01\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 02\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 03\"},\n\t\t\t{ id:2, pId:0, name:\"pNode 02\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 01\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 02\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 03\"},\n\t\t\t{ id:3, pId:0, name:\"pNode 03\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 01\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 02\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 03\"}\n\t\t];\n\n\t\tvar nameCount = 0, iconCount = 1, color = [0, 0, 0];\n\t\tfunction updateNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node...\");\n\t\t\t}\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.setting.view.fontCss = {};\n\t\t\t\tif (type == \"rename\") {\n\t\t\t\t\tnodes[i].name = nodes[i].name.replace(/_[\\d]*$/g, \"\") + \"_\" + (nameCount++);\n\t\t\t\t} else if (type == \"icon\") {\n\t\t\t\t\tif (iconCount > 8) {\n\t\t\t\t\t\tnodes[i].iconSkin = null;\n\t\t\t\t\t\ticonCount = 1;\n\t\t\t\t\t} else if (nodes[i].isParent) {\n\t\t\t\t\t\tnodes[i].iconSkin = nodes[i].iconSkin ? null : \"pIcon01\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodes[i].iconSkin = \"icon0\" + (iconCount++);\n\t\t\t\t\t}\n\t\t\t\t} else if (type == \"color\") {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t\tvar r1 = Math.round(Math.random()*3 - 0.5);\n\t\t\t\t\tcolor[r1] = 15;\n\t\t\t\t\tvar r2 = Math.round(Math.random()*3 - 0.5);\n\t\t\t\t\twhile (r2 === r1) {\n\t\t\t\t\t\tr2 = Math.round(Math.random()*3 - 0.5);\n\t\t\t\t\t}\n\t\t\t\t\tcolor[r2] = Math.round(Math.random()*16-0.5);\n\t\t\t\t\tzTree.setting.view.fontCss[\"color\"] = \"#\"+color[0].toString(16)+color[1].toString(16)+color[2].toString(16);\n\t\t\t\t} else if (type == \"font\") {\n\t\t\t\t\tvar style = $(\"#\" + nodes[i].tId + \"_a\").css(\"font-style\") ;\n\t\t\t\t\tstyle = (style==\"italic\" ? \"normal\" : \"italic\");\n\t\t\t\t\tzTree.setting.view.fontCss[\"font-style\"] = style;\n\t\t\t\t}\n\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#rename\").bind(\"click\", {type:\"rename\"}, updateNode);\n\t\t\t$(\"#changeIcon\").bind(\"click\", {type:\"icon\"}, updateNode);\n\t\t\t$(\"#changeColor\").bind(\"click\", {type:\"color\"}, updateNode);\n\t\t\t$(\"#changeFont\").bind(\"click\", {type:\"font\"}, updateNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.pIcon01_ico_open{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_open.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.pIcon01_ico_close{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/1_close.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon01_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/2.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon02_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/3.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon03_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/4.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon04_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/5.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon05_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/6.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon06_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/7.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon07_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/8.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon08_ico_docu{margin-right:2px; background: url(../../../css/zTreeStyle/img/diy/9.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>Update Node - zTree methods</h1>\n<h6>[ File Path: core/update_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of updateNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">How to use zTreeObj.updateNode method,  please see the API documentation.</li>\n\t\t\t\t<li><p>This Demo can only select one parent node<br/>\n\t\t\t\t\tTry: [ <a id=\"rename\" href=\"#\" onclick=\"return false;\">Change Name</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"changeIcon\" href=\"#\" onclick=\"return false;\">Change Icon</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"changeColor\" href=\"#\" onclick=\"return false;\">Change Color</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"changeFont\" href=\"#\" onclick=\"return false;\">Change Italic Font</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Do not need to set the setting.</li>\n\t\t\t\t<li class=\"highlight_red\">You can modify the node style with setting.view.fontCss.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">In the API documentation has detail description about the 'zTreeObj.updateNode method'.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>4、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This demo only made ​by the core js, so does not include the checkbox update.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/core/url.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - url</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"zTree Home\", url:\"http://www.treejs.cn/\", target:\"_blank\"},\n\t\t\t{ id:2, pId:0, name:\"zTree in Google\", url:\"http://code.google.com/p/jquerytree/\", target:\"_blank\"},\n\t\t\t{ id:3, pId:0, name:\"zTree in Iteye\", url:\"http://ztreeapi.iteye.com/\", target:\"_blank\"},\n\t\t\t{ id:4, pId:0, name:\"Nothing...\", url:\"\", target:\"_blank\", click:\"alert('I can not jump...');\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>Hyperlinks Demo</h1>\n<h6>[ File Path: core/url.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No extrally setting needed for basic functions.</li>\n\t\t\t\t<li class=\"highlight_red\">If you need flexible control of hyperlinks to jump, please use the 'onClick' callback. See the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1. the 'url' attribute is used to save the hyperlink's path.</li>\n\t\t\t\t<li class=\"highlight_red\">2. the 'target' attribute is used to save the hyperlink's target.</li>\n\t\t\t\t<li class=\"highlight_red\">3. the 'click' attribute is used to save the hyperlink's 'onclick' attribute.</li>\n\t\t\t\t<li>Please refer to the API documentation \"treeNode data details\" to view other attributes description.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/checkbox.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - checkbox</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"can check 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"can check 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"can check 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"can check 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"can check 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\"}\n\t\t];\n\n\t\tvar code;\n\n\t\tfunction setCheck() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tpy = $(\"#py\").attr(\"checked\")? \"p\":\"\",\n\t\t\tsy = $(\"#sy\").attr(\"checked\")? \"s\":\"\",\n\t\t\tpn = $(\"#pn\").attr(\"checked\")? \"p\":\"\",\n\t\t\tsn = $(\"#sn\").attr(\"checked\")? \"s\":\"\",\n\t\t\ttype = { \"Y\":py + sy, \"N\":pn + sn};\n\t\t\tzTree.setting.check.chkboxType = type;\n\t\t\tshowCode('setting.check.chkboxType = { \"Y\" : \"' + type.Y + '\", \"N\" : \"' + type.N + '\" };');\n\t\t}\n\t\tfunction showCode(str) {\n\t\t\tif (!code) code = $(\"#code\");\n\t\t\tcode.empty();\n\t\t\tcode.append(\"<li>\"+str+\"</li>\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\n\t\t\t$(\"#py\").bind(\"change\", setCheck);\n\t\t\t$(\"#sy\").bind(\"change\", setCheck);\n\t\t\t$(\"#pn\").bind(\"change\", setCheck);\n\t\t\t$(\"#sn\").bind(\"change\", setCheck);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox Operation</h1>\n<h6>[ File Path: excheck/checkbox.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Must set setting.check attributes, see the API documentation for more related contents.</li>\n\t\t\t\t<li><p>Linkage relationship between parent and child nodes:<br/>\n\t\t\t\t\t\tcheck: <input type=\"checkbox\" id=\"py\" class=\"checkbox first\" checked /><span>affect the parent</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"sy\" class=\"checkbox first\" checked /><span>affect the child</span><br/>\n\t\t\t\t\t\tuncheck: <input type=\"checkbox\" id=\"pn\" class=\"checkbox first\" checked /><span>affect the parent</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"sn\" class=\"checkbox first\" checked /><span>affect the child</span><br/>\n\t\t\t\t\t\t<ul id=\"code\" class=\"log\" style=\"height:20px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), If you need to initialize the node is checked, please set treeNode.checked attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">2), If you need to initialize the node's checkbox is disabled, please set treeNode.chkDisabled attribute. See the API documentation for more related contents and 'chkDisabled Demo'.</li>\n\t\t\t\t<li class=\"highlight_red\">3), If you need to initialize the node don't show checkbox, please set treeNode.nocheck attribute. See the API documentation for more related contents and 'nocheck Demo'.</li>\n\t\t\t\t<li class=\"highlight_red\">4), If you need to change 'checked' to other attribute, please set setting.data.key.checked attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li>5), By the way, please see the API documentation for 'treeNode.checkedOld / getCheckStatus / check_Child_State / check_Focus'.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/checkbox_chkDisabled.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Checkbox chkDisabled</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkDisabledInherit: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"disabled 1-1-1\", chkDisabled:true},\n\t\t\t{ id:112, pId:11, name:\"can check 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"disabled 1-2\", chkDisabled:true, checked:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"disabled 1-2-1\", checked:true},\n\t\t\t{ id:122, pId:12, name:\"disabled 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\"}\n\t\t];\n\n\t\tfunction disabledNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tdisabled = e.data.disabled,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t}\n\t\t\tif (disabled) {\n\t\t\t\tinheritParent = $(\"#py\").attr(\"checked\");\n\t\t\t\tinheritChildren = $(\"#sy\").attr(\"checked\");\n\t\t\t} else {\n\t\t\t\tinheritParent = $(\"#pn\").attr(\"checked\");\n\t\t\t\tinheritChildren = $(\"#sn\").attr(\"checked\");\n\t\t\t}\n\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.setChkDisabled(nodes[i], disabled, inheritParent, inheritChildren);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#disabledTrue\").bind(\"click\", {disabled: true}, disabledNode);\n\t\t\t$(\"#disabledFalse\").bind(\"click\", {disabled: false}, disabledNode);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox chkDisabled Demo</h1>\n<h6>[ File Path: excheck/checkbox_chkDisabled.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of 'setChkDisabled' method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>'setChkDisabled' method can set the node's checkbox / radio to be disabled or abled. See the API documentation for more related contents.</li>\n\t\t\t\t<li><p>Try:<br/>\n\t\t\t\t\tdisabled: <input type=\"checkbox\" id=\"py\" class=\"checkbox first\" /><span>affect the parent</span>\n\t\t\t\t\t<input type=\"checkbox\" id=\"sy\" class=\"checkbox first\" checked /><span>affect the child</span><br/>\n\t\t\t\t\tunDisabled: <input type=\"checkbox\" id=\"pn\" class=\"checkbox first\" checked /><span>affect the parent</span>\n\t\t\t\t\t<input type=\"checkbox\" id=\"sn\" class=\"checkbox first\" checked /><span>affect the child</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledTrue\" href=\"#\" title=\"set checkbox to be disabled.\" onclick=\"return false;\">be disabled</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledFalse\" href=\"#\" title=\"set checkbox to be abled.\" onclick=\"return false;\">be abled</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo only shows how use the ‘chkDisabled’ attribute, detailed configuration information, please refer to 'Checkbox Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), If you need to initialize the node's checkbox is disabled, please set treeNode.chkDisabled attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li>2), By the way, please see the 'Checkbox Operation' Demo.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/checkbox_count.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - getChangeCheckedNodes / getCheckedNodes</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"can check  1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"can check 1-2-1\", checked:true},\n\t\t\t{ id:122, pId:12, name:\"can check 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"can check 1-2-3\"},\n\t\t\t{ id:13, pId:1, name:\"can check 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:223, pId:22, name:\"can check 2-2-3\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\", checked:true}\n\t\t];\n\n\t\tvar clearFlag = false;\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tcount();\n\t\t\tif (clearFlag) {\n\t\t\t\tclearCheckedOldNodes();\n\t\t\t}\n\t\t}\n\t\tfunction clearCheckedOldNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getChangeCheckedNodes();\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tnodes[i].checkedOld = nodes[i].checked;\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tcheckCount = zTree.getCheckedNodes(true).length,\n\t\t\tnocheckCount = zTree.getCheckedNodes(false).length,\n\t\t\tchangeCount = zTree.getChangeCheckedNodes().length;\n\t\t\t$(\"#checkCount\").text(checkCount);\n\t\t\t$(\"#nocheckCount\").text(nocheckCount);\n\t\t\t$(\"#changeCount\").text(changeCount);\n\n\t\t}\n\t\tfunction createTree() {\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tcount();\n\t\t\tclearFlag = $(\"#last\").attr(\"checked\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\tcreateTree();\t\t\t\n\t\t\t$(\"#init\").bind(\"change\", createTree);\n\t\t\t$(\"#last\").bind(\"change\", createTree);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Statistics Checkbox is Checked</h1>\n<h6>[ File Path: excheck/checkbox_count.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of getChangeCheckedNodes / getCheckedNodes</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">How to use zTreeObj.getChangeCheckedNodes / getCheckedNodes method,  please see the API documentation.</li>\n\t\t\t\t<li><p>Check the checkbox, observe the number of changes:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:130px;\">\n\t\t\t\t\t\t<li>Total check node: <span id=\"checkCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>Total uncheck node: <span id=\"nocheckCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>Modify the state of checkbox: <br/>\n\t\t\t\t\t\t\t<input type=\"radio\" id=\"init\" name=\"stateType\" class=\"radio first\" checked style=\"margin-left:68px;\"/><span>Compared with zTree initialization</span><br/>\n\t\t\t\t\t\t\t<input type=\"radio\" id=\"last\" name=\"stateType\" class=\"radio first\" style=\"margin-left:68px;\"/><span>Compared with the last check</span></li>\n\t\t\t\t\t\t<li>Total change the checkbox state of node: <span id=\"changeCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Checkbox Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Checkbox Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/checkbox_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeCheck / onCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeCheck: beforeCheck,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"can check 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"can check 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"can check 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can't check 2\", open:true, doCheck:false},\n\t\t\t{ id:21, pId:2, name:\"can't check 2-1\", doCheck:false},\n\t\t\t{ id:22, pId:2, name:\"can't check 2-2\", checked:true, open:true, doCheck:false},\n\t\t\t{ id:221, pId:22, name:\"can't chk 2-2-1\", doCheck:false},\n\t\t\t{ id:222, pId:22, name:\"can't chk 2-2-2\", checked:true, doCheck:false},\n\t\t\t{ id:23, pId:2, name:\"can't check 2-3\", doCheck:false}\n\t\t];\n\t\t\n\t\tvar code, log, className = \"dark\";\n\t\tfunction beforeCheck(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.doCheck !== false);\n\t\t}\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t}\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 6) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction checkNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (type.indexOf(\"All\")<0 && nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t}\n\n\t\t\tif (type == \"checkAllTrue\") {\n\t\t\t\tzTree.checkAllNodes(true);\n\t\t\t} else if (type == \"checkAllFalse\") {\n\t\t\t\tzTree.checkAllNodes(false);\n\t\t\t} else {\n\t\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tif (type == \"checkTrue\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, false, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalse\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, false, callbackFlag);\n\t\t\t\t\t} else if (type == \"toggle\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], null, false, callbackFlag);\n\t\t\t\t\t}else if (type == \"checkTruePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, true, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalsePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, true, callbackFlag);\n\t\t\t\t\t} else if (type == \"togglePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], null, true, callbackFlag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction setAutoTrigger(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.setting.check.autoCheckTrigger = $(\"#autoCallbackTrigger\").attr(\"checked\");\n\t\t\t$(\"#autoCheckTriggerValue\").html(zTree.setting.check.autoCheckTrigger ? \"true\" : \"false\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#checkTrue\").bind(\"click\", {type:\"checkTrue\"}, checkNode);\n\t\t\t$(\"#checkFalse\").bind(\"click\", {type:\"checkFalse\"}, checkNode);\n\t\t\t$(\"#toggle\").bind(\"click\", {type:\"toggle\"}, checkNode);\n\t\t\t$(\"#checkTruePS\").bind(\"click\", {type:\"checkTruePS\"}, checkNode);\n\t\t\t$(\"#checkFalsePS\").bind(\"click\", {type:\"checkFalsePS\"}, checkNode);\n\t\t\t$(\"#togglePS\").bind(\"click\", {type:\"togglePS\"}, checkNode);\n\t\t\t$(\"#checkAllTrue\").bind(\"click\", {type:\"checkAllTrue\"}, checkNode);\n\t\t\t$(\"#checkAllFalse\").bind(\"click\", {type:\"checkAllFalse\"}, checkNode);\n\n\t\t\t$(\"#autoCallbackTrigger\").bind(\"change\", {}, setAutoTrigger);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox - zTree methods</h1>\n<h6>[ File Path: excheck/checkbox_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeCheck / onCheck' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'beforeCheck / onCheck' callback function can control whether to allow changes to the node check state. This simple demo shows how to monitor the check event.</li>\n\t\t\t\t<li><p>By the way also demonstrates how to use the 'checkNode / checkAllNodes' method triggers 'beforeCheck / onCheck' callback, Try: <br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"autoCallbackTrigger\" /> setting.check.autoCheckTrigger: <span id=\"autoCheckTriggerValue\">false</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> Whether trigger the callback when execution checkNode() method. <br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;Node --[ <a id=\"checkTrue\" href=\"#\" title=\"check...\" onclick=\"return false;\">check</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkFalse\" href=\"#\" title=\"uncheck...\" onclick=\"return false;\">uncheck</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"toggle\" href=\"#\" title=\"toggle...\" onclick=\"return false;\">toggle</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;Node (relationships) --[ <a id=\"checkTruePS\" href=\"#\" title=\"check(relationships)...\" onclick=\"return false;\">check</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkFalsePS\" href=\"#\" title=\"uncheck(maintain relationships)...\" onclick=\"return false;\">uncheck</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"togglePS\" href=\"#\" title=\"toggle...\" onclick=\"return false;\">toggle</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;All Nodes --[ <a id=\"checkAllTrue\" href=\"#\" title=\"check All!!\" onclick=\"return false;\">check</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkAllFalse\" href=\"#\" title=\"uncheck All!!\" onclick=\"return false;\">uncheck</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">How to use 'zTreeObj.checkNode / checkAllNodes' method,  please see the API documentation.</span><br/>\n\t\t\t\t\tbeforeCheck / onCheck log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:130px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Checkbox Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Checkbox Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/checkbox_halfCheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Checkbox halfCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"chk\":\"chk\"},\n\t\t\t\tdataFilter: dataFilter\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tautoCheckTrigger: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess\n\t\t\t}\n\t\t};\n\n\t\tfunction dataFilter(treeId, parentNode, childNodes) {\n\t\t\tif (parentNode.checkedEx === true) {\n\t\t\t\tfor(var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\t\tchildNodes[i].checked = parentNode.checked;\n\t\t\t\t\tchildNodes[i].halfCheck = false;\n\t\t\t\t\tchildNodes[i].checkedEx = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\t\tfunction onCheck(event, treeId, treeNode) {\n\t\t\tcancelHalf(treeNode)\n\t\t\ttreeNode.checkedEx = true;\n\t\t}\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tcancelHalf(treeNode);\n\t\t}\n\t\tfunction cancelHalf(treeNode) {\n\t\t\tif (treeNode.checkedEx) return;\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\ttreeNode.halfCheck = false;\n\t\t\tzTree.updateNode(treeNode);\t\t\t\n\t\t}\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"half 1\", halfCheck:true, isParent:true},\n\t\t\t{ id:2, pId:0, name:\"half 2\", halfCheck:true, checked:true, isParent:true},\n\t\t\t{ id:3, pId:0, name:\"no half 3\", checked:true, isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox halfCheck Demo</h1>\n<h6>[ File Path: excheck/checkbox_halfCheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of Demo</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This demo implements the check operation of the dynamic tree</li>\n\t\t\t\t<li class=\"highlight_red\">1). After loaded child nodes, the parent node's 'halfCheck' attribute will be invalid immediately.</li>\n\t\t\t\t<li class=\"highlight_red\">2). If you check the parent node, so will effect the child nodes's check status.</li>\n\t\t\t\t<li class=\"highlight_red\">3). If you check the parent node, it's child node's 'halfCheck' attribute will be invalid.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Half-checked functional don't need to configure any parameter. But it is accessibility, can not used alone. So please configure the parameters which you need.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), Please set treeNode.halfCheck attribute, before zTree initialize. See the API documentation for more related contents.</li>\n\t\t\t\t<li>2), By the way, please see the 'Checkbox Operation' Demo.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/checkbox_nocheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - no checkbox</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tnocheckInherit: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"no checkbox 1-1-1\", nocheck:true},\n\t\t\t{ id:112, pId:11, name:\"can check 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"no checkbox 1-2\", nocheck:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"no checkbox 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"no checkbox 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\"}\n\t\t];\n\t\tfunction nocheckNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnocheck = e.data.nocheck,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t}\n\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tnodes[i].nocheck = nocheck;\n\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#nocheckTrue\").bind(\"click\", {nocheck: true}, nocheckNode);\n\t\t\t$(\"#nocheckFalse\").bind(\"click\", {nocheck: false}, nocheckNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Checkbox nocheck Demo</h1>\n<h6>[ File Path: excheck/checkbox_nocheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo only shows how use the ‘nocheck’ attribute, detailed configuration information, please refer to 'Checkbox Operation'</li>\n\t\t\t\t<li class=\"highlight_red\">setting.check.nocheckInherit can set the child nodes to automatically inherit the parent node's 'nocheck' attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li><p>Try:<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"nocheckTrue\" href=\"#\" title=\"set checkbox to be hidden.\" onclick=\"return false;\">hide checkbox</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"nocheckFalse\" href=\"#\" title=\"set checkbox to be show.\" onclick=\"return false;\">show checkbox</a> ]\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), If you need to initialize the node don't show checkbox, please set treeNode.nocheck attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li>2), By the way, please see the 'Checkbox Operation' Demo.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - radio</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"can check 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"can check 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"can check 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"can check 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"can check 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\"}\n\t\t];\n\t\t\n\t\tvar code;\t\t\n\t\tfunction setCheck() {\n\t\t\tvar type = $(\"#level\").attr(\"checked\")? \"level\":\"all\";\n\t\t\tsetting.check.radioType = type;\n\t\t\tshowCode('setting.check.radioType = \"' + type + '\";');\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n\t\tfunction showCode(str) {\n\t\t\tif (!code) code = $(\"#code\");\n\t\t\tcode.empty();\n\t\t\tcode.append(\"<li>\"+str+\"</li>\");\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\tsetCheck();\t\t\t\n\t\t\t$(\"#level\").bind(\"change\", setCheck);\n\t\t\t$(\"#all\").bind(\"change\", setCheck);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio Operation</h1>\n<h6>[ File Path: excheck/radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Must set setting.check attributes, see the API documentation for more related contents.</li>\n\t\t\t\t<li><p>group range of radio: <br/><input type=\"radio\" id=\"level\" class=\"radio first\" name=\"radioGroup\" checked /><span>within the same level</span>\n\t\t\t\t\t\t<input type=\"radio\" id=\"all\" class=\"radio\" name=\"radioGroup\"/><span>within the whole tree</span><br/>\n\t\t\t\t\t\t<ul id=\"code\" class=\"log\" style=\"height:20px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), If you need to initialize the node is checked, please set treeNode.checked attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">2), If you need to initialize the node don't show radio, please set treeNode.nocheck attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">3), If you need to change 'checked' to other attribute, please set setting.data.key.checked attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li>4), By the way, please see the API documentation for 'treeNode.checkedOld / getCheckStatus / check_Child_State / check_Focus'.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/radio_chkDisabled.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Radio chkDisabled</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"disabled 1-1-1\", chkDisabled:true, checked:true},\n\t\t\t{ id:112, pId:11, name:\"can check 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"disabled 1-2\", chkDisabled:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"disabled 1-2-1\", checked:true},\n\t\t\t{ id:122, pId:12, name:\"disabled 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\"}\n\t\t];\n\t\t\n\t\tfunction disabledNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tdisabled = e.data.disabled,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t}\n\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.setChkDisabled(nodes[i], disabled);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#disabledTrue\").bind(\"click\", {disabled: true}, disabledNode);\n\t\t\t$(\"#disabledFalse\").bind(\"click\", {disabled: false}, disabledNode);\n\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio chkDisabled Demo</h1>\n<h6>[ File Path: excheck/radio_chkDisabled.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of 'setChkDisabled' method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>'setChkDisabled' method can set the node's checkbox / radio to be disabled or abled. See the API documentation for more related contents.</li>\n\t\t\t\t<li><p>Try:<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledTrue\" href=\"#\" title=\"set checkbox to be disabled.\" onclick=\"return false;\">be disabled</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"disabledFalse\" href=\"#\" title=\"set checkbox to be abled.\" onclick=\"return false;\">be abled</a> ]</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo only shows how use the ‘nocheck’ attribute, detailed configuration information, please refer to 'Radio Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), If you need to initialize the node don't show radio, please set treeNode.chkDisabled attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li>2), By the way, please see the 'Radio Operation' Demo.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/radio_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeCheck / onCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeCheck: beforeCheck,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"no radio 1-1\", nocheck:true},\n\t\t\t{ id:12, pId:1, name:\"can check 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"can check 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"can check 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"no radio 1-2-3\", nocheck:true},\n\t\t\t{ id:13, pId:1, name:\"can check 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"can't check 2\", open:true, doCheck:false},\n\t\t\t{ id:21, pId:2, name:\"can't check 2-1\", doCheck:false},\n\t\t\t{ id:22, pId:2, name:\"can't check 2-2\", checked:true, open:true, doCheck:false},\n\t\t\t{ id:221, pId:22, name:\"can't chk 2-2-1\", doCheck:false},\n\t\t\t{ id:222, pId:22, name:\"can't chk 2-2-2\", checked:true, doCheck:false},\n\t\t\t{ id:223, pId:22, name:\"can't chk 2-2-3\", doCheck:false},\n\t\t\t{ id:23, pId:2, name:\"can't check 2-3\", doCheck:false}\n\t\t];\n\t\t\n\t\tvar code, log, className = \"dark\";\n\t\tfunction beforeCheck(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t\treturn (treeNode.doCheck !== false);\n\t\t}\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onCheck ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name );\n\t\t}\t\t\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 6) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction checkNode(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\ttype = e.data.type,\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (type.indexOf(\"All\")<0 && nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t}\n\n\t\t\tif (type == \"checkAllTrue\") {\n\t\t\t\tzTree.checkAllNodes(true);\n\t\t\t} else if (type == \"checkAllFalse\") {\n\t\t\t\tzTree.checkAllNodes(false);\n\t\t\t} else {\n\t\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tif (type == \"checkTrue\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, null, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalse\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, null, callbackFlag);\n\t\t\t\t\t}else if (type == \"checkTruePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], true, true, callbackFlag);\n\t\t\t\t\t} else if (type == \"checkFalsePS\") {\n\t\t\t\t\t\tzTree.checkNode(nodes[i], false, true, callbackFlag);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#checkTrue\").bind(\"click\", {type:\"checkTrue\"}, checkNode);\n\t\t\t$(\"#checkFalse\").bind(\"click\", {type:\"checkFalse\"}, checkNode);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio - zTree methods</h1>\n<h6>[ File Path: excheck/radio_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeCheck / onCheck' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'beforeCheck / onCheck' callback function can control whether to allow changes to the node check state. This simple demo shows how to monitor the check event.</li>\n\t\t\t\t<li><p>By the way also demonstrates how to use the 'checkNode' method triggers 'beforeCheck / onCheck' callback, Try: <br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> Whether trigger the callback when execution checkNode() method.<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkTrue\" href=\"#\" title=\"check...\" onclick=\"return false;\">check</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"checkFalse\" href=\"#\" title=\"uncheck...\" onclick=\"return false;\">uncheck</a> ]</p>\n\t\t\t\t<li><p><span class=\"highlight_red\">How to use 'zTreeObj.checkNode' method,  please see the API documentation.</span><br/>\n\t\t\t\t\tbeforeCheck / onCheck log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:130px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Radio Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Radio Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/radio_halfCheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Radio halfCheck</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"chk\":\"chk\"}\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tautoCheckTrigger: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonAsyncSuccess: onAsyncSuccess\n\t\t\t}\n\t\t};\n\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tcancelHalf(treeNode);\n\t\t}\n\t\tfunction cancelHalf(treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\ttreeNode.halfCheck = false;\n\t\t\tzTree.updateNode(treeNode);\t\t\t\n\t\t}\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"half 1\", halfCheck:true, isParent:true},\n\t\t\t{ id:2, pId:0, name:\"half 2\", halfCheck:true, checked:true, isParent:true},\n\t\t\t{ id:3, pId:0, name:\"no half 3\", isParent:true}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio halfCheck Demo</h1>\n<h6>[ File Path: excheck/radio_halfCheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of Demo</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This demo implements the check operation of the dynamic tree</li>\n\t\t\t\t<li class=\"highlight_red\">1). After loaded child nodes, the parent node's 'halfCheck' attribute will be invalid immediately.</li>\n\t\t\t\t<li class=\"highlight_red\">2). If you check the parent node, will not effect the child nodes's check status.</li>\n\t\t\t\t<li class=\"highlight_red\">3). If you check the parent node, it's child node's 'halfCheck' attribute will still be valid.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Half-checked functional don't need to configure any parameter. But it is accessibility, can not used alone. So please configure the parameters which you need.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), Please set treeNode.halfCheck attribute, before zTree initialize. See the API documentation for more related contents.</li>\n\t\t\t\t<li>2), By the way, please see the 'Radio Operation' Demo.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/excheck/radio_nocheck.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - no radio</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<!--\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"level\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can check 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can check 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"no radio 1-1-1\", nocheck:true},\n\t\t\t{ id:112, pId:11, name:\"can check 1-1-2\"},\n\t\t\t{ id:12, pId:1, name:\"no radio 1-2\", nocheck:true, open:true},\n\t\t\t{ id:121, pId:12, name:\"no radio 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"no radio 1-2-2\"},\n\t\t\t{ id:2, pId:0, name:\"can check 2\", checked:true, open:true},\n\t\t\t{ id:21, pId:2, name:\"can check 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can check 2-2\", open:true},\n\t\t\t{ id:221, pId:22, name:\"can check 2-2-1\", checked:true},\n\t\t\t{ id:222, pId:22, name:\"can check 2-2-2\"},\n\t\t\t{ id:23, pId:2, name:\"can check 2-3\"}\n\t\t];\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Radio nocheck Demo</h1>\n<h6>[ File Path: excheck/radio_nocheck.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo only shows how use the ‘nocheck’ attribute, detailed configuration information, please refer to 'Radio Operation'</li>\n\t\t\t\t<li class=\"highlight_red\">setting.check.nocheckInherit can set the child nodes to automatically inherit the parent node's 'nocheck' attribute. See the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1), If you need to initialize the node don't show radio, please set treeNode.nocheck attribute. See the API documentation for more related contents.</li>\n\t\t\t\t<li>2), By the way, please see the 'Radio Operation' Demo.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/async_edit.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - async & edit</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter\n\t\t\t},\n\t\t\tview: {expandSpeed:\"\",\n\t\t\t\taddHoverDom: addHoverDom,\n\t\t\t\tremoveHoverDom: removeHoverDom,\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeRemove: beforeRemove,\n\t\t\t\tbeforeRename: beforeRename\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\t\tfunction beforeRemove(treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.selectNode(treeNode);\n\t\t\treturn confirm(\"Confirm delete node '\" + treeNode.name + \"' it?\");\n\t\t}\t\t\n\t\tfunction beforeRename(treeId, treeNode, newName) {\n\t\t\tif (newName.length == 0) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\t\tzTree.cancelEditName();\n\t\t\t\t\talert(\"Node name can not be empty.\");\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tvar newCount = 1;\n\t\tfunction addHoverDom(treeId, treeNode) {\n\t\t\tvar sObj = $(\"#\" + treeNode.tId + \"_span\");\n\t\t\tif (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n\t\t\tvar addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n\t\t\t\t+ \"' title='add node' onfocus='this.blur();'></span>\";\n\t\t\tsObj.after(addStr);\n\t\t\tvar btn = $(\"#addBtn_\"+treeNode.tId);\n\t\t\tif (btn) btn.bind(\"click\", function(){\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tzTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t};\n\t\tfunction removeHoverDom(treeId, treeNode) {\n\t\t\t$(\"#addBtn_\"+treeNode.tId).unbind().remove();\n\t\t};\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>Editing Dynamic Tree</h1>\n<h6>[ File Path: exedit/async_edit.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of editing dynamic tree</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>1) This Demo is based on the \"Advanced Edit Nodes\" to modify, and open to drag and drop functionality, can be compared with that demo.</li>\n\t\t\t\t<li>2) At the same time set the editing mode and dynamic mode can be achieved editing dynamic tree.</li>\n\t\t\t\t<li class=\"highlight_red\">3) zTree improved editing capabilities in dynamic mode, if the parent node hasn‘t loaded the child nodes, it will first load the child nodes before it add child node.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">1) Use editing features, please refer to \"Normal Drag Node Operation\" & \"Basic Edit Nodes\" demo of the instructions.</li>\n\t\t\t\t<li class=\"highlight_red\">2) Use dynamic loading, please refer to \"Dynamic Tree with Ajax\" demo of the instructions.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, please refer to \"Dynamic Tree with Ajax\" & \"Normal Drag Node Operation\" & \"Basic Edit Nodes\" demo of the instructions</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/drag.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - drag & drop</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeDrop: beforeDrop\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can drag 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can drag 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"can drag 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"can drag 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"can drag 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"can drag 1-2-3\"},\n\t\t\t{ id:13, pId:1, name:\"can't drag 1-3\", open:true, drag:false},\n\t\t\t{ id:131, pId:13, name:\"can't drag 1-3-1\", drag:false},\n\t\t\t{ id:132, pId:13, name:\"can't drag 1-3-2\", drag:false},\n\t\t\t{ id:133, pId:13, name:\"can drag 1-3-3\"},\n\t\t\t{ id:2, pId:0, name:\"can drag 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"can drag 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"can't drop 2-2\", open:true, drop:false},\n\t\t\t{ id:221, pId:22, name:\"can drag 2-2-1\"},\n\t\t\t{ id:222, pId:22, name:\"can drag 2-2-2\"},\n\t\t\t{ id:223, pId:22, name:\"can drag 2-2-3\"},\n\t\t\t{ id:23, pId:2, name:\"can drag 2-3\"}\n\t\t];\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\tfor (var i=0,l=treeNodes.length; i<l; i++) {\n\t\t\t\tif (treeNodes[i].drag === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDrop(treeId, treeNodes, targetNode, moveType) {\n\t\t\treturn targetNode ? targetNode.drop !== false : true;\n\t\t}\n\n\t\tfunction setCheck() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tisCopy = $(\"#copy\").attr(\"checked\"),\n\t\t\tisMove = $(\"#move\").attr(\"checked\"),\n\t\t\tprev = $(\"#prev\").attr(\"checked\"),\n\t\t\tinner = $(\"#inner\").attr(\"checked\"),\n\t\t\tnext = $(\"#next\").attr(\"checked\");\n\t\t\tzTree.setting.edit.drag.isCopy = isCopy;\n\t\t\tzTree.setting.edit.drag.isMove = isMove;\n\t\t\tshowCode(1, ['setting.edit.drag.isCopy = ' + isCopy, 'setting.edit.drag.isMove = ' + isMove]);\n\n\t\t\tzTree.setting.edit.drag.prev = prev;\n\t\t\tzTree.setting.edit.drag.inner = inner;\n\t\t\tzTree.setting.edit.drag.next = next;\n\t\t\tshowCode(2, ['setting.edit.drag.prev = ' + prev, 'setting.edit.drag.inner = ' + inner, 'setting.edit.drag.next = ' + next]);\n\t\t}\n\t\tfunction showCode(id, str) {\n\t\t\tvar code = $(\"#code\" + id);\n\t\t\tcode.empty();\n\t\t\tfor (var i=0, l=str.length; i<l; i++) {\n\t\t\t\tcode.append(\"<li>\"+str[i]+\"</li>\");\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\n\t\t\t$(\"#copy\").bind(\"change\", setCheck);\n\t\t\t$(\"#move\").bind(\"change\", setCheck);\n\t\t\t$(\"#prev\").bind(\"change\", setCheck);\n\t\t\t$(\"#inner\").bind(\"change\", setCheck);\n\t\t\t$(\"#next\").bind(\"change\", setCheck);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Normal Drag Node Operation</h1>\n<h6>[ File Path: exedit/drag.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo only shows how to drag & drop nodes using the basic method and configure parameters.</li>\n\t\t\t\t<li class=\"highlight_red\">1) Must set 'setting.edit' attributes, see the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">2) If you want to use drag & drop callback, muse to set 'setting.callback.beforeDrag / onDrag / beforeDrop / onDrop' attributes, see the API documentation for more related contents.</li>\n\t\t\t\t<li><p>Basic settings:<br/>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"copy\" class=\"checkbox first\" checked /><span>can Copy</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"move\" class=\"checkbox \" checked /><span>can Move</span><br/>\n\t\t\t\t\t\t<ul id=\"code1\" class=\"log\" style=\"height:42px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t<li><p>Position settings:<br/>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"prev\" class=\"checkbox first\" checked /><span>prev</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"inner\" class=\"checkbox \" checked /><span>inner</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"next\" class=\"checkbox \" checked /><span>next</span><br/>\n\t\t\t\t\t\t<ul id=\"code2\" class=\"log\" style=\"height:65px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/drag_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - copyNode / moveNode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeClick: beforeClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"parent node 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"parent node 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"parent node 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\"}\n\t\t];\n\n\t\tfunction fontCss(treeNode) {\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + \"_a\");\n\t\t\taObj.removeClass(\"copy\").removeClass(\"cut\");\n\t\t\tif (treeNode === curSrcNode) {\n\t\t\t\tif (curType == \"copy\") {\n\t\t\t\t\taObj.addClass(curType);\n\t\t\t\t} else {\n\t\t\t\t\taObj.addClass(curType);\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\treturn !treeNode.isCur;\n\t\t}\n\n\t\tvar curSrcNode, curType;\n\t\tfunction setCurSrcNode(treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (curSrcNode) {\n\t\t\t\tdelete curSrcNode.isCur;\n\t\t\t\tvar tmpNode = curSrcNode;\n\t\t\t\tcurSrcNode = null;\n\t\t\t\tfontCss(tmpNode);\n\t\t\t}\n\t\t\tcurSrcNode = treeNode;\n\t\t\tif (!treeNode) return;\n\n\t\t\tcurSrcNode.isCur = true;\t\t\t\n\t\t\tzTree.cancelSelectedNode();\n\t\t\tfontCss(curSrcNode);\n\t\t}\n\t\tfunction copy(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurType = \"copy\";\n\t\t\tsetCurSrcNode(nodes[0]);\n\t\t}\n\t\tfunction cut(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurType = \"cut\";\n\t\t\tsetCurSrcNode(nodes[0]);\n\t\t}\n\t\tfunction paste(e) {\n\t\t\tif (!curSrcNode) {\n\t\t\t\talert(\"Please select one node to copy or cut at first...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttargetNode = nodes.length>0? nodes[0]:null;\n\t\t\tif (curSrcNode === targetNode) {\n\t\t\t\talert(\"Can't move, the same source node and destination node.\");\n\t\t\t\treturn;\n\t\t\t} else if (curType === \"cut\" && ((!!targetNode && curSrcNode.parentTId === targetNode.tId) || (!targetNode && !curSrcNode.parentTId))) {\n\t\t\t\talert(\"Can't move, source node is the target node's child.\");\n\t\t\t\treturn;\n\t\t\t} else if (curType === \"copy\") {\n\t\t\t\ttargetNode = zTree.copyNode(targetNode, curSrcNode, \"inner\");\n\t\t\t} else if (curType === \"cut\") {\n\t\t\t\ttargetNode = zTree.moveNode(targetNode, curSrcNode, \"inner\");\n\t\t\t\tif (!targetNode) {\n\t\t\t\t\talert(\"Cutting failure, source node is the target node's parent.\");\n\t\t\t\t}\n\t\t\t\ttargetNode = curSrcNode;\n\t\t\t}\n\t\t\tsetCurSrcNode();\n\t\t\tdelete targetNode.isCur;\n\t\t\tzTree.selectNode(targetNode);\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#copy\").bind(\"click\", copy);\n\t\t\t$(\"#cut\").bind(\"click\", cut);\n\t\t\t$(\"#paste\").bind(\"click\", paste);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li a.copy{padding-top:0; background-color:#316AC5; color:white; border:1px #316AC5 solid;}\n.ztree li a.cut{padding-top:0; background-color:silver; color:#111; border:1px #316AC5 dotted;}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>Move / Copy - zTree methods</h1>\n<h6>[ File Path: exedit/drag_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of 'copyNode / moveNode' method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'copyNode / moveNode' method can also be achieved copy / move nodes.</li>\n\t\t\t\t<li><p>Try to copy or cut node:<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"copy\" href=\"#\" title=\"copy\" onclick=\"return false;\">copy</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"cut\" href=\"#\" title=\"cut\" onclick=\"return false;\">cut</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"paste\" href=\"#\" title=\"paste\" onclick=\"return false;\">paste</a> ]</p>\n\t\t\t\t<li class=\"highlight_red\">How to use 'zTreeObj.copyNode / moveNode' method,  please see the API documentation.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Normal Drag Node Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Normal Drag Node Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/drag_super.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeDrag / onDrag / beforeDrop / onDrop</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tdrag: {\n\t\t\t\t\tautoExpandTrigger: true,\n\t\t\t\t\tprev: dropPrev,\n\t\t\t\t\tinner: dropInner,\n\t\t\t\t\tnext: dropNext\n\t\t\t\t},\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeDrop: beforeDrop,\n\t\t\t\tbeforeDragOpen: beforeDragOpen,\n\t\t\t\tonDrag: onDrag,\n\t\t\t\tonDrop: onDrop,\n\t\t\t\tonExpand: onExpand\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"can drag 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"can drag 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"can drag 1-2\"},\n\t\t\t{ id:121, pId:12, name:\"can drag 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"can drag 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"can drag 1-2-3\"},\n\t\t\t{ id:13, pId:1, name:\"can't drag 1-3\", open:true, drag:false},\n\t\t\t{ id:131, pId:13, name:\"can't drag 1-3-1\", drag:false},\n\t\t\t{ id:132, pId:13, name:\"can't drag 1-3-2\", drag:false},\n\t\t\t{ id:132, pId:13, name:\"can't drag 1-3-3\", drag:false},\n\t\t\t{ id:2, pId:0, name:\"can't drag my child out 2\", open:true, childOuter:false},\n\t\t\t{ id:21, pId:2, name:\"can't be parent  2-1\", dropInner:false},\n\t\t\t{ id:22, pId:2, name:\"can't be root 2-2\", dropRoot:false},\n\t\t\t{ id:23, pId:2, name:\"try to drag me 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"can't add/sort my child 3\", open:true, childOrder:false, dropInner:false},\n\t\t\t{ id:31, pId:3, name:\"can drag 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"can drag 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"can drag 3-3\"}\n\t\t];\n\n\t\tfunction dropPrev(treeId, nodes, targetNode) {\n\t\t\tvar pNode = targetNode.getParentNode();\n\t\t\tif (pNode && pNode.dropInner === false) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tfor (var i=0,l=curDragNodes.length; i<l; i++) {\n\t\t\t\t\tvar curPNode = curDragNodes[i].getParentNode();\n\t\t\t\t\tif (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction dropInner(treeId, nodes, targetNode) {\n\t\t\tif (targetNode && targetNode.dropInner === false) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tfor (var i=0,l=curDragNodes.length; i<l; i++) {\n\t\t\t\t\tif (!targetNode && curDragNodes[i].dropRoot === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (curDragNodes[i].parentTId && curDragNodes[i].getParentNode() !== targetNode && curDragNodes[i].getParentNode().childOuter === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction dropNext(treeId, nodes, targetNode) {\n\t\t\tvar pNode = targetNode.getParentNode();\n\t\t\tif (pNode && pNode.dropInner === false) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tfor (var i=0,l=curDragNodes.length; i<l; i++) {\n\t\t\t\t\tvar curPNode = curDragNodes[i].getParentNode();\n\t\t\t\t\tif (curPNode && curPNode !== targetNode.getParentNode() && curPNode.childOuter === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tvar log, className = \"dark\", curDragNodes, autoExpandNode;\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeDrag ]&nbsp;&nbsp;&nbsp;&nbsp; drag: \" + treeNodes.length + \" nodes.\" );\n\t\t\tfor (var i=0,l=treeNodes.length; i<l; i++) {\n\t\t\t\tif (treeNodes[i].drag === false) {\n\t\t\t\t\tcurDragNodes = null;\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (treeNodes[i].parentTId && treeNodes[i].getParentNode().childDrag === false) {\n\t\t\t\t\tcurDragNodes = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurDragNodes = treeNodes;\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDragOpen(treeId, treeNode) {\n\t\t\tautoExpandNode = treeNode;\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDrop(treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeDrop ]&nbsp;&nbsp;&nbsp;&nbsp; moveType:\" + moveType);\n\t\t\tshowLog(\"target: \" + (targetNode ? targetNode.name : \"root\") + \"  -- is \"+ (isCopy==null? \"cancel\" : isCopy ? \"copy\" : \"move\"));\n\t\t\treturn true;\n\t\t}\n\t\tfunction onDrag(event, treeId, treeNodes) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" onDrag ]&nbsp;&nbsp;&nbsp;&nbsp; drag: \" + treeNodes.length + \" nodes.\" );\n\t\t}\n\t\tfunction onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" onDrop ]&nbsp;&nbsp;&nbsp;&nbsp; moveType:\" + moveType);\n\t\t\tshowLog(\"target: \" + (targetNode ? targetNode.name : \"root\") + \"  -- is \"+ (isCopy==null? \"cancel\" : isCopy ? \"copy\" : \"move\"))\n\t\t}\n\t\tfunction onExpand(event, treeId, treeNode) {\n\t\t\tif (treeNode === autoExpandNode) {\n\t\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\t\tshowLog(\"[ \"+getTime()+\" onExpand ]&nbsp;&nbsp;&nbsp;&nbsp;\" + treeNode.name);\n\t\t\t}\n\t\t}\n\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tfunction setTrigger() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.setting.edit.drag.autoExpandTrigger = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#callbackTrigger\").bind(\"change\", {}, setTrigger);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Advanced Drag Node Operation</h1>\n<h6>[ File Path: exedit/drag_super.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeDrag / onDrag'<br/>&nbsp;&nbsp;'beforeDrop / onDrop' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo shows the configuration parameters to achieve a more flexible use of drag and drop rules, the operation can be compared with \"Normal Drag Node Operation\" example.</li>\n\t\t\t\t<li>This Demo default allows copy & move.</li>\n\t\t\t\t<li class=\"highlight_red\">This Demo set 'setting.edit.drag.prev / inner / next'  as 'function', you can dynamically set according to the node, which can not use beforeDrop callback function, the effect of drag and drop will be better.</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">After be familiar with these configurations, I think you can design a more flexible and rational rules!</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> 拖拽节点时自动展开父节点是否触发 callback<br/>\n\t\t\t\t\tdrag / drop log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Normal Drag Node Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Normal Drag Node Operation'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/edit.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - edit</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"parent node 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"parent node 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"parent node 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\"}\n\t\t];\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tfunction setEdit() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tremove = $(\"#remove\").attr(\"checked\"),\n\t\t\trename = $(\"#rename\").attr(\"checked\"),\n\t\t\tremoveTitle = $.trim($(\"#removeTitle\").get(0).value),\n\t\t\trenameTitle = $.trim($(\"#renameTitle\").get(0).value);\n\t\t\tzTree.setting.edit.showRemoveBtn = remove;\n\t\t\tzTree.setting.edit.showRenameBtn = rename;\n\t\t\tzTree.setting.edit.removeTitle = removeTitle;\n\t\t\tzTree.setting.edit.renameTitle = renameTitle;\n\t\t\tshowCode(['setting.edit.showRemoveBtn = ' + remove, 'setting.edit.showRenameBtn = ' + rename,\n\t\t\t\t'setting.edit.removeTitle = \"' + removeTitle +'\"', 'setting.edit.renameTitle = \"' + renameTitle + '\"']);\n\t\t}\n\t\tfunction showCode(str) {\n\t\t\tvar code = $(\"#code\");\n\t\t\tcode.empty();\n\t\t\tfor (var i=0, l=str.length; i<l; i++) {\n\t\t\t\tcode.append(\"<li>\"+str[i]+\"</li>\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetEdit();\n\t\t\t$(\"#remove\").bind(\"change\", setEdit);\n\t\t\t$(\"#rename\").bind(\"change\", setEdit);\n\t\t\t$(\"#removeTitle\").bind(\"propertychange\", setEdit)\n\t\t\t.bind(\"input\", setEdit);\n\t\t\t$(\"#renameTitle\").bind(\"propertychange\", setEdit)\n\t\t\t.bind(\"input\", setEdit);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Basic Edit Nodes</h1>\n<h6>[ File Path: exedit/edit.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo only shows how to edit nodes using the basic method and configure parameters.</li>\n\t\t\t\t<li class=\"highlight_red\">1) Must set 'setting.edit' attributes, see the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">2) If you want to use remove / rename callback, muse to set 'setting.callback.beforeRemove / onRemove / beforeRename / onRename' attributes, see the API documentation for more related contents.</li>\n\t\t\t\t<li class=\"highlight_red\">3) zTree do not provide buttons for add nodes, please use the custom control methods 'addHoverDom / removeHoverDom' to achieve added functionality, see the API documentation for more related contents. Another way, you can see the demo named 'Advanced Edit Nodes'.</li>\n\t\t\t\t<li><p>Edit button setting:<br/>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"remove\" class=\"checkbox first\" checked /><span>show remove button</span>\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"rename\" class=\"checkbox \" checked /><span>show edit button</span><br/>\n\t\t\t\t\t\ttitle for remove: <input type=\"text\" id=\"removeTitle\" value=\"remove\" /><br/>\n\t\t\t\t\t\ttitle for rename: <input type=\"text\" id=\"renameTitle\" value=\"rename\" />\n\t\t\t\t\t\t<ul id=\"code\" class=\"log\" style=\"height:85px;\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/edit_fun.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - addNodes / editName / removeNode / removeChildNodes</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkeep: {\n\t\t\t\t\tparent:true,\n\t\t\t\t\tleaf:true\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeRemove: beforeRemove,\n\t\t\t\tbeforeRename: beforeRename,\n\t\t\t\tonRemove: onRemove\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"parent node 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"parent node 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"parent node 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\"}\n\t\t];\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\t\tfunction beforeRemove(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t\treturn confirm(\"Confirm delete node '\" + treeNode.name + \"' it?\");\n\t\t}\n\t\tfunction onRemove(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t}\n\t\tfunction beforeRename(treeId, treeNode, newName) {\n\t\t\tif (newName.length == 0) {\n\t\t\t\talert(\"Node name can not be empty.\");\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tsetTimeout(function(){zTree.editName(treeNode)}, 10);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\t\t\n\t\tvar newCount = 1;\n\t\tfunction add(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tisParent = e.data.isParent,\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (treeNode) {\n\t\t\t\ttreeNode = zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, isParent:isParent, name:\"new node\" + (newCount++)});\n\t\t\t} else {\n\t\t\t\ttreeNode = zTree.addNodes(null, {id:(100 + newCount), pId:0, isParent:isParent, name:\"new node\" + (newCount++)});\n\t\t\t}\n\t\t\tif (treeNode) {\n\t\t\t\tzTree.editName(treeNode[0]);\n\t\t\t} else {\n\t\t\t\talert(\"Leaf node is locked and can not add child node.\");\n\t\t\t}\n\t\t};\n\t\tfunction edit() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.editName(treeNode);\n\t\t};\n\t\tfunction remove(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at first...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar callbackFlag = $(\"#callbackTrigger\").attr(\"checked\");\n\t\t\tzTree.removeNode(treeNode, callbackFlag);\n\t\t};\n\t\tfunction clearChildren(e) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\ttreeNode = nodes[0];\n\t\t\tif (nodes.length == 0 || !nodes[0].isParent) {\n\t\t\t\talert(\"Please select one parent node at first...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.removeChildNodes(treeNode);\n\t\t};\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#addParent\").bind(\"click\", {isParent:true}, add);\n\t\t\t$(\"#addLeaf\").bind(\"click\", {isParent:false}, add);\n\t\t\t$(\"#edit\").bind(\"click\", edit);\n\t\t\t$(\"#remove\").bind(\"click\", remove);\n\t\t\t$(\"#clearChildren\").bind(\"click\", clearChildren);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Edit Nodes - zTree methods</h1>\n<h6>[ File Path: exedit/edit_fun.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of 'addNodes / editName / removeNode / removeChildNodes' method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'addNodes / editName / removeNode / removeChildNodes' method can also be achieved copy / move nodes.</li>\n\t\t\t\t<li>Method 'cancelEditName' is effective, only when edit the node name. Please use it when necessary, this demo doesn't show how to use the method.</li>\n\t\t\t\t<li class=\"highlight_red\">Use setting.data.keep.parent / leaf attribute, you can lock the parent node and leaf node.</li>\n\t\t\t\t<li><p>Try to edit node:<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"callbackTrigger\" checked /> Whether trigger the callback when execution removeNode() method.<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addParent\" href=\"#\" title=\"add parent node\" onclick=\"return false;\">add parent node</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"addLeaf\" href=\"#\" title=\"add leaf node\" onclick=\"return false;\">add leaf node</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"edit\" href=\"#\" title=\"edit name\" onclick=\"return false;\">edit name</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"remove\" href=\"#\" title=\"remove node\" onclick=\"return false;\">remove node</a> ]\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"clearChildren\" href=\"#\" title=\"make child nodes to empty\" onclick=\"return false;\">make child nodes to empty</a> ]<br/>\n\t\t\t\t\tremove log:<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">How to use 'zTreeObj.addNodes / cancelEditName / editName / removeNode / removeChildNodes' method,  please see the API documentation.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Basic Edit Nodes'</li>\n\t\t\t\t<li class=\"highlight_red\">Lock the parent / leaf node status, need to set setting.data.keep.parent / leaf attribute, see the API documentation for more related contents</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Basic Edit Nodes'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/edit_super.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - beforeEditName / beforeRemove / onRemove / beforeRename / onRename</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\taddHoverDom: addHoverDom,\n\t\t\t\tremoveHoverDom: removeHoverDom,\n\t\t\t\tselectedMulti: false\n\t\t\t},\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\teditNameSelectAll: true,\n\t\t\t\tshowRemoveBtn: showRemoveBtn,\n\t\t\t\tshowRenameBtn: showRenameBtn\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeEditName: beforeEditName,\n\t\t\t\tbeforeRemove: beforeRemove,\n\t\t\t\tbeforeRename: beforeRename,\n\t\t\t\tonRemove: onRemove,\n\t\t\t\tonRename: onRename\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"parent node 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"parent node 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"parent node 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\"}\n\t\t];\n\t\tvar log, className = \"dark\";\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\treturn false;\n\t\t}\n\t\tfunction beforeEditName(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeEditName ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.selectNode(treeNode);\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (confirm(\"Start node '\" + treeNode.name + \"' editorial status?\")) {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tzTree.editName(treeNode);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t\treturn false;\n\t\t}\n\t\tfunction beforeRemove(treeId, treeNode) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog(\"[ \"+getTime()+\" beforeRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.selectNode(treeNode);\n\t\t\treturn confirm(\"Confirm delete node '\" + treeNode.name + \"' it?\");\n\t\t}\n\t\tfunction onRemove(e, treeId, treeNode) {\n\t\t\tshowLog(\"[ \"+getTime()+\" onRemove ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name);\n\t\t}\n\t\tfunction beforeRename(treeId, treeNode, newName, isCancel) {\n\t\t\tclassName = (className === \"dark\" ? \"\":\"dark\");\n\t\t\tshowLog((isCancel ? \"<span style='color:red'>\":\"\") + \"[ \"+getTime()+\" beforeRename ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name + (isCancel ? \"</span>\":\"\"));\n\t\t\tif (newName.length == 0) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\t\tzTree.cancelEditName();\n\t\t\t\t\talert(\"Node name can not be empty.\");\n\t\t\t\t}, 0);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction onRename(e, treeId, treeNode, isCancel) {\n\t\t\tshowLog((isCancel ? \"<span style='color:red'>\":\"\") + \"[ \"+getTime()+\" onRename ]&nbsp;&nbsp;&nbsp;&nbsp; \" + treeNode.name + (isCancel ? \"</span>\":\"\"));\n\t\t}\n\t\tfunction showRemoveBtn(treeId, treeNode) {\n\t\t\treturn !treeNode.isFirstNode;\n\t\t}\n\t\tfunction showRenameBtn(treeId, treeNode) {\n\t\t\treturn !treeNode.isLastNode;\n\t\t}\n\t\tfunction showLog(str) {\n\t\t\tif (!log) log = $(\"#log\");\n\t\t\tlog.append(\"<li class='\"+className+\"'>\"+str+\"</li>\");\n\t\t\tif(log.children(\"li\").length > 8) {\n\t\t\t\tlog.get(0).removeChild(log.children(\"li\")[0]);\n\t\t\t}\n\t\t}\n\t\tfunction getTime() {\n\t\t\tvar now= new Date(),\n\t\t\th=now.getHours(),\n\t\t\tm=now.getMinutes(),\n\t\t\ts=now.getSeconds(),\n\t\t\tms=now.getMilliseconds();\n\t\t\treturn (h+\":\"+m+\":\"+s+ \" \" +ms);\n\t\t}\n\n\t\tvar newCount = 1;\n\t\tfunction addHoverDom(treeId, treeNode) {\n\t\t\tvar sObj = $(\"#\" + treeNode.tId + \"_span\");\n\t\t\tif (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n\t\t\tvar addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n\t\t\t\t+ \"' title='add node' onfocus='this.blur();'></span>\";\n\t\t\tsObj.after(addStr);\n\t\t\tvar btn = $(\"#addBtn_\"+treeNode.tId);\n\t\t\tif (btn) btn.bind(\"click\", function(){\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tzTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t};\n\t\tfunction removeHoverDom(treeId, treeNode) {\n\t\t\t$(\"#addBtn_\"+treeNode.tId).unbind().remove();\n\t\t};\n\t\tfunction selectAll() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.setting.edit.editNameSelectAll =  $(\"#selectAll\").attr(\"checked\");\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#selectAll\").bind(\"click\", selectAll);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>Advanced Edit Nodes</h1>\n<h6>[ File Path: exedit/edit_super.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, 'beforeDrag / onDrag'<br/>&nbsp;&nbsp;'beforeEditName'<br/>&nbsp;&nbsp;'beforeRemove / onRemove'<br/>&nbsp;&nbsp;'beforeRename / onRename' callback function</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This demo shows the use of custom controls, the callback function to enhance the user experience, the operation can be compared with \"Basic Edit Nodes\" example.</li>\n\t\t\t\t<li>This demo achieve the Add nodes button.</li>\n\t\t\t\t<li>This demo achieve the confirmation when deleting node.</li>\n\t\t\t\t<li>This demo use the 'showRenameBtn' to hide the rename button, when the treeNode's isLastNode = true</li>\n\t\t\t\t<li>This demo use the 'showRemoveBtn' to hide the delete button, when the treeNode's isFirstNode = true</li>\n\t\t\t\t<li class=\"highlight_red\">Can use 'beforeEditName' callback trigger custom editing.</li>\n\t\t\t\t<li><p><span class=\"highlight_red\">After be familiar with these configurations, I think you can design a more flexible and rational rules!</span><br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" id=\"selectAll\" checked /> Whether select all text, when edit node's name.<br/>\n\t\t\t\t\tremove / rename log:&nbsp;&nbsp;<span style=\"color:red\">RED</span> is cancel edit (v3.5.13+)<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\"></ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Basic Edit Nodes'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Same as 'Basic Edit Nodes'</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exedit/multiTree.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - multiTree</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: beforeDrag,\n\t\t\t\tbeforeDrop: beforeDrop\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"parent node 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"parent node 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"parent node 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\"}\n\t\t];\n\n\t\tfunction beforeDrag(treeId, treeNodes) {\n\t\t\tfor (var i=0,l=treeNodes.length; i<l; i++) {\n\t\t\t\tif (treeNodes[i].drag === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tfunction beforeDrop(treeId, treeNodes, targetNode, moveType) {\n\t\t\treturn targetNode ? targetNode.drop !== false : true;\n\t\t}\n\t\t\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$.fn.zTree.init($(\"#treeDemo2\"), setting);\n\t\t\t\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Multiple Trees</h1>\n<h6>[ File Path: exedit/multiTree.html ]</h6>\n<div class=\"content_wrap\">\n\t<div>\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree enables drag and drop nodes between multiple trees, only need to create two draggable tree can be. And you can use the callback function and zTree method achieve a more complex operating rules, here is only the basic demo.</li>\n\t\t\t\t<li class=\"highlight_red\">On the 'setting' configuration information please refer to drag and drop, edit, etc. demo's instructions</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul id=\"treeDemo2\" class=\"ztree\"></ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exhide/checkbox.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Hide With Checkbox Mode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"title\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 1\", title:\"\", checked:true, open:true},\n\t\t\t{ id:11, pId:1, name:\"pNode 11\", title:\"\", checked:true},\n\t\t\t{ id:111, pId:11, name:\"leaf node 111\", title:\"\", checked:true, isHidden:true},\n\t\t\t{ id:112, pId:11, name:\"leaf node 112\", title:\"\"},\n\t\t\t{ id:113, pId:11, name:\"leaf node 113\", title:\"\"},\n\t\t\t{ id:12, pId:1, name:\"pNode 12\", title:\"\", isHidden:true},\n\t\t\t{ id:121, pId:12, name:\"leaf node 121\", title:\"\"},\n\t\t\t{ id:122, pId:12, name:\"leaf node 122\", title:\"\", isHidden:true},\n\t\t\t{ id:123, pId:12, name:\"leaf node 123\", title:\"\"},\n\t\t\t{ id:2, pId:0, name:\"pNode 2\", title:\"\"},\n\t\t\t{ id:21, pId:2, name:\"pNode 21\", title:\"\", isHidden:true},\n\t\t\t{ id:211, pId:21, name:\"leaf node 211\", title:\"\"},\n\t\t\t{ id:212, pId:21, name:\"leaf node 212\", title:\"\"},\n\t\t\t{ id:213, pId:21, name:\"leaf node 213\", title:\"\"},\n\t\t\t{ id:22, pId:2, name:\"pNode 22\", title:\"\"},\n\t\t\t{ id:221, pId:22, name:\"leaf node 221\", title:\"\"},\n\t\t\t{ id:222, pId:22, name:\"leaf node 222\", title:\"\"},\n\t\t\t{ id:223, pId:22, name:\"leaf node 223\", title:\"\"}\n\t\t];\n\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tcount();\n\t\t}\n\n\t\tfunction setTitle(node) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tvar nodes = node ? [node]:zTree.transformToArray(zTree.getNodes());\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tn.title = \"[\" + n.id + \"] isFirstNode = \" + n.isFirstNode + \", isLastNode = \" + n.isLastNode;\n\t\t\t\tzTree.updateNode(n);\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tfunction isForceHidden(node) {\n\t\t\t\tif (!node.parentTId) return false;\n\t\t\t\tvar p = node.getParentNode();\n\t\t\t\treturn !!p.isHidden ? true : isForceHidden(p);\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tcheckCount = zTree.getCheckedNodes(true).length,\n\t\t\tnocheckCount = zTree.getCheckedNodes(false).length,\n\t\t\thiddenNodes = zTree.getNodesByParam(\"isHidden\", true),\n\t\t\thiddenCount = hiddenNodes.length;\n\n\t\t\tfor (var i=0, j=hiddenNodes.length; i<j; i++) {\n\t\t\t\tvar n = hiddenNodes[i];\n\t\t\t\tif (isForceHidden(n)) {\n\t\t\t\t\thiddenCount -= 1;\n\t\t\t\t} else if (n.isParent) {\n\t\t\t\t\thiddenCount += zTree.transformToArray(n.children).length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$(\"#isHiddenCount\").text(hiddenNodes.length);\n\t\t\t$(\"#hiddenCount\").text(hiddenCount);\n\t\t\t$(\"#checkCount\").text(checkCount);\n\t\t\t$(\"#nocheckCount\").text(nocheckCount);\n\t\t}\n\t\tfunction showNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getNodesByParam(\"isHidden\", true);\n\t\t\tzTree.showNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\t\tfunction hideNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at least.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.hideNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#hideNodesBtn\").bind(\"click\", {type:\"rename\"}, hideNodes);\n\t\t\t$(\"#showNodesBtn\").bind(\"click\", {type:\"icon\"}, showNodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>Hide With Checkbox Mode</h1>\n<h6>[ File Path: exhide/checkbox.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use the freature which to hide nodes, you don't need to set any attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Before you init zTree, set treeNode.isHidden = true, and you can hide the node.</li>\n\t\t\t\t<li><p>Hide or show the nodes:<br/>\n\t\t\t\t\tTry: [ <a id=\"hideNodesBtn\" href=\"#\" onclick=\"return false;\">Hide the nodes which be selected</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"showNodesBtn\" href=\"#\" onclick=\"return false;\">Show all of the nodes which be hidden</a> ]<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:125px;\">\n\t\t\t\t\t\t<li>Total nodes which 'isHidden' attribute is true: <span id=\"isHiddenCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>Total hidden nodes: <span id=\"hiddenCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>Total check nodes: <span id=\"checkCount\" class=\"highlight_red\"></span>\n\t\t\t\t\t\t\t&nbsp;&nbsp;Total uncheck nodes: <span id=\"nocheckCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>After hide nodes, you can see the 'isFirstNode' and 'isLastNode' attributes on the nodes which still be shown.</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Hide nodes will effect the 'isFirstNode' and 'isLastNode' attributes, but will not effect the 'getPreNode()' and 'getNextNode()' method.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exhide/common.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Hide Ordinary Node</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"title\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 1\", title:\"\", open:true},\n\t\t\t{ id:11, pId:1, name:\"pNode 11\", title:\"\"},\n\t\t\t{ id:111, pId:11, name:\"leaf node  111\", title:\"\", isHidden:true},\n\t\t\t{ id:112, pId:11, name:\"leaf node  112\", title:\"\"},\n\t\t\t{ id:113, pId:11, name:\"leaf node  113\", title:\"\"},\n\t\t\t{ id:12, pId:1, name:\"pNode 12\", title:\"\", isHidden:true},\n\t\t\t{ id:121, pId:12, name:\"leaf node  121\", title:\"\"},\n\t\t\t{ id:122, pId:12, name:\"leaf node  122\", title:\"\", isHidden:true},\n\t\t\t{ id:123, pId:12, name:\"leaf node  123\", title:\"\"},\n\t\t\t{ id:2, pId:0, name:\"pNode 2\", title:\"\"},\n\t\t\t{ id:21, pId:2, name:\"pNode 21\", title:\"\", isHidden:true},\n\t\t\t{ id:211, pId:21, name:\"leaf node  211\", title:\"\"},\n\t\t\t{ id:212, pId:21, name:\"leaf node  212\", title:\"\"},\n\t\t\t{ id:213, pId:21, name:\"leaf node  213\", title:\"\"},\n\t\t\t{ id:22, pId:2, name:\"pNode 22\", title:\"\"},\n\t\t\t{ id:221, pId:22, name:\"leaf node  221\", title:\"\"},\n\t\t\t{ id:222, pId:22, name:\"leaf node  222\", title:\"\"},\n\t\t\t{ id:223, pId:22, name:\"leaf node  223\", title:\"\"}\n\t\t];\n\t\tfunction setTitle(node) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tvar nodes = node ? [node]:zTree.transformToArray(zTree.getNodes());\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tn.title = \"[\" + n.id + \"] isFirstNode = \" + n.isFirstNode + \", isLastNode = \" + n.isLastNode;\n\t\t\t\tzTree.updateNode(n);\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\thiddenCount = zTree.getNodesByParam(\"isHidden\", true).length;\n\t\t\t$(\"#hiddenCount\").text(hiddenCount);\n\t\t}\n\t\tfunction showNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getNodesByParam(\"isHidden\", true);\n\t\t\tzTree.showNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\t\tfunction hideNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at least.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.hideNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#hideNodesBtn\").bind(\"click\", {type:\"rename\"}, hideNodes);\n\t\t\t$(\"#showNodesBtn\").bind(\"click\", {type:\"icon\"}, showNodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>Hide Ordinary Node</h1>\n<h6>[ File Path: exhide/common.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use this freature, you don't need to set any attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Before you init zTree, set treeNode.isHidden = true, and you can hide the node.</li>\n\t\t\t\t<li><p>Hide or show the nodes:<br/><br/>\n\t\t\t\t\tTry: [ <a id=\"hideNodesBtn\" href=\"#\" onclick=\"return false;\">Hide the nodes which be selected</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"showNodesBtn\" href=\"#\" onclick=\"return false;\">Show all of the nodes which be hidden</a> ]<br/><br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:65px;\">\n\t\t\t\t\t\t<li>Total hidden nodes ('isHidden' is true): <span id=\"hiddenCount\" class=\"highlight_red\"></span> 个</li>\n\t\t\t\t\t\t<li>After hide nodes, you can see the 'isFirstNode' and 'isLastNode' attributes on the nodes which still be shown.</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Hide nodes will effect the 'isFirstNode' and 'isLastNode' attributes, but will not effect the 'getPreNode()' and 'getNextNode()' method.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/exhide/radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - Hide With Radio Mode</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\"\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkey: {\n\t\t\t\t\ttitle: \"title\"\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"pNode 1\", title:\"\", checked:true, open:true},\n\t\t\t{ id:11, pId:1, name:\"pNode 11\", title:\"\", checked:true},\n\t\t\t{ id:111, pId:11, name:\"leaf node 111\", title:\"\", checked:true, isHidden:true},\n\t\t\t{ id:112, pId:11, name:\"leaf node 112\", title:\"\"},\n\t\t\t{ id:113, pId:11, name:\"leaf node 113\", title:\"\"},\n\t\t\t{ id:12, pId:1, name:\"pNode 12\", title:\"\", isHidden:true},\n\t\t\t{ id:121, pId:12, name:\"leaf node 121\", title:\"\"},\n\t\t\t{ id:122, pId:12, name:\"leaf node 122\", title:\"\", isHidden:true},\n\t\t\t{ id:123, pId:12, name:\"leaf node 123\", title:\"\"},\n\t\t\t{ id:2, pId:0, name:\"pNode 2\", title:\"\"},\n\t\t\t{ id:21, pId:2, name:\"pNode 21\", title:\"\", isHidden:true},\n\t\t\t{ id:211, pId:21, name:\"leaf node 211\", title:\"\"},\n\t\t\t{ id:212, pId:21, name:\"leaf node 212\", title:\"\"},\n\t\t\t{ id:213, pId:21, name:\"leaf node 213\", title:\"\"},\n\t\t\t{ id:22, pId:2, name:\"pNode 22\", title:\"\"},\n\t\t\t{ id:221, pId:22, name:\"leaf node 221\", title:\"\"},\n\t\t\t{ id:222, pId:22, name:\"leaf node 222\", title:\"\"},\n\t\t\t{ id:223, pId:22, name:\"leaf node 223\", title:\"\"}\n\t\t];\n\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tcount();\n\t\t}\n\n\t\tfunction setTitle(node) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tvar nodes = node ? [node]:zTree.transformToArray(zTree.getNodes());\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tn.title = \"[\" + n.id + \"] isFirstNode = \" + n.isFirstNode + \", isLastNode = \" + n.isLastNode;\n\t\t\t\tzTree.updateNode(n);\n\t\t\t}\n\t\t}\n\t\tfunction count() {\n\t\t\tfunction isForceHidden(node) {\n\t\t\t\tif (!node.parentTId) return false;\n\t\t\t\tvar p = node.getParentNode();\n\t\t\t\treturn !!p.isHidden ? true : isForceHidden(p);\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tcheckCount = zTree.getCheckedNodes(true).length,\n\t\t\tnocheckCount = zTree.getCheckedNodes(false).length,\n\t\t\thiddenNodes = zTree.getNodesByParam(\"isHidden\", true),\n\t\t\thiddenCount = hiddenNodes.length;\n\n\t\t\tfor (var i=0, j=hiddenNodes.length; i<j; i++) {\n\t\t\t\tvar n = hiddenNodes[i];\n\t\t\t\tif (isForceHidden(n)) {\n\t\t\t\t\thiddenCount -= 1;\n\t\t\t\t} else if (n.isParent) {\n\t\t\t\t\thiddenCount += zTree.transformToArray(n.children).length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$(\"#isHiddenCount\").text(hiddenNodes.length);\n\t\t\t$(\"#hiddenCount\").text(hiddenCount);\n\t\t\t$(\"#checkCount\").text(checkCount);\n\t\t\t$(\"#nocheckCount\").text(nocheckCount);\n\t\t}\n\t\tfunction showNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getNodesByParam(\"isHidden\", true);\n\t\t\tzTree.showNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\t\tfunction hideNodes() {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes();\n\t\t\tif (nodes.length == 0) {\n\t\t\t\talert(\"Please select one node at least.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tzTree.hideNodes(nodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\t$(\"#hideNodesBtn\").bind(\"click\", {type:\"rename\"}, hideNodes);\n\t\t\t$(\"#showNodesBtn\").bind(\"click\", {type:\"icon\"}, showNodes);\n\t\t\tsetTitle();\n\t\t\tcount();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n </HEAD>\n\n<BODY>\n<h1>Hide With Radio Mode</h1>\n<h6>[ File Path: exhide/radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use the freature which to hide nodes, you don't need to set any attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">Before you init zTree, set treeNode.isHidden = true, and you can hide the node.</li>\n\t\t\t\t<li><p>Hide or show the nodes:<br/>\n\t\t\t\t\tTry: [ <a id=\"hideNodesBtn\" href=\"#\" onclick=\"return false;\">Hide the nodes which be selected</a> ]<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;[ <a id=\"showNodesBtn\" href=\"#\" onclick=\"return false;\">Show all of the nodes which be hidden</a> ]<br/>\n\t\t\t\t\t<ul id=\"log\" class=\"log\" style=\"height:125px;\">\n\t\t\t\t\t\t<li>Total nodes which 'isHidden' attribute is true: <span id=\"isHiddenCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>Total hidden nodes: <span id=\"hiddenCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>Total check nodes: <span id=\"checkCount\" class=\"highlight_red\"></span>\n\t\t\t\t\t\t\t&nbsp;&nbsp;Total uncheck nodes: <span id=\"nocheckCount\" class=\"highlight_red\"></span></li>\n\t\t\t\t\t\t<li>After hide nodes, you can see the 'isFirstNode' and 'isLastNode' attributes on the nodes which still be shown.</li>\n\t\t\t\t\t</ul></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3、Other explanation</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Hide nodes will effect the 'isFirstNode' and 'isLastNode' attributes, but will not effect the 'getPreNode()' and 'getNextNode()' method.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<HTML>\n<HEAD>\n  <TITLE> ZTREE DEMO </TITLE>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n  <link rel=\"stylesheet\" href=\"../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n  <style>\n    body {\n      background-color: white;\n      margin: 0;\n      padding: 0;\n      text-align: center;\n    }\n\n    div, p, table, th, td {\n      list-style: none;\n      margin: 0;\n      padding: 0;\n      color: #333;\n      font-size: 12px;\n      font-family: dotum, Verdana, Arial, Helvetica, AppleGothic, sans-serif;\n    }\n\n    #testIframe {\n      margin-left: 10px;\n    }\n  </style>\n  <script type=\"text/javascript\" src=\"../../js/jquery-1.4.4.min.js\"></script>\n  <script type=\"text/javascript\" src=\"../../js/jquery.ztree.core.js\"></script>\n  <SCRIPT type=\"text/javascript\">\n    <!--\n    var zTree;\n    var demoIframe;\n\n    var setting = {\n      view: {\n        dblClickExpand: false,\n        showLine: true,\n        selectedMulti: false\n      },\n      data: {\n        simpleData: {\n          enable: true,\n          idKey: \"id\",\n          pIdKey: \"pId\",\n          rootPId: \"\"\n        }\n      },\n      callback: {\n        beforeClick: function (treeId, treeNode) {\n          var zTree = $.fn.zTree.getZTreeObj(\"tree\");\n          if (treeNode.isParent) {\n            zTree.expandNode(treeNode);\n            return false;\n          } else {\n            demoIframe.attr(\"src\", treeNode.file + \".html\");\n            return true;\n          }\n        }\n      }\n    };\n\n    var zNodes = [\n      {id: 1, pId: 0, name: \"[core] Basic Functions\", open: false},\n      {id: 101, pId: 1, name: \"Standard JSON Data\", file: \"core/standardData\"},\n      {id: 102, pId: 1, name: \"Simple JSON Data\", file: \"core/simpleData\"},\n      {id: 103, pId: 1, name: \"Don't Show Line\", file: \"core/noline\"},\n      {id: 104, pId: 1, name: \"Don't Show Icon\", file: \"core/noicon\"},\n      {id: 105, pId: 1, name: \"Custom Icon - icon\", file: \"core/custom_icon\"},\n      {id: 106, pId: 1, name: \"Custom Icon - iconSkin\", file: \"core/custom_iconSkin\"},\n      {id: 107, pId: 1, name: \"Custom Fonts\", file: \"core/custom_font\"},\n      {id: 115, pId: 1, name: \"Hyperlinks Demo\", file: \"core/url\"},\n      {id: 108, pId: 1, name: \"Dynamic Tree with Ajax\", file: \"core/async\"},\n      {id: 109, pId: 1, name: \"Dynamic Tree - zTree methods\", file: \"core/async_fun\"},\n      {id: 110, pId: 1, name: \"Update Node - zTree methods\", file: \"core/update_fun\"},\n      {id: 111, pId: 1, name: \"Control of Click Node\", file: \"core/click\"},\n      {id: 112, pId: 1, name: \"Control of Expand Node\", file: \"core/expand\"},\n      {id: 113, pId: 1, name: \"Search Nodes\", file: \"core/searchNodes\"},\n      {id: 114, pId: 1, name: \"Other Mouse Events for zTree\", file: \"core/otherMouse\"},\n\n      {id: 2, pId: 0, name: \"[excheck] Checkbox & Radio\", open: false},\n      {id: 201, pId: 2, name: \"Checkbox Operation\", file: \"excheck/checkbox\"},\n      {id: 206, pId: 2, name: \"Checkbox nocheck Demo\", file: \"excheck/checkbox_nocheck\"},\n      {id: 207, pId: 2, name: \"Checkbox chkDisabled Demo\", file: \"excheck/checkbox_chkDisabled\"},\n      {id: 208, pId: 2, name: \"Checkbox halfCheck Demo\", file: \"excheck/checkbox_halfCheck\"},\n      {id: 202, pId: 2, name: \"Statistics Checkbox is Checked\", file: \"excheck/checkbox_count\"},\n      {id: 203, pId: 2, name: \"Checkbox - zTree methods\", file: \"excheck/checkbox_fun\"},\n      {id: 204, pId: 2, name: \"Radio Operation\", file: \"excheck/radio\"},\n      {id: 209, pId: 2, name: \"Radio nocheck Demo\", file: \"excheck/radio_nocheck\"},\n      {id: 210, pId: 2, name: \"Radio chkDisabled Demo\", file: \"excheck/radio_chkDisabled\"},\n      {id: 211, pId: 2, name: \"Radio halfCheck Demo\", file: \"excheck/radio_halfCheck\"},\n      {id: 205, pId: 2, name: \"Radio - zTree methods\", file: \"excheck/radio_fun\"},\n\n      {id: 3, pId: 0, name: \"[exedit] Editing\", open: false},\n      {id: 301, pId: 3, name: \"Normal Drag Node Operation\", file: \"exedit/drag\"},\n      {id: 302, pId: 3, name: \"Advanced Drag Node Operation\", file: \"exedit/drag_super\"},\n      {id: 303, pId: 3, name: \"Move / Copy - zTree methods\", file: \"exedit/drag_fun\"},\n      {id: 304, pId: 3, name: \"Basic Edit Nodes\", file: \"exedit/edit\"},\n      {id: 305, pId: 3, name: \"Advanced Edit Nodes\", file: \"exedit/edit_super\"},\n      {id: 306, pId: 3, name: \"Edit Nodes - zTree methods\", file: \"exedit/edit_fun\"},\n      {id: 307, pId: 3, name: \"Editing Dynamic Tree\", file: \"exedit/async_edit\"},\n      {id: 308, pId: 3, name: \"Multiple Trees\", file: \"exedit/multiTree\"},\n\n      {id: 4, pId: 0, name: \"Large Amount of Data Loading\", open: false},\n      {id: 401, pId: 4, name: \"One-time Large Data Loading\", file: \"bigdata/common\"},\n      {id: 402, pId: 4, name: \"Loading Data in Batches\", file: \"bigdata/diy_async\"},\n      {id: 403, pId: 4, name: \"Loading Data By Pagination\", file: \"bigdata/page\"},\n\n      {id: 5, pId: 0, name: \"Multi-functional\", open: false},\n      {id: 501, pId: 5, name: \"Freeze the Root Node\", file: \"super/oneroot\"},\n      {id: 502, pId: 5, name: \"Click to Expand Node\", file: \"super/oneclick\"},\n      {id: 503, pId: 5, name: \"Keep Single Path\", file: \"super/singlepath\"},\n      {id: 516, pId: 5, name: \"Fuzzy Search\", file: \"super/fuzzySearch\"},\n      {id: 504, pId: 5, name: \"Adding Custom DOM\", file: \"super/diydom\"},\n      {id: 505, pId: 5, name: \"Checkbox / Radio Coexistence\", file: \"super/checkbox_radio\"},\n      {id: 506, pId: 5, name: \"Left Menu\", file: \"super/left_menu\"},\n      {id: 513, pId: 5, name: \"OutLook Style\", file: \"super/left_menuForOutLook\"},\n      {id: 515, pId: 5, name: \"Awesome Style\", file: \"super/awesome\"},\n      {id: 514, pId: 5, name: \"Metro Style\", file: \"super/metro\"},\n      {id: 507, pId: 5, name: \"Drop-down Menu\", file: \"super/select_menu\"},\n      {id: 509, pId: 5, name: \"Drop-down Menu with checkbox\", file: \"super/select_menu_checkbox\"},\n      {id: 510, pId: 5, name: \"Drop-down Menu with radio\", file: \"super/select_menu_radio\"},\n      {id: 508, pId: 5, name: \"Right-click Menu\", file: \"super/rightClickMenu\"},\n      {id: 511, pId: 5, name: \"Drag With Other DOMs\", file: \"super/dragWithOther\"},\n      {id: 512, pId: 5, name: \"Expand All Nodes with Async\", file: \"super/asyncForAll\"},\n\n      {id: 6, pId: 0, name: \"Other Extension Package\", open: false},\n      {id: 601, pId: 6, name: \"hide ordinary node\", file: \"exhide/common\"},\n      {id: 602, pId: 6, name: \"hide with checkbox mode\", file: \"exhide/checkbox\"},\n      {id: 603, pId: 6, name: \"hide with radio mode\", file: \"exhide/radio\"}\n    ];\n\n    $(document).ready(function () {\n      var t = $(\"#tree\");\n      t = $.fn.zTree.init(t, setting, zNodes);\n      demoIframe = $(\"#testIframe\");\n      demoIframe.bind(\"load\", loadReady);\n      var zTree = $.fn.zTree.getZTreeObj(\"tree\");\n      zTree.selectNode(zTree.getNodeByParam(\"id\", 101));\n\n    });\n\n    function loadReady() {\n      var bodyH = demoIframe.contents().find(\"body\").get(0).scrollHeight,\n        htmlH = demoIframe.contents().find(\"html\").get(0).scrollHeight,\n        maxH = Math.max(bodyH, htmlH), minH = Math.min(bodyH, htmlH),\n        h = demoIframe.height() >= maxH ? minH : maxH;\n      if (h < 530) h = 530;\n      demoIframe.height(h);\n    }\n\n    //-->\n  </SCRIPT>\n</HEAD>\n\n<BODY>\n<TABLE border=0 height=600px align=left>\n  <TR>\n    <TD width=260px align=left valign=top style=\"BORDER-RIGHT: #999999 1px dashed\">\n      <ul id=\"tree\" class=\"ztree\" style=\"width:260px; overflow:auto;\"></ul>\n    </TD>\n    <TD width=770px align=left valign=top>\n      <IFRAME ID=\"testIframe\" Name=\"testIframe\" FRAMEBORDER=0 SCROLLING=AUTO width=100% height=600px\n              SRC=\"core/standardData.html\"></IFRAME>\n    </TD>\n  </TR>\n</TABLE>\n\n</BODY>\n</HTML>\n"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/asyncForAll.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - async for All</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar demoMsg = {\n\t\t\tasync: \"Loading asynchronous, please wait a moment and then click...\",\n\t\t\texpandAllOver: \"Expansion Completed.\",\n\t\t\tasyncAllOver: \"Asynchronously loading Completed.\",\n\t\t\tasyncAll: \"Asynchronously loading Completed, no need to reload it again.\",\n\t\t\texpandAll: \"Asynchronously loading completed, please use expandAll method.\"\n\t\t}\n\n\t\tvar setting = {\n\t\t\tasync: {\n\t\t\t\tenable: true,\n\t\t\t\turl:\"../asyncData/getNodes.php\",\n\t\t\t\tautoParam:[\"id\", \"name=n\", \"level=lv\"],\n\t\t\t\totherParam:{\"otherParam\":\"zTreeAsyncTest\"},\n\t\t\t\tdataFilter: filter,\n\t\t\t\ttype: \"get\"\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeAsync: beforeAsync,\n\t\t\t\tonAsyncSuccess: onAsyncSuccess,\n\t\t\t\tonAsyncError: onAsyncError\n\t\t\t}\n\t\t};\n\n\t\tfunction filter(treeId, parentNode, childNodes) {\n\t\t\tif (!childNodes) return null;\n\t\t\tfor (var i=0, l=childNodes.length; i<l; i++) {\n\t\t\t\tchildNodes[i].name = childNodes[i].name.replace(/\\.n/g, '.');\n\t\t\t}\n\t\t\treturn childNodes;\n\t\t}\n\n\t\tfunction beforeAsync() {\n\t\t\tcurAsyncCount++;\n\t\t}\n\t\t\n\t\tfunction onAsyncSuccess(event, treeId, treeNode, msg) {\n\t\t\tcurAsyncCount--;\n\t\t\tif (curStatus == \"expand\") {\n\t\t\t\texpandNodes(treeNode.children);\n\t\t\t} else if (curStatus == \"async\") {\n\t\t\t\tasyncNodes(treeNode.children);\n\t\t\t}\n\n\t\t\tif (curAsyncCount <= 0) {\n\t\t\t\tif (curStatus != \"init\" && curStatus != \"\") {\n\t\t\t\t\t$(\"#demoMsg\").text((curStatus == \"expand\") ? demoMsg.expandAllOver : demoMsg.asyncAllOver);\n\t\t\t\t\tasyncForAll = true;\n\t\t\t\t}\n\t\t\t\tcurStatus = \"\";\n\t\t\t}\n\t\t}\n\n\t\tfunction onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\tcurAsyncCount--;\n\n\t\t\tif (curAsyncCount <= 0) {\n\t\t\t\tcurStatus = \"\";\n\t\t\t\tif (treeNode!=null) asyncForAll = true;\n\t\t\t}\n\t\t}\n\n\t\tvar curStatus = \"init\", curAsyncCount = 0, asyncForAll = false,\n\t\tgoAsync = false;\n\t\tfunction expandAll() {\n\t\t\tif (!check()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (asyncForAll) {\n\t\t\t\t$(\"#demoMsg\").text(demoMsg.expandAll);\n\t\t\t\tzTree.expandAll(true);\n\t\t\t} else {\n\t\t\t\texpandNodes(zTree.getNodes());\n\t\t\t\tif (!goAsync) {\n\t\t\t\t\t$(\"#demoMsg\").text(demoMsg.expandAll);\n\t\t\t\t\tcurStatus = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction expandNodes(nodes) {\n\t\t\tif (!nodes) return;\n\t\t\tcurStatus = \"expand\";\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tzTree.expandNode(nodes[i], true, false, false);\n\t\t\t\tif (nodes[i].isParent && nodes[i].zAsync) {\n\t\t\t\t\texpandNodes(nodes[i].children);\n\t\t\t\t} else {\n\t\t\t\t\tgoAsync = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction asyncAll() {\n\t\t\tif (!check()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tif (asyncForAll) {\n\t\t\t\t$(\"#demoMsg\").text(demoMsg.asyncAll);\n\t\t\t} else {\n\t\t\t\tasyncNodes(zTree.getNodes());\n\t\t\t\tif (!goAsync) {\n\t\t\t\t\t$(\"#demoMsg\").text(demoMsg.asyncAll);\n\t\t\t\t\tcurStatus = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction asyncNodes(nodes) {\n\t\t\tif (!nodes) return;\n\t\t\tcurStatus = \"async\";\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tif (nodes[i].isParent && nodes[i].zAsync) {\n\t\t\t\t\tasyncNodes(nodes[i].children);\n\t\t\t\t} else {\n\t\t\t\t\tgoAsync = true;\n\t\t\t\t\tzTree.reAsyncChildNodes(nodes[i], \"refresh\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction reset() {\n\t\t\tif (!check()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tasyncForAll = false;\n\t\t\tgoAsync = false;\n\t\t\t$(\"#demoMsg\").text(\"\");\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t}\n\n\t\tfunction check() {\n\t\t\tif (curAsyncCount > 0) {\n\t\t\t\t$(\"#demoMsg\").text(demoMsg.async);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting);\n\t\t\t$(\"#expandAllBtn\").bind(\"click\", expandAll);\n\t\t\t$(\"#asyncAllBtn\").bind(\"click\", asyncAll);\n\t\t\t$(\"#resetBtn\").bind(\"click\", reset);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Expand All Nodes with Async</h1>\n<h6>[ File Path: super/asyncForAll.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Using 'onAsyncSuccess' / 'onAsyncError' callback and 'reAsyncChildNodes' or 'expandNode' method, you will achieve all functionalities.</li>\n\t\t\t\t<li class=\"highlight_red\">Note: If there are large amount parent nodes, please use delay to avoid excessive asynchronous process.</li>\n\t\t\t\t<li class=\"highlight_red\">Recommendation: please use the debugging tools to view the ajax loading process with network.</li>\n\t\t\t\t<li>Demonstrate operation\n\t\t\t\t\t<br/><br/>\n\t\t\t\t[ <a id=\"expandAllBtn\" href=\"#\" onclick=\"return false;\">Expand All Nodes</a> ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n\t\t\t\t[ <a id=\"asyncAllBtn\" href=\"#\" onclick=\"return false;\">Load all nodes (don't expand)</a> ]<br/><br/>\n\t\t\t\t[ <a id=\"resetBtn\" href=\"#\" onclick=\"return false;\">Reset zTree</a> ]<br/><br/>\n\t\t\t\t<p class=\"highlight_red\" id=\"demoMsg\"></p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/awesome.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n    <TITLE> ZTREE DEMO - Simple Data</TITLE>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n<!-- Include font-awesome here, CDN is ok, or locally installed by bower to your project -->\n    <link rel=\"stylesheet\" href=\"http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css\">\n    \n    <link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n    <link rel=\"stylesheet\" href=\"../../../css/awesomeStyle/awesome.css\" type=\"text/css\">\n    <script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n    <SCRIPT type=\"text/javascript\">\n        <!--\n        var setting = {\n            view: {\n                addHoverDom: addHoverDom,\n                removeHoverDom: removeHoverDom,\n                selectedMulti: false\n            },\n            check: {\n                enable: true\n                ,chkStyle: 'radio'\n                ,radioType: \"level\"\n            },\n            data: {\n                simpleData: {\n                    enable: true\n                }\n            },\n            edit: {\n                enable: true\n            }\n        };\n\n        var zNodes =[\n            { id:1, pId:0, name:\"pNode 1\", open:true},\n            { id:11, pId:1, name:\"pNode 11\"},\n            { id:111, pId:11, name:\" sNode 111\"},\n            { id:112, pId:11, name:\"sNode 112\"},\n            { id:113, pId:11, name:\"sNode 113\"},\n            { id:114, pId:11, name:\"sNode 114\"},\n            { id:12, pId:1, name:\"pNode 12\"},\n            { id:121, pId:12, name:\"sNode 121\"},\n            { id:122, pId:12, name:\"sNode 122\"},\n            { id:123, pId:12, name:\"sNode 123\"},\n            { id:124, pId:12, name:\"sNode 124\"},\n            { id:13, pId:1, name:\"pNode 13\", isParent:true},\n            { id:2, pId:0, name:\"pNode 2\"},\n            { id:21, pId:2, name:\"pNode 21\", open:true},\n            { id:211, pId:21, name:\"sNode 211\"},\n            { id:212, pId:21, name:\"sNode 212\"},\n            { id:213, pId:21, name:\"sNode 213\"},\n            { id:214, pId:21, name:\"sNode 214\"},\n            { id:22, pId:2, name:\"pNode 22\"},\n            { id:221, pId:22, name:\"sNode 221\"},\n            { id:222, pId:22, name:\"sNode 222\"},\n            { id:223, pId:22, name:\"sNode 223\"},\n            { id:224, pId:22, name:\"sNode 224\"},\n            { id:23, pId:2, name:\"pNode 23\"},\n            { id:231, pId:23, name:\"sNode 231\"},\n            { id:232, pId:23, name:\"sNode 232\"},\n            { id:233, pId:23, name:\"sNode 233\"},\n            { id:234, pId:23, name:\"sNode 234\"},\n            { id:3, pId:0, name:\"pNode 3\", isParent:true}\n        ];\n\t\tfunction setCheck() {\n\t\t\tsetting.check.chkStyle = $(\"#r1\").attr(\"checked\")? \"checkbox\":\"radio\";\n                        setting.check.enable = (!$(\"#disablechk\").attr(\"checked\"));\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n        $(document).ready(function(){\n            $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\t\t\t\n\t\t\t$(\"#r1\").bind(\"change\", setCheck);\n\t\t\t$(\"#r2\").bind(\"change\", setCheck);\n\t\t\t$(\"#disablechk\").bind(\"change\", setCheck);\n        });\n\n        var newCount = 1;\n        function addHoverDom(treeId, treeNode) {\n            var sObj = $(\"#\" + treeNode.tId + \"_span\");\n            if (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n            var addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n                + \"' title='add node' onfocus='this.blur();'></span>\";\n            sObj.after(addStr);\n            var btn = $(\"#addBtn_\"+treeNode.tId);\n            if (btn) btn.bind(\"click\", function(){\n                var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n                zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n                return false;\n            });\n        };\n        function removeHoverDom(treeId, treeNode) {\n            $(\"#addBtn_\"+treeNode.tId).unbind().remove();\n        };\n        //-->\n    </SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Awesome Style</h1>\n<h6>[ File Path: super/awesome.html ]</h6>\n<div class=\"content_wrap\">\n    <div class=\"bg left\">\n        <ul id=\"treeDemo\" class=\"ztree\"></ul>\n    </div>\n    <div class=\"right\">\n        <ul class=\"info\">\n            <li class=\"title\"><h2>1, Explanation of fontawesome Style</h2>\n                <ul class=\"list\">\n                    <li>You need to include the fontawesome stylesheet in your page (http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css)</li>\n                    <li> <i class=\"fa fa-car\"></i> &lt;= This should show a car icon (if fontawesome is loaded properly)</li>\n                    <li class=\"highlight_red\">Include the css stylesheet: 'css/awesomeStyle'</li>\n                    <li>Thanks to mikkelking for this Demo. For reference only.</li>\n                    \n                    <li><p>Mode: <br/>\n                            <label ><input type=\"radio\" id=\"r1\" class=\"radio first\" name=\"r\" value=\"checkbox\" checked />\n                                Checkbox</label>\n                            <label><input type=\"radio\" id=\"r2\" class=\"radio\" name=\"r\" value=\"radio\" /> Radio</label>\n                            <label><input type=\"checkbox\" id=\"disablechk\" > Disable</label>\n                                <br/>\n    \t\t\t\t</li>\n\t\t\t\t</ul>\n\n                </ul>\n            </li>\n        </ul>\n    </div>\n</div>\n \n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/checkbox_radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - checkbox & radio</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar IDMark_A = \"_a\";\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"parent node 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"leaf node 1-1\"},\n\t\t\t{ id:12, pId:1, name:\"leaf node 1-2\"},\n\t\t\t{ id:13, pId:1, name:\"leaf node 1-3\"},\n\t\t\t{ id:2, pId:0, name:\"parent node 2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"leaf node 2-1\"},\n\t\t\t{ id:22, pId:2, name:\"leaf node 2-2\"},\n\t\t\t{ id:23, pId:2, name:\"leaf node 2-3\"},\n\t\t\t{ id:3, pId:0, name:\"parent node 3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"leaf node 3-1\"},\n\t\t\t{ id:32, pId:3, name:\"leaf node 3-2\"},\n\t\t\t{ id:33, pId:3, name:\"leaf node 3-3\"}\n\t\t];\n\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + IDMark_A);\n\t\t\tif (treeNode.level == 0) {\n\t\t\t\tvar editStr = \"<input type='checkbox' class='checkboxBtn' id='checkbox_\" +treeNode.id+ \"' onfocus='this.blur();'></input>\";\n\t\t\t\taObj.before(editStr);\n\t\t\t\tvar btn = $(\"#checkbox_\"+treeNode.id);\n\t\t\tif (btn) btn.bind(\"change\", function() {checkAccessories(treeNode, btn);});\n\t\t\t} else if (treeNode.level == 1) {\n\t\t\t\tvar editStr = \"<input type='radio' class='radioBtn' id='radio_\" +treeNode.id+ \"' name='radio_\"+treeNode.getParentNode().id+\"' onfocus='this.blur();'></input>\";\n\t\t\t\taObj.before(editStr);\n\t\t\t\tvar btn = $(\"#radio_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function() {checkBrand(treeNode, btn);});\n\t\t\t}\n\t\t}\n\n\t\tfunction checkAccessories(treeNode, btn) {\n\t\t\tvar checkedRadio = getCheckedRadio(\"radio_\"+treeNode.id);\n\t\t\tif (btn.attr(\"checked\")) {\n\t\t\t\tif (!checkedRadio) {\n\t\t\t\t\t$(\"#radio_\" + treeNode.children[0].id).attr(\"checked\", true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcheckedRadio.attr(\"checked\", false);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkBrand(treeNode, btn) {\n\t\t\tif (btn.attr(\"checked\")) {\n\t\t\t\tvar pObj = $(\"#checkbox_\" + treeNode.getParentNode().id);\n\t\t\t\tif (!pObj.attr(\"checked\")) {\n\t\t\t\t\tpObj.attr(\"checked\", true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getCheckedRadio(radioName) {\n\t\t\tvar r = document.getElementsByName(radioName);\n\t\t\tfor(var i=0; i<r.length; i++)    {\n\t\t\t\tif(r[i].checked)    {\n\t\t\t\t\treturn $(r[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t  .radioBtn {height: 16px;vertical-align: middle;}\n\t  .checkboxBtn {vertical-align: middle;margin-right: 2px;}\n\t  </style>\n </HEAD>\n\n<BODY>\n<h1>Checkbox / Radio Coexistence</h1>\n<h6>[ File Path: super/checkbox_radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree default checkbox and radio can not coexist, but can be used the custom DOM features to achieve this requirement, refer to the \"Adding Custom DOM\".</li>\n\t\t\t\t<li class=\"highlight_red\">For checkbox / radio association rules of the parent nodes and child nodes, according to the needs to develop its own rules.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/diydom.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - addHoverDom / removeHoverDom / addDiyDom</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\n\t\tvar IDMark_Switch = \"_switch\",\n\t\tIDMark_Icon = \"_ico\",\n\t\tIDMark_Span = \"_span\",\n\t\tIDMark_Input = \"_input\",\n\t\tIDMark_Check = \"_check\",\n\t\tIDMark_Edit = \"_edit\",\n\t\tIDMark_Remove = \"_remove\",\n\t\tIDMark_Ul = \"_ul\",\n\t\tIDMark_A = \"_a\";\n\t\t\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\taddHoverDom: addHoverDom,\n\t\t\t\tremoveHoverDom: removeHoverDom,\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, name:\"Hover DOM\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:11, name:\"button 1-1\"},\n\t\t\t\t\t   {id:12, name:\"button 1-2\"},\n\t\t\t\t\t   {id:13, name:\"select box 1-3\"},\n\t\t\t\t\t   {id:141, name:\"text 1-4-1\"},\n\t\t\t\t\t   {id:142, name:\"text 1-4-2\"},\n\t\t\t\t\t   {id:15, name:\"hyperlinks 1-5\"}\n\n\t\t\t\t]},\n\t\t\t{id:2, name:\"General DOM\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:21, name:\"button 2-1\"},\n\t\t\t\t\t   {id:22, name:\"button 2-2\"},\n\t\t\t\t\t   {id:23, name:\"select box 2-3\"},\n\t\t\t\t\t   {id:24, name:\"text 2-4\"},\n\t\t\t\t\t   {id:25, name:\"hyperlinks 2-5\"}\n\t\t\t\t]}\n\t \t];\n\n\t\tfunction addHoverDom(treeId, treeNode) {\n\t\t\tif (treeNode.parentNode && treeNode.parentNode.id!=1) return;\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + IDMark_A);\n\t\t\tif (treeNode.id == 11) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span id='diyBtn_space_\" +treeNode.id+ \"' >&nbsp;</span><span class='button icon03' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'></span>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 12) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span class='button icon04' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'></span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 13) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span id='diyBtn_space_\" +treeNode.id+ \"' >&nbsp;</span><select class='selDemo ' id='diyBtn_\" +treeNode.id+ \"'><option value=1>1</option><option value=2>2</option><option value=3>3</option></select>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"change\", function(){alert(\"diy Select value=\"+btn.attr(\"value\")+\" for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 141) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span class='test' id='diyBtn_\" +treeNode.id+ \"'>Text Demo...</span>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t} else if (treeNode.id == 142) {\n\t\t\t\tif ($(\"#diyBtn_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<span id='diyBtn_\" +treeNode.id+ \"'>Text Demo...</span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t} else if (treeNode.id == 15) {\n\t\t\t\tif ($(\"#diyBtn1_\"+treeNode.id).length>0) return;\n\t\t\t\tif ($(\"#diyBtn2_\"+treeNode.id).length>0) return;\n\t\t\t\tvar editStr = \"<a id='diyBtn1_\" +treeNode.id+ \"' onclick='alert(1);return false;' style='margin:0 0 0 5px;'>link_1</a>\" +\n\t\t\t\t\t\"<a id='diyBtn2_\" +treeNode.id+ \"' onclick='alert(2);return false;' style='margin:0 0 0 5px;'>link_2</a>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t}\n\t\t}\n\n\t\tfunction removeHoverDom(treeId, treeNode) {\n\t\t\tif (treeNode.parentTId && treeNode.getParentNode().id!=1) return;\n\t\t\tif (treeNode.id == 15) {\n\t\t\t\t$(\"#diyBtn1_\"+treeNode.id).unbind().remove();\n\t\t\t\t$(\"#diyBtn2_\"+treeNode.id).unbind().remove();\n\t\t\t} else {\n\t\t\t\t$(\"#diyBtn_\"+treeNode.id).unbind().remove();\n\t\t\t\t$(\"#diyBtn_space_\" +treeNode.id).unbind().remove();\n\t\t\t}\n\t\t}\n\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tif (treeNode.parentNode && treeNode.parentNode.id!=2) return;\n\t\t\tvar aObj = $(\"#\" + treeNode.tId + IDMark_A);\n\t\t\tif (treeNode.id == 21) {\n\t\t\t\tvar editStr = \"<span class='demoIcon' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'><span class='button icon01'></span></span>\";\n\t\t\t\taObj.append(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 22) {\n\t\t\t\tvar editStr = \"<span class='demoIcon' id='diyBtn_\" +treeNode.id+ \"' title='\"+treeNode.name+\"' onfocus='this.blur();'><span class='button icon02'></span></span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"click\", function(){alert(\"diy Button for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 23) {\n\t\t\t\tvar editStr = \"<select class='selDemo' id='diyBtn_\" +treeNode.id+ \"'><option value=1>1</option><option value=2>2</option><option value=3>3</option></select>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t\tvar btn = $(\"#diyBtn_\"+treeNode.id);\n\t\t\t\tif (btn) btn.bind(\"change\", function(){alert(\"diy Select value=\"+btn.attr(\"value\")+\" for \" + treeNode.name);});\n\t\t\t} else if (treeNode.id == 24) {\n\t\t\t\tvar editStr = \"<span id='diyBtn_\" +treeNode.id+ \"'>Text Demo...</span>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t} else if (treeNode.id == 25) {\n\t\t\t\tvar editStr = \"<a id='diyBtn1_\" +treeNode.id+ \"' onclick='alert(1);return false;'>链接1</a>\" +\n\t\t\t\t\t\"<a id='diyBtn2_\" +treeNode.id+ \"' onclick='alert(2);return false;'>链接2</a>\";\n\t\t\t\taObj.after(editStr);\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.demoIcon{padding:0 2px 0 10px;}\n.ztree li span.button.icon01{margin:0; background: url(../../../css/zTreeStyle/img/diy/3.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon02{margin:0; background: url(../../../css/zTreeStyle/img/diy/4.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon03{margin:0; background: url(../../../css/zTreeStyle/img/diy/5.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon04{margin:0; background: url(../../../css/zTreeStyle/img/diy/6.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon05{margin:0; background: url(../../../css/zTreeStyle/img/diy/7.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.icon06{margin:0; background: url(../../../css/zTreeStyle/img/diy/8.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Adding Custom DOM</h1>\n<h6>[ File Path: super/diydom.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>1, Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'setting.view.addHoverDom / removeHoverDom / addDiyDom' attributes can easily display custom DOM.</li>\n\t\t\t\t<li class=\"highlight_red\">Adding custom DOM, is important to understand zTree node object naming rules to ensure the normal controls add DOM.</li>\n\t\t\t\t<li class=\"highlight_red\">If you add the browser's default ’select / checkbox / radio‘ DOM, please adjust the css, to ensure correctly display zTree.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2, Explanation of setting</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Set 'setting.view.addHoverDom / removeHoverDom / addDiyDom' attributes, see the API documentation for more related contents.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>3, Explanation of treeNode</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>No special requirements on the node data, the user can add custom attributes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/dragWithOther.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - drag with other DOM</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>-->\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar MoveTest = {\n\t\t\terrorMsg: \"Error!...Please drag it to the correct category!\",\n\t\t\tcurTarget: null,\n\t\t\tcurTmpTarget: null,\n\t\t\tnoSel: function() {\n\t\t\t\ttry {\n\t\t\t\t\twindow.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();\n\t\t\t\t} catch(e){}\n\t\t\t},\n\t\t\tdragTree2Dom: function(treeId, treeNodes) {\n\t\t\t\treturn !treeNodes[0].isParent;\n\t\t\t},\n\t\t\tprevTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tnextTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tinnerTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn targetNode!=null && targetNode.isParent && targetNode.tId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tdragMove: function(e, treeId, treeNodes) {\n\t\t\t\tvar p = null, pId = 'dom_' + treeNodes[0].pId;\n\t\t\t\tif (e.target.id == pId) {\n\t\t\t\t\tp = $(e.target);\n\t\t\t\t} else {\n\t\t\t\t\tp = $(e.target).parent('#' + pId);\n\t\t\t\t\tif (!p.get(0)) {\n\t\t\t\t\t\tp = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$('.domBtnDiv .active').removeClass('active');\n\t\t\t\tif (p) {\n\t\t\t\t\tp.addClass('active');\n\t\t\t\t}\n\t\t\t},\n\t\t\tdropTree2Dom: function(e, treeId, treeNodes, targetNode, moveType) {\n\t\t\t\tvar domId = \"dom_\" + treeNodes[0].getParentNode().id;\n\t\t\t\tif (moveType == null && (domId == e.target.id || $(e.target).parents(\"#\" + domId).length > 0)) {\n\t\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\t\tzTree.removeNode(treeNodes[0]);\n\n\t\t\t\t\tvar newDom = $(\"span[domId=\" + treeNodes[0].id + \"]\");\n\t\t\t\t\tif (newDom.length > 0) {\n\t\t\t\t\t\tnewDom.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\t\tnewDom.addClass(\"domBtn\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(\"#\" + domId).append(\"<span class='domBtn' domId='\" + treeNodes[0].id + \"'>\" + treeNodes[0].name + \"</span>\");\n\t\t\t\t\t}\n\t\t\t\t\tMoveTest.updateType();\n\t\t\t\t} else if ( $(e.target).parents(\".domBtnDiv\").length > 0) {\n\t\t\t\t\talert(MoveTest.errorMsg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdom2Tree: function(e, treeId, treeNode) {\n\t\t\t\tvar target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (!target) return;\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"), parentNode;\n\t\t\t\tif (treeNode != null && treeNode.isParent && \"dom_\" + treeNode.id == target.parent().attr(\"id\")) {\n\t\t\t\t\tparentNode = treeNode;\n\t\t\t\t} else if (treeNode != null && !treeNode.isParent && \"dom_\" + treeNode.getParentNode().id == target.parent().attr(\"id\")) {\n\t\t\t\t\tparentNode = treeNode.getParentNode();\n\t\t\t\t}\n\n\t\t\t\tif (tmpTarget) tmpTarget.remove();\n\t\t\t\tif (!!parentNode) {\n\t\t\t\t\tvar nodes = zTree.addNodes(parentNode, {id:target.attr(\"domId\"), name: target.text()});\n\t\t\t\t\tzTree.selectNode(nodes[0]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\ttarget.addClass(\"domBtn\");\n\t\t\t\t\talert(MoveTest.errorMsg);\n\t\t\t\t}\n\t\t\t\tMoveTest.updateType();\n\t\t\t\tMoveTest.curTarget = null;\n\t\t\t\tMoveTest.curTmpTarget = null;\n\t\t\t},\n\t\t\tupdateType: function() {\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\t\tnodes = zTree.getNodes();\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tvar num = nodes[i].children ? nodes[i].children.length : 0;\n\t\t\t\t\tnodes[i].name = nodes[i].name.replace(/ \\(.*\\)/gi, \"\") + \" (\" + num + \")\";\n\t\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindDom: function() {\n\t\t\t\t$(\".domBtnDiv\").bind(\"mousedown\", MoveTest.bindMouseDown);\n\t\t\t},\n\t\t\tbindMouseDown: function(e) {\n\t\t\t\tvar target = e.target;\n\t\t\t\tif (target!=null && target.className==\"domBtn\") {\n\t\t\t\t\tvar doc = $(document), target = $(target),\n\t\t\t\t\tdocScrollTop = doc.scrollTop(),\n\t\t\t\t\tdocScrollLeft = doc.scrollLeft();\n\t\t\t\t\ttarget.addClass(\"domBtn_Disabled\");\n\t\t\t\t\ttarget.removeClass(\"domBtn\");\n\t\t\t\t\tcurDom = $(\"<span class='dom_tmp domBtn'>\" + target.text() + \"</span>\");\n\t\t\t\t\tcurDom.appendTo(\"body\");\n\n\t\t\t\t\tcurDom.css({\n\t\t\t\t\t\t\"top\": (e.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (e.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\t\t\t\t\tMoveTest.curTarget = target;\n\t\t\t\t\tMoveTest.curTmpTarget = curDom;\n\n\t\t\t\t\tdoc.bind(\"mousemove\", MoveTest.bindMouseMove);\n\t\t\t\t\tdoc.bind(\"mouseup\", MoveTest.bindMouseUp);\n\t\t\t\t\tdoc.bind(\"selectstart\", MoveTest.docSelect);\n\t\t\t\t}\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindMouseMove: function(e) {\n\t\t\t\tMoveTest.noSel();\n\t\t\t\tvar doc = $(document), \n\t\t\t\tdocScrollTop = doc.scrollTop(),\n\t\t\t\tdocScrollLeft = doc.scrollLeft(),\n\t\t\t\ttmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\ttmpTarget.css({\n\t\t\t\t\t\t\"top\": (e.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (e.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tbindMouseUp: function(e) {\n\t\t\t\tvar doc = $(document);\n\t\t\t\tdoc.unbind(\"mousemove\", MoveTest.bindMouseMove);\n\t\t\t\tdoc.unbind(\"mouseup\", MoveTest.bindMouseUp);\n\t\t\t\tdoc.unbind(\"selectstart\", MoveTest.docSelect);\n\n\t\t\t\tvar target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (tmpTarget) tmpTarget.remove();\n\n\t\t\t\tif ($(e.target).parents(\"#treeDemo\").length == 0) {\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\ttarget.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\t\ttarget.addClass(\"domBtn\");\n\t\t\t\t\t}\n\t\t\t\t\tMoveTest.curTarget = null;\n\t\t\t\t\tMoveTest.curTmpTarget = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindSelect: function() {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tvar setting = {\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false,\n\t\t\t\tdrag: {\n\t\t\t\t\tprev: MoveTest.prevTree,\n\t\t\t\t\tnext: MoveTest.nextTree,\n\t\t\t\t\tinner: MoveTest.innerTree\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkeep: {\n\t\t\t\t\tparent: true,\n\t\t\t\t\tleaf: true\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: MoveTest.dragTree2Dom,\n\t\t\t\tonDrop: MoveTest.dropTree2Dom,\n\t\t\t\tonDragMove: MoveTest.dragMove,\n\t\t\t\tonMouseUp: MoveTest.dom2Tree\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"PLANT\", isParent: true, open:true},\n\t\t\t{ id:2, pId:0, name:\"ANIMAL\", isParent: true, open:true},\n\t\t\t{ id:20, pId:2, name:\"Elephant\"},\n\t\t\t{ id:29, pId:2, name:\"Shark\"},\n\t\t\t{ id:10, pId:1, name:\"Cabbage\"},\n\t\t\t{ id:19, pId:1, name:\"Tomato\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tMoveTest.updateType();\n\t\t\tMoveTest.bindDom();\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.dom_line {margin:2px;border-bottom:1px gray dotted;height:1px}\n.domBtnDiv {display:block;padding:2px;border:1px gray dotted;background-color:powderblue}\n.categoryDiv {display:inline-block; width:335px}\n.domBtn {display:inline-block;cursor:pointer;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#FFE6B0}\n.domBtn_Disabled {display:inline-block;cursor:default;padding:2px;margin:2px 10px;border:1px gray solid;background-color:#DFDFDF;color:#999999}\n.dom_tmp {position:absolute;font-size:12px;}\n.active {background-color: #93C3CF}\n\t</style>\n</HEAD>\n\n<BODY>\n<h1>Drag With Other DOMs</h1>\n<h6>[ File Path: super/dragWithOther.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree v3.2 modified the event object in onDrag/onDrop; v3.5.16 add the onDragMove callback, thus the nodes can be draged to other DOMs easily.</li>\n\t\t\t\t<li class=\"highlight_red\">To drag other DOMS to zTree, you need to build the drag codes by yourself.</li>\n\t\t\t\t<li class=\"highlight_red\">This is just a simple Demo. If you need more features, please build more complicated codes.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>Please drag and drop the following content to the tree node</h2>\n\t\t\t\t<div class=\"domBtnDiv\">\n\t\t\t\t\t<div id=\"dom_1\" class=\"categoryDiv\"><span class=\"domBtn\" domId=\"11\">Tree</span><span class=\"domBtn\" domId=\"12\">Grass</span><span class=\"domBtn\" domId=\"13\">Flower</span></div>\n\t\t\t\t\t<div class=\"dom_line\"></div>\n\t\t\t\t\t<div id=\"dom_2\" class=\"categoryDiv\"><span class=\"domBtn\" domId=\"21\">Tiger</span><span class=\"domBtn\" domId=\"22\">Bear</span><span class=\"domBtn\" domId=\"23\">Lion</span></div>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"highlight_red\">You can drag the nodes of level 2 to the above layer.</span>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/fuzzySearch.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - fuzzySearch</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exhide.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../js/fuzzysearch.js\"></script>\n\t\n\t<SCRIPT type=\"text/javascript\">\n\t\tvar setting = {\n\t\t\t\tcheck: {\n\t\t\t\t\tenable: true//checkbox\n\t\t\t\t},\n\t\t\t\tview: {\n\t\t\t\t\tnameIsHTML: true, //allow html in node name for highlight use\t\t\t\t\n\t\t\t\t\tselectedMulti: false\n\t\t\t\t},\n\t\t\t\tedit: {\n\t\t\t\t\tenable: false,\n\t\t\t\t\teditNameSelectAll: false\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\tsimpleData: {\n\t\t\t\t\t\tenable: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"fuzzySearch demo 1\", t:\"id=1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"[]\\\\^$.|?*+():keywords with js meta characters\", t:\"id=11\"},\n\t\t\t{ id:12, pId:1, name:\"{}<>'\\\"~`!@#%&-;:/,=:keywords with other characters\", t:\"id=12\"},\n\t\t\t{ id:2, pId:0, name:\"fuzzySearch demo 2\", t:\"id=2\", open:true},\n\t\t\t{ id:21, pId:2, name:\"uppercase ABDEFGHINQRT:keywords igonore case\", t:\"id=21\"},\n\t\t\t{ id:22, pId:2, name:\"lowercase abdefghinqrt:keywords igonore case\", t:\"id=21\"},\n\t\t\t{ id:3, pId:0, name:\"fuzzySearch demo 3\", t:\"id=3\", open:true },\n\t\t\t{ id:31, pId:3, name:\"blank blank:keywords with blank\", t:\"id=31\"}\n\t\t];\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tfuzzySearch('treeDemo','#key',null,true); //initialize fuzzysearch function\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Fuzzy Search</h1>\n<h6>[ File Path: fuzzySearch/fuzzySearch.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\">\n\t\t\t\t<h2>1. Explaination of fuzzySearch()</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li class=\"highlight_red\">\n \t\t\t\t\t@param the ztree id used to get the ztree object\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\t@param searchField selector of your input for fuzzy search\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\t@param isHighLight whether highlight the match words, default true\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\t@param isExpand whether to expand the node, default false\n\t\t\t\t</li>\n\t\t\t\t<li class=\"highlight_red\">\n\t\t\t\t\tfuzzySearch ( zTreeId, searchField, isHighLight, isExpand )\n\t\t\t\t</li>\n\t\t\t\t<li><p>Try to search：<br/>\n\t\t\t\t\t\tKeywords：<input type=\"text\" id=\"key\" value=\"\" class=\"empty\"  placeholder=\"Please Input Keyword\"/><br/>\n\t\t\t\t\t</p>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li class=\"title\"><h2>2. js dependencies</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t\t<li>ztree v3.5.19.1 +, getPath() in use</li>\n\t\t\t\t\t<li>ztree.exhide extension, hideNode() in use</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/left_menu.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - left_menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar curMenu = null, zTree_Menu = null;\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowLine: true,\n\t\t\t\tselectedMulti: false,\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonNodeCreated: this.onNodeCreated,\n\t\t\t\tbeforeClick: this.beforeClick,\n\t\t\t\tonClick: this.onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Main Menu 1\", open:true},\n\t\t\t{ id:11, pId:1, name:\"Sub Menu 1-1\"},\n\t\t\t{ id:111, pId:11, name:\"Leaf Node 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"Leaf Node 1-1-2\"},\n\t\t\t{ id:113, pId:11, name:\"Leaf Node 1-1-3\"},\n\t\t\t{ id:114, pId:11, name:\"Leaf Node 1-1-4\"},\n\t\t\t{ id:12, pId:1, name:\"Sub Menu 1-2\"},\n\t\t\t{ id:121, pId:12, name:\"Leaf Node 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"Leaf Node 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"Leaf Node 1-2-3\"},\n\t\t\t{ id:124, pId:12, name:\"Leaf Node 1-2-4\"},\n\t\t\t{ id:2, pId:0, name:\"Main Menu 2\"},\n\t\t\t{ id:21, pId:2, name:\"Sub Menu 2-1\"},\n\t\t\t{ id:211, pId:21, name:\"Leaf Node 2-1-1\"},\n\t\t\t{ id:212, pId:21, name:\"Leaf Node 2-1-2\"},\n\t\t\t{ id:213, pId:21, name:\"Leaf Node 2-1-3\"},\n\t\t\t{ id:214, pId:21, name:\"Leaf Node 2-1-4\"},\n\t\t\t{ id:22, pId:2, name:\"Sub Menu 2-2\"},\n\t\t\t{ id:221, pId:22, name:\"Leaf Node 2-2-1\"},\n\t\t\t{ id:222, pId:22, name:\"Leaf Node 2-2-2\"},\n\t\t\t{ id:223, pId:22, name:\"Leaf Node 2-2-3\"},\n\t\t\t{ id:224, pId:22, name:\"Leaf Node 2-2-4\"},\n\t\t\t{ id:3, pId:0, name:\"Main Menu 3\"},\n\t\t\t{ id:31, pId:3, name:\"Sub Menu 3-1\"},\n\t\t\t{ id:311, pId:31, name:\"Leaf Node 3-1-1\"},\n\t\t\t{ id:312, pId:31, name:\"Leaf Node 3-1-2\"},\n\t\t\t{ id:313, pId:31, name:\"Leaf Node 3-1-3\"},\n\t\t\t{ id:314, pId:31, name:\"Leaf Node 3-1-4\"},\n\t\t\t{ id:32, pId:3, name:\"Sub Menu 3-2\"},\n\t\t\t{ id:321, pId:32, name:\"Leaf Node 3-2-1\"},\n\t\t\t{ id:322, pId:32, name:\"Leaf Node 3-2-2\"},\n\t\t\t{ id:323, pId:32, name:\"Leaf Node 3-2-3\"},\n\t\t\t{ id:324, pId:32, name:\"Leaf Node 3-2-4\"}\n\t\t];\n\n\t\tfunction beforeClick(treeId, node) {\n\t\t\tif (node.isParent) {\n\t\t\t\tif (node.level === 0) {\n\t\t\t\t\tvar pNode = curMenu;\n\t\t\t\t\twhile (pNode && pNode.level !==0) {\n\t\t\t\t\t\tpNode = pNode.getParentNode();\n\t\t\t\t\t}\n\t\t\t\t\tif (pNode !== node) {\n\t\t\t\t\t\tvar a = $(\"#\" + pNode.tId + \"_a\");\n\t\t\t\t\t\ta.removeClass(\"cur\");\n\t\t\t\t\t\tzTree_Menu.expandNode(pNode, false);\n\t\t\t\t\t}\n\t\t\t\t\ta = $(\"#\" + node.tId + \"_a\");\n\t\t\t\t\ta.addClass(\"cur\");\n\n\t\t\t\t\tvar isOpen = false;\n\t\t\t\t\tfor (var i=0,l=node.children.length; i<l; i++) {\n\t\t\t\t\t\tif(node.children[i].open) {\n\t\t\t\t\t\t\tisOpen = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isOpen) {\n\t\t\t\t\t\tzTree_Menu.expandNode(node, true);\n\t\t\t\t\t\tcurMenu = node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tzTree_Menu.expandNode(node.children[0].isParent?node.children[0]:node, true);\n\t\t\t\t\t\tcurMenu = node.children[0];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzTree_Menu.expandNode(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn !node.isParent;\n\t\t}\n\t\tfunction onClick(e, treeId, node) {\n\t\t\talert(\"Do what you want to do!\");\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tzTree_Menu = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tcurMenu = zTree_Menu.getNodes()[0].children[0].children[0];\n\t\t\tzTree_Menu.selectNode(curMenu);\n\t\t\tvar a = $(\"#\" + zTree_Menu.getNodes()[0].tId + \"_a\");\n\t\t\ta.addClass(\"cur\");\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li a.level0 {width:200px;height: 20px; text-align: center; display:block; background-color: #0B61A4; border:1px silver solid;}\n.ztree li a.level0.cur {background-color: #66A3D2; }\n.ztree li a.level0 span {display: block; color: white; padding-top:3px; font-size:12px; font-weight: bold;word-spacing: 2px;}\n.ztree li a.level0 span.button {\tfloat:right; margin-left: 10px; visibility: visible;display:none;}\n.ztree li span.button.switch.level0 {display:none;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Left Menu</h1>\n<h6>[ File Path: super/left_menu.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>The menu in the Demo's Web page is to use zTree to achieve, is to use css set interface, use the configuration 'setting' to achieve features, this demo achieve a simple example of the left menu, you can view the source code of Demo's Web Page for in-depth study.</li>\n\t\t\t\t<li class=\"highlight_red\">1. According to your needs to modify the css, for example: the menu style on this Demo and Demo's Web page not the same.</li>\n\t\t\t\t<li class=\"highlight_red\">2. Main configuration:<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;setting.view.showIcon / showLine / selectedMulti / dblClickExpand<br/>\n\t\t\t\t\t&nbsp;&nbsp;&nbsp;&nbsp;setting.callback.onNodeCreated / beforeClick / onClick\n\t\t\t\t</li>\n\t\t\t\t<li>3. If need to keep single path, please refer to the source code of \"Keep Single Path\" Demo.</li>\n\t\t\t\t<li>4. Other auxiliary rules, please write code based on your needs.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>\n"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/left_menuForOutLook.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - left_menu for Outlook</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar curMenu = null, zTree_Menu = null;\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tshowLine: false,\n\t\t\t\tshowIcon: false,\n\t\t\t\tselectedMulti: false,\n\t\t\t\tdblClickExpand: false,\n\t\t\t\taddDiyDom: addDiyDom\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Folders\", open:true},\n\t\t\t{ id:11, pId:1, name:\"Inbox\"},\n\t\t\t{ id:111, pId:11, name:\"Inbox1\"},\n\t\t\t{ id:112, pId:111, name:\"Inbox2\"},\n\t\t\t{ id:113, pId:112, name:\"Inbox3\"},\n\t\t\t{ id:114, pId:113, name:\"Inbox4\"},\n\t\t\t{ id:12, pId:1, name:\"Junk\"},\n\t\t\t{ id:13, pId:1, name:\"Drafts\"},\n\t\t\t{ id:14, pId:1, name:\"Sent\"},\n\t\t\t{ id:15, pId:1, name:\"Deleted\"},\n\t\t\t{ id:3, pId:0, name:\"Quick views\"},\n\t\t\t{ id:31, pId:3, name:\"Documents\"},\n\t\t\t{ id:32, pId:3, name:\"Photos\"}\n\t\t];\n\n\t\tfunction addDiyDom(treeId, treeNode) {\n\t\t\tvar spaceWidth = 5;\n\t\t\tvar switchObj = $(\"#\" + treeNode.tId + \"_switch\"),\n\t\t\ticoObj = $(\"#\" + treeNode.tId + \"_ico\");\n\t\t\tswitchObj.remove();\n\t\t\ticoObj.before(switchObj);\n\n\t\t\tif (treeNode.level > 1) {\n\t\t\t\tvar spaceStr = \"<span style='display: inline-block;width:\" + (spaceWidth * treeNode.level)+ \"px'></span>\";\n\t\t\t\tswitchObj.before(spaceStr);\n\t\t\t}\n\t\t}\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tif (treeNode.level == 0 ) {\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t\tzTree.expandNode(treeNode);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\tvar treeObj = $(\"#treeDemo\");\n\t\t\t$.fn.zTree.init(treeObj, setting, zNodes);\n\t\t\tzTree_Menu = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tcurMenu = zTree_Menu.getNodes()[0].children[0].children[0];\n\t\t\tzTree_Menu.selectNode(curMenu);\n\n\t\t\ttreeObj.hover(function () {\n\t\t\t\tif (!treeObj.hasClass(\"showIcon\")) {\n\t\t\t\t\ttreeObj.addClass(\"showIcon\");\n\t\t\t\t}\n\t\t\t}, function() {\n\t\t\t\ttreeObj.removeClass(\"showIcon\");\n\t\t\t});\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree * {font-size: 10pt;font-family:\"Microsoft Yahei\",Verdana,Simsun,\"Segoe UI Web Light\",\"Segoe UI Light\",\"Segoe UI Web Regular\",\"Segoe UI\",\"Segoe UI Symbol\",\"Helvetica Neue\",Arial}\n.ztree li ul{ margin:0; padding:0}\n.ztree li {line-height:30px;}\n.ztree li a {width:200px;height:30px;padding-top: 0px;}\n.ztree li a:hover {text-decoration:none; background-color: #E7E7E7;}\n.ztree li a span.button.switch {visibility:hidden}\n.ztree.showIcon li a span.button.switch {visibility:visible}\n.ztree li a.curSelectedNode {background-color:#D4D4D4;border:0;height:30px;}\n.ztree li span {line-height:30px;}\n.ztree li span.button {margin-top: -7px;}\n.ztree li span.button.switch {width: 16px;height: 16px;}\n\n.ztree li a.level0 span {font-size: 150%;font-weight: bold;}\n.ztree li span.button {background-image:url(\"./left_menuForOutLook.png\"); *background-image:url(\"./left_menuForOutLook.gif\")}\n.ztree li span.button.switch.level0 {width: 20px; height:20px}\n.ztree li span.button.switch.level1 {width: 20px; height:20px}\n.ztree li span.button.noline_open {background-position: 0 0;}\n.ztree li span.button.noline_close {background-position: -18px 0;}\n.ztree li span.button.noline_open.level0 {background-position: 0 -18px;}\n.ztree li span.button.noline_close.level0 {background-position: -18px -18px;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Left Menu Like OutLook Style</h1>\n<h6>[ File Path: super/left_menuForOutLook.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>I make one left menu which resembles outlook.com, so share to everyone.</li>\n\t\t\t\t<li class=\"highlight_red\">1. Please note that the css code of the source of this page.</li>\n\t\t\t\t<li class=\"highlight_red\">2. Please note that the javascript code of the source of this page, especially the switch button is moved into the &lt;a&gt; tag  when 'addDiyDom' callback be called</li>\n\t\t\t\t<li class=\"highlight_red\">3. Use the method of add zTree class name to implement the switch button be hidden or showing.</li>\n\t\t\t\t<li>4. Other auxiliary rules, please write code based on your needs.</li>\n\t\t\t\t<li>5. The current rule description:<br/>\n\t\t\t\t&nbsp;&nbsp;Click the root node can control the parent node be expanded or collapsed;<br/>\n\t\t\t\t&nbsp;&nbsp;The parent nodes without root only are only clicked the arrow icon can control be expanded or  collapsed;br/>\n\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>\n"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/metro.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n    <TITLE> ZTREE DEMO - Simple Data</TITLE>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n    <link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n    <link rel=\"stylesheet\" href=\"../../../css/metroStyle/metroStyle.css\" type=\"text/css\">\n    <script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n    <SCRIPT type=\"text/javascript\">\n        <!--\n        var setting = {\n            view: {\n                addHoverDom: addHoverDom,\n                removeHoverDom: removeHoverDom,\n                selectedMulti: false\n            },\n            check: {\n                enable: true\n            },\n            data: {\n                simpleData: {\n                    enable: true\n                }\n            },\n            edit: {\n                enable: true\n            }\n        };\n\n        var zNodes =[\n            { id:1, pId:0, name:\"pNode 1\", open:true},\n            { id:11, pId:1, name:\"pNode 11\"},\n            { id:111, pId:11, name:\"sNode 111\"},\n            { id:112, pId:11, name:\"sNode 112\"},\n            { id:113, pId:11, name:\"sNode 113\"},\n            { id:114, pId:11, name:\"sNode 114\"},\n            { id:12, pId:1, name:\"pNode 12\"},\n            { id:121, pId:12, name:\"sNode 121\"},\n            { id:122, pId:12, name:\"sNode 122\"},\n            { id:123, pId:12, name:\"sNode 123\"},\n            { id:124, pId:12, name:\"sNode 124\"},\n            { id:13, pId:1, name:\"pNode 13\", isParent:true},\n            { id:2, pId:0, name:\"pNode 2\"},\n            { id:21, pId:2, name:\"pNode 21\", open:true},\n            { id:211, pId:21, name:\"sNode 211\"},\n            { id:212, pId:21, name:\"sNode 212\"},\n            { id:213, pId:21, name:\"sNode 213\"},\n            { id:214, pId:21, name:\"sNode 214\"},\n            { id:22, pId:2, name:\"pNode 22\"},\n            { id:221, pId:22, name:\"sNode 221\"},\n            { id:222, pId:22, name:\"sNode 222\"},\n            { id:223, pId:22, name:\"sNode 223\"},\n            { id:224, pId:22, name:\"sNode 224\"},\n            { id:23, pId:2, name:\"pNode 23\"},\n            { id:231, pId:23, name:\"sNode 231\"},\n            { id:232, pId:23, name:\"sNode 232\"},\n            { id:233, pId:23, name:\"sNode 233\"},\n            { id:234, pId:23, name:\"sNode 234\"},\n            { id:3, pId:0, name:\"pNode 3\", isParent:true}\n        ];\n\n        $(document).ready(function(){\n            $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n        });\n\n        var newCount = 1;\n        function addHoverDom(treeId, treeNode) {\n            var sObj = $(\"#\" + treeNode.tId + \"_span\");\n            if (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n            var addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n                + \"' title='add node' onfocus='this.blur();'></span>\";\n            sObj.after(addStr);\n            var btn = $(\"#addBtn_\"+treeNode.tId);\n            if (btn) btn.bind(\"click\", function(){\n                var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n                zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n                return false;\n            });\n        };\n        function removeHoverDom(treeId, treeNode) {\n            $(\"#addBtn_\"+treeNode.tId).unbind().remove();\n        };\n        //-->\n    </SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>Metro Style</h1>\n<h6>[ File Path: super/metro.html ]</h6>\n<div class=\"content_wrap\">\n    <div class=\"zTreeDemoBackground left\">\n        <ul id=\"treeDemo\" class=\"ztree\"></ul>\n    </div>\n    <div class=\"right\">\n        <ul class=\"info\">\n            <li class=\"title\"><h2>1, Explanation of Style Files</h2>\n                <ul class=\"list\">\n                    <li class=\"highlight_red\">Please use style and image files of 'css/metroStyle'</li>\n                    <li>Thanked rqx110 for this Demo. For reference only.</li>\n                </ul>\n            </li>\n        </ul>\n    </div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/oneclick.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - one click</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false,\n\t\t\t\tshowLine: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Root\", open:true},\n\t\t\t{ id:11, pId:1, name:\"Parent Node 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"Leaf Node 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"Leaf Node 1-1-2\"},\n\t\t\t{ id:113, pId:11, name:\"Leaf Node 1-1-3\"},\n\t\t\t{ id:114, pId:11, name:\"Leaf Node 1-1-4\"},\n\t\t\t{ id:12, pId:1, name:\"Parent Node 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"Leaf Node 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"Leaf Node 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"Leaf Node 1-2-3\"},\n\t\t\t{ id:124, pId:12, name:\"Leaf Node 1-2-4\"},\n\t\t\t{ id:13, pId:1, name:\"Parent Node 1-3\", open:true},\n\t\t\t{ id:131, pId:13, name:\"Leaf Node 1-3-1\"},\n\t\t\t{ id:132, pId:13, name:\"Leaf Node 1-3-2\"},\n\t\t\t{ id:133, pId:13, name:\"Leaf Node 1-3-3\"},\n\t\t\t{ id:134, pId:13, name:\"Leaf Node 1-3-4\"}\n\t\t];\n\n\t\tfunction onClick(e,treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.expandNode(treeNode);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li button.switch {visibility:hidden; width:1px;}\n.ztree li button.switch.roots_docu {visibility:visible; width:16px;}\n.ztree li button.switch.center_docu {visibility:visible; width:16px;}\n.ztree li button.switch.bottom_docu {visibility:visible; width:16px;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Click to Expand Node</h1>\n<h6>[ File Path: super/oneclick.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>zTree not provide a default click to expand node feature, but can use the onClick callback functions to easily implement this feature.</li>\n\t\t\t\t<li class=\"highlight_red\">In order to avoid conflict with the double-clicking, I recommended to turn off double-clicking expand node function, please set setting.view.dblClickExpand = false</li>\n\t\t\t\t<li class=\"highlight_red\">You can hide all the +/- switch, please see the page source, see the css.</li>\n\t\t\t\t<li class=\"highlight_red\">If you do not show + / - switch, then please set 'setting.view.showLine = false' to hide line.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/oneroot.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - one root</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: dblClickExpand\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{ id:1, pId:0, name:\"Root\", open:true},\n\t\t\t{ id:11, pId:1, name:\"Parent Node 1-1\", open:true},\n\t\t\t{ id:111, pId:11, name:\"Leaf Node 1-1-1\"},\n\t\t\t{ id:112, pId:11, name:\"Leaf Node 1-1-2\"},\n\t\t\t{ id:113, pId:11, name:\"Leaf Node 1-1-3\"},\n\t\t\t{ id:114, pId:11, name:\"Leaf Node 1-1-4\"},\n\t\t\t{ id:12, pId:1, name:\"Parent Node 1-2\", open:true},\n\t\t\t{ id:121, pId:12, name:\"Leaf Node 1-2-1\"},\n\t\t\t{ id:122, pId:12, name:\"Leaf Node 1-2-2\"},\n\t\t\t{ id:123, pId:12, name:\"Leaf Node 1-2-3\"},\n\t\t\t{ id:124, pId:12, name:\"Leaf Node 1-2-4\"},\n\t\t\t{ id:13, pId:1, name:\"Parent Node 1-3\", open:true},\n\t\t\t{ id:131, pId:13, name:\"Leaf Node 1-3-1\"},\n\t\t\t{ id:132, pId:13, name:\"Leaf Node 1-3-2\"},\n\t\t\t{ id:133, pId:13, name:\"Leaf Node 1-3-3\"},\n\t\t\t{ id:134, pId:13, name:\"Leaf Node 1-3-4\"}\n\t\t];\n\n\t\tfunction dblClickExpand(treeId, treeNode) {\n\t\t\treturn treeNode.level > 0;\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li span.button.switch.level0 {visibility:hidden; width:1px;}\n.ztree li ul.level0 {padding:0; background:none;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Freeze the Root Node</h1>\n<h6>[ File Path: demo/super/oneroot.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>For only one root, and do not show +/- switch needs need to modify the css, and set the setting.</li>\n\t\t\t\t<li class=\"highlight_red\">zTree v3.x can be for a given level, set the style, check out the page source, see the css.</li>\n\t\t\t\t<li class=\"highlight_red\">Set setting.view.dblClickExpand to Function, you can turn off double-clicking for expand the root node.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/rightClickMenu.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tcheck: {\n\t\t\t\tenable: true\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonRightClick: OnRightClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, name:\"No right-click menu 1\", open:true, noR:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:11, name:\"Leaf Node 1-1\", noR:true},\n\t\t\t\t\t   {id:12, name:\"Leaf Node 1-2\", noR:true}\n\n\t\t\t\t]},\n\t\t\t{id:2, name:\"Right-click 2\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:21, name:\"Leaf Node 2-1\"},\n\t\t\t\t\t   {id:22, name:\"Leaf Node 2-2\"},\n\t\t\t\t\t   {id:23, name:\"Leaf Node 2-3\"},\n\t\t\t\t\t   {id:24, name:\"Leaf Node 2-4\"}\n\t\t\t\t]},\n\t\t\t{id:3, name:\"Right-click 3\", open:true,\n\t\t\t\tchildren:[\n\t\t\t\t\t   {id:31, name:\"Leaf Node 3-1\"},\n\t\t\t\t\t   {id:32, name:\"Leaf Node 3-2\"},\n\t\t\t\t\t   {id:33, name:\"Leaf Node 3-3\"},\n\t\t\t\t\t   {id:34, name:\"Leaf Node 3-4\"}\n\t\t\t\t]}\n  \t \t];\n\n\t\tfunction OnRightClick(event, treeId, treeNode) {\n\t\t\tif (!treeNode && event.target.tagName.toLowerCase() != \"button\" && $(event.target).parents(\"a\").length == 0) {\n\t\t\t\tzTree.cancelSelectedNode();\n\t\t\t\tshowRMenu(\"root\", event.clientX, event.clientY);\n\t\t\t} else if (treeNode && !treeNode.noR) {\n\t\t\t\tzTree.selectNode(treeNode);\n\t\t\t\tshowRMenu(\"node\", event.clientX, event.clientY);\n\t\t\t}\n\t\t}\n\n\t\tfunction showRMenu(type, x, y) {\n\t\t\t$(\"#rMenu ul\").show();\n\t\t\tif (type==\"root\") {\n\t\t\t\t$(\"#m_del\").hide();\n\t\t\t\t$(\"#m_check\").hide();\n\t\t\t\t$(\"#m_unCheck\").hide();\n\t\t\t} else {\n\t\t\t\t$(\"#m_del\").show();\n\t\t\t\t$(\"#m_check\").show();\n\t\t\t\t$(\"#m_unCheck\").show();\n\t\t\t}\n\n            y += document.body.scrollTop;\n            x += document.body.scrollLeft;\n            rMenu.css({\"top\":y+\"px\", \"left\":x+\"px\", \"visibility\":\"visible\"});\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyMouseDown);\n\t\t}\n\t\tfunction hideRMenu() {\n\t\t\tif (rMenu) rMenu.css({\"visibility\": \"hidden\"});\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyMouseDown);\n\t\t}\n\t\tfunction onBodyMouseDown(event){\n\t\t\tif (!(event.target.id == \"rMenu\" || $(event.target).parents(\"#rMenu\").length>0)) {\n\t\t\t\trMenu.css({\"visibility\" : \"hidden\"});\n\t\t\t}\n\t\t}\n\t\tvar addCount = 1;\n\t\tfunction addTreeNode() {\n\t\t\thideRMenu();\n\t\t\tvar newNode = { name:\"newNode \" + (addCount++)};\n\t\t\tif (zTree.getSelectedNodes()[0]) {\n\t\t\t\tnewNode.checked = zTree.getSelectedNodes()[0].checked;\n\t\t\t\tzTree.addNodes(zTree.getSelectedNodes()[0], newNode);\n\t\t\t} else {\n\t\t\t\tzTree.addNodes(null, newNode);\n\t\t\t}\n\t\t}\n\t\tfunction removeTreeNode() {\n\t\t\thideRMenu();\n\t\t\tvar nodes = zTree.getSelectedNodes();\n\t\t\tif (nodes && nodes.length>0) {\n\t\t\t\tif (nodes[0].children && nodes[0].children.length > 0) {\n\t\t\t\t\tvar msg = \"If you delete this node will be deleted along with sub-nodes. \\n\\nPlease confirm!\";\n\t\t\t\t\tif (confirm(msg)==true){\n\t\t\t\t\t\tzTree.removeNode(nodes[0]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzTree.removeNode(nodes[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfunction checkTreeNode(checked) {\n\t\t\tvar nodes = zTree.getSelectedNodes();\n\t\t\tif (nodes && nodes.length>0) {\n\t\t\t\tzTree.checkNode(nodes[0], checked, true);\n\t\t\t}\n\t\t\thideRMenu();\n\t\t}\n\t\tfunction resetTree() {\n\t\t\thideRMenu();\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n\n\t\tvar zTree, rMenu;\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tzTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\trMenu = $(\"#rMenu\");\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\ndiv#rMenu {position:absolute; visibility:hidden; top:0; background-color: #555;text-align: left;padding: 2px;}\ndiv#rMenu ul li{\n\tmargin: 1px 0;\n\tpadding: 0 5px;\n\tcursor: pointer;\n\tlist-style: none outside none;\n\tbackground-color: #DFDFDF;\n}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Right-click Menu</h1>\n<h6>[ File Path: super/rightClickMenu.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Use 'beforeRightClick / onRightClick' callback function achieve right-click menu.</li>\n\t\t\t\t<li class=\"highlight_red\">Demo's menu is ugly, you can use a custom menu fine style.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n<div id=\"rMenu\">\n\t<ul>\n\t\t<li id=\"m_add\" onclick=\"addTreeNode();\">Add Node</li>\n\t\t<li id=\"m_del\" onclick=\"removeTreeNode();\">Delete Node</li>\n\t\t<li id=\"m_check\" onclick=\"checkTreeNode(true);\">Check Node</li>\n\t\t<li id=\"m_unCheck\" onclick=\"checkTreeNode(false);\">Uncheck Node</li>\n\t\t<li id=\"m_reset\" onclick=\"resetTree();\">Resume zTree</li>\n\t</ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/select_menu.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, pId:0, name:\"Beijing\"},\n\t\t\t{id:2, pId:0, name:\"Tianjin\"},\n\t\t\t{id:3, pId:0, name:\"Shanghai\"},\n\t\t\t{id:6, pId:0, name:\"Chongqing\"},\n\t\t\t{id:4, pId:0, name:\"Hebei Province\", open:true},\n\t\t\t{id:41, pId:4, name:\"Shijiazhuang\"},\n\t\t\t{id:42, pId:4, name:\"Baoding\"},\n\t\t\t{id:43, pId:4, name:\"Handan\"},\n\t\t\t{id:44, pId:4, name:\"Chengde\"},\n\t\t\t{id:5, pId:0, name:\"Guangdong Province\", open:true},\n\t\t\t{id:51, pId:5, name:\"Guangzhou\"},\n\t\t\t{id:52, pId:5, name:\"Shenzhen\"},\n\t\t\t{id:53, pId:5, name:\"Dongguan\"},\n\t\t\t{id:54, pId:5, name:\"Fushan\"},\n\t\t\t{id:6, pId:0, name:\"Fujian Province\", open:true},\n\t\t\t{id:61, pId:6, name:\"Fuzhou\"},\n\t\t\t{id:62, pId:6, name:\"Xiamen\"},\n\t\t\t{id:63, pId:6, name:\"Quanzhou\"},\n\t\t\t{id:64, pId:6, name:\"Sanming\"}\n\t\t ];\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tvar check = (treeNode && !treeNode.isParent);\n\t\t\tif (!check) alert(\"Do not select province...\");\n\t\t\treturn check;\n\t\t}\n\t\t\n\t\tfunction onClick(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getSelectedNodes(),\n\t\t\tv = \"\";\n\t\t\tnodes.sort(function compare(a,b){return a.id-b.id;});\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tv += nodes[i].name + \",\";\n\t\t\t}\n\t\t\tif (v.length > 0 ) v = v.substring(0, v.length-1);\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tcityObj.attr(\"value\", v);\n\t\t}\n\n\t\tfunction showMenu() {\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tvar cityOffset = $(\"#citySel\").offset();\n\t\t\t$(\"#menuContent\").css({left:cityOffset.left + \"px\", top:cityOffset.top + cityObj.outerHeight() + \"px\"}).slideDown(\"fast\");\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction hideMenu() {\n\t\t\t$(\"#menuContent\").fadeOut(\"fast\");\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction onBodyDown(event) {\n\t\t\tif (!(event.target.id == \"menuBtn\" || event.target.id == \"menuContent\" || $(event.target).parents(\"#menuContent\").length>0)) {\n\t\t\t\thideMenu();\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Drop-down Menu</h1>\n<h6>[ File Path: super/select_menu.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"title\">&nbsp;&nbsp;<span class=\"highlight_red\">Press Ctrl-key or Cmd-key to select multiple cities</span></li>\n\t\t\t<li class=\"title\">&nbsp;&nbsp;city: <input id=\"citySel\" type=\"text\" readonly value=\"\" style=\"width:120px;\"/>\n\t\t&nbsp;<a id=\"menuBtn\" href=\"#\" onclick=\"showMenu(); return false;\">select</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>Achieve this drop-down menu, it is relatively easy, you only need to control zTree Hide / Show, and location.</li>\n\t\t\t\t<li class=\"highlight_red\">Use zTree v3.x, you can select multiple nodes, so the multi-selection is also easy.</li>\n\t\t\t\t<li class=\"highlight_red\">Use the configuration parameters setting, fully meet the needs of most of the functionality.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n\n<div id=\"menuContent\" class=\"menuContent\" style=\"display:none; position: absolute;\">\n\t<ul id=\"treeDemo\" class=\"ztree\" style=\"margin-top:0; width:160px;\"></ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/select_menu_checkbox.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - checkbox select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkboxType: {\"Y\":\"\", \"N\":\"\"}\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeClick: beforeClick,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, pId:0, name:\"Beijing\"},\n\t\t\t{id:2, pId:0, name:\"Tianjin\"},\n\t\t\t{id:3, pId:0, name:\"Shanghai\"},\n\t\t\t{id:6, pId:0, name:\"Chongqing\"},\n\t\t\t{id:4, pId:0, name:\"Hebei Province\", open:true},\n\t\t\t{id:41, pId:4, name:\"Shijiazhuang\"},\n\t\t\t{id:42, pId:4, name:\"Baoding\"},\n\t\t\t{id:43, pId:4, name:\"Handan\"},\n\t\t\t{id:44, pId:4, name:\"Chengde\"},\n\t\t\t{id:5, pId:0, name:\"Guangdong Province\", open:true},\n\t\t\t{id:51, pId:5, name:\"Guangzhou\"},\n\t\t\t{id:52, pId:5, name:\"Shenzhen\"},\n\t\t\t{id:53, pId:5, name:\"Dongguan\"},\n\t\t\t{id:54, pId:5, name:\"Fushan\"},\n\t\t\t{id:6, pId:0, name:\"Fujian Province\", open:true},\n\t\t\t{id:61, pId:6, name:\"Fuzhou\"},\n\t\t\t{id:62, pId:6, name:\"Xiamen\"},\n\t\t\t{id:63, pId:6, name:\"Quanzhou\"},\n\t\t\t{id:64, pId:6, name:\"Sanming\"}\n\t\t ];\n\n\t\tfunction beforeClick(treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.checkNode(treeNode, !treeNode.checked, null, true);\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getCheckedNodes(true),\n\t\t\tv = \"\";\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tv += nodes[i].name + \",\";\n\t\t\t}\n\t\t\tif (v.length > 0 ) v = v.substring(0, v.length-1);\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tcityObj.attr(\"value\", v);\n\t\t}\n\n\t\tfunction showMenu() {\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tvar cityOffset = $(\"#citySel\").offset();\n\t\t\t$(\"#menuContent\").css({left:cityOffset.left + \"px\", top:cityOffset.top + cityObj.outerHeight() + \"px\"}).slideDown(\"fast\");\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction hideMenu() {\n\t\t\t$(\"#menuContent\").fadeOut(\"fast\");\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction onBodyDown(event) {\n\t\t\tif (!(event.target.id == \"menuBtn\" || event.target.id == \"citySel\" || event.target.id == \"menuContent\" || $(event.target).parents(\"#menuContent\").length>0)) {\n\t\t\t\thideMenu();\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Drop-down Menu with checkbox</h1>\n<h6>[ File Path: super/select_menu_checkbox.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"title\">&nbsp;&nbsp;<span class=\"highlight_red\">Check the checkbox to select or click the node</span></li>\n\t\t\t<li class=\"title\">&nbsp;&nbsp;Test: <input id=\"citySel\" type=\"text\" readonly value=\"\" style=\"width:120px;\" onclick=\"showMenu();\" />\n\t\t&nbsp;<a id=\"menuBtn\" href=\"#\" onclick=\"showMenu(); return false;\">select</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>You can achieve multi-selected drop-down menu with checkbox.</li>\n\t\t\t\t<li>This Demo is mainly used for compare with other drop-down menu.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n\n<div id=\"menuContent\" class=\"menuContent\" style=\"display:none; position: absolute;\">\n\t<ul id=\"treeDemo\" class=\"ztree\" style=\"margin-top:0; width:180px; height: 300px;\"></ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/select_menu_radio.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - radio select menu</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n<!--\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tcheck: {\n\t\t\t\tenable: true,\n\t\t\t\tchkStyle: \"radio\",\n\t\t\t\tradioType: \"all\"\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tonClick: onClick,\n\t\t\t\tonCheck: onCheck\n\t\t\t}\n\t\t};\n\n\t\tvar zNodes =[\n\t\t\t{id:1, pId:0, name:\"Beijing\"},\n\t\t\t{id:2, pId:0, name:\"Tianjin\"},\n\t\t\t{id:3, pId:0, name:\"Shanghai\"},\n\t\t\t{id:6, pId:0, name:\"Chongqing\"},\n\t\t\t{id:4, pId:0, name:\"Hebei Province\", open:true},\n\t\t\t{id:41, pId:4, name:\"Shijiazhuang\"},\n\t\t\t{id:42, pId:4, name:\"Baoding\"},\n\t\t\t{id:43, pId:4, name:\"Handan\"},\n\t\t\t{id:44, pId:4, name:\"Chengde\"},\n\t\t\t{id:5, pId:0, name:\"Guangdong Province\", open:true},\n\t\t\t{id:51, pId:5, name:\"Guangzhou\"},\n\t\t\t{id:52, pId:5, name:\"Shenzhen\"},\n\t\t\t{id:53, pId:5, name:\"Dongguan\"},\n\t\t\t{id:54, pId:5, name:\"Fushan\"},\n\t\t\t{id:6, pId:0, name:\"Fujian Province\", open:true},\n\t\t\t{id:61, pId:6, name:\"Fuzhou\"},\n\t\t\t{id:62, pId:6, name:\"Xiamen\"},\n\t\t\t{id:63, pId:6, name:\"Quanzhou\"},\n\t\t\t{id:64, pId:6, name:\"Sanming\"}\n\t\t ];\n\n\t\tfunction onClick(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.checkNode(treeNode, !treeNode.checked, null, true);\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction onCheck(e, treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\tnodes = zTree.getCheckedNodes(true),\n\t\t\tv = \"\";\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tv += nodes[i].name + \",\";\n\t\t\t}\n\t\t\tif (v.length > 0 ) v = v.substring(0, v.length-1);\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tcityObj.attr(\"value\", v);\n\t\t}\n\n\t\tfunction showMenu() {\n\t\t\tvar cityObj = $(\"#citySel\");\n\t\t\tvar cityOffset = $(\"#citySel\").offset();\n\t\t\t$(\"#menuContent\").css({left:cityOffset.left + \"px\", top:cityOffset.top + cityObj.outerHeight() + \"px\"}).slideDown(\"fast\");\n\n\t\t\t$(\"body\").bind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction hideMenu() {\n\t\t\t$(\"#menuContent\").fadeOut(\"fast\");\n\t\t\t$(\"body\").unbind(\"mousedown\", onBodyDown);\n\t\t}\n\t\tfunction onBodyDown(event) {\n\t\t\tif (!(event.target.id == \"menuBtn\" || event.target.id == \"citySel\" || event.target.id == \"menuContent\" || $(event.target).parents(\"#menuContent\").length>0)) {\n\t\t\t\thideMenu();\n\t\t\t}\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Drop-down Menu with radio</h1>\n<h6>[ File Path: super/select_menu_radio.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul class=\"list\">\n\t\t\t<li class=\"title\">&nbsp;&nbsp;<span class=\"highlight_red\">Check the radio to select or click the node</span></li>\n\t\t\t<li class=\"title\">&nbsp;&nbsp;Test: <input id=\"citySel\" type=\"text\" readonly value=\"\" style=\"width:120px;\" onclick=\"showMenu();\" />\n\t\t&nbsp;<a id=\"menuBtn\" href=\"#\" onclick=\"showMenu(); return false;\">select</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>You can achieve single-selected drop-down menu with radio.</li>\n\t\t\t\t<li>This Demo is mainly used for compare with other drop-down menu.</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n\n<div id=\"menuContent\" class=\"menuContent\" style=\"display:none; position: absolute;\">\n\t<ul id=\"treeDemo\" class=\"ztree\" style=\"margin-top:0; width:180px; height: 300px;\"></ul>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/singlepath.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n\t<TITLE> ZTREE DEMO - single path</TITLE>\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\t<link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"../../../css/zTreeStyle/zTreeStyle.css\" type=\"text/css\">\n\t<script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n\t<script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n\t<!--  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n\t  <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>-->\n\t<SCRIPT type=\"text/javascript\">\n\t\t<!--\n\t\tvar setting = {\n\t\t\tview: {\n\t\t\t\tdblClickExpand: false,\n\t\t\t\tshowLine: false\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeExpand: beforeExpand,\n\t\t\t\tonExpand: onExpand,\n\t\t\t\tonClick: onClick\n\t\t\t}\n\t\t};\n\n\t\t\t\tfunction createNodes(maxNodesNumInLevel, maxLevel, curLevel, curPId) {\n\t\t\tif (maxNodesNumInLevel<5) {\n\t\t\t\tmaxNodesNumInLevel = 5;\n\t\t\t}\n\t\t\tvar nodes = [], num = 0;\n\t\t\twhile(num<3) {\n\t\t\t\tnum = parseInt(Math.random()*1024)%maxNodesNumInLevel+1;\n\t\t\t}\n\t\t\tfor (var i=0; i<num; i++) {\n\t\t\t\tvar id = curPId ? curPId + \"-\" + i : \"\" + i, isParent = (parseInt(Math.random()*9999)%3!=0),\n\t\t\t\tnode = {id: id, pId : curPId, name : \"N\" + id};\n\t\t\t\tnodes.push(node);\n\t\t\t\tif (isParent && curLevel<maxLevel) {\n\t\t\t\t\tnodes = nodes.concat(createNodes(maxNodesNumInLevel, maxLevel, curLevel+1, id));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nodes;\n\t\t}\n\t\tvar zNodes =createNodes(5, 5, 0);\n\n\t\tvar curExpandNode = null;\n\t\tfunction beforeExpand(treeId, treeNode) {\n\t\t\tvar pNode = curExpandNode ? curExpandNode.getParentNode():null;\n\t\t\tvar treeNodeP = treeNode.parentTId ? treeNode.getParentNode():null;\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tfor(var i=0, l=!treeNodeP ? 0:treeNodeP.children.length; i<l; i++ ) {\n\t\t\t\tif (treeNode !== treeNodeP.children[i]) {\n\t\t\t\t\tzTree.expandNode(treeNodeP.children[i], false);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pNode) {\n\t\t\t\tif (pNode === treeNode) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tpNode = pNode.getParentNode();\n\t\t\t}\n\t\t\tif (!pNode) {\n\t\t\t\tsinglePath(treeNode);\n\t\t\t}\n\n\t\t}\n        function singlePath(newNode) {\n            if (newNode === curExpandNode) return;\n\n            var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n                    rootNodes, tmpRoot, tmpTId, i, j, n;\n\n            if (!curExpandNode) {\n                tmpRoot = newNode;\n                while (tmpRoot) {\n                    tmpTId = tmpRoot.tId;\n                    tmpRoot = tmpRoot.getParentNode();\n                }\n                rootNodes = zTree.getNodes();\n                for (i=0, j=rootNodes.length; i<j; i++) {\n                    n = rootNodes[i];\n                    if (n.tId != tmpTId) {\n                        zTree.expandNode(n, false);\n                    }\n                }\n            } else if (curExpandNode && curExpandNode.open) {\n                if (newNode.parentTId === curExpandNode.parentTId) {\n                    zTree.expandNode(curExpandNode, false);\n                } else {\n                    var newParents = [];\n                    while (newNode) {\n                        newNode = newNode.getParentNode();\n                        if (newNode === curExpandNode) {\n                            newParents = null;\n                            break;\n                        } else if (newNode) {\n                            newParents.push(newNode);\n                        }\n                    }\n                    if (newParents!=null) {\n                        var oldNode = curExpandNode;\n                        var oldParents = [];\n                        while (oldNode) {\n                            oldNode = oldNode.getParentNode();\n                            if (oldNode) {\n                                oldParents.push(oldNode);\n                            }\n                        }\n                        if (newParents.length>0) {\n                            zTree.expandNode(oldParents[Math.abs(oldParents.length-newParents.length)-1], false);\n                        } else {\n                            zTree.expandNode(oldParents[oldParents.length-1], false);\n                        }\n                    }\n                }\n            }\n            curExpandNode = newNode;\n        }\n\n\t\tfunction onExpand(event, treeId, treeNode) {\n\t\t\tcurExpandNode = treeNode;\n\t\t}\n\n\t\tfunction onClick(e,treeId, treeNode) {\n\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\tzTree.expandNode(treeNode, null, null, null, true);\n\t\t}\n\n\t\t$(document).ready(function(){\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t});\n\t\t//-->\n\t</SCRIPT>\n\t<style type=\"text/css\">\n.ztree li button.switch {visibility:hidden; width:1px;}\n.ztree li button.switch.roots_docu {visibility:visible; width:16px;}\n.ztree li button.switch.center_docu {visibility:visible; width:16px;}\n.ztree li button.switch.bottom_docu {visibility:visible; width:16px;}\n\t</style>\n </HEAD>\n\n<BODY>\n<h1>Keep Single Path</h1>\n<h6>[ File Path: super/singlepath.html ]</h6>\n<div class=\"content_wrap\">\n\t<div class=\"zTreeDemoBackground left\">\n\t\t<ul id=\"treeDemo\" class=\"ztree\"></ul>\n\t</div>\n\t<div class=\"right\">\n\t\t<ul class=\"info\">\n\t\t\t<li class=\"title\"><h2>Explanation of implementation method</h2>\n\t\t\t\t<ul class=\"list\">\n\t\t\t\t<li>This Demo is the transformation from \"Click to Expand Node\" demo​​, tree only expand single path.</li>\n\t\t\t\t<li class=\"highlight_red\">Use 'setting.callback.beforeExpand / onExpand' callback function to achieve rules about expand </li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/en/super/ztree.html",
    "content": "<!DOCTYPE html>\n<HTML>\n<HEAD>\n    <TITLE> ZTREE DEMO - Simple Data</TITLE>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n    \n    <link rel=\"stylesheet\" href=\"../../../css/demo.css\" type=\"text/css\">\n    \n    <link href=\"../../../css/zTreeStyle/zTreeStyle.css\" rel=\"stylesheet\" type=\"text/css\"/>\n    <script type=\"text/javascript\" src=\"../../../js/jquery-1.4.4.min.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.core.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.excheck.js\"></script>\n    <script type=\"text/javascript\" src=\"../../../js/jquery.ztree.exedit.js\"></script>\n    <SCRIPT type=\"text/javascript\">\n        <!--\n        var setting = {\n            view: {\n                addHoverDom: addHoverDom,\n                removeHoverDom: removeHoverDom,\n                selectedMulti: false\n            },\n            check: {\n                enable: true\n                ,chkStyle: 'radio'\n                ,radioType: \"level\"\n            },\n            data: {\n                simpleData: {\n                    enable: true\n                }\n            },\n            edit: {\n                enable: true\n            }\n        };\n\n        var zNodes =[\n            { id:1, pId:0, name:\"pNode 1\", open:true},\n            { id:11, pId:1, name:\"pNode 11\"},\n            { id:111, pId:11, name:\" sNode 111\"},\n            { id:112, pId:11, name:\"sNode 112\"},\n            { id:113, pId:11, name:\"sNode 113\"},\n            { id:114, pId:11, name:\"sNode 114\"},\n            { id:12, pId:1, name:\"pNode 12\"},\n            { id:121, pId:12, name:\"sNode 121\"},\n            { id:122, pId:12, name:\"sNode 122\"},\n            { id:123, pId:12, name:\"sNode 123\"},\n            { id:124, pId:12, name:\"sNode 124\"},\n            { id:13, pId:1, name:\"pNode 13\", isParent:true},\n            { id:2, pId:0, name:\"pNode 2\"},\n            { id:21, pId:2, name:\"pNode 21\", open:true},\n            { id:211, pId:21, name:\"sNode 211\"},\n            { id:212, pId:21, name:\"sNode 212\"},\n            { id:213, pId:21, name:\"sNode 213\"},\n            { id:214, pId:21, name:\"sNode 214\"},\n            { id:22, pId:2, name:\"pNode 22\"},\n            { id:221, pId:22, name:\"sNode 221\"},\n            { id:222, pId:22, name:\"sNode 222\"},\n            { id:223, pId:22, name:\"sNode 223\"},\n            { id:224, pId:22, name:\"sNode 224\"},\n            { id:23, pId:2, name:\"pNode 23\"},\n            { id:231, pId:23, name:\"sNode 231\"},\n            { id:232, pId:23, name:\"sNode 232\"},\n            { id:233, pId:23, name:\"sNode 233\"},\n            { id:234, pId:23, name:\"sNode 234\"},\n            { id:3, pId:0, name:\"pNode 3\", isParent:true}\n        ];\n\t\tfunction setCheck() {\n\t\t\tsetting.check.chkStyle = $(\"#r1\").attr(\"checked\")? \"checkbox\":\"radio\";\n                        setting.check.enable = (!$(\"#disablechk\").attr(\"checked\"));\n\t\t\t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t}\n        $(document).ready(function(){\n            $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t\tsetCheck();\t\t\t\n\t\t\t$(\"#r1\").bind(\"change\", setCheck);\n\t\t\t$(\"#r2\").bind(\"change\", setCheck);\n\t\t\t$(\"#disablechk\").bind(\"change\", setCheck);\n        });\n\n        var newCount = 1;\n        function addHoverDom(treeId, treeNode) {\n            var sObj = $(\"#\" + treeNode.tId + \"_span\");\n            if (treeNode.editNameFlag || $(\"#addBtn_\"+treeNode.tId).length>0) return;\n            var addStr = \"<span class='button add' id='addBtn_\" + treeNode.tId\n                + \"' title='add node' onfocus='this.blur();'></span>\";\n            sObj.after(addStr);\n            var btn = $(\"#addBtn_\"+treeNode.tId);\n            if (btn) btn.bind(\"click\", function(){\n                var zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n                zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:\"new node\" + (newCount++)});\n                return false;\n            });\n        };\n        function removeHoverDom(treeId, treeNode) {\n            $(\"#addBtn_\"+treeNode.tId).unbind().remove();\n        };\n        //-->\n    </SCRIPT>\n</HEAD>\n\n<BODY>\n<h1>zTree Style</h1>\n<h6>[ File Path: super/ztree.html ]</h6>\n<div class=\"content_wrap\">\n    <div class=\"bg left\">\n        <ul id=\"treeDemo\" class=\"ztree\"></ul>\n    </div>\n    <div class=\"right\">\n        <ul class=\"info\">\n            <li class=\"title\"><h2>1, Explanation of zTree Style</h2>\n                    \n            </li>\n                   <li><p>Mode: <br/>\n                            <label ><input type=\"radio\" id=\"r1\" class=\"radio first\" name=\"r\" value=\"checkbox\" checked />\n                                Checkbox</label>\n                            <label><input type=\"radio\" id=\"r2\" class=\"radio\" name=\"r\" value=\"radio\" /> Radio</label>\n                            <label><input type=\"checkbox\" id=\"disablechk\" > Disable</label>\n                                <br/>\n    \t\t\t\t</li>\n\t\t\t\t</ul>\n        </ul>\n    </div>\n</div>\n\n</BODY>\n</HTML>"
  },
  {
    "path": "lib/zTree_v3/demo/js/fuzzysearch.js",
    "content": "/*\n * email: bigablecat@hotmail.com\n * Date: 2018-04-14\n */\n\n/**\n * @param zTreeId the ztree id used to get the ztree object\n * @param searchField selector of your input for fuzzy search\n * @param isHighLight whether highlight the match words, default true\n * @param isExpand whether to expand the node, default false\n * \n * @returns\n */\t\n function fuzzySearch(zTreeId, searchField, isHighLight, isExpand){\n\tvar zTreeObj = $.fn.zTree.getZTreeObj(zTreeId);//get the ztree object by ztree id\n\tif(!zTreeObj){\n\t\talert(\"fail to get ztree object\");\n\t}\n\tvar nameKey = zTreeObj.setting.data.key.name; //get the key of the node name\n\tisHighLight = isHighLight===false?false:true;//default true, only use false to disable highlight\n\tisExpand = isExpand?true:false; // not to expand in default\n\tzTreeObj.setting.view.nameIsHTML = isHighLight; //allow use html in node name for highlight use\n\t\n\tvar metaChar = '[\\\\[\\\\]\\\\\\\\\\^\\\\$\\\\.\\\\|\\\\?\\\\*\\\\+\\\\(\\\\)]'; //js meta characters\n\tvar rexMeta = new RegExp(metaChar, 'gi');//regular expression to match meta characters\n\t\n\t// keywords filter function \n\tfunction ztreeFilter(zTreeObj,_keywords,callBackFunc) {\n\t\tif(!_keywords){\n\t\t\t_keywords =''; //default blank for _keywords \n\t\t}\n\t\t\n\t\t// function to find the matching node\n\t\tfunction filterFunc(node) {\n\t\t\tif(node && node.oldname && node.oldname.length>0){\n\t\t\t\tnode[nameKey] = node.oldname; //recover oldname of the node if exist\n\t\t\t}\n\t\t\tzTreeObj.updateNode(node); //update node to for modifications take effect\n\t\t\tif (_keywords.length == 0) {\n\t\t\t\t//return true to show all nodes if the keyword is blank\n\t\t\t\tzTreeObj.showNode(node);\n\t\t\t\tzTreeObj.expandNode(node,isExpand);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t//transform node name and keywords to lowercase\n\t\t\tif (node[nameKey] && node[nameKey].toLowerCase().indexOf(_keywords.toLowerCase())!=-1) {\n\t\t\t\tif(isHighLight){ //highlight process\n\t\t\t\t\t//a new variable 'newKeywords' created to store the keywords information \n\t\t\t\t\t//keep the parameter '_keywords' as initial and it will be used in next node\n\t\t\t\t\t//process the meta characters in _keywords thus the RegExp can be correctly used in str.replace\n\t\t\t\t\tvar newKeywords = _keywords.replace(rexMeta,function(matchStr){\n\t\t\t\t\t\t//add escape character before meta characters\n\t\t\t\t\t\treturn '\\\\' + matchStr;\n\t\t\t\t\t});\n\t\t\t\t\tnode.oldname = node[nameKey]; //store the old name  \n\t\t\t\t\tvar rexGlobal = new RegExp(newKeywords, 'gi');//'g' for global,'i' for ignore case\n\t\t\t\t\t//use replace(RegExp,replacement) since replace(/substr/g,replacement) cannot be used here\n\t\t\t\t\tnode[nameKey] = node.oldname.replace(rexGlobal, function(originalText){\n\t\t\t\t\t\t//highlight the matching words in node name\n\t\t\t\t\t\tvar highLightText =\n\t\t\t\t\t\t\t'<span style=\"color: whitesmoke;background-color: darkred;\">'\n\t\t\t\t\t\t\t+ originalText\n\t\t\t\t\t\t\t+'</span>';\n\t\t\t\t\t\treturn \thighLightText;\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t\tzTreeObj.updateNode(node); //update node for modifications take effect\n\t\t\t\t}\n\t\t\t\tzTreeObj.showNode(node);//show node with matching keywords\n\t\t\t\treturn true; //return true and show this node\n\t\t\t}\n\t\t\t\n\t\t\tzTreeObj.hideNode(node); // hide node that not matched\n\t\t\treturn false; //return false for node not matched\n\t\t}\n\t\t\n\t\tvar nodesShow = zTreeObj.getNodesByFilter(filterFunc); //get all nodes that would be shown\n\t\tprocessShowNodes(nodesShow, _keywords);//nodes should be reprocessed to show correctly\n\t}\n\t\n\t/**\n\t * reprocess of nodes before showing\n\t */\n\tfunction processShowNodes(nodesShow,_keywords){\n\t\tif(nodesShow && nodesShow.length>0){\n\t\t\t//process the ancient nodes if _keywords is not blank\n\t\t\tif(_keywords.length>0){ \n\t\t\t\t$.each(nodesShow, function(n,obj){\n\t\t\t\t\tvar pathOfOne = obj.getPath();//get all the ancient nodes including current node\n\t\t\t\t\tif(pathOfOne && pathOfOne.length>0){ \n\t\t\t\t\t\t//i < pathOfOne.length-1 process every node in path except self\n\t\t\t\t\t\tfor(var i=0;i<pathOfOne.length-1;i++){\n\t\t\t\t\t\t\tzTreeObj.showNode(pathOfOne[i]); //show node \n\t\t\t\t\t\t\tzTreeObj.expandNode(pathOfOne[i],true); //expand node\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\t\n\t\t\t}else{ //show all nodes when _keywords is blank and expand the root nodes\n\t\t\t\tvar rootNodes = zTreeObj.getNodesByParam('level','0');//get all root nodes\n\t\t\t\t$.each(rootNodes,function(n,obj){\n\t\t\t\t\tzTreeObj.expandNode(obj,true); //expand all root nodes\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//listen to change in input element\n\t$(searchField).bind('input propertychange', function() {\n\t\tvar _keywords = $(this).val();\n\t\tsearchNodeLazy(_keywords); //call lazy load\n\t});\n\n\tvar timeoutId = null;\n  var lastKeyword = '';\n\t// excute lazy load once after input change, the last pending task will be cancled  \n\tfunction searchNodeLazy(_keywords) {\n\t\tif (timeoutId) { \n\t\t\t//clear pending task\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t\ttimeoutId = setTimeout(function() {\n      if (lastKeyword === _keywords) {\n        return;\n      }\n\t\t\tztreeFilter(zTreeObj,_keywords); //lazy load ztreeFilter function \n\t\t\t// $(searchField).focus();//focus input field again after filtering\n      lastKeyword = _keywords;\n\t\t}, 500);\n\t}\n}"
  },
  {
    "path": "lib/zTree_v3/js/jquery.ztree.all.js",
    "content": "\n/*\n * JQuery zTree core v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  var settings = {}, roots = {}, caches = {},\n    //default consts of core\n    _consts = {\n      className: {\n        BUTTON: \"button\",\n        LEVEL: \"level\",\n        ICO_LOADING: \"ico_loading\",\n        SWITCH: \"switch\",\n        NAME: 'node_name'\n      },\n      event: {\n        NODECREATED: \"ztree_nodeCreated\",\n        CLICK: \"ztree_click\",\n        EXPAND: \"ztree_expand\",\n        COLLAPSE: \"ztree_collapse\",\n        ASYNC_SUCCESS: \"ztree_async_success\",\n        ASYNC_ERROR: \"ztree_async_error\",\n        REMOVE: \"ztree_remove\",\n        SELECTED: \"ztree_selected\",\n        UNSELECTED: \"ztree_unselected\"\n      },\n      id: {\n        A: \"_a\",\n        ICON: \"_ico\",\n        SPAN: \"_span\",\n        SWITCH: \"_switch\",\n        UL: \"_ul\"\n      },\n      line: {\n        ROOT: \"root\",\n        ROOTS: \"roots\",\n        CENTER: \"center\",\n        BOTTOM: \"bottom\",\n        NOLINE: \"noline\",\n        LINE: \"line\"\n      },\n      folder: {\n        OPEN: \"open\",\n        CLOSE: \"close\",\n        DOCU: \"docu\"\n      },\n      node: {\n        CURSELECTED: \"curSelectedNode\"\n      }\n    },\n    //default setting of core\n    _setting = {\n      treeId: \"\",\n      treeObj: null,\n      view: {\n        addDiyDom: null,\n        autoCancelSelected: true,\n        dblClickExpand: true,\n        expandSpeed: \"fast\",\n        fontCss: {},\n        nameIsHTML: false,\n        selectedMulti: true,\n        showIcon: true,\n        showLine: true,\n        showTitle: true,\n        txtSelectedEnable: false\n      },\n      data: {\n        key: {\n          isParent: \"isParent\",\n          children: \"children\",\n          name: \"name\",\n          title: \"\",\n          url: \"url\",\n          icon: \"icon\"\n        },\n        simpleData: {\n          enable: false,\n          idKey: \"id\",\n          pIdKey: \"pId\",\n          rootPId: null\n        },\n        keep: {\n          parent: false,\n          leaf: false\n        }\n      },\n      async: {\n        enable: false,\n        contentType: \"application/x-www-form-urlencoded\",\n        type: \"post\",\n        dataType: \"text\",\n        headers: {},\n        xhrFields: {},\n        url: \"\",\n        autoParam: [],\n        otherParam: [],\n        dataFilter: null\n      },\n      callback: {\n        beforeAsync: null,\n        beforeClick: null,\n        beforeDblClick: null,\n        beforeRightClick: null,\n        beforeMouseDown: null,\n        beforeMouseUp: null,\n        beforeExpand: null,\n        beforeCollapse: null,\n        beforeRemove: null,\n\n        onAsyncError: null,\n        onAsyncSuccess: null,\n        onNodeCreated: null,\n        onClick: null,\n        onDblClick: null,\n        onRightClick: null,\n        onMouseDown: null,\n        onMouseUp: null,\n        onExpand: null,\n        onCollapse: null,\n        onRemove: null\n      }\n    },\n    //default root of core\n    //zTree use root to save full data\n    _initRoot = function (setting) {\n      var r = data.getRoot(setting);\n      if (!r) {\n        r = {};\n        data.setRoot(setting, r);\n      }\n      data.nodeChildren(setting, r, []);\n      r.expandTriggerFlag = false;\n      r.curSelectedList = [];\n      r.noSelection = true;\n      r.createdNodes = [];\n      r.zId = 0;\n      r._ver = (new Date()).getTime();\n    },\n    //default cache of core\n    _initCache = function (setting) {\n      var c = data.getCache(setting);\n      if (!c) {\n        c = {};\n        data.setCache(setting, c);\n      }\n      c.nodes = [];\n      c.doms = [];\n    },\n    //default bindEvent of core\n    _bindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.bind(c.NODECREATED, function (event, treeId, node) {\n        tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);\n      });\n\n      o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {\n        tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);\n      });\n\n      o.bind(c.EXPAND, function (event, treeId, node) {\n        tools.apply(setting.callback.onExpand, [event, treeId, node]);\n      });\n\n      o.bind(c.COLLAPSE, function (event, treeId, node) {\n        tools.apply(setting.callback.onCollapse, [event, treeId, node]);\n      });\n\n      o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {\n        tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);\n      });\n\n      o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {\n        tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n      });\n\n      o.bind(c.REMOVE, function (event, treeId, treeNode) {\n        tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);\n      });\n\n      o.bind(c.SELECTED, function (event, treeId, node) {\n        tools.apply(setting.callback.onSelected, [treeId, node]);\n      });\n      o.bind(c.UNSELECTED, function (event, treeId, node) {\n        tools.apply(setting.callback.onUnSelected, [treeId, node]);\n      });\n    },\n    _unbindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.unbind(c.NODECREATED)\n        .unbind(c.CLICK)\n        .unbind(c.EXPAND)\n        .unbind(c.COLLAPSE)\n        .unbind(c.ASYNC_SUCCESS)\n        .unbind(c.ASYNC_ERROR)\n        .unbind(c.REMOVE)\n        .unbind(c.SELECTED)\n        .unbind(c.UNSELECTED);\n    },\n    //default event proxy of core\n    _eventProxy = function (event) {\n      var target = event.target,\n        setting = data.getSetting(event.data.treeId),\n        tId = \"\", node = null,\n        nodeEventType = \"\", treeEventType = \"\",\n        nodeEventCallback = null, treeEventCallback = null,\n        tmp = null;\n\n      if (tools.eqs(event.type, \"mousedown\")) {\n        treeEventType = \"mousedown\";\n      } else if (tools.eqs(event.type, \"mouseup\")) {\n        treeEventType = \"mouseup\";\n      } else if (tools.eqs(event.type, \"contextmenu\")) {\n        treeEventType = \"contextmenu\";\n      } else if (tools.eqs(event.type, \"click\")) {\n        if (tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.SWITCH) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"switchNode\";\n        } else {\n          tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n          if (tmp) {\n            tId = tools.getNodeMainDom(tmp).id;\n            nodeEventType = \"clickNode\";\n          }\n        }\n      } else if (tools.eqs(event.type, \"dblclick\")) {\n        treeEventType = \"dblclick\";\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n          nodeEventType = \"switchNode\";\n        }\n      }\n      if (treeEventType.length > 0 && tId.length == 0) {\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n        }\n      }\n      // event to node\n      if (tId.length > 0) {\n        node = data.getNodeCache(setting, tId);\n        switch (nodeEventType) {\n          case \"switchNode\" :\n            var isParent = data.nodeIsParent(setting, node);\n            if (!isParent) {\n              nodeEventType = \"\";\n            } else if (tools.eqs(event.type, \"click\")\n              || (tools.eqs(event.type, \"dblclick\") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {\n              nodeEventCallback = handler.onSwitchNode;\n            } else {\n              nodeEventType = \"\";\n            }\n            break;\n          case \"clickNode\" :\n            nodeEventCallback = handler.onClickNode;\n            break;\n        }\n      }\n      // event to zTree\n      switch (treeEventType) {\n        case \"mousedown\" :\n          treeEventCallback = handler.onZTreeMousedown;\n          break;\n        case \"mouseup\" :\n          treeEventCallback = handler.onZTreeMouseup;\n          break;\n        case \"dblclick\" :\n          treeEventCallback = handler.onZTreeDblclick;\n          break;\n        case \"contextmenu\" :\n          treeEventCallback = handler.onZTreeContextmenu;\n          break;\n      }\n      var proxyResult = {\n        stop: false,\n        node: node,\n        nodeEventType: nodeEventType,\n        nodeEventCallback: nodeEventCallback,\n        treeEventType: treeEventType,\n        treeEventCallback: treeEventCallback\n      };\n      return proxyResult\n    },\n    //default init node of core\n    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      if (!n) return;\n      var r = data.getRoot(setting),\n        children = data.nodeChildren(setting, n);\n      n.level = level;\n      n.tId = setting.treeId + \"_\" + (++r.zId);\n      n.parentTId = parentNode ? parentNode.tId : null;\n      n.open = (typeof n.open == \"string\") ? tools.eqs(n.open, \"true\") : !!n.open;\n      var isParent = data.nodeIsParent(setting, n);\n      if (tools.isArray(children)) {\n        data.nodeIsParent(setting, n, true);\n        n.zAsync = true;\n      } else {\n        isParent = data.nodeIsParent(setting, n, isParent);\n        n.open = (isParent && !setting.async.enable) ? n.open : false;\n        n.zAsync = !isParent;\n      }\n      n.isFirstNode = isFirstNode;\n      n.isLastNode = isLastNode;\n      n.getParentNode = function () {\n        return data.getNodeCache(setting, n.parentTId);\n      };\n      n.getPreNode = function () {\n        return data.getPreNode(setting, n);\n      };\n      n.getNextNode = function () {\n        return data.getNextNode(setting, n);\n      };\n      n.getIndex = function () {\n        return data.getNodeIndex(setting, n);\n      };\n      n.getPath = function () {\n        return data.getNodePath(setting, n);\n      };\n      n.isAjaxing = false;\n      data.fixPIdKeyValue(setting, n);\n    },\n    _init = {\n      bind: [_bindEvent],\n      unbind: [_unbindEvent],\n      caches: [_initCache],\n      nodes: [_initNode],\n      proxys: [_eventProxy],\n      roots: [_initRoot],\n      beforeA: [],\n      afterA: [],\n      innerBeforeA: [],\n      innerAfterA: [],\n      zTreeTools: []\n    },\n    //method of operate data\n    data = {\n      addNodeCache: function (setting, node) {\n        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;\n      },\n      getNodeCacheId: function (tId) {\n        return tId.substring(tId.lastIndexOf(\"_\") + 1);\n      },\n      addAfterA: function (afterA) {\n        _init.afterA.push(afterA);\n      },\n      addBeforeA: function (beforeA) {\n        _init.beforeA.push(beforeA);\n      },\n      addInnerAfterA: function (innerAfterA) {\n        _init.innerAfterA.push(innerAfterA);\n      },\n      addInnerBeforeA: function (innerBeforeA) {\n        _init.innerBeforeA.push(innerBeforeA);\n      },\n      addInitBind: function (bindEvent) {\n        _init.bind.push(bindEvent);\n      },\n      addInitUnBind: function (unbindEvent) {\n        _init.unbind.push(unbindEvent);\n      },\n      addInitCache: function (initCache) {\n        _init.caches.push(initCache);\n      },\n      addInitNode: function (initNode) {\n        _init.nodes.push(initNode);\n      },\n      addInitProxy: function (initProxy, isFirst) {\n        if (!!isFirst) {\n          _init.proxys.splice(0, 0, initProxy);\n        } else {\n          _init.proxys.push(initProxy);\n        }\n      },\n      addInitRoot: function (initRoot) {\n        _init.roots.push(initRoot);\n      },\n      addNodesData: function (setting, parentNode, index, nodes) {\n        var children = data.nodeChildren(setting, parentNode), params;\n        if (!children) {\n          children = data.nodeChildren(setting, parentNode, []);\n          index = -1;\n        } else if (index >= children.length) {\n          index = -1;\n        }\n\n        if (children.length > 0 && index === 0) {\n          children[0].isFirstNode = false;\n          view.setNodeLineIcos(setting, children[0]);\n        } else if (children.length > 0 && index < 0) {\n          children[children.length - 1].isLastNode = false;\n          view.setNodeLineIcos(setting, children[children.length - 1]);\n        }\n        data.nodeIsParent(setting, parentNode, true);\n\n        if (index < 0) {\n          data.nodeChildren(setting, parentNode, children.concat(nodes));\n        } else {\n          params = [index, 0].concat(nodes);\n          children.splice.apply(children, params);\n        }\n      },\n      addSelectedNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        if (!data.isSelectedNode(setting, node)) {\n          root.curSelectedList.push(node);\n        }\n      },\n      addCreatedNode: function (setting, node) {\n        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n          var root = data.getRoot(setting);\n          root.createdNodes.push(node);\n        }\n      },\n      addZTreeTools: function (zTreeTools) {\n        _init.zTreeTools.push(zTreeTools);\n      },\n      exSetting: function (s) {\n        $.extend(true, _setting, s);\n      },\n      fixPIdKeyValue: function (setting, node) {\n        if (setting.data.simpleData.enable) {\n          node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;\n        }\n      },\n      getAfterA: function (setting, node, array) {\n        for (var i = 0, j = _init.afterA.length; i < j; i++) {\n          _init.afterA[i].apply(this, arguments);\n        }\n      },\n      getBeforeA: function (setting, node, array) {\n        for (var i = 0, j = _init.beforeA.length; i < j; i++) {\n          _init.beforeA[i].apply(this, arguments);\n        }\n      },\n      getInnerAfterA: function (setting, node, array) {\n        for (var i = 0, j = _init.innerAfterA.length; i < j; i++) {\n          _init.innerAfterA[i].apply(this, arguments);\n        }\n      },\n      getInnerBeforeA: function (setting, node, array) {\n        for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) {\n          _init.innerBeforeA[i].apply(this, arguments);\n        }\n      },\n      getCache: function (setting) {\n        return caches[setting.treeId];\n      },\n      getNodeIndex: function (setting, node) {\n        if (!node) return null;\n        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),\n          children = data.nodeChildren(setting, p);\n        for (var i = 0, l = children.length - 1; i <= l; i++) {\n          if (children[i] === node) {\n            return i;\n          }\n        }\n        return -1;\n      },\n      getNextNode: function (setting, node) {\n        if (!node) return null;\n        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),\n          children = data.nodeChildren(setting, p);\n        for (var i = 0, l = children.length - 1; i <= l; i++) {\n          if (children[i] === node) {\n            return (i == l ? null : children[i + 1]);\n          }\n        }\n        return null;\n      },\n      getNodeByParam: function (setting, nodes, key, value) {\n        if (!nodes || !key) return null;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (node[key] == value) {\n            return nodes[i];\n          }\n          var children = data.nodeChildren(setting, node);\n          var tmp = data.getNodeByParam(setting, children, key, value);\n          if (tmp) return tmp;\n        }\n        return null;\n      },\n      getNodeCache: function (setting, tId) {\n        if (!tId) return null;\n        var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];\n        return n ? n : null;\n      },\n      getNodePath: function (setting, node) {\n        if (!node) return null;\n\n        var path;\n        if (node.parentTId) {\n          path = node.getParentNode().getPath();\n        } else {\n          path = [];\n        }\n\n        if (path) {\n          path.push(node);\n        }\n\n        return path;\n      },\n      getNodes: function (setting) {\n        return data.nodeChildren(setting, data.getRoot(setting));\n      },\n      getNodesByParam: function (setting, nodes, key, value) {\n        if (!nodes || !key) return [];\n        var result = [];\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (node[key] == value) {\n            result.push(node);\n          }\n          var children = data.nodeChildren(setting, node);\n          result = result.concat(data.getNodesByParam(setting, children, key, value));\n        }\n        return result;\n      },\n      getNodesByParamFuzzy: function (setting, nodes, key, value) {\n        if (!nodes || !key) return [];\n        var result = [];\n        value = value.toLowerCase();\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (typeof node[key] == \"string\" && nodes[i][key].toLowerCase().indexOf(value) > -1) {\n            result.push(node);\n          }\n          var children = data.nodeChildren(setting, node);\n          result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value));\n        }\n        return result;\n      },\n      getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) {\n        if (!nodes) return (isSingle ? null : []);\n        var result = isSingle ? null : [];\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (tools.apply(filter, [node, invokeParam], false)) {\n            if (isSingle) {\n              return node;\n            }\n            result.push(node);\n          }\n          var children = data.nodeChildren(setting, node);\n          var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam);\n          if (isSingle && !!tmpResult) {\n            return tmpResult;\n          }\n          result = isSingle ? tmpResult : result.concat(tmpResult);\n        }\n        return result;\n      },\n      getPreNode: function (setting, node) {\n        if (!node) return null;\n        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),\n          children = data.nodeChildren(setting, p);\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i] === node) {\n            return (i == 0 ? null : children[i - 1]);\n          }\n        }\n        return null;\n      },\n      getRoot: function (setting) {\n        return setting ? roots[setting.treeId] : null;\n      },\n      getRoots: function () {\n        return roots;\n      },\n      getSetting: function (treeId) {\n        return settings[treeId];\n      },\n      getSettings: function () {\n        return settings;\n      },\n      getZTreeTools: function (treeId) {\n        var r = this.getRoot(this.getSetting(treeId));\n        return r ? r.treeTools : null;\n      },\n      initCache: function (setting) {\n        for (var i = 0, j = _init.caches.length; i < j; i++) {\n          _init.caches[i].apply(this, arguments);\n        }\n      },\n      initNode: function (setting, level, node, parentNode, preNode, nextNode) {\n        for (var i = 0, j = _init.nodes.length; i < j; i++) {\n          _init.nodes[i].apply(this, arguments);\n        }\n      },\n      initRoot: function (setting) {\n        for (var i = 0, j = _init.roots.length; i < j; i++) {\n          _init.roots[i].apply(this, arguments);\n        }\n      },\n      isSelectedNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {\n          if (node === root.curSelectedList[i]) return true;\n        }\n        return false;\n      },\n      nodeChildren: function (setting, node, newChildren) {\n        if (!node) {\n          return null;\n        }\n        var key = setting.data.key.children;\n        if (typeof newChildren !== 'undefined') {\n          node[key] = newChildren;\n        }\n        return node[key];\n      },\n      nodeIsParent: function (setting, node, newIsParent) {\n        if (!node) {\n          return false;\n        }\n        var key = setting.data.key.isParent;\n        if (typeof newIsParent !== 'undefined') {\n          if (typeof newIsParent === \"string\") {\n            newIsParent = tools.eqs(newIsParent, \"true\");\n          }\n          newIsParent = !!newIsParent;\n          node[key] = newIsParent;\n        } else if (typeof node[key] == \"string\"){\n          node[key] = tools.eqs(node[key], \"true\");\n        } else {\n          node[key] = !!node[key];\n        }\n        return node[key];\n      },\n      nodeName: function (setting, node, newName) {\n        var key = setting.data.key.name;\n        if (typeof newName !== 'undefined') {\n          node[key] = newName;\n        }\n        return \"\" + node[key];\n      },\n      nodeTitle: function (setting, node) {\n        var t = setting.data.key.title === \"\" ? setting.data.key.name : setting.data.key.title;\n        return \"\" + node[t];\n      },\n      removeNodeCache: function (setting, node) {\n        var children = data.nodeChildren(setting, node);\n        if (children) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            data.removeNodeCache(setting, children[i]);\n          }\n        }\n        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;\n      },\n      removeSelectedNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {\n          if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {\n            root.curSelectedList.splice(i, 1);\n            setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);\n            i--;\n            j--;\n          }\n        }\n      },\n      setCache: function (setting, cache) {\n        caches[setting.treeId] = cache;\n      },\n      setRoot: function (setting, root) {\n        roots[setting.treeId] = root;\n      },\n      setZTreeTools: function (setting, zTreeTools) {\n        for (var i = 0, j = _init.zTreeTools.length; i < j; i++) {\n          _init.zTreeTools[i].apply(this, arguments);\n        }\n      },\n      transformToArrayFormat: function (setting, nodes) {\n        if (!nodes) return [];\n        var r = [];\n        if (tools.isArray(nodes)) {\n          for (var i = 0, l = nodes.length; i < l; i++) {\n            var node = nodes[i];\n            _do(node);\n          }\n        } else {\n          _do(nodes);\n        }\n        return r;\n\n        function _do(_node) {\n          r.push(_node);\n          var children = data.nodeChildren(setting, _node);\n          if (children) {\n            r = r.concat(data.transformToArrayFormat(setting, children));\n          }\n        }\n      },\n      transformTozTreeFormat: function (setting, sNodes) {\n        var i, l,\n          key = setting.data.simpleData.idKey,\n          parentKey = setting.data.simpleData.pIdKey;\n        if (!key || key == \"\" || !sNodes) return [];\n\n        if (tools.isArray(sNodes)) {\n          var r = [];\n          var tmpMap = {};\n          for (i = 0, l = sNodes.length; i < l; i++) {\n            tmpMap[sNodes[i][key]] = sNodes[i];\n          }\n          for (i = 0, l = sNodes.length; i < l; i++) {\n            var p = tmpMap[sNodes[i][parentKey]];\n            if (p && sNodes[i][key] != sNodes[i][parentKey]) {\n              var children = data.nodeChildren(setting, p);\n              if (!children) {\n                children = data.nodeChildren(setting, p, []);\n              }\n              children.push(sNodes[i]);\n            } else {\n              r.push(sNodes[i]);\n            }\n          }\n          return r;\n        } else {\n          return [sNodes];\n        }\n      }\n    },\n    //method of event proxy\n    event = {\n      bindEvent: function (setting) {\n        for (var i = 0, j = _init.bind.length; i < j; i++) {\n          _init.bind[i].apply(this, arguments);\n        }\n      },\n      unbindEvent: function (setting) {\n        for (var i = 0, j = _init.unbind.length; i < j; i++) {\n          _init.unbind[i].apply(this, arguments);\n        }\n      },\n      bindTree: function (setting) {\n        var eventParam = {\n            treeId: setting.treeId\n          },\n          o = setting.treeObj;\n        if (!setting.view.txtSelectedEnable) {\n          // for can't select text\n          o.bind('selectstart', handler.onSelectStart).css({\n            \"-moz-user-select\": \"-moz-none\"\n          });\n        }\n        o.bind('click', eventParam, event.proxy);\n        o.bind('dblclick', eventParam, event.proxy);\n        o.bind('mouseover', eventParam, event.proxy);\n        o.bind('mouseout', eventParam, event.proxy);\n        o.bind('mousedown', eventParam, event.proxy);\n        o.bind('mouseup', eventParam, event.proxy);\n        o.bind('contextmenu', eventParam, event.proxy);\n      },\n      unbindTree: function (setting) {\n        var o = setting.treeObj;\n        o.unbind('selectstart', handler.onSelectStart)\n          .unbind('click', event.proxy)\n          .unbind('dblclick', event.proxy)\n          .unbind('mouseover', event.proxy)\n          .unbind('mouseout', event.proxy)\n          .unbind('mousedown', event.proxy)\n          .unbind('mouseup', event.proxy)\n          .unbind('contextmenu', event.proxy);\n      },\n      doProxy: function (e) {\n        var results = [];\n        for (var i = 0, j = _init.proxys.length; i < j; i++) {\n          var proxyResult = _init.proxys[i].apply(this, arguments);\n          results.push(proxyResult);\n          if (proxyResult.stop) {\n            break;\n          }\n        }\n        return results;\n      },\n      proxy: function (e) {\n        var setting = data.getSetting(e.data.treeId);\n        if (!tools.uCanDo(setting, e)) return true;\n        var results = event.doProxy(e),\n          r = true, x = false;\n        for (var i = 0, l = results.length; i < l; i++) {\n          var proxyResult = results[i];\n          if (proxyResult.nodeEventCallback) {\n            x = true;\n            r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n          }\n          if (proxyResult.treeEventCallback) {\n            x = true;\n            r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n          }\n        }\n        return r;\n      }\n    },\n    //method of event handler\n    handler = {\n      onSwitchNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (node.open) {\n          if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;\n          data.getRoot(setting).expandTriggerFlag = true;\n          view.switchNode(setting, node);\n        } else {\n          if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;\n          data.getRoot(setting).expandTriggerFlag = true;\n          view.switchNode(setting, node);\n        }\n        return true;\n      },\n      onClickNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId),\n          clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;\n        if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;\n        if (clickFlag === 0) {\n          view.cancelPreSelectedNode(setting, node);\n        } else {\n          view.selectNode(setting, node, clickFlag === 2);\n        }\n        setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);\n        return true;\n      },\n      onZTreeMousedown: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);\n        }\n        return true;\n      },\n      onZTreeMouseup: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);\n        }\n        return true;\n      },\n      onZTreeDblclick: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);\n        }\n        return true;\n      },\n      onZTreeContextmenu: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);\n        }\n        return (typeof setting.callback.onRightClick) != \"function\";\n      },\n      onSelectStart: function (e) {\n        var n = e.originalEvent.srcElement.nodeName.toLowerCase();\n        return (n === \"input\" || n === \"textarea\");\n      }\n    },\n    //method of tools for zTree\n    tools = {\n      apply: function (fun, param, defaultValue) {\n        if ((typeof fun) == \"function\") {\n          return fun.apply(zt, param ? param : []);\n        }\n        return defaultValue;\n      },\n      canAsync: function (setting, node) {\n        var children = data.nodeChildren(setting, node);\n        var isParent = data.nodeIsParent(setting, node);\n        return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0)));\n      },\n      clone: function (obj) {\n        if (obj === null) return null;\n        var o = tools.isArray(obj) ? [] : {};\n        for (var i in obj) {\n          o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === \"object\" ? tools.clone(obj[i]) : obj[i]);\n        }\n        return o;\n      },\n      eqs: function (str1, str2) {\n        return str1.toLowerCase() === str2.toLowerCase();\n      },\n      isArray: function (arr) {\n        return Object.prototype.toString.apply(arr) === \"[object Array]\";\n      },\n      isElement: function (o) {\n        return (\n          typeof HTMLElement === \"object\" ? o instanceof HTMLElement : //DOM2\n            o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\"\n        );\n      },\n      $: function (node, exp, setting) {\n        if (!!exp && typeof exp != \"string\") {\n          setting = exp;\n          exp = \"\";\n        }\n        if (typeof node == \"string\") {\n          return $(node, setting ? setting.treeObj.get(0).ownerDocument : null);\n        } else {\n          return $(\"#\" + node.tId + exp, setting ? setting.treeObj : null);\n        }\n      },\n      getMDom: function (setting, curDom, targetExpr) {\n        if (!curDom) return null;\n        while (curDom && curDom.id !== setting.treeId) {\n          for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) {\n            if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {\n              return curDom;\n            }\n          }\n          curDom = curDom.parentNode;\n        }\n        return null;\n      },\n      getNodeMainDom: function (target) {\n        return ($(target).parent(\"li\").get(0) || $(target).parentsUntil(\"li\").parent().get(0));\n      },\n      isChildOrSelf: function (dom, parentId) {\n        return ($(dom).closest(\"#\" + parentId).length > 0);\n      },\n      uCanDo: function (setting, e) {\n        return true;\n      }\n    },\n    //method of operate ztree dom\n    view = {\n      addNodes: function (setting, parentNode, index, newNodes, isSilent) {\n        var isParent = data.nodeIsParent(setting, parentNode);\n        if (setting.data.keep.leaf && parentNode && !isParent) {\n          return;\n        }\n        if (!tools.isArray(newNodes)) {\n          newNodes = [newNodes];\n        }\n        if (setting.data.simpleData.enable) {\n          newNodes = data.transformTozTreeFormat(setting, newNodes);\n        }\n        if (parentNode) {\n          var target_switchObj = $$(parentNode, consts.id.SWITCH, setting),\n            target_icoObj = $$(parentNode, consts.id.ICON, setting),\n            target_ulObj = $$(parentNode, consts.id.UL, setting);\n\n          if (!parentNode.open) {\n            view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);\n            view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);\n            parentNode.open = false;\n            target_ulObj.css({\n              \"display\": \"none\"\n            });\n          }\n\n          data.addNodesData(setting, parentNode, index, newNodes);\n          view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);\n          if (!isSilent) {\n            view.expandCollapseParentNode(setting, parentNode, true);\n          }\n        } else {\n          data.addNodesData(setting, data.getRoot(setting), index, newNodes);\n          view.createNodes(setting, 0, newNodes, null, index);\n        }\n      },\n      appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) {\n        if (!nodes) return [];\n        var html = [];\n\n        var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),\n          tmpPChild = data.nodeChildren(setting, tmpPNode),\n          isFirstNode, isLastNode;\n\n        if (!tmpPChild || index >= tmpPChild.length - nodes.length) {\n          index = -1;\n        }\n\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (initFlag) {\n            isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0));\n            isLastNode = (index < 0 && i == (nodes.length - 1));\n            data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);\n            data.addNodeCache(setting, node);\n          }\n          var isParent = data.nodeIsParent(setting, node);\n\n          var childHtml = [];\n          var children = data.nodeChildren(setting, node);\n          if (children && children.length > 0) {\n            //make child html first, because checkType\n            childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open);\n          }\n          if (openFlag) {\n            view.makeDOMNodeMainBefore(html, setting, node);\n            view.makeDOMNodeLine(html, setting, node);\n            data.getBeforeA(setting, node, html);\n            view.makeDOMNodeNameBefore(html, setting, node);\n            data.getInnerBeforeA(setting, node, html);\n            view.makeDOMNodeIcon(html, setting, node);\n            data.getInnerAfterA(setting, node, html);\n            view.makeDOMNodeNameAfter(html, setting, node);\n            data.getAfterA(setting, node, html);\n            if (isParent && node.open) {\n              view.makeUlHtml(setting, node, html, childHtml.join(''));\n            }\n            view.makeDOMNodeMainAfter(html, setting, node);\n            data.addCreatedNode(setting, node);\n          }\n        }\n        return html;\n      },\n      appendParentULDom: function (setting, node) {\n        var html = [],\n          nObj = $$(node, setting);\n        if (!nObj.get(0) && !!node.parentTId) {\n          view.appendParentULDom(setting, node.getParentNode());\n          nObj = $$(node, setting);\n        }\n        var ulObj = $$(node, consts.id.UL, setting);\n        if (ulObj.get(0)) {\n          ulObj.remove();\n        }\n        var children = data.nodeChildren(setting, node),\n          childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true);\n        view.makeUlHtml(setting, node, html, childHtml.join(''));\n        nObj.append(html.join(''));\n      },\n      asyncNode: function (setting, node, isSilent, callback) {\n        var i, l;\n        var isParent = data.nodeIsParent(setting, node);\n        if (node && !isParent) {\n          tools.apply(callback);\n          return false;\n        } else if (node && node.isAjaxing) {\n          return false;\n        } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {\n          tools.apply(callback);\n          return false;\n        }\n        if (node) {\n          node.isAjaxing = true;\n          var icoObj = $$(node, consts.id.ICON, setting);\n          icoObj.attr({\"style\": \"\", \"class\": consts.className.BUTTON + \" \" + consts.className.ICO_LOADING});\n        }\n\n        var tmpParam = {};\n        var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam);\n        for (i = 0, l = autoParam.length; node && i < l; i++) {\n          var pKey = autoParam[i].split(\"=\"), spKey = pKey;\n          if (pKey.length > 1) {\n            spKey = pKey[1];\n            pKey = pKey[0];\n          }\n          tmpParam[spKey] = node[pKey];\n        }\n        var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam);\n        if (tools.isArray(otherParam)) {\n          for (i = 0, l = otherParam.length; i < l; i += 2) {\n            tmpParam[otherParam[i]] = otherParam[i + 1];\n          }\n        } else {\n          for (var p in otherParam) {\n            tmpParam[p] = otherParam[p];\n          }\n        }\n\n        var _tmpV = data.getRoot(setting)._ver;\n        $.ajax({\n          contentType: setting.async.contentType,\n          cache: false,\n          type: setting.async.type,\n          url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),\n          data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,\n          dataType: setting.async.dataType,\n          headers: setting.async.headers,\n          xhrFields: setting.async.xhrFields,\n          success: function (msg) {\n            if (_tmpV != data.getRoot(setting)._ver) {\n              return;\n            }\n            var newNodes = [];\n            try {\n              if (!msg || msg.length == 0) {\n                newNodes = [];\n              } else if (typeof msg == \"string\") {\n                newNodes = eval(\"(\" + msg + \")\");\n              } else {\n                newNodes = msg;\n              }\n            } catch (err) {\n              newNodes = msg;\n            }\n\n            if (node) {\n              node.isAjaxing = null;\n              node.zAsync = true;\n            }\n            view.setNodeLineIcos(setting, node);\n            if (newNodes && newNodes !== \"\") {\n              newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);\n              view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);\n            } else {\n              view.addNodes(setting, node, -1, [], !!isSilent);\n            }\n            setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);\n            tools.apply(callback);\n          },\n          error: function (XMLHttpRequest, textStatus, errorThrown) {\n            if (_tmpV != data.getRoot(setting)._ver) {\n              return;\n            }\n            if (node) node.isAjaxing = null;\n            view.setNodeLineIcos(setting, node);\n            setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n          }\n        });\n        return true;\n      },\n      cancelPreSelectedNode: function (setting, node, excludeNode) {\n        var list = data.getRoot(setting).curSelectedList,\n          i, n;\n        for (i = list.length - 1; i >= 0; i--) {\n          n = list[i];\n          if (node === n || (!node && (!excludeNode || excludeNode !== n))) {\n            $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);\n            if (node) {\n              data.removeSelectedNode(setting, node);\n              break;\n            } else {\n              list.splice(i, 1);\n              setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);\n            }\n          }\n        }\n      },\n      createNodeCallback: function (setting) {\n        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n          var root = data.getRoot(setting);\n          while (root.createdNodes.length > 0) {\n            var node = root.createdNodes.shift();\n            tools.apply(setting.view.addDiyDom, [setting.treeId, node]);\n            if (!!setting.callback.onNodeCreated) {\n              setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);\n            }\n          }\n        }\n      },\n      createNodes: function (setting, level, nodes, parentNode, index) {\n        if (!nodes || nodes.length == 0) return;\n        var root = data.getRoot(setting),\n          openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0);\n        root.createdNodes = [];\n        var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),\n          parentObj, nextObj;\n\n        if (!parentNode) {\n          parentObj = setting.treeObj;\n          //setting.treeObj.append(zTreeHtml.join(''));\n        } else {\n          var ulObj = $$(parentNode, consts.id.UL, setting);\n          if (ulObj.get(0)) {\n            parentObj = ulObj;\n            //ulObj.append(zTreeHtml.join(''));\n          }\n        }\n        if (parentObj) {\n          if (index >= 0) {\n            nextObj = parentObj.children()[index];\n          }\n          if (index >= 0 && nextObj) {\n            $(nextObj).before(zTreeHtml.join(''));\n          } else {\n            parentObj.append(zTreeHtml.join(''));\n          }\n        }\n\n        view.createNodeCallback(setting);\n      },\n      destroy: function (setting) {\n        if (!setting) return;\n        data.initCache(setting);\n        data.initRoot(setting);\n        event.unbindTree(setting);\n        event.unbindEvent(setting);\n        setting.treeObj.empty();\n        delete settings[setting.treeId];\n      },\n      expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) {\n        var root = data.getRoot(setting);\n        var tmpCb, _callback;\n        if (!node) {\n          tools.apply(callback, []);\n          return;\n        }\n        var children = data.nodeChildren(setting, node);\n        var isParent = data.nodeIsParent(setting, node);\n        if (root.expandTriggerFlag) {\n          _callback = callback;\n          tmpCb = function () {\n            if (_callback) _callback();\n            if (node.open) {\n              setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);\n            } else {\n              setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);\n            }\n          };\n          callback = tmpCb;\n          root.expandTriggerFlag = false;\n        }\n        if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) {\n          view.appendParentULDom(setting, node);\n          view.createNodeCallback(setting);\n        }\n        if (node.open == expandFlag) {\n          tools.apply(callback, []);\n          return;\n        }\n        var ulObj = $$(node, consts.id.UL, setting),\n          switchObj = $$(node, consts.id.SWITCH, setting),\n          icoObj = $$(node, consts.id.ICON, setting);\n\n        if (isParent) {\n          node.open = !node.open;\n          if (node.iconOpen && node.iconClose) {\n            icoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n          }\n\n          if (node.open) {\n            view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);\n            view.replaceIcoClass(node, icoObj, consts.folder.OPEN);\n            if (animateFlag == false || setting.view.expandSpeed == \"\") {\n              ulObj.show();\n              tools.apply(callback, []);\n            } else {\n              if (children && children.length > 0) {\n                ulObj.slideDown(setting.view.expandSpeed, callback);\n              } else {\n                ulObj.show();\n                tools.apply(callback, []);\n              }\n            }\n          } else {\n            view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);\n            view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);\n            if (animateFlag == false || setting.view.expandSpeed == \"\" || !(children && children.length > 0)) {\n              ulObj.hide();\n              tools.apply(callback, []);\n            } else {\n              ulObj.slideUp(setting.view.expandSpeed, callback);\n            }\n          }\n        } else {\n          tools.apply(callback, []);\n        }\n      },\n      expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) {\n        if (!node) return;\n        if (!node.parentTId) {\n          view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n          return;\n        } else {\n          view.expandCollapseNode(setting, node, expandFlag, animateFlag);\n        }\n        if (node.parentTId) {\n          view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);\n        }\n      },\n      expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) {\n        var root = data.getRoot(setting),\n          treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root),\n          selfAnimateSign = (node) ? false : animateFlag,\n          expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;\n        data.getRoot(setting).expandTriggerFlag = false;\n        if (treeNodes) {\n          for (var i = 0, l = treeNodes.length; i < l; i++) {\n            if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);\n          }\n        }\n        data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;\n        view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n      },\n      isSelectedNode: function (setting, node) {\n        if (!node) {\n          return false;\n        }\n        var list = data.getRoot(setting).curSelectedList,\n          i;\n        for (i = list.length - 1; i >= 0; i--) {\n          if (node === list[i]) {\n            return true;\n          }\n        }\n        return false;\n      },\n      makeDOMNodeIcon: function (html, setting, node) {\n        var nameStr = data.nodeName(setting, node),\n          name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        html.push(\"<span id='\", node.tId, consts.id.ICON,\n          \"' title='' treeNode\", consts.id.ICON, \" class='\", view.makeNodeIcoClass(setting, node),\n          \"' style='\", view.makeNodeIcoStyle(setting, node), \"'></span><span id='\", node.tId, consts.id.SPAN,\n          \"' class='\", consts.className.NAME,\n          \"'>\", name, \"</span>\");\n      },\n      makeDOMNodeLine: function (html, setting, node) {\n        html.push(\"<span id='\", node.tId, consts.id.SWITCH, \"' title='' class='\", view.makeNodeLineClass(setting, node), \"' treeNode\", consts.id.SWITCH, \"></span>\");\n      },\n      makeDOMNodeMainAfter: function (html, setting, node) {\n        html.push(\"</li>\");\n      },\n      makeDOMNodeMainBefore: function (html, setting, node) {\n        html.push(\"<li id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level, \"' tabindex='0' hidefocus='true' treenode>\");\n      },\n      makeDOMNodeNameAfter: function (html, setting, node) {\n        html.push(\"</a>\");\n      },\n      makeDOMNodeNameBefore: function (html, setting, node) {\n        var title = data.nodeTitle(setting, node),\n          url = view.makeNodeUrl(setting, node),\n          fontcss = view.makeNodeFontCss(setting, node),\n          fontStyle = [];\n        for (var f in fontcss) {\n          fontStyle.push(f, \":\", fontcss[f], \";\");\n        }\n        html.push(\"<a id='\", node.tId, consts.id.A, \"' class='\", consts.className.LEVEL, node.level, \"' treeNode\", consts.id.A, \" onclick=\\\"\", (node.click || ''),\n          \"\\\" \", ((url != null && url.length > 0) ? \"href='\" + url + \"'\" : \"\"), \" target='\", view.makeNodeTarget(node), \"' style='\", fontStyle.join(''),\n          \"'\");\n        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {\n          html.push(\"title='\", title.replace(/'/g, \"&#39;\").replace(/</g, '&lt;').replace(/>/g, '&gt;'), \"'\");\n        }\n        html.push(\">\");\n      },\n      makeNodeFontCss: function (setting, node) {\n        var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);\n        return (fontCss && ((typeof fontCss) != \"function\")) ? fontCss : {};\n      },\n      makeNodeIcoClass: function (setting, node) {\n        var icoCss = [\"ico\"];\n        if (!node.isAjaxing) {\n          var isParent = data.nodeIsParent(setting, node);\n          icoCss[0] = (node.iconSkin ? node.iconSkin + \"_\" : \"\") + icoCss[0];\n          if (isParent) {\n            icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n          } else {\n            icoCss.push(consts.folder.DOCU);\n          }\n        }\n        return consts.className.BUTTON + \" \" + icoCss.join('_');\n      },\n      makeNodeIcoStyle: function (setting, node) {\n        var icoStyle = [];\n        if (!node.isAjaxing) {\n          var isParent = data.nodeIsParent(setting, node);\n          var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];\n          if (icon) icoStyle.push(\"background:url(\", icon, \") 0 0 no-repeat;\");\n          if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {\n            icoStyle.push(\"width:0px;height:0px;\");\n          }\n        }\n        return icoStyle.join('');\n      },\n      makeNodeLineClass: function (setting, node) {\n        var lineClass = [];\n        if (setting.view.showLine) {\n          if (node.level == 0 && node.isFirstNode && node.isLastNode) {\n            lineClass.push(consts.line.ROOT);\n          } else if (node.level == 0 && node.isFirstNode) {\n            lineClass.push(consts.line.ROOTS);\n          } else if (node.isLastNode) {\n            lineClass.push(consts.line.BOTTOM);\n          } else {\n            lineClass.push(consts.line.CENTER);\n          }\n        } else {\n          lineClass.push(consts.line.NOLINE);\n        }\n        if (data.nodeIsParent(setting, node)) {\n          lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n        } else {\n          lineClass.push(consts.folder.DOCU);\n        }\n        return view.makeNodeLineClassEx(node) + lineClass.join('_');\n      },\n      makeNodeLineClassEx: function (node) {\n        return consts.className.BUTTON + \" \" + consts.className.LEVEL + node.level + \" \" + consts.className.SWITCH + \" \";\n      },\n      makeNodeTarget: function (node) {\n        return (node.target || \"_blank\");\n      },\n      makeNodeUrl: function (setting, node) {\n        var urlKey = setting.data.key.url;\n        return node[urlKey] ? node[urlKey] : null;\n      },\n      makeUlHtml: function (setting, node, html, content) {\n        html.push(\"<ul id='\", node.tId, consts.id.UL, \"' class='\", consts.className.LEVEL, node.level, \" \", view.makeUlLineClass(setting, node), \"' style='display:\", (node.open ? \"block\" : \"none\"), \"'>\");\n        html.push(content);\n        html.push(\"</ul>\");\n      },\n      makeUlLineClass: function (setting, node) {\n        return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : \"\");\n      },\n      removeChildNodes: function (setting, node) {\n        if (!node) return;\n        var nodes = data.nodeChildren(setting, node);\n        if (!nodes) return;\n\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          data.removeNodeCache(setting, nodes[i]);\n        }\n        data.removeSelectedNode(setting);\n        delete node[setting.data.key.children];\n\n        if (!setting.data.keep.parent) {\n          data.nodeIsParent(setting, node, false);\n          node.open = false;\n          var tmp_switchObj = $$(node, consts.id.SWITCH, setting),\n            tmp_icoObj = $$(node, consts.id.ICON, setting);\n          view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);\n          view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);\n          $$(node, consts.id.UL, setting).remove();\n        } else {\n          $$(node, consts.id.UL, setting).empty();\n        }\n      },\n      scrollIntoView: function (setting, dom) {\n        if (!dom) {\n          return;\n        }\n        // support IE 7\n        if (typeof Element === 'undefined') {\n          var contRect = setting.treeObj.get(0).getBoundingClientRect(),\n            findMeRect = dom.getBoundingClientRect();\n          if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom\n            || findMeRect.right > contRect.right || findMeRect.left < contRect.left) {\n            dom.scrollIntoView();\n          }\n          return;\n        }\n        // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e\n        if (!Element.prototype.scrollIntoViewIfNeeded) {\n          Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {\n            \"use strict\";\n\n            function makeRange(start, length) {\n              return {\"start\": start, \"length\": length, \"end\": start + length};\n            }\n\n            function coverRange(inner, outer) {\n              if (\n                false === centerIfNeeded ||\n                (outer.start < inner.end && inner.start < outer.end)\n              ) {\n                return Math.max(\n                  inner.end - outer.length,\n                  Math.min(outer.start, inner.start)\n                );\n              }\n              return (inner.start + inner.end - outer.length) / 2;\n            }\n\n            function makePoint(x, y) {\n              return {\n                \"x\": x,\n                \"y\": y,\n                \"translate\": function translate(dX, dY) {\n                  return makePoint(x + dX, y + dY);\n                }\n              };\n            }\n\n            function absolute(elem, pt) {\n              while (elem) {\n                pt = pt.translate(elem.offsetLeft, elem.offsetTop);\n                elem = elem.offsetParent;\n              }\n              return pt;\n            }\n\n            var target = absolute(this, makePoint(0, 0)),\n              extent = makePoint(this.offsetWidth, this.offsetHeight),\n              elem = this.parentNode,\n              origin;\n\n            while (elem instanceof HTMLElement) {\n              // Apply desired scroll amount.\n              origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop));\n              elem.scrollLeft = coverRange(\n                makeRange(target.x - origin.x, extent.x),\n                makeRange(elem.scrollLeft, elem.clientWidth)\n              );\n              elem.scrollTop = coverRange(\n                makeRange(target.y - origin.y, extent.y),\n                makeRange(elem.scrollTop, elem.clientHeight)\n              );\n\n              // Determine actual scroll amount by reading back scroll properties.\n              target = target.translate(-elem.scrollLeft, -elem.scrollTop);\n              elem = elem.parentNode;\n            }\n          };\n        }\n        dom.scrollIntoViewIfNeeded();\n      },\n      setFirstNode: function (setting, parentNode) {\n        var children = data.nodeChildren(setting, parentNode);\n        if (children.length > 0) {\n          children[0].isFirstNode = true;\n        }\n      },\n      setLastNode: function (setting, parentNode) {\n        var children = data.nodeChildren(setting, parentNode);\n        if (children.length > 0) {\n          children[children.length - 1].isLastNode = true;\n        }\n      },\n      removeNode: function (setting, node) {\n        var root = data.getRoot(setting),\n          parentNode = (node.parentTId) ? node.getParentNode() : root;\n\n        node.isFirstNode = false;\n        node.isLastNode = false;\n        node.getPreNode = function () {\n          return null;\n        };\n        node.getNextNode = function () {\n          return null;\n        };\n\n        if (!data.getNodeCache(setting, node.tId)) {\n          return;\n        }\n\n        $$(node, setting).remove();\n        data.removeNodeCache(setting, node);\n        data.removeSelectedNode(setting, node);\n\n        var children = data.nodeChildren(setting, parentNode);\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i].tId == node.tId) {\n            children.splice(i, 1);\n            break;\n          }\n        }\n        view.setFirstNode(setting, parentNode);\n        view.setLastNode(setting, parentNode);\n\n        var tmp_ulObj, tmp_switchObj, tmp_icoObj,\n          childLength = children.length;\n\n        //repair nodes old parent\n        if (!setting.data.keep.parent && childLength == 0) {\n          //old parentNode has no child nodes\n          data.nodeIsParent(setting, parentNode, false);\n          parentNode.open = false;\n          delete parentNode[setting.data.key.children];\n          tmp_ulObj = $$(parentNode, consts.id.UL, setting);\n          tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);\n          tmp_icoObj = $$(parentNode, consts.id.ICON, setting);\n          view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);\n          view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);\n          tmp_ulObj.css(\"display\", \"none\");\n\n        } else if (setting.view.showLine && childLength > 0) {\n          //old parentNode has child nodes\n          var newLast = children[childLength - 1];\n          tmp_ulObj = $$(newLast, consts.id.UL, setting);\n          tmp_switchObj = $$(newLast, consts.id.SWITCH, setting);\n          tmp_icoObj = $$(newLast, consts.id.ICON, setting);\n          if (parentNode == root) {\n            if (children.length == 1) {\n              //node was root, and ztree has only one root after move node\n              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);\n            } else {\n              var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting);\n              view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS);\n              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n            }\n          } else {\n            view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n          }\n          tmp_ulObj.removeClass(consts.line.LINE);\n        }\n      },\n      replaceIcoClass: function (node, obj, newName) {\n        if (!obj || node.isAjaxing) return;\n        var tmpName = obj.attr(\"class\");\n        if (tmpName == undefined) return;\n        var tmpList = tmpName.split(\"_\");\n        switch (newName) {\n          case consts.folder.OPEN:\n          case consts.folder.CLOSE:\n          case consts.folder.DOCU:\n            tmpList[tmpList.length - 1] = newName;\n            break;\n        }\n        obj.attr(\"class\", tmpList.join(\"_\"));\n      },\n      replaceSwitchClass: function (node, obj, newName) {\n        if (!obj) return;\n        var tmpName = obj.attr(\"class\");\n        if (tmpName == undefined) return;\n        var tmpList = tmpName.split(\"_\");\n        switch (newName) {\n          case consts.line.ROOT:\n          case consts.line.ROOTS:\n          case consts.line.CENTER:\n          case consts.line.BOTTOM:\n          case consts.line.NOLINE:\n            tmpList[0] = view.makeNodeLineClassEx(node) + newName;\n            break;\n          case consts.folder.OPEN:\n          case consts.folder.CLOSE:\n          case consts.folder.DOCU:\n            tmpList[1] = newName;\n            break;\n        }\n        obj.attr(\"class\", tmpList.join(\"_\"));\n        if (newName !== consts.folder.DOCU) {\n          obj.removeAttr(\"disabled\");\n        } else {\n          obj.attr(\"disabled\", \"disabled\");\n        }\n      },\n      selectNode: function (setting, node, addFlag) {\n        if (!addFlag) {\n          view.cancelPreSelectedNode(setting, null, node);\n        }\n        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);\n        data.addSelectedNode(setting, node);\n        setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);\n      },\n      setNodeFontCss: function (setting, treeNode) {\n        var aObj = $$(treeNode, consts.id.A, setting),\n          fontCss = view.makeNodeFontCss(setting, treeNode);\n        if (fontCss) {\n          aObj.css(fontCss);\n        }\n      },\n      setNodeLineIcos: function (setting, node) {\n        if (!node) return;\n        var switchObj = $$(node, consts.id.SWITCH, setting),\n          ulObj = $$(node, consts.id.UL, setting),\n          icoObj = $$(node, consts.id.ICON, setting),\n          ulLine = view.makeUlLineClass(setting, node);\n        if (ulLine.length == 0) {\n          ulObj.removeClass(consts.line.LINE);\n        } else {\n          ulObj.addClass(ulLine);\n        }\n        switchObj.attr(\"class\", view.makeNodeLineClass(setting, node));\n        if (data.nodeIsParent(setting, node)) {\n          switchObj.removeAttr(\"disabled\");\n        } else {\n          switchObj.attr(\"disabled\", \"disabled\");\n        }\n        icoObj.removeAttr(\"style\");\n        icoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n        icoObj.attr(\"class\", view.makeNodeIcoClass(setting, node));\n      },\n      setNodeName: function (setting, node) {\n        var title = data.nodeTitle(setting, node),\n          nObj = $$(node, consts.id.SPAN, setting);\n        nObj.empty();\n        if (setting.view.nameIsHTML) {\n          nObj.html(data.nodeName(setting, node));\n        } else {\n          nObj.text(data.nodeName(setting, node));\n        }\n        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {\n          var aObj = $$(node, consts.id.A, setting);\n          aObj.attr(\"title\", !title ? \"\" : title);\n        }\n      },\n      setNodeTarget: function (setting, node) {\n        var aObj = $$(node, consts.id.A, setting);\n        aObj.attr(\"target\", view.makeNodeTarget(node));\n      },\n      setNodeUrl: function (setting, node) {\n        var aObj = $$(node, consts.id.A, setting),\n          url = view.makeNodeUrl(setting, node);\n        if (url == null || url.length == 0) {\n          aObj.removeAttr(\"href\");\n        } else {\n          aObj.attr(\"href\", url);\n        }\n      },\n      switchNode: function (setting, node) {\n        if (node.open || !tools.canAsync(setting, node)) {\n          view.expandCollapseNode(setting, node, !node.open);\n        } else if (setting.async.enable) {\n          if (!view.asyncNode(setting, node)) {\n            view.expandCollapseNode(setting, node, !node.open);\n            return;\n          }\n        } else if (node) {\n          view.expandCollapseNode(setting, node, !node.open);\n        }\n      }\n    };\n  // zTree defind\n  $.fn.zTree = {\n    consts: _consts,\n    _z: {\n      tools: tools,\n      view: view,\n      event: event,\n      data: data\n    },\n    getZTreeObj: function (treeId) {\n      var o = data.getZTreeTools(treeId);\n      return o ? o : null;\n    },\n    destroy: function (treeId) {\n      if (!!treeId && treeId.length > 0) {\n        view.destroy(data.getSetting(treeId));\n      } else {\n        for (var s in settings) {\n          view.destroy(settings[s]);\n        }\n      }\n    },\n    init: function (obj, zSetting, zNodes) {\n      var setting = tools.clone(_setting);\n      $.extend(true, setting, zSetting);\n      setting.treeId = obj.attr(\"id\");\n      setting.treeObj = obj;\n      setting.treeObj.empty();\n      settings[setting.treeId] = setting;\n      //For some older browser,(e.g., ie6)\n      if (typeof document.body.style.maxHeight === \"undefined\") {\n        setting.view.expandSpeed = \"\";\n      }\n      data.initRoot(setting);\n      var root = data.getRoot(setting);\n      zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : [];\n      if (setting.data.simpleData.enable) {\n        data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes));\n      } else {\n        data.nodeChildren(setting, root, zNodes);\n      }\n\n      data.initCache(setting);\n      event.unbindTree(setting);\n      event.bindTree(setting);\n      event.unbindEvent(setting);\n      event.bindEvent(setting);\n\n      var zTreeTools = {\n        setting: setting,\n        addNodes: function (parentNode, index, newNodes, isSilent) {\n          if (!parentNode) parentNode = null;\n          var isParent = data.nodeIsParent(setting, parentNode);\n          if (parentNode && !isParent && setting.data.keep.leaf) return null;\n\n          var i = parseInt(index, 10);\n          if (isNaN(i)) {\n            isSilent = !!newNodes;\n            newNodes = index;\n            index = -1;\n          } else {\n            index = i;\n          }\n          if (!newNodes) return null;\n\n\n          var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]);\n\n          function addCallback() {\n            view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true));\n          }\n\n          if (tools.canAsync(setting, parentNode)) {\n            view.asyncNode(setting, parentNode, isSilent, addCallback);\n          } else {\n            addCallback();\n          }\n          return xNewNodes;\n        },\n        cancelSelectedNode: function (node) {\n          view.cancelPreSelectedNode(setting, node);\n        },\n        destroy: function () {\n          view.destroy(setting);\n        },\n        expandAll: function (expandFlag) {\n          expandFlag = !!expandFlag;\n          view.expandCollapseSonNode(setting, null, expandFlag, true);\n          return expandFlag;\n        },\n        expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) {\n          if (!node || !data.nodeIsParent(setting, node)) return null;\n          if (expandFlag !== true && expandFlag !== false) {\n            expandFlag = !node.open;\n          }\n          callbackFlag = !!callbackFlag;\n\n          if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {\n            return null;\n          } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {\n            return null;\n          }\n          if (expandFlag && node.parentTId) {\n            view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);\n          }\n          if (expandFlag === node.open && !sonSign) {\n            return null;\n          }\n\n          data.getRoot(setting).expandTriggerFlag = callbackFlag;\n          if (!tools.canAsync(setting, node) && sonSign) {\n            view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);\n          } else {\n            node.open = !expandFlag;\n            view.switchNode(this.setting, node);\n            showNodeFocus();\n          }\n          return expandFlag;\n\n          function showNodeFocus() {\n            var a = $$(node, setting).get(0);\n            if (a && focus !== false) {\n              view.scrollIntoView(setting, a);\n            }\n          }\n        },\n        getNodes: function () {\n          return data.getNodes(setting);\n        },\n        getNodeByParam: function (key, value, parentNode) {\n          if (!key) return null;\n          return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);\n        },\n        getNodeByTId: function (tId) {\n          return data.getNodeCache(setting, tId);\n        },\n        getNodesByParam: function (key, value, parentNode) {\n          if (!key) return null;\n          return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);\n        },\n        getNodesByParamFuzzy: function (key, value, parentNode) {\n          if (!key) return null;\n          return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);\n        },\n        getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) {\n          isSingle = !!isSingle;\n          if (!filter || (typeof filter != \"function\")) return (isSingle ? null : []);\n          return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam);\n        },\n        getNodeIndex: function (node) {\n          if (!node) return null;\n          var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n          var children = data.nodeChildren(setting, parentNode);\n          for (var i = 0, l = children.length; i < l; i++) {\n            if (children[i] == node) return i;\n          }\n          return -1;\n        },\n        getSelectedNodes: function () {\n          var r = [], list = data.getRoot(setting).curSelectedList;\n          for (var i = 0, l = list.length; i < l; i++) {\n            r.push(list[i]);\n          }\n          return r;\n        },\n        isSelectedNode: function (node) {\n          return data.isSelectedNode(setting, node);\n        },\n        reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) {\n          var promise = new Promise(function (resolve, reject) {\n            try {\n              zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () {\n                resolve(parentNode);\n              });\n            } catch (e) {\n              reject(e);\n            }\n          });\n          return promise;\n        },\n        reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) {\n          if (!this.setting.async.enable) return;\n          var isRoot = !parentNode;\n          if (isRoot) {\n            parentNode = data.getRoot(setting);\n          }\n          if (reloadType == \"refresh\") {\n            var children = data.nodeChildren(setting, parentNode);\n            for (var i = 0, l = children ? children.length : 0; i < l; i++) {\n              data.removeNodeCache(setting, children[i]);\n            }\n            data.removeSelectedNode(setting);\n            data.nodeChildren(setting, parentNode, []);\n            if (isRoot) {\n              this.setting.treeObj.empty();\n            } else {\n              var ulObj = $$(parentNode, consts.id.UL, setting);\n              ulObj.empty();\n            }\n          }\n          view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback);\n        },\n        refresh: function () {\n          this.setting.treeObj.empty();\n          var root = data.getRoot(setting),\n            nodes = data.nodeChildren(setting, root);\n          data.initRoot(setting);\n          data.nodeChildren(setting, root, nodes);\n          data.initCache(setting);\n          view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1);\n        },\n        removeChildNodes: function (node) {\n          if (!node) return null;\n          var nodes = data.nodeChildren(setting, node);\n          view.removeChildNodes(setting, node);\n          return nodes ? nodes : null;\n        },\n        removeNode: function (node, callbackFlag) {\n          if (!node) return;\n          callbackFlag = !!callbackFlag;\n          if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;\n          view.removeNode(setting, node);\n          if (callbackFlag) {\n            this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n          }\n        },\n        selectNode: function (node, addFlag, isSilent) {\n          if (!node) return;\n          if (tools.uCanDo(setting)) {\n            addFlag = setting.view.selectedMulti && addFlag;\n            if (node.parentTId) {\n              view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);\n            } else if (!isSilent) {\n              try {\n                $$(node, setting).focus().blur();\n              } catch (e) {\n              }\n            }\n            view.selectNode(setting, node, addFlag);\n          }\n\n          function showNodeFocus() {\n            if (isSilent) {\n              return;\n            }\n            var a = $$(node, setting).get(0);\n            view.scrollIntoView(setting, a);\n          }\n        },\n        transformTozTreeNodes: function (simpleNodes) {\n          return data.transformTozTreeFormat(setting, simpleNodes);\n        },\n        transformToArray: function (nodes) {\n          return data.transformToArrayFormat(setting, nodes);\n        },\n        updateNode: function (node, checkTypeFlag) {\n          if (!node) return;\n          var nObj = $$(node, setting);\n          if (nObj.get(0) && tools.uCanDo(setting)) {\n            view.setNodeName(setting, node);\n            view.setNodeTarget(setting, node);\n            view.setNodeUrl(setting, node);\n            view.setNodeLineIcos(setting, node);\n            view.setNodeFontCss(setting, node);\n          }\n        }\n      };\n      root.treeTools = zTreeTools;\n      data.setZTreeTools(setting, zTreeTools);\n      var children = data.nodeChildren(setting, root);\n      if (children && children.length > 0) {\n        view.createNodes(setting, 0, children, null, -1);\n      } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {\n        view.asyncNode(setting);\n      }\n      return zTreeTools;\n    }\n  };\n\n  var zt = $.fn.zTree,\n    $$ = tools.$,\n    consts = zt.consts;\n})(jQuery);\n/*\n * JQuery zTree excheck v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  //default consts of excheck\n  var _consts = {\n      event: {\n        CHECK: \"ztree_check\"\n      },\n      id: {\n        CHECK: \"_check\"\n      },\n      checkbox: {\n        STYLE: \"checkbox\",\n        DEFAULT: \"chk\",\n        DISABLED: \"disable\",\n        FALSE: \"false\",\n        TRUE: \"true\",\n        FULL: \"full\",\n        PART: \"part\",\n        FOCUS: \"focus\"\n      },\n      radio: {\n        STYLE: \"radio\",\n        TYPE_ALL: \"all\",\n        TYPE_LEVEL: \"level\"\n      }\n    },\n    //default setting of excheck\n    _setting = {\n      check: {\n        enable: false,\n        autoCheckTrigger: false,\n        chkStyle: _consts.checkbox.STYLE,\n        nocheckInherit: false,\n        chkDisabledInherit: false,\n        radioType: _consts.radio.TYPE_LEVEL,\n        chkboxType: {\n          \"Y\": \"ps\",\n          \"N\": \"ps\"\n        }\n      },\n      data: {\n        key: {\n          checked: \"checked\"\n        }\n      },\n      callback: {\n        beforeCheck: null,\n        onCheck: null\n      }\n    },\n    //default root of excheck\n    _initRoot = function (setting) {\n      var r = data.getRoot(setting);\n      r.radioCheckedList = [];\n    },\n    //default cache of excheck\n    _initCache = function (treeId) {\n    },\n    //default bind event of excheck\n    _bindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.bind(c.CHECK, function (event, srcEvent, treeId, node) {\n        event.srcEvent = srcEvent;\n        tools.apply(setting.callback.onCheck, [event, treeId, node]);\n      });\n    },\n    _unbindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.unbind(c.CHECK);\n    },\n    //default event proxy of excheck\n    _eventProxy = function (e) {\n      var target = e.target,\n        setting = data.getSetting(e.data.treeId),\n        tId = \"\", node = null,\n        nodeEventType = \"\", treeEventType = \"\",\n        nodeEventCallback = null, treeEventCallback = null;\n\n      if (tools.eqs(e.type, \"mouseover\")) {\n        if (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.CHECK) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"mouseoverCheck\";\n        }\n      } else if (tools.eqs(e.type, \"mouseout\")) {\n        if (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.CHECK) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"mouseoutCheck\";\n        }\n      } else if (tools.eqs(e.type, \"click\")) {\n        if (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.CHECK) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"checkNode\";\n        }\n      }\n      if (tId.length > 0) {\n        node = data.getNodeCache(setting, tId);\n        switch (nodeEventType) {\n          case \"checkNode\" :\n            nodeEventCallback = _handler.onCheckNode;\n            break;\n          case \"mouseoverCheck\" :\n            nodeEventCallback = _handler.onMouseoverCheck;\n            break;\n          case \"mouseoutCheck\" :\n            nodeEventCallback = _handler.onMouseoutCheck;\n            break;\n        }\n      }\n      var proxyResult = {\n        stop: nodeEventType === \"checkNode\",\n        node: node,\n        nodeEventType: nodeEventType,\n        nodeEventCallback: nodeEventCallback,\n        treeEventType: treeEventType,\n        treeEventCallback: treeEventCallback\n      };\n      return proxyResult\n    },\n    //default init node of excheck\n    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      if (!n) return;\n      var checked = data.nodeChecked(setting, n);\n      n.checkedOld = checked;\n      if (typeof n.nocheck == \"string\") n.nocheck = tools.eqs(n.nocheck, \"true\");\n      n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);\n      if (typeof n.chkDisabled == \"string\") n.chkDisabled = tools.eqs(n.chkDisabled, \"true\");\n      n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);\n      if (typeof n.halfCheck == \"string\") n.halfCheck = tools.eqs(n.halfCheck, \"true\");\n      n.halfCheck = !!n.halfCheck;\n      n.check_Child_State = -1;\n      n.check_Focus = false;\n      n.getCheckStatus = function () {\n        return data.getCheckStatus(setting, n);\n      };\n\n      if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) {\n        var r = data.getRoot(setting);\n        r.radioCheckedList.push(n);\n      }\n    },\n    //add dom for check\n    _beforeA = function (setting, node, html) {\n      if (setting.check.enable) {\n        data.makeChkFlag(setting, node);\n        html.push(\"<span ID='\", node.tId, consts.id.CHECK, \"' class='\", view.makeChkClass(setting, node), \"' treeNode\", consts.id.CHECK, (node.nocheck === true ? \" style='display:none;'\" : \"\"), \"></span>\");\n      }\n    },\n    //update zTreeObj, add method of check\n    _zTreeTools = function (setting, zTreeTools) {\n      zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {\n        var nodeChecked = data.nodeChecked(setting, node);\n        if (node.chkDisabled === true) return;\n        if (checked !== true && checked !== false) {\n          checked = !nodeChecked;\n        }\n        callbackFlag = !!callbackFlag;\n\n        if (nodeChecked === checked && !checkTypeFlag) {\n          return;\n        } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {\n          return;\n        }\n        if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {\n          data.nodeChecked(setting, node, checked);\n          var checkObj = $$(node, consts.id.CHECK, this.setting);\n          if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n          view.setChkClass(this.setting, checkObj, node);\n          view.repairParentChkClassWithSelf(this.setting, node);\n          if (callbackFlag) {\n            this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);\n          }\n        }\n      }\n\n      zTreeTools.checkAllNodes = function (checked) {\n        view.repairAllChk(this.setting, !!checked);\n      }\n\n      zTreeTools.getCheckedNodes = function (checked) {\n        var checked = (checked !== false);\n        var children = data.nodeChildren(setting, data.getRoot(this.setting));\n        return data.getTreeCheckedNodes(this.setting, children, checked);\n      }\n\n      zTreeTools.getChangeCheckedNodes = function () {\n        var children = data.nodeChildren(setting, data.getRoot(this.setting));\n        return data.getTreeChangeCheckedNodes(this.setting, children);\n      }\n\n      zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) {\n        disabled = !!disabled;\n        inheritParent = !!inheritParent;\n        inheritChildren = !!inheritChildren;\n        view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);\n        view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);\n      }\n\n      var _updateNode = zTreeTools.updateNode;\n      zTreeTools.updateNode = function (node, checkTypeFlag) {\n        if (_updateNode) _updateNode.apply(zTreeTools, arguments);\n        if (!node || !this.setting.check.enable) return;\n        var nObj = $$(node, this.setting);\n        if (nObj.get(0) && tools.uCanDo(this.setting)) {\n          var checkObj = $$(node, consts.id.CHECK, this.setting);\n          if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n          view.setChkClass(this.setting, checkObj, node);\n          view.repairParentChkClassWithSelf(this.setting, node);\n        }\n      }\n    },\n    //method of operate data\n    _data = {\n      getRadioCheckedList: function (setting) {\n        var checkedList = data.getRoot(setting).radioCheckedList;\n        for (var i = 0, j = checkedList.length; i < j; i++) {\n          if (!data.getNodeCache(setting, checkedList[i].tId)) {\n            checkedList.splice(i, 1);\n            i--;\n            j--;\n          }\n        }\n        return checkedList;\n      },\n      getCheckStatus: function (setting, node) {\n        if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;\n        var checked = data.nodeChecked(setting, node),\n          r = {\n            checked: checked,\n            half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))\n          };\n        return r;\n      },\n      getTreeCheckedNodes: function (setting, nodes, checked, results) {\n        if (!nodes) return [];\n        var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);\n        results = !results ? [] : results;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          var children = data.nodeChildren(setting, node);\n          var nodeChecked = data.nodeChecked(setting, node);\n          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) {\n            results.push(node);\n            if (onlyOne) {\n              break;\n            }\n          }\n          data.getTreeCheckedNodes(setting, children, checked, results);\n          if (onlyOne && results.length > 0) {\n            break;\n          }\n        }\n        return results;\n      },\n      getTreeChangeCheckedNodes: function (setting, nodes, results) {\n        if (!nodes) return [];\n        results = !results ? [] : results;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          var children = data.nodeChildren(setting, node);\n          var nodeChecked = data.nodeChecked(setting, node);\n          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) {\n            results.push(node);\n          }\n          data.getTreeChangeCheckedNodes(setting, children, results);\n        }\n        return results;\n      },\n      makeChkFlag: function (setting, node) {\n        if (!node) return;\n        var chkFlag = -1;\n        var children = data.nodeChildren(setting, node);\n        if (children) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            var cNode = children[i];\n            var nodeChecked = data.nodeChecked(setting, cNode);\n            var tmp = -1;\n            if (setting.check.chkStyle == consts.radio.STYLE) {\n              if (cNode.nocheck === true || cNode.chkDisabled === true) {\n                tmp = cNode.check_Child_State;\n              } else if (cNode.halfCheck === true) {\n                tmp = 2;\n              } else if (nodeChecked) {\n                tmp = 2;\n              } else {\n                tmp = cNode.check_Child_State > 0 ? 2 : 0;\n              }\n              if (tmp == 2) {\n                chkFlag = 2;\n                break;\n              } else if (tmp == 0) {\n                chkFlag = 0;\n              }\n            } else if (setting.check.chkStyle == consts.checkbox.STYLE) {\n              if (cNode.nocheck === true || cNode.chkDisabled === true) {\n                tmp = cNode.check_Child_State;\n              } else if (cNode.halfCheck === true) {\n                tmp = 1;\n              } else if (nodeChecked) {\n                tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;\n              } else {\n                tmp = (cNode.check_Child_State > 0) ? 1 : 0;\n              }\n              if (tmp === 1) {\n                chkFlag = 1;\n                break;\n              } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {\n                chkFlag = 1;\n                break;\n              } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {\n                chkFlag = 1;\n                break;\n              } else if (tmp > -1) {\n                chkFlag = tmp;\n              }\n            }\n          }\n        }\n        node.check_Child_State = chkFlag;\n      }\n    },\n    //method of event proxy\n    _event = {},\n    //method of event handler\n    _handler = {\n      onCheckNode: function (event, node) {\n        if (node.chkDisabled === true) return false;\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;\n        var nodeChecked = data.nodeChecked(setting, node);\n        data.nodeChecked(setting, node, !nodeChecked);\n        view.checkNodeRelation(setting, node);\n        var checkObj = $$(node, consts.id.CHECK, setting);\n        view.setChkClass(setting, checkObj, node);\n        view.repairParentChkClassWithSelf(setting, node);\n        setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);\n        return true;\n      },\n      onMouseoverCheck: function (event, node) {\n        if (node.chkDisabled === true) return false;\n        var setting = data.getSetting(event.data.treeId),\n          checkObj = $$(node, consts.id.CHECK, setting);\n        node.check_Focus = true;\n        view.setChkClass(setting, checkObj, node);\n        return true;\n      },\n      onMouseoutCheck: function (event, node) {\n        if (node.chkDisabled === true) return false;\n        var setting = data.getSetting(event.data.treeId),\n          checkObj = $$(node, consts.id.CHECK, setting);\n        node.check_Focus = false;\n        view.setChkClass(setting, checkObj, node);\n        return true;\n      }\n    },\n    //method of tools for zTree\n    _tools = {},\n    //method of operate ztree dom\n    _view = {\n      checkNodeRelation: function (setting, node) {\n        var pNode, i, l,\n          r = consts.radio;\n        var nodeChecked = data.nodeChecked(setting, node);\n        if (setting.check.chkStyle == r.STYLE) {\n          var checkedList = data.getRadioCheckedList(setting);\n          if (nodeChecked) {\n            if (setting.check.radioType == r.TYPE_ALL) {\n              for (i = checkedList.length - 1; i >= 0; i--) {\n                pNode = checkedList[i];\n                var pNodeChecked = data.nodeChecked(setting, pNode);\n                if (pNodeChecked && pNode != node) {\n                  data.nodeChecked(setting, pNode, false);\n                  checkedList.splice(i, 1);\n\n                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n                  if (pNode.parentTId != node.parentTId) {\n                    view.repairParentChkClassWithSelf(setting, pNode);\n                  }\n                }\n              }\n              checkedList.push(node);\n            } else {\n              var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n              var children = data.nodeChildren(setting, parentNode);\n              for (i = 0, l = children.length; i < l; i++) {\n                pNode = children[i];\n                var pNodeChecked = data.nodeChecked(setting, pNode);\n                if (pNodeChecked && pNode != node) {\n                  data.nodeChecked(setting, pNode, false);\n                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n                }\n              }\n            }\n          } else if (setting.check.radioType == r.TYPE_ALL) {\n            for (i = 0, l = checkedList.length; i < l; i++) {\n              if (node == checkedList[i]) {\n                checkedList.splice(i, 1);\n                break;\n              }\n            }\n          }\n\n        } else {\n          var children = data.nodeChildren(setting, node);\n          if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf(\"s\") > -1)) {\n            view.setSonNodeCheckBox(setting, node, true);\n          }\n          if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf(\"s\") > -1)) {\n            view.setSonNodeCheckBox(setting, node, false);\n          }\n          if (nodeChecked && setting.check.chkboxType.Y.indexOf(\"p\") > -1) {\n            view.setParentNodeCheckBox(setting, node, true);\n          }\n          if (!nodeChecked && setting.check.chkboxType.N.indexOf(\"p\") > -1) {\n            view.setParentNodeCheckBox(setting, node, false);\n          }\n        }\n      },\n      makeChkClass: function (setting, node) {\n        var c = consts.checkbox, r = consts.radio,\n          fullStyle = \"\";\n        var nodeChecked = data.nodeChecked(setting, node);\n        if (node.chkDisabled === true) {\n          fullStyle = c.DISABLED;\n        } else if (node.halfCheck) {\n          fullStyle = c.PART;\n        } else if (setting.check.chkStyle == r.STYLE) {\n          fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART;\n        } else {\n          fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART);\n        }\n        var chkName = setting.check.chkStyle + \"_\" + (nodeChecked ? c.TRUE : c.FALSE) + \"_\" + fullStyle;\n        chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + \"_\" + c.FOCUS : chkName;\n        return consts.className.BUTTON + \" \" + c.DEFAULT + \" \" + chkName;\n      },\n      repairAllChk: function (setting, checked) {\n        if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {\n          var root = data.getRoot(setting);\n          var children = data.nodeChildren(setting, root);\n          for (var i = 0, l = children.length; i < l; i++) {\n            var node = children[i];\n            if (node.nocheck !== true && node.chkDisabled !== true) {\n              data.nodeChecked(setting, node, checked);\n            }\n            view.setSonNodeCheckBox(setting, node, checked);\n          }\n        }\n      },\n      repairChkClass: function (setting, node) {\n        if (!node) return;\n        data.makeChkFlag(setting, node);\n        if (node.nocheck !== true) {\n          var checkObj = $$(node, consts.id.CHECK, setting);\n          view.setChkClass(setting, checkObj, node);\n        }\n      },\n      repairParentChkClass: function (setting, node) {\n        if (!node || !node.parentTId) return;\n        var pNode = node.getParentNode();\n        view.repairChkClass(setting, pNode);\n        view.repairParentChkClass(setting, pNode);\n      },\n      repairParentChkClassWithSelf: function (setting, node) {\n        if (!node) return;\n        var children = data.nodeChildren(setting, node);\n        if (children && children.length > 0) {\n          view.repairParentChkClass(setting, children[0]);\n        } else {\n          view.repairParentChkClass(setting, node);\n        }\n      },\n      repairSonChkDisabled: function (setting, node, chkDisabled, inherit) {\n        if (!node) return;\n        if (node.chkDisabled != chkDisabled) {\n          node.chkDisabled = chkDisabled;\n        }\n        view.repairChkClass(setting, node);\n        var children = data.nodeChildren(setting, node);\n        if (children && inherit) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            var sNode = children[i];\n            view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);\n          }\n        }\n      },\n      repairParentChkDisabled: function (setting, node, chkDisabled, inherit) {\n        if (!node) return;\n        if (node.chkDisabled != chkDisabled && inherit) {\n          node.chkDisabled = chkDisabled;\n        }\n        view.repairChkClass(setting, node);\n        view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);\n      },\n      setChkClass: function (setting, obj, node) {\n        if (!obj) return;\n        if (node.nocheck === true) {\n          obj.hide();\n        } else {\n          obj.show();\n        }\n        obj.attr('class', view.makeChkClass(setting, node));\n      },\n      setParentNodeCheckBox: function (setting, node, value, srcNode) {\n        var checkObj = $$(node, consts.id.CHECK, setting);\n        if (!srcNode) srcNode = node;\n        data.makeChkFlag(setting, node);\n        if (node.nocheck !== true && node.chkDisabled !== true) {\n          data.nodeChecked(setting, node, value);\n          view.setChkClass(setting, checkObj, node);\n          if (setting.check.autoCheckTrigger && node != srcNode) {\n            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n          }\n        }\n        if (node.parentTId) {\n          var pSign = true;\n          if (!value) {\n            var pNodes = data.nodeChildren(setting, node.getParentNode());\n            for (var i = 0, l = pNodes.length; i < l; i++) {\n              var pNode = pNodes[i];\n              var nodeChecked = data.nodeChecked(setting, pNode);\n              if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked)\n                || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) {\n                pSign = false;\n                break;\n              }\n            }\n          }\n          if (pSign) {\n            view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);\n          }\n        }\n      },\n      setSonNodeCheckBox: function (setting, node, value, srcNode) {\n        if (!node) return;\n        var checkObj = $$(node, consts.id.CHECK, setting);\n        if (!srcNode) srcNode = node;\n\n        var hasDisable = false;\n        var children = data.nodeChildren(setting, node);\n        if (children) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            var sNode = children[i];\n            view.setSonNodeCheckBox(setting, sNode, value, srcNode);\n            if (sNode.chkDisabled === true) hasDisable = true;\n          }\n        }\n\n        if (node != data.getRoot(setting) && node.chkDisabled !== true) {\n          if (hasDisable && node.nocheck !== true) {\n            data.makeChkFlag(setting, node);\n          }\n          if (node.nocheck !== true && node.chkDisabled !== true) {\n            data.nodeChecked(setting, node, value);\n            if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1;\n          } else {\n            node.check_Child_State = -1;\n          }\n          view.setChkClass(setting, checkObj, node);\n          if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {\n            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n          }\n        }\n\n      }\n    },\n\n    _z = {\n      tools: _tools,\n      view: _view,\n      event: _event,\n      data: _data\n    };\n  $.extend(true, $.fn.zTree.consts, _consts);\n  $.extend(true, $.fn.zTree._z, _z);\n\n  var zt = $.fn.zTree,\n    tools = zt._z.tools,\n    consts = zt.consts,\n    view = zt._z.view,\n    data = zt._z.data,\n    event = zt._z.event,\n    $$ = tools.$;\n\n  data.nodeChecked = function (setting, node, newChecked) {\n    if (!node) {\n      return false;\n    }\n    var key = setting.data.key.checked;\n    if (typeof newChecked !== 'undefined') {\n      if (typeof newChecked === \"string\") {\n        newChecked = tools.eqs(newChecked, \"true\");\n      }\n      newChecked = !!newChecked;\n      node[key] = newChecked;\n    } else if (typeof node[key] == \"string\"){\n      node[key] = tools.eqs(node[key], \"true\");\n    } else {\n      node[key] = !!node[key];\n    }\n    return node[key];\n  };\n\n  data.exSetting(_setting);\n  data.addInitBind(_bindEvent);\n  data.addInitUnBind(_unbindEvent);\n  data.addInitCache(_initCache);\n  data.addInitNode(_initNode);\n  data.addInitProxy(_eventProxy, true);\n  data.addInitRoot(_initRoot);\n  data.addBeforeA(_beforeA);\n  data.addZTreeTools(_zTreeTools);\n\n  var _createNodes = view.createNodes;\n  view.createNodes = function (setting, level, nodes, parentNode, index) {\n    if (_createNodes) _createNodes.apply(view, arguments);\n    if (!nodes) return;\n    view.repairParentChkClassWithSelf(setting, parentNode);\n  }\n  var _removeNode = view.removeNode;\n  view.removeNode = function (setting, node) {\n    var parentNode = node.getParentNode();\n    if (_removeNode) _removeNode.apply(view, arguments);\n    if (!node || !parentNode) return;\n    view.repairChkClass(setting, parentNode);\n    view.repairParentChkClass(setting, parentNode);\n  }\n\n  var _appendNodes = view.appendNodes;\n  view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) {\n    var html = \"\";\n    if (_appendNodes) {\n      html = _appendNodes.apply(view, arguments);\n    }\n    if (parentNode) {\n      data.makeChkFlag(setting, parentNode);\n    }\n    return html;\n  }\n})(jQuery);\n/*\n * JQuery zTree exedit v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  //default consts of exedit\n  var _consts = {\n      event: {\n        DRAG: \"ztree_drag\",\n        DROP: \"ztree_drop\",\n        RENAME: \"ztree_rename\",\n        DRAGMOVE: \"ztree_dragmove\"\n      },\n      id: {\n        EDIT: \"_edit\",\n        INPUT: \"_input\",\n        REMOVE: \"_remove\"\n      },\n      move: {\n        TYPE_INNER: \"inner\",\n        TYPE_PREV: \"prev\",\n        TYPE_NEXT: \"next\"\n      },\n      node: {\n        CURSELECTED_EDIT: \"curSelectedNode_Edit\",\n        TMPTARGET_TREE: \"tmpTargetzTree\",\n        TMPTARGET_NODE: \"tmpTargetNode\"\n      }\n    },\n    //default setting of exedit\n    _setting = {\n      edit: {\n        enable: false,\n        editNameSelectAll: false,\n        showRemoveBtn: true,\n        showRenameBtn: true,\n        removeTitle: \"remove\",\n        renameTitle: \"rename\",\n        drag: {\n          autoExpandTrigger: false,\n          isCopy: true,\n          isMove: true,\n          prev: true,\n          next: true,\n          inner: true,\n          minMoveSize: 5,\n          borderMax: 10,\n          borderMin: -5,\n          maxShowNodeNum: 5,\n          autoOpenTime: 500\n        }\n      },\n      view: {\n        addHoverDom: null,\n        removeHoverDom: null\n      },\n      callback: {\n        beforeDrag: null,\n        beforeDragOpen: null,\n        beforeDrop: null,\n        beforeEditName: null,\n        beforeRename: null,\n        onDrag: null,\n        onDragMove: null,\n        onDrop: null,\n        onRename: null\n      }\n    },\n    //default root of exedit\n    _initRoot = function (setting) {\n      var r = data.getRoot(setting), rs = data.getRoots();\n      r.curEditNode = null;\n      r.curEditInput = null;\n      r.curHoverNode = null;\n      r.dragFlag = 0;\n      r.dragNodeShowBefore = [];\n      r.dragMaskList = new Array();\n      rs.showHoverDom = true;\n    },\n    //default cache of exedit\n    _initCache = function (treeId) {\n    },\n    //default bind event of exedit\n    _bindEvent = function (setting) {\n      var o = setting.treeObj;\n      var c = consts.event;\n      o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {\n        tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);\n      });\n\n      o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {\n        tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);\n      });\n\n      o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {\n        tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);\n      });\n\n      o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {\n        tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);\n      });\n    },\n    _unbindEvent = function (setting) {\n      var o = setting.treeObj;\n      var c = consts.event;\n      o.unbind(c.RENAME);\n      o.unbind(c.DRAG);\n      o.unbind(c.DRAGMOVE);\n      o.unbind(c.DROP);\n    },\n    //default event proxy of exedit\n    _eventProxy = function (e) {\n      var target = e.target,\n        setting = data.getSetting(e.data.treeId),\n        relatedTarget = e.relatedTarget,\n        tId = \"\", node = null,\n        nodeEventType = \"\", treeEventType = \"\",\n        nodeEventCallback = null, treeEventCallback = null,\n        tmp = null;\n\n      if (tools.eqs(e.type, \"mouseover\")) {\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n          nodeEventType = \"hoverOverNode\";\n        }\n      } else if (tools.eqs(e.type, \"mouseout\")) {\n        tmp = tools.getMDom(setting, relatedTarget, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (!tmp) {\n          tId = \"remove\";\n          nodeEventType = \"hoverOutNode\";\n        }\n      } else if (tools.eqs(e.type, \"mousedown\")) {\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n          nodeEventType = \"mousedownNode\";\n        }\n      }\n      if (tId.length > 0) {\n        node = data.getNodeCache(setting, tId);\n        switch (nodeEventType) {\n          case \"mousedownNode\" :\n            nodeEventCallback = _handler.onMousedownNode;\n            break;\n          case \"hoverOverNode\" :\n            nodeEventCallback = _handler.onHoverOverNode;\n            break;\n          case \"hoverOutNode\" :\n            nodeEventCallback = _handler.onHoverOutNode;\n            break;\n        }\n      }\n      var proxyResult = {\n        stop: false,\n        node: node,\n        nodeEventType: nodeEventType,\n        nodeEventCallback: nodeEventCallback,\n        treeEventType: treeEventType,\n        treeEventCallback: treeEventCallback\n      };\n      return proxyResult\n    },\n    //default init node of exedit\n    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      if (!n) return;\n      n.isHover = false;\n      n.editNameFlag = false;\n    },\n    //update zTreeObj, add method of edit\n    _zTreeTools = function (setting, zTreeTools) {\n      zTreeTools.cancelEditName = function (newName) {\n        var root = data.getRoot(this.setting);\n        if (!root.curEditNode) return;\n        view.cancelCurEditNode(this.setting, newName ? newName : null, true);\n      }\n      zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {\n        if (!node) return null;\n        var isParent = data.nodeIsParent(setting, targetNode);\n        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;\n        var _this = this,\n          newNode = tools.clone(node);\n        if (!targetNode) {\n          targetNode = null;\n          moveType = consts.move.TYPE_INNER;\n        }\n        if (moveType == consts.move.TYPE_INNER) {\n          function copyCallback() {\n            view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);\n          }\n\n          if (tools.canAsync(this.setting, targetNode)) {\n            view.asyncNode(this.setting, targetNode, isSilent, copyCallback);\n          } else {\n            copyCallback();\n          }\n        } else {\n          view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);\n          view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);\n        }\n        return newNode;\n      }\n      zTreeTools.editName = function (node) {\n        if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;\n        if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);\n        view.editNode(this.setting, node)\n      }\n      zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {\n        if (!node) return node;\n        var isParent = data.nodeIsParent(setting, targetNode);\n        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {\n          return null;\n        } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find(\"#\" + targetNode.tId).length > 0)) {\n          return null;\n        } else if (!targetNode) {\n          targetNode = null;\n        }\n        var _this = this;\n\n        function moveCallback() {\n          view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);\n        }\n\n        if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {\n          view.asyncNode(this.setting, targetNode, isSilent, moveCallback);\n        } else {\n          moveCallback();\n        }\n        return node;\n      }\n      zTreeTools.setEditable = function (editable) {\n        this.setting.edit.enable = editable;\n        return this.refresh();\n      }\n    },\n    //method of operate data\n    _data = {\n      setSonNodeLevel: function (setting, parentNode, node) {\n        if (!node) return;\n        var children = data.nodeChildren(setting, node);\n        node.level = (parentNode) ? parentNode.level + 1 : 0;\n        if (!children) return;\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i]) data.setSonNodeLevel(setting, node, children[i]);\n        }\n      }\n    },\n    //method of event proxy\n    _event = {},\n    //method of event handler\n    _handler = {\n      onHoverOverNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId),\n          root = data.getRoot(setting);\n        if (root.curHoverNode != node) {\n          _handler.onHoverOutNode(event);\n        }\n        root.curHoverNode = node;\n        view.addHoverDom(setting, node);\n      },\n      onHoverOutNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId),\n          root = data.getRoot(setting);\n        if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {\n          view.removeTreeDom(setting, root.curHoverNode);\n          root.curHoverNode = null;\n        }\n      },\n      onMousedownNode: function (eventMouseDown, _node) {\n        var i, l,\n          setting = data.getSetting(eventMouseDown.data.treeId),\n          root = data.getRoot(setting), roots = data.getRoots();\n        //right click can't drag & drop\n        if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;\n\n        //input of edit node name can't drag & drop\n        var target = eventMouseDown.target,\n          _nodes = data.getRoot(setting).curSelectedList,\n          nodes = [];\n        if (!data.isSelectedNode(setting, _node)) {\n          nodes = [_node];\n        } else {\n          for (i = 0, l = _nodes.length; i < l; i++) {\n            if (_nodes[i].editNameFlag && tools.eqs(target.tagName, \"input\") && target.getAttribute(\"treeNode\" + consts.id.INPUT) !== null) {\n              return true;\n            }\n            nodes.push(_nodes[i]);\n            if (nodes[0].parentTId !== _nodes[i].parentTId) {\n              nodes = [_node];\n              break;\n            }\n          }\n        }\n\n        view.editNodeBlur = true;\n        view.cancelCurEditNode(setting);\n\n        var doc = $(setting.treeObj.get(0).ownerDocument),\n          body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,\n          isOtherTree = false,\n          targetSetting = setting,\n          sourceSetting = setting,\n          preNode, nextNode,\n          preTmpTargetNodeId = null,\n          preTmpMoveType = null,\n          tmpTargetNodeId = null,\n          moveType = consts.move.TYPE_INNER,\n          mouseDownX = eventMouseDown.clientX,\n          mouseDownY = eventMouseDown.clientY,\n          startTime = (new Date()).getTime();\n\n        if (tools.uCanDo(setting)) {\n          doc.bind(\"mousemove\", _docMouseMove);\n        }\n\n        function _docMouseMove(event) {\n          //avoid start drag after click node\n          if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize\n            && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {\n            return true;\n          }\n          var i, l, tmpNode, tmpDom, tmpNodes;\n          body.css(\"cursor\", \"pointer\");\n\n          if (root.dragFlag == 0) {\n            if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {\n              _docMouseUp(event);\n              return true;\n            }\n\n            for (i = 0, l = nodes.length; i < l; i++) {\n              if (i == 0) {\n                root.dragNodeShowBefore = [];\n              }\n              tmpNode = nodes[i];\n              if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {\n                view.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n                root.dragNodeShowBefore[tmpNode.tId] = true;\n              } else {\n                root.dragNodeShowBefore[tmpNode.tId] = false;\n              }\n            }\n\n            root.dragFlag = 1;\n            roots.showHoverDom = false;\n            tools.showIfameMask(setting, true);\n\n            //sort\n            var isOrder = true, lastIndex = -1;\n            if (nodes.length > 1) {\n              var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);\n              tmpNodes = [];\n              for (i = 0, l = pNodes.length; i < l; i++) {\n                if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {\n                  if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {\n                    isOrder = false;\n                  }\n                  tmpNodes.push(pNodes[i]);\n                  lastIndex = i;\n                }\n                if (nodes.length === tmpNodes.length) {\n                  nodes = tmpNodes;\n                  break;\n                }\n              }\n            }\n            if (isOrder) {\n              preNode = nodes[0].getPreNode();\n              nextNode = nodes[nodes.length - 1].getNextNode();\n            }\n\n            //set node in selected\n            curNode = $$(\"<ul class='zTreeDragUL'></ul>\", setting);\n            for (i = 0, l = nodes.length; i < l; i++) {\n              tmpNode = nodes[i];\n              tmpNode.editNameFlag = false;\n              view.selectNode(setting, tmpNode, i > 0);\n              view.removeTreeDom(setting, tmpNode);\n\n              if (i > setting.edit.drag.maxShowNodeNum - 1) {\n                continue;\n              }\n\n              tmpDom = $$(\"<li id='\" + tmpNode.tId + \"_tmp'></li>\", setting);\n              tmpDom.append($$(tmpNode, consts.id.A, setting).clone());\n              tmpDom.css(\"padding\", \"0\");\n              tmpDom.children(\"#\" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);\n              curNode.append(tmpDom);\n              if (i == setting.edit.drag.maxShowNodeNum - 1) {\n                tmpDom = $$(\"<li id='\" + tmpNode.tId + \"_moretmp'><a>  ...  </a></li>\", setting);\n                curNode.append(tmpDom);\n              }\n            }\n            curNode.attr(\"id\", nodes[0].tId + consts.id.UL + \"_tmp\");\n            curNode.addClass(setting.treeObj.attr(\"class\"));\n            curNode.appendTo(body);\n\n            tmpArrow = $$(\"<span class='tmpzTreeMove_arrow'></span>\", setting);\n            tmpArrow.attr(\"id\", \"zTreeMove_arrow_tmp\");\n            tmpArrow.appendTo(body);\n\n            setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);\n          }\n\n          if (root.dragFlag == 1) {\n            if (tmpTarget && tmpArrow.attr(\"id\") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {\n              var xT = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget);\n              event.target = (xT.length > 0) ? xT.get(0) : event.target;\n            } else if (tmpTarget) {\n              tmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n              if (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n                .removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n            }\n            tmpTarget = null;\n            tmpTargetNodeId = null;\n\n            //judge drag & drop in multi ztree\n            isOtherTree = false;\n            targetSetting = setting;\n            var settings = data.getSettings();\n            for (var s in settings) {\n              if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId\n                && (event.target.id == settings[s].treeId || $(event.target).parents(\"#\" + settings[s].treeId).length > 0)) {\n                isOtherTree = true;\n                targetSetting = settings[s];\n              }\n            }\n\n            var docScrollTop = doc.scrollTop(),\n              docScrollLeft = doc.scrollLeft(),\n              treeOffset = targetSetting.treeObj.offset(),\n              scrollHeight = targetSetting.treeObj.get(0).scrollHeight,\n              scrollWidth = targetSetting.treeObj.get(0).scrollWidth,\n              dTop = (event.clientY + docScrollTop - treeOffset.top),\n              dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),\n              dLeft = (event.clientX + docScrollLeft - treeOffset.left),\n              dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),\n              isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),\n              isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),\n              isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),\n              isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),\n              isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,\n              isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),\n              isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),\n              isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),\n              isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);\n\n            if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n              //get node <li> dom\n              var targetObj = event.target;\n              while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, \"li\") && targetObj.id != targetSetting.treeId) {\n                targetObj = targetObj.parentNode;\n              }\n\n              var canMove = true;\n              //don't move to self or children of self\n              for (i = 0, l = nodes.length; i < l; i++) {\n                tmpNode = nodes[i];\n                if (targetObj.id === tmpNode.tId) {\n                  canMove = false;\n                  break;\n                } else if ($$(tmpNode, setting).find(\"#\" + targetObj.id).length > 0) {\n                  canMove = false;\n                  break;\n                }\n              }\n              if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {\n                tmpTarget = $(targetObj);\n                tmpTargetNodeId = targetObj.id;\n              }\n            }\n\n            //the mouse must be in zTree\n            tmpNode = nodes[0];\n            if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n              //judge mouse move in root of ztree\n              if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {\n                tmpTarget = targetSetting.treeObj;\n              }\n              //auto scroll top\n              if (isTop) {\n                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);\n              } else if (isBottom) {\n                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);\n              }\n              if (isLeft) {\n                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);\n              } else if (isRight) {\n                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);\n              }\n              //auto scroll left\n              if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {\n                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);\n              }\n            }\n\n            curNode.css({\n              \"top\": (event.clientY + docScrollTop + 3) + \"px\",\n              \"left\": (event.clientX + docScrollLeft + 3) + \"px\"\n            });\n\n            var dX = 0;\n            var dY = 0;\n            if (tmpTarget && tmpTarget.attr(\"id\") != targetSetting.treeId) {\n              var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),\n                isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),\n                isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),\n                isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),\n                isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),\n                canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),\n                canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),\n                canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);\n\n              function clearMove() {\n                tmpTarget = null;\n                tmpTargetNodeId = \"\";\n                moveType = consts.move.TYPE_INNER;\n                tmpArrow.css({\n                  \"display\": \"none\"\n                });\n                if (window.zTreeMoveTimer) {\n                  clearTimeout(window.zTreeMoveTimer);\n                  window.zTreeMoveTargetNodeTId = null\n                }\n              }\n\n              if (!canPrev && !canNext && !canInner) {\n                clearMove();\n              } else {\n                var tmpTargetA = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget),\n                  tmpNextA = tmpTargetNode.isLastNode ? null : $(\"#\" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),\n                  tmpTop = tmpTargetA.offset().top,\n                  tmpLeft = tmpTargetA.offset().left,\n                  prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,\n                  nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,\n                  dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();\n\n                if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {\n                  dX = 1 - tmpArrow.width();\n                  dY = tmpTop - tmpArrow.height() / 2;\n                  moveType = consts.move.TYPE_PREV;\n                } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {\n                  dX = 1 - tmpArrow.width();\n                  dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);\n                  moveType = consts.move.TYPE_NEXT;\n                } else if (canInner) {\n                  dX = 5 - tmpArrow.width();\n                  dY = tmpTop;\n                  moveType = consts.move.TYPE_INNER;\n                } else {\n                  clearMove();\n                }\n\n                if (tmpTarget) {\n                  tmpArrow.css({\n                    \"display\": \"block\",\n                    \"top\": dY + \"px\",\n                    \"left\": (tmpLeft + dX) + \"px\"\n                  });\n                  tmpTargetA.addClass(consts.node.TMPTARGET_NODE + \"_\" + moveType);\n\n                  if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {\n                    startTime = (new Date()).getTime();\n                  }\n                  if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {\n                    var startTimer = true;\n                    if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {\n                      clearTimeout(window.zTreeMoveTimer);\n                      window.zTreeMoveTargetNodeTId = null;\n                    } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {\n                      startTimer = false;\n                    }\n                    if (startTimer) {\n                      window.zTreeMoveTimer = setTimeout(function () {\n                        if (moveType != consts.move.TYPE_INNER) return;\n                        if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime\n                          && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {\n                          view.switchNode(targetSetting, tmpTargetNode);\n                          if (targetSetting.edit.drag.autoExpandTrigger) {\n                            targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);\n                          }\n                        }\n                      }, targetSetting.edit.drag.autoOpenTime + 50);\n                      window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;\n                    }\n                  }\n                }\n              }\n            } else {\n              moveType = consts.move.TYPE_INNER;\n              if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {\n                tmpTarget.addClass(consts.node.TMPTARGET_TREE);\n              } else {\n                tmpTarget = null;\n              }\n              tmpArrow.css({\n                \"display\": \"none\"\n              });\n              if (window.zTreeMoveTimer) {\n                clearTimeout(window.zTreeMoveTimer);\n                window.zTreeMoveTargetNodeTId = null;\n              }\n            }\n            preTmpTargetNodeId = tmpTargetNodeId;\n            preTmpMoveType = moveType;\n\n            setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);\n          }\n          return false;\n        }\n\n        doc.bind(\"mouseup\", _docMouseUp);\n\n        function _docMouseUp(event) {\n          if (window.zTreeMoveTimer) {\n            clearTimeout(window.zTreeMoveTimer);\n            window.zTreeMoveTargetNodeTId = null;\n          }\n          preTmpTargetNodeId = null;\n          preTmpMoveType = null;\n          doc.unbind(\"mousemove\", _docMouseMove);\n          doc.unbind(\"mouseup\", _docMouseUp);\n          doc.unbind(\"selectstart\", _docSelect);\n          body.css(\"cursor\", \"\");\n          if (tmpTarget) {\n            tmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n            if (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n              .removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n          }\n          tools.showIfameMask(setting, false);\n\n          roots.showHoverDom = true;\n          if (root.dragFlag == 0) return;\n          root.dragFlag = 0;\n\n          var i, l, tmpNode;\n          for (i = 0, l = nodes.length; i < l; i++) {\n            tmpNode = nodes[i];\n            if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {\n              view.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n              delete root.dragNodeShowBefore[tmpNode.tId];\n            }\n          }\n\n          if (curNode) curNode.remove();\n          if (tmpArrow) tmpArrow.remove();\n\n          var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);\n          if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {\n            tmpTarget = null;\n          }\n          if (tmpTarget) {\n            var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);\n            if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {\n              view.selectNodes(sourceSetting, nodes);\n              return;\n            }\n            var newNodes = isCopy ? tools.clone(nodes) : nodes;\n\n            function dropCallback() {\n              if (isOtherTree) {\n                if (!isCopy) {\n                  for (var i = 0, l = nodes.length; i < l; i++) {\n                    view.removeNode(setting, nodes[i]);\n                  }\n                }\n                if (moveType == consts.move.TYPE_INNER) {\n                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n                } else {\n                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);\n                }\n              } else {\n                if (isCopy && moveType == consts.move.TYPE_INNER) {\n                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n                } else if (isCopy) {\n                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);\n                } else {\n                  if (moveType != consts.move.TYPE_NEXT) {\n                    for (i = 0, l = newNodes.length; i < l; i++) {\n                      view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);\n                    }\n                  } else {\n                    for (i = -1, l = newNodes.length - 1; i < l; l--) {\n                      view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);\n                    }\n                  }\n                }\n              }\n              view.selectNodes(targetSetting, newNodes);\n\n              var a = $$(newNodes[0], setting).get(0);\n              view.scrollIntoView(setting, a);\n\n              setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);\n            }\n\n            if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {\n              view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);\n            } else {\n              dropCallback();\n            }\n\n          } else {\n            view.selectNodes(sourceSetting, nodes);\n            setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);\n          }\n        }\n\n        doc.bind(\"selectstart\", _docSelect);\n\n        function _docSelect() {\n          return false;\n        }\n\n        // 2018-03-30 FireFox has fixed this issue.\n        //Avoid FireFox's Bug\n        //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.\n        // if(eventMouseDown.preventDefault) {\n        // \teventMouseDown.preventDefault();\n        // }\n        return true;\n      }\n    },\n    //method of tools for zTree\n    _tools = {\n      getAbs: function (obj) {\n        var oRect = obj.getBoundingClientRect(),\n          scrollTop = document.body.scrollTop + document.documentElement.scrollTop,\n          scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n        return [oRect.left + scrollLeft, oRect.top + scrollTop];\n      },\n      inputFocus: function (inputObj) {\n        if (inputObj.get(0)) {\n          inputObj.focus();\n          tools.setCursorPosition(inputObj.get(0), inputObj.val().length);\n        }\n      },\n      inputSelect: function (inputObj) {\n        if (inputObj.get(0)) {\n          inputObj.focus();\n          inputObj.select();\n        }\n      },\n      setCursorPosition: function (obj, pos) {\n        if (obj.setSelectionRange) {\n          obj.focus();\n          obj.setSelectionRange(pos, pos);\n        } else if (obj.createTextRange) {\n          var range = obj.createTextRange();\n          range.collapse(true);\n          range.moveEnd('character', pos);\n          range.moveStart('character', pos);\n          range.select();\n        }\n      },\n      showIfameMask: function (setting, showSign) {\n        var root = data.getRoot(setting);\n        //clear full mask\n        while (root.dragMaskList.length > 0) {\n          root.dragMaskList[0].remove();\n          root.dragMaskList.shift();\n        }\n        if (showSign) {\n          //show mask\n          var iframeList = $$(\"iframe\", setting);\n          for (var i = 0, l = iframeList.length; i < l; i++) {\n            var obj = iframeList.get(i),\n              r = tools.getAbs(obj),\n              dragMask = $$(\"<div id='zTreeMask_\" + i + \"' class='zTreeMask' style='top:\" + r[1] + \"px; left:\" + r[0] + \"px; width:\" + obj.offsetWidth + \"px; height:\" + obj.offsetHeight + \"px;'></div>\", setting);\n            dragMask.appendTo($$(\"body\", setting));\n            root.dragMaskList.push(dragMask);\n          }\n        }\n      }\n    },\n    //method of operate ztree dom\n    _view = {\n      addEditBtn: function (setting, node) {\n        if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {\n          return;\n        }\n        if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {\n          return;\n        }\n        var aObj = $$(node, consts.id.A, setting),\n          editStr = \"<span class='\" + consts.className.BUTTON + \" edit' id='\" + node.tId + consts.id.EDIT + \"' title='\" + tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle) + \"' treeNode\" + consts.id.EDIT + \" style='display:none;'></span>\";\n        aObj.append(editStr);\n\n        $$(node, consts.id.EDIT, setting).bind('click',\n          function () {\n            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;\n            view.editNode(setting, node);\n            return false;\n          }\n        ).show();\n      },\n      addRemoveBtn: function (setting, node) {\n        if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {\n          return;\n        }\n        if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {\n          return;\n        }\n        var aObj = $$(node, consts.id.A, setting),\n          removeStr = \"<span class='\" + consts.className.BUTTON + \" remove' id='\" + node.tId + consts.id.REMOVE + \"' title='\" + tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle) + \"' treeNode\" + consts.id.REMOVE + \" style='display:none;'></span>\";\n        aObj.append(removeStr);\n\n        $$(node, consts.id.REMOVE, setting).bind('click',\n          function () {\n            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;\n            view.removeNode(setting, node);\n            setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n            return false;\n          }\n        ).bind('mousedown',\n          function (eventMouseDown) {\n            return true;\n          }\n        ).show();\n      },\n      addHoverDom: function (setting, node) {\n        if (data.getRoots().showHoverDom) {\n          node.isHover = true;\n          if (setting.edit.enable) {\n            view.addEditBtn(setting, node);\n            view.addRemoveBtn(setting, node);\n          }\n          tools.apply(setting.view.addHoverDom, [setting.treeId, node]);\n        }\n      },\n      cancelCurEditNode: function (setting, forceName, isCancel) {\n        var root = data.getRoot(setting),\n          node = root.curEditNode;\n\n        if (node) {\n          var inputObj = root.curEditInput,\n            newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());\n          if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {\n            return false;\n          }\n          data.nodeName(setting, node, newName);\n          var aObj = $$(node, consts.id.A, setting);\n          aObj.removeClass(consts.node.CURSELECTED_EDIT);\n          inputObj.unbind();\n          view.setNodeName(setting, node);\n          node.editNameFlag = false;\n          root.curEditNode = null;\n          root.curEditInput = null;\n          view.selectNode(setting, node, false);\n          setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);\n        }\n        root.noSelection = true;\n        return true;\n      },\n      editNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        view.editNodeBlur = false;\n        if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n          setTimeout(function () {\n            tools.inputFocus(root.curEditInput);\n          }, 0);\n          return;\n        }\n        node.editNameFlag = true;\n        view.removeTreeDom(setting, node);\n        view.cancelCurEditNode(setting);\n        view.selectNode(setting, node, false);\n        $$(node, consts.id.SPAN, setting).html(\"<input type=text class='rename' id='\" + node.tId + consts.id.INPUT + \"' treeNode\" + consts.id.INPUT + \" >\");\n        var inputObj = $$(node, consts.id.INPUT, setting);\n        inputObj.attr(\"value\", data.nodeName(setting, node));\n        if (setting.edit.editNameSelectAll) {\n          tools.inputSelect(inputObj);\n        } else {\n          tools.inputFocus(inputObj);\n        }\n\n        inputObj.bind('blur', function (event) {\n          if (!view.editNodeBlur) {\n            view.cancelCurEditNode(setting);\n          }\n        }).bind('keydown', function (event) {\n          if (event.keyCode == \"13\") {\n            view.editNodeBlur = true;\n            view.cancelCurEditNode(setting);\n          } else if (event.keyCode == \"27\") {\n            view.cancelCurEditNode(setting, null, true);\n          }\n        }).bind('click', function (event) {\n          return false;\n        }).bind('dblclick', function (event) {\n          return false;\n        });\n\n        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);\n        root.curEditInput = inputObj;\n        root.noSelection = false;\n        root.curEditNode = node;\n      },\n      moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {\n        var root = data.getRoot(setting);\n        if (targetNode == node) return;\n        if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;\n        var oldParentNode = (node.parentTId ? node.getParentNode() : root),\n          targetNodeIsRoot = (targetNode === null || targetNode == root);\n        if (targetNodeIsRoot && targetNode === null) targetNode = root;\n        if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;\n        var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);\n\n        if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {\n          moveType = consts.move.TYPE_INNER;\n        }\n\n        if (moveType == consts.move.TYPE_INNER) {\n          if (targetNodeIsRoot) {\n            //parentTId of root node is null\n            node.parentTId = null;\n          } else {\n            if (!data.nodeIsParent(setting, targetNode)) {\n              data.nodeIsParent(setting, targetNode, true);\n              targetNode.open = !!targetNode.open;\n              view.setNodeLineIcos(setting, targetNode);\n            }\n            node.parentTId = targetNode.tId;\n          }\n        }\n\n        //move node Dom\n        var targetObj, target_ulObj;\n        if (targetNodeIsRoot) {\n          targetObj = setting.treeObj;\n          target_ulObj = targetObj;\n        } else {\n          if (!isSilent && moveType == consts.move.TYPE_INNER) {\n            view.expandCollapseNode(setting, targetNode, true, false);\n          } else if (!isSilent) {\n            view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);\n          }\n          targetObj = $$(targetNode, setting);\n          target_ulObj = $$(targetNode, consts.id.UL, setting);\n          if (!!targetObj.get(0) && !target_ulObj.get(0)) {\n            var ulstr = [];\n            view.makeUlHtml(setting, targetNode, ulstr, '');\n            targetObj.append(ulstr.join(''));\n          }\n          target_ulObj = $$(targetNode, consts.id.UL, setting);\n        }\n        var nodeDom = $$(node, setting);\n        if (!nodeDom.get(0)) {\n          nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');\n        } else if (!targetObj.get(0)) {\n          nodeDom.remove();\n        }\n        if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {\n          target_ulObj.append(nodeDom);\n        } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {\n          targetObj.before(nodeDom);\n        } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {\n          targetObj.after(nodeDom);\n        }\n\n        //repair the data after move\n        var i, l,\n          tmpSrcIndex = -1,\n          tmpTargetIndex = 0,\n          oldNeighbor = null,\n          newNeighbor = null,\n          oldLevel = node.level;\n        var oldChildren = data.nodeChildren(setting, oldParentNode);\n        var targetParentChildren = data.nodeChildren(setting, targetParentNode);\n        var targetChildren = data.nodeChildren(setting, targetNode);\n        if (node.isFirstNode) {\n          tmpSrcIndex = 0;\n          if (oldChildren.length > 1) {\n            oldNeighbor = oldChildren[1];\n            oldNeighbor.isFirstNode = true;\n          }\n        } else if (node.isLastNode) {\n          tmpSrcIndex = oldChildren.length - 1;\n          oldNeighbor = oldChildren[tmpSrcIndex - 1];\n          oldNeighbor.isLastNode = true;\n        } else {\n          for (i = 0, l = oldChildren.length; i < l; i++) {\n            if (oldChildren[i].tId == node.tId) {\n              tmpSrcIndex = i;\n              break;\n            }\n          }\n        }\n        if (tmpSrcIndex >= 0) {\n          oldChildren.splice(tmpSrcIndex, 1);\n        }\n        if (moveType != consts.move.TYPE_INNER) {\n          for (i = 0, l = targetParentChildren.length; i < l; i++) {\n            if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;\n          }\n        }\n        if (moveType == consts.move.TYPE_INNER) {\n          if (!targetChildren) {\n            targetChildren = data.nodeChildren(setting, targetNode, []);\n          }\n          if (targetChildren.length > 0) {\n            newNeighbor = targetChildren[targetChildren.length - 1];\n            newNeighbor.isLastNode = false;\n          }\n          targetChildren.splice(targetChildren.length, 0, node);\n          node.isLastNode = true;\n          node.isFirstNode = (targetChildren.length == 1);\n        } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {\n          targetParentChildren.splice(tmpTargetIndex, 0, node);\n          newNeighbor = targetNode;\n          newNeighbor.isFirstNode = false;\n          node.parentTId = targetNode.parentTId;\n          node.isFirstNode = true;\n          node.isLastNode = false;\n\n        } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {\n          targetParentChildren.splice(tmpTargetIndex + 1, 0, node);\n          newNeighbor = targetNode;\n          newNeighbor.isLastNode = false;\n          node.parentTId = targetNode.parentTId;\n          node.isFirstNode = false;\n          node.isLastNode = true;\n\n        } else {\n          if (moveType == consts.move.TYPE_PREV) {\n            targetParentChildren.splice(tmpTargetIndex, 0, node);\n          } else {\n            targetParentChildren.splice(tmpTargetIndex + 1, 0, node);\n          }\n          node.parentTId = targetNode.parentTId;\n          node.isFirstNode = false;\n          node.isLastNode = false;\n        }\n        data.fixPIdKeyValue(setting, node);\n        data.setSonNodeLevel(setting, node.getParentNode(), node);\n\n        //repair node what been moved\n        view.setNodeLineIcos(setting, node);\n        view.repairNodeLevelClass(setting, node, oldLevel);\n\n        //repair node's old parentNode dom\n        if (!setting.data.keep.parent && oldChildren.length < 1) {\n          //old parentNode has no child nodes\n          data.nodeIsParent(setting, oldParentNode, false);\n          oldParentNode.open = false;\n          var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),\n            tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),\n            tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);\n          view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);\n          view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);\n          tmp_ulObj.css(\"display\", \"none\");\n\n        } else if (oldNeighbor) {\n          //old neigbor node\n          view.setNodeLineIcos(setting, oldNeighbor);\n        }\n\n        //new neigbor node\n        if (newNeighbor) {\n          view.setNodeLineIcos(setting, newNeighbor);\n        }\n\n        //repair checkbox / radio\n        if (!!setting.check && setting.check.enable && view.repairChkClass) {\n          view.repairChkClass(setting, oldParentNode);\n          view.repairParentChkClassWithSelf(setting, oldParentNode);\n          if (oldParentNode != node.parent)\n            view.repairParentChkClassWithSelf(setting, node);\n        }\n\n        //expand parents after move\n        if (!isSilent) {\n          view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);\n        }\n      },\n      removeEditBtn: function (setting, node) {\n        $$(node, consts.id.EDIT, setting).unbind().remove();\n      },\n      removeRemoveBtn: function (setting, node) {\n        $$(node, consts.id.REMOVE, setting).unbind().remove();\n      },\n      removeTreeDom: function (setting, node) {\n        node.isHover = false;\n        view.removeEditBtn(setting, node);\n        view.removeRemoveBtn(setting, node);\n        tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);\n      },\n      repairNodeLevelClass: function (setting, node, oldLevel) {\n        if (oldLevel === node.level) return;\n        var liObj = $$(node, setting),\n          aObj = $$(node, consts.id.A, setting),\n          ulObj = $$(node, consts.id.UL, setting),\n          oldClass = consts.className.LEVEL + oldLevel,\n          newClass = consts.className.LEVEL + node.level;\n        liObj.removeClass(oldClass);\n        liObj.addClass(newClass);\n        aObj.removeClass(oldClass);\n        aObj.addClass(newClass);\n        ulObj.removeClass(oldClass);\n        ulObj.addClass(newClass);\n      },\n      selectNodes: function (setting, nodes) {\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          view.selectNode(setting, nodes[i], i > 0);\n        }\n      }\n    },\n\n    _z = {\n      tools: _tools,\n      view: _view,\n      event: _event,\n      data: _data\n    };\n  $.extend(true, $.fn.zTree.consts, _consts);\n  $.extend(true, $.fn.zTree._z, _z);\n\n  var zt = $.fn.zTree,\n    tools = zt._z.tools,\n    consts = zt.consts,\n    view = zt._z.view,\n    data = zt._z.data,\n    event = zt._z.event,\n    $$ = tools.$;\n\n  data.exSetting(_setting);\n  data.addInitBind(_bindEvent);\n  data.addInitUnBind(_unbindEvent);\n  data.addInitCache(_initCache);\n  data.addInitNode(_initNode);\n  data.addInitProxy(_eventProxy);\n  data.addInitRoot(_initRoot);\n  data.addZTreeTools(_zTreeTools);\n\n  var _cancelPreSelectedNode = view.cancelPreSelectedNode;\n  view.cancelPreSelectedNode = function (setting, node) {\n    var list = data.getRoot(setting).curSelectedList;\n    for (var i = 0, j = list.length; i < j; i++) {\n      if (!node || node === list[i]) {\n        view.removeTreeDom(setting, list[i]);\n        if (node) break;\n      }\n    }\n    if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);\n  }\n\n  var _createNodes = view.createNodes;\n  view.createNodes = function (setting, level, nodes, parentNode, index) {\n    if (_createNodes) {\n      _createNodes.apply(view, arguments);\n    }\n    if (!nodes) return;\n    if (view.repairParentChkClassWithSelf) {\n      view.repairParentChkClassWithSelf(setting, parentNode);\n    }\n  }\n\n  var _makeNodeUrl = view.makeNodeUrl;\n  view.makeNodeUrl = function (setting, node) {\n    return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));\n  }\n\n  var _removeNode = view.removeNode;\n  view.removeNode = function (setting, node) {\n    var root = data.getRoot(setting);\n    if (root.curEditNode === node) root.curEditNode = null;\n    if (_removeNode) {\n      _removeNode.apply(view, arguments);\n    }\n  }\n\n  var _selectNode = view.selectNode;\n  view.selectNode = function (setting, node, addFlag) {\n    var root = data.getRoot(setting);\n    if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n      return false;\n    }\n    if (_selectNode) _selectNode.apply(view, arguments);\n    view.addHoverDom(setting, node);\n    return true;\n  }\n\n  var _uCanDo = tools.uCanDo;\n  tools.uCanDo = function (setting, e) {\n    var root = data.getRoot(setting);\n    if (e && (tools.eqs(e.type, \"mouseover\") || tools.eqs(e.type, \"mouseout\") || tools.eqs(e.type, \"mousedown\") || tools.eqs(e.type, \"mouseup\"))) {\n      return true;\n    }\n    if (root.curEditNode) {\n      view.editNodeBlur = false;\n      root.curEditInput.focus();\n    }\n    return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);\n  }\n})(jQuery);\n"
  },
  {
    "path": "lib/zTree_v3/js/jquery.ztree.core.js",
    "content": "/*\n * JQuery zTree core v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  var settings = {}, roots = {}, caches = {},\n    //default consts of core\n    _consts = {\n      className: {\n        BUTTON: \"button\",\n        LEVEL: \"level\",\n        ICO_LOADING: \"ico_loading\",\n        SWITCH: \"switch\",\n        NAME: 'node_name'\n      },\n      event: {\n        NODECREATED: \"ztree_nodeCreated\",\n        CLICK: \"ztree_click\",\n        EXPAND: \"ztree_expand\",\n        COLLAPSE: \"ztree_collapse\",\n        ASYNC_SUCCESS: \"ztree_async_success\",\n        ASYNC_ERROR: \"ztree_async_error\",\n        REMOVE: \"ztree_remove\",\n        SELECTED: \"ztree_selected\",\n        UNSELECTED: \"ztree_unselected\"\n      },\n      id: {\n        A: \"_a\",\n        ICON: \"_ico\",\n        SPAN: \"_span\",\n        SWITCH: \"_switch\",\n        UL: \"_ul\"\n      },\n      line: {\n        ROOT: \"root\",\n        ROOTS: \"roots\",\n        CENTER: \"center\",\n        BOTTOM: \"bottom\",\n        NOLINE: \"noline\",\n        LINE: \"line\"\n      },\n      folder: {\n        OPEN: \"open\",\n        CLOSE: \"close\",\n        DOCU: \"docu\"\n      },\n      node: {\n        CURSELECTED: \"curSelectedNode\"\n      }\n    },\n    //default setting of core\n    _setting = {\n      treeId: \"\",\n      treeObj: null,\n      view: {\n        addDiyDom: null,\n        autoCancelSelected: true,\n        dblClickExpand: true,\n        expandSpeed: \"fast\",\n        fontCss: {},\n        nameIsHTML: false,\n        selectedMulti: true,\n        showIcon: true,\n        showLine: true,\n        showTitle: true,\n        txtSelectedEnable: false\n      },\n      data: {\n        key: {\n          isParent: \"isParent\",\n          children: \"children\",\n          name: \"name\",\n          title: \"\",\n          url: \"url\",\n          icon: \"icon\"\n        },\n        simpleData: {\n          enable: false,\n          idKey: \"id\",\n          pIdKey: \"pId\",\n          rootPId: null\n        },\n        keep: {\n          parent: false,\n          leaf: false\n        }\n      },\n      async: {\n        enable: false,\n        contentType: \"application/x-www-form-urlencoded\",\n        type: \"post\",\n        dataType: \"text\",\n        headers: {},\n        xhrFields: {},\n        url: \"\",\n        autoParam: [],\n        otherParam: [],\n        dataFilter: null\n      },\n      callback: {\n        beforeAsync: null,\n        beforeClick: null,\n        beforeDblClick: null,\n        beforeRightClick: null,\n        beforeMouseDown: null,\n        beforeMouseUp: null,\n        beforeExpand: null,\n        beforeCollapse: null,\n        beforeRemove: null,\n\n        onAsyncError: null,\n        onAsyncSuccess: null,\n        onNodeCreated: null,\n        onClick: null,\n        onDblClick: null,\n        onRightClick: null,\n        onMouseDown: null,\n        onMouseUp: null,\n        onExpand: null,\n        onCollapse: null,\n        onRemove: null\n      }\n    },\n    //default root of core\n    //zTree use root to save full data\n    _initRoot = function (setting) {\n      var r = data.getRoot(setting);\n      if (!r) {\n        r = {};\n        data.setRoot(setting, r);\n      }\n      data.nodeChildren(setting, r, []);\n      r.expandTriggerFlag = false;\n      r.curSelectedList = [];\n      r.noSelection = true;\n      r.createdNodes = [];\n      r.zId = 0;\n      r._ver = (new Date()).getTime();\n    },\n    //default cache of core\n    _initCache = function (setting) {\n      var c = data.getCache(setting);\n      if (!c) {\n        c = {};\n        data.setCache(setting, c);\n      }\n      c.nodes = [];\n      c.doms = [];\n    },\n    //default bindEvent of core\n    _bindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.bind(c.NODECREATED, function (event, treeId, node) {\n        tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);\n      });\n\n      o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {\n        tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);\n      });\n\n      o.bind(c.EXPAND, function (event, treeId, node) {\n        tools.apply(setting.callback.onExpand, [event, treeId, node]);\n      });\n\n      o.bind(c.COLLAPSE, function (event, treeId, node) {\n        tools.apply(setting.callback.onCollapse, [event, treeId, node]);\n      });\n\n      o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {\n        tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);\n      });\n\n      o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {\n        tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n      });\n\n      o.bind(c.REMOVE, function (event, treeId, treeNode) {\n        tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);\n      });\n\n      o.bind(c.SELECTED, function (event, treeId, node) {\n        tools.apply(setting.callback.onSelected, [treeId, node]);\n      });\n      o.bind(c.UNSELECTED, function (event, treeId, node) {\n        tools.apply(setting.callback.onUnSelected, [treeId, node]);\n      });\n    },\n    _unbindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.unbind(c.NODECREATED)\n        .unbind(c.CLICK)\n        .unbind(c.EXPAND)\n        .unbind(c.COLLAPSE)\n        .unbind(c.ASYNC_SUCCESS)\n        .unbind(c.ASYNC_ERROR)\n        .unbind(c.REMOVE)\n        .unbind(c.SELECTED)\n        .unbind(c.UNSELECTED);\n    },\n    //default event proxy of core\n    _eventProxy = function (event) {\n      var target = event.target,\n        setting = data.getSetting(event.data.treeId),\n        tId = \"\", node = null,\n        nodeEventType = \"\", treeEventType = \"\",\n        nodeEventCallback = null, treeEventCallback = null,\n        tmp = null;\n\n      if (tools.eqs(event.type, \"mousedown\")) {\n        treeEventType = \"mousedown\";\n      } else if (tools.eqs(event.type, \"mouseup\")) {\n        treeEventType = \"mouseup\";\n      } else if (tools.eqs(event.type, \"contextmenu\")) {\n        treeEventType = \"contextmenu\";\n      } else if (tools.eqs(event.type, \"click\")) {\n        if (tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.SWITCH) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"switchNode\";\n        } else {\n          tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n          if (tmp) {\n            tId = tools.getNodeMainDom(tmp).id;\n            nodeEventType = \"clickNode\";\n          }\n        }\n      } else if (tools.eqs(event.type, \"dblclick\")) {\n        treeEventType = \"dblclick\";\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n          nodeEventType = \"switchNode\";\n        }\n      }\n      if (treeEventType.length > 0 && tId.length == 0) {\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n        }\n      }\n      // event to node\n      if (tId.length > 0) {\n        node = data.getNodeCache(setting, tId);\n        switch (nodeEventType) {\n          case \"switchNode\" :\n            var isParent = data.nodeIsParent(setting, node);\n            if (!isParent) {\n              nodeEventType = \"\";\n            } else if (tools.eqs(event.type, \"click\")\n              || (tools.eqs(event.type, \"dblclick\") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {\n              nodeEventCallback = handler.onSwitchNode;\n            } else {\n              nodeEventType = \"\";\n            }\n            break;\n          case \"clickNode\" :\n            nodeEventCallback = handler.onClickNode;\n            break;\n        }\n      }\n      // event to zTree\n      switch (treeEventType) {\n        case \"mousedown\" :\n          treeEventCallback = handler.onZTreeMousedown;\n          break;\n        case \"mouseup\" :\n          treeEventCallback = handler.onZTreeMouseup;\n          break;\n        case \"dblclick\" :\n          treeEventCallback = handler.onZTreeDblclick;\n          break;\n        case \"contextmenu\" :\n          treeEventCallback = handler.onZTreeContextmenu;\n          break;\n      }\n      var proxyResult = {\n        stop: false,\n        node: node,\n        nodeEventType: nodeEventType,\n        nodeEventCallback: nodeEventCallback,\n        treeEventType: treeEventType,\n        treeEventCallback: treeEventCallback\n      };\n      return proxyResult\n    },\n    //default init node of core\n    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      if (!n) return;\n      var r = data.getRoot(setting),\n        children = data.nodeChildren(setting, n);\n      n.level = level;\n      n.tId = setting.treeId + \"_\" + (++r.zId);\n      n.parentTId = parentNode ? parentNode.tId : null;\n      n.open = (typeof n.open == \"string\") ? tools.eqs(n.open, \"true\") : !!n.open;\n      var isParent = data.nodeIsParent(setting, n);\n      if (tools.isArray(children)) {\n        data.nodeIsParent(setting, n, true);\n        n.zAsync = true;\n      } else {\n        isParent = data.nodeIsParent(setting, n, isParent);\n        n.open = (isParent && !setting.async.enable) ? n.open : false;\n        n.zAsync = !isParent;\n      }\n      n.isFirstNode = isFirstNode;\n      n.isLastNode = isLastNode;\n      n.getParentNode = function () {\n        return data.getNodeCache(setting, n.parentTId);\n      };\n      n.getPreNode = function () {\n        return data.getPreNode(setting, n);\n      };\n      n.getNextNode = function () {\n        return data.getNextNode(setting, n);\n      };\n      n.getIndex = function () {\n        return data.getNodeIndex(setting, n);\n      };\n      n.getPath = function () {\n        return data.getNodePath(setting, n);\n      };\n      n.isAjaxing = false;\n      data.fixPIdKeyValue(setting, n);\n    },\n    _init = {\n      bind: [_bindEvent],\n      unbind: [_unbindEvent],\n      caches: [_initCache],\n      nodes: [_initNode],\n      proxys: [_eventProxy],\n      roots: [_initRoot],\n      beforeA: [],\n      afterA: [],\n      innerBeforeA: [],\n      innerAfterA: [],\n      zTreeTools: []\n    },\n    //method of operate data\n    data = {\n      addNodeCache: function (setting, node) {\n        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;\n      },\n      getNodeCacheId: function (tId) {\n        return tId.substring(tId.lastIndexOf(\"_\") + 1);\n      },\n      addAfterA: function (afterA) {\n        _init.afterA.push(afterA);\n      },\n      addBeforeA: function (beforeA) {\n        _init.beforeA.push(beforeA);\n      },\n      addInnerAfterA: function (innerAfterA) {\n        _init.innerAfterA.push(innerAfterA);\n      },\n      addInnerBeforeA: function (innerBeforeA) {\n        _init.innerBeforeA.push(innerBeforeA);\n      },\n      addInitBind: function (bindEvent) {\n        _init.bind.push(bindEvent);\n      },\n      addInitUnBind: function (unbindEvent) {\n        _init.unbind.push(unbindEvent);\n      },\n      addInitCache: function (initCache) {\n        _init.caches.push(initCache);\n      },\n      addInitNode: function (initNode) {\n        _init.nodes.push(initNode);\n      },\n      addInitProxy: function (initProxy, isFirst) {\n        if (!!isFirst) {\n          _init.proxys.splice(0, 0, initProxy);\n        } else {\n          _init.proxys.push(initProxy);\n        }\n      },\n      addInitRoot: function (initRoot) {\n        _init.roots.push(initRoot);\n      },\n      addNodesData: function (setting, parentNode, index, nodes) {\n        var children = data.nodeChildren(setting, parentNode), params;\n        if (!children) {\n          children = data.nodeChildren(setting, parentNode, []);\n          index = -1;\n        } else if (index >= children.length) {\n          index = -1;\n        }\n\n        if (children.length > 0 && index === 0) {\n          children[0].isFirstNode = false;\n          view.setNodeLineIcos(setting, children[0]);\n        } else if (children.length > 0 && index < 0) {\n          children[children.length - 1].isLastNode = false;\n          view.setNodeLineIcos(setting, children[children.length - 1]);\n        }\n        data.nodeIsParent(setting, parentNode, true);\n\n        if (index < 0) {\n          data.nodeChildren(setting, parentNode, children.concat(nodes));\n        } else {\n          params = [index, 0].concat(nodes);\n          children.splice.apply(children, params);\n        }\n      },\n      addSelectedNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        if (!data.isSelectedNode(setting, node)) {\n          root.curSelectedList.push(node);\n        }\n      },\n      addCreatedNode: function (setting, node) {\n        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n          var root = data.getRoot(setting);\n          root.createdNodes.push(node);\n        }\n      },\n      addZTreeTools: function (zTreeTools) {\n        _init.zTreeTools.push(zTreeTools);\n      },\n      exSetting: function (s) {\n        $.extend(true, _setting, s);\n      },\n      fixPIdKeyValue: function (setting, node) {\n        if (setting.data.simpleData.enable) {\n          node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;\n        }\n      },\n      getAfterA: function (setting, node, array) {\n        for (var i = 0, j = _init.afterA.length; i < j; i++) {\n          _init.afterA[i].apply(this, arguments);\n        }\n      },\n      getBeforeA: function (setting, node, array) {\n        for (var i = 0, j = _init.beforeA.length; i < j; i++) {\n          _init.beforeA[i].apply(this, arguments);\n        }\n      },\n      getInnerAfterA: function (setting, node, array) {\n        for (var i = 0, j = _init.innerAfterA.length; i < j; i++) {\n          _init.innerAfterA[i].apply(this, arguments);\n        }\n      },\n      getInnerBeforeA: function (setting, node, array) {\n        for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) {\n          _init.innerBeforeA[i].apply(this, arguments);\n        }\n      },\n      getCache: function (setting) {\n        return caches[setting.treeId];\n      },\n      getNodeIndex: function (setting, node) {\n        if (!node) return null;\n        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),\n          children = data.nodeChildren(setting, p);\n        for (var i = 0, l = children.length - 1; i <= l; i++) {\n          if (children[i] === node) {\n            return i;\n          }\n        }\n        return -1;\n      },\n      getNextNode: function (setting, node) {\n        if (!node) return null;\n        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),\n          children = data.nodeChildren(setting, p);\n        for (var i = 0, l = children.length - 1; i <= l; i++) {\n          if (children[i] === node) {\n            return (i == l ? null : children[i + 1]);\n          }\n        }\n        return null;\n      },\n      getNodeByParam: function (setting, nodes, key, value) {\n        if (!nodes || !key) return null;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (node[key] == value) {\n            return nodes[i];\n          }\n          var children = data.nodeChildren(setting, node);\n          var tmp = data.getNodeByParam(setting, children, key, value);\n          if (tmp) return tmp;\n        }\n        return null;\n      },\n      getNodeCache: function (setting, tId) {\n        if (!tId) return null;\n        var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];\n        return n ? n : null;\n      },\n      getNodePath: function (setting, node) {\n        if (!node) return null;\n\n        var path;\n        if (node.parentTId) {\n          path = node.getParentNode().getPath();\n        } else {\n          path = [];\n        }\n\n        if (path) {\n          path.push(node);\n        }\n\n        return path;\n      },\n      getNodes: function (setting) {\n        return data.nodeChildren(setting, data.getRoot(setting));\n      },\n      getNodesByParam: function (setting, nodes, key, value) {\n        if (!nodes || !key) return [];\n        var result = [];\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (node[key] == value) {\n            result.push(node);\n          }\n          var children = data.nodeChildren(setting, node);\n          result = result.concat(data.getNodesByParam(setting, children, key, value));\n        }\n        return result;\n      },\n      getNodesByParamFuzzy: function (setting, nodes, key, value) {\n        if (!nodes || !key) return [];\n        var result = [];\n        value = value.toLowerCase();\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (typeof node[key] == \"string\" && nodes[i][key].toLowerCase().indexOf(value) > -1) {\n            result.push(node);\n          }\n          var children = data.nodeChildren(setting, node);\n          result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value));\n        }\n        return result;\n      },\n      getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) {\n        if (!nodes) return (isSingle ? null : []);\n        var result = isSingle ? null : [];\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (tools.apply(filter, [node, invokeParam], false)) {\n            if (isSingle) {\n              return node;\n            }\n            result.push(node);\n          }\n          var children = data.nodeChildren(setting, node);\n          var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam);\n          if (isSingle && !!tmpResult) {\n            return tmpResult;\n          }\n          result = isSingle ? tmpResult : result.concat(tmpResult);\n        }\n        return result;\n      },\n      getPreNode: function (setting, node) {\n        if (!node) return null;\n        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),\n          children = data.nodeChildren(setting, p);\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i] === node) {\n            return (i == 0 ? null : children[i - 1]);\n          }\n        }\n        return null;\n      },\n      getRoot: function (setting) {\n        return setting ? roots[setting.treeId] : null;\n      },\n      getRoots: function () {\n        return roots;\n      },\n      getSetting: function (treeId) {\n        return settings[treeId];\n      },\n      getSettings: function () {\n        return settings;\n      },\n      getZTreeTools: function (treeId) {\n        var r = this.getRoot(this.getSetting(treeId));\n        return r ? r.treeTools : null;\n      },\n      initCache: function (setting) {\n        for (var i = 0, j = _init.caches.length; i < j; i++) {\n          _init.caches[i].apply(this, arguments);\n        }\n      },\n      initNode: function (setting, level, node, parentNode, preNode, nextNode) {\n        for (var i = 0, j = _init.nodes.length; i < j; i++) {\n          _init.nodes[i].apply(this, arguments);\n        }\n      },\n      initRoot: function (setting) {\n        for (var i = 0, j = _init.roots.length; i < j; i++) {\n          _init.roots[i].apply(this, arguments);\n        }\n      },\n      isSelectedNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {\n          if (node === root.curSelectedList[i]) return true;\n        }\n        return false;\n      },\n      nodeChildren: function (setting, node, newChildren) {\n        if (!node) {\n          return null;\n        }\n        var key = setting.data.key.children;\n        if (typeof newChildren !== 'undefined') {\n          node[key] = newChildren;\n        }\n        return node[key];\n      },\n      nodeIsParent: function (setting, node, newIsParent) {\n        if (!node) {\n          return false;\n        }\n        var key = setting.data.key.isParent;\n        if (typeof newIsParent !== 'undefined') {\n          if (typeof newIsParent === \"string\") {\n            newIsParent = tools.eqs(newIsParent, \"true\");\n          }\n          newIsParent = !!newIsParent;\n          node[key] = newIsParent;\n        } else if (typeof node[key] == \"string\"){\n          node[key] = tools.eqs(node[key], \"true\");\n        } else {\n          node[key] = !!node[key];\n        }\n        return node[key];\n      },\n      nodeName: function (setting, node, newName) {\n        var key = setting.data.key.name;\n        if (typeof newName !== 'undefined') {\n          node[key] = newName;\n        }\n        return \"\" + node[key];\n      },\n      nodeTitle: function (setting, node) {\n        var t = setting.data.key.title === \"\" ? setting.data.key.name : setting.data.key.title;\n        return \"\" + node[t];\n      },\n      removeNodeCache: function (setting, node) {\n        var children = data.nodeChildren(setting, node);\n        if (children) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            data.removeNodeCache(setting, children[i]);\n          }\n        }\n        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;\n      },\n      removeSelectedNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {\n          if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {\n            root.curSelectedList.splice(i, 1);\n            setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);\n            i--;\n            j--;\n          }\n        }\n      },\n      setCache: function (setting, cache) {\n        caches[setting.treeId] = cache;\n      },\n      setRoot: function (setting, root) {\n        roots[setting.treeId] = root;\n      },\n      setZTreeTools: function (setting, zTreeTools) {\n        for (var i = 0, j = _init.zTreeTools.length; i < j; i++) {\n          _init.zTreeTools[i].apply(this, arguments);\n        }\n      },\n      transformToArrayFormat: function (setting, nodes) {\n        if (!nodes) return [];\n        var r = [];\n        if (tools.isArray(nodes)) {\n          for (var i = 0, l = nodes.length; i < l; i++) {\n            var node = nodes[i];\n            _do(node);\n          }\n        } else {\n          _do(nodes);\n        }\n        return r;\n\n        function _do(_node) {\n          r.push(_node);\n          var children = data.nodeChildren(setting, _node);\n          if (children) {\n            r = r.concat(data.transformToArrayFormat(setting, children));\n          }\n        }\n      },\n      transformTozTreeFormat: function (setting, sNodes) {\n        var i, l,\n          key = setting.data.simpleData.idKey,\n          parentKey = setting.data.simpleData.pIdKey;\n        if (!key || key == \"\" || !sNodes) return [];\n\n        if (tools.isArray(sNodes)) {\n          var r = [];\n          var tmpMap = {};\n          for (i = 0, l = sNodes.length; i < l; i++) {\n            tmpMap[sNodes[i][key]] = sNodes[i];\n          }\n          for (i = 0, l = sNodes.length; i < l; i++) {\n            var p = tmpMap[sNodes[i][parentKey]];\n            if (p && sNodes[i][key] != sNodes[i][parentKey]) {\n              var children = data.nodeChildren(setting, p);\n              if (!children) {\n                children = data.nodeChildren(setting, p, []);\n              }\n              children.push(sNodes[i]);\n            } else {\n              r.push(sNodes[i]);\n            }\n          }\n          return r;\n        } else {\n          return [sNodes];\n        }\n      }\n    },\n    //method of event proxy\n    event = {\n      bindEvent: function (setting) {\n        for (var i = 0, j = _init.bind.length; i < j; i++) {\n          _init.bind[i].apply(this, arguments);\n        }\n      },\n      unbindEvent: function (setting) {\n        for (var i = 0, j = _init.unbind.length; i < j; i++) {\n          _init.unbind[i].apply(this, arguments);\n        }\n      },\n      bindTree: function (setting) {\n        var eventParam = {\n            treeId: setting.treeId\n          },\n          o = setting.treeObj;\n        if (!setting.view.txtSelectedEnable) {\n          // for can't select text\n          o.bind('selectstart', handler.onSelectStart).css({\n            \"-moz-user-select\": \"-moz-none\"\n          });\n        }\n        o.bind('click', eventParam, event.proxy);\n        o.bind('dblclick', eventParam, event.proxy);\n        o.bind('mouseover', eventParam, event.proxy);\n        o.bind('mouseout', eventParam, event.proxy);\n        o.bind('mousedown', eventParam, event.proxy);\n        o.bind('mouseup', eventParam, event.proxy);\n        o.bind('contextmenu', eventParam, event.proxy);\n      },\n      unbindTree: function (setting) {\n        var o = setting.treeObj;\n        o.unbind('selectstart', handler.onSelectStart)\n          .unbind('click', event.proxy)\n          .unbind('dblclick', event.proxy)\n          .unbind('mouseover', event.proxy)\n          .unbind('mouseout', event.proxy)\n          .unbind('mousedown', event.proxy)\n          .unbind('mouseup', event.proxy)\n          .unbind('contextmenu', event.proxy);\n      },\n      doProxy: function (e) {\n        var results = [];\n        for (var i = 0, j = _init.proxys.length; i < j; i++) {\n          var proxyResult = _init.proxys[i].apply(this, arguments);\n          results.push(proxyResult);\n          if (proxyResult.stop) {\n            break;\n          }\n        }\n        return results;\n      },\n      proxy: function (e) {\n        var setting = data.getSetting(e.data.treeId);\n        if (!tools.uCanDo(setting, e)) return true;\n        var results = event.doProxy(e),\n          r = true, x = false;\n        for (var i = 0, l = results.length; i < l; i++) {\n          var proxyResult = results[i];\n          if (proxyResult.nodeEventCallback) {\n            x = true;\n            r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n          }\n          if (proxyResult.treeEventCallback) {\n            x = true;\n            r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n          }\n        }\n        return r;\n      }\n    },\n    //method of event handler\n    handler = {\n      onSwitchNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (node.open) {\n          if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;\n          data.getRoot(setting).expandTriggerFlag = true;\n          view.switchNode(setting, node);\n        } else {\n          if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;\n          data.getRoot(setting).expandTriggerFlag = true;\n          view.switchNode(setting, node);\n        }\n        return true;\n      },\n      onClickNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId),\n          clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;\n        if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;\n        if (clickFlag === 0) {\n          view.cancelPreSelectedNode(setting, node);\n        } else {\n          view.selectNode(setting, node, clickFlag === 2);\n        }\n        setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);\n        return true;\n      },\n      onZTreeMousedown: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);\n        }\n        return true;\n      },\n      onZTreeMouseup: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);\n        }\n        return true;\n      },\n      onZTreeDblclick: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);\n        }\n        return true;\n      },\n      onZTreeContextmenu: function (event, node) {\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {\n          tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);\n        }\n        return (typeof setting.callback.onRightClick) != \"function\";\n      },\n      onSelectStart: function (e) {\n        var n = e.originalEvent.srcElement.nodeName.toLowerCase();\n        return (n === \"input\" || n === \"textarea\");\n      }\n    },\n    //method of tools for zTree\n    tools = {\n      apply: function (fun, param, defaultValue) {\n        if ((typeof fun) == \"function\") {\n          return fun.apply(zt, param ? param : []);\n        }\n        return defaultValue;\n      },\n      canAsync: function (setting, node) {\n        var children = data.nodeChildren(setting, node);\n        var isParent = data.nodeIsParent(setting, node);\n        return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0)));\n      },\n      clone: function (obj) {\n        if (obj === null) return null;\n        var o = tools.isArray(obj) ? [] : {};\n        for (var i in obj) {\n          o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === \"object\" ? tools.clone(obj[i]) : obj[i]);\n        }\n        return o;\n      },\n      eqs: function (str1, str2) {\n        return str1.toLowerCase() === str2.toLowerCase();\n      },\n      isArray: function (arr) {\n        return Object.prototype.toString.apply(arr) === \"[object Array]\";\n      },\n      isElement: function (o) {\n        return (\n          typeof HTMLElement === \"object\" ? o instanceof HTMLElement : //DOM2\n            o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\"\n        );\n      },\n      $: function (node, exp, setting) {\n        if (!!exp && typeof exp != \"string\") {\n          setting = exp;\n          exp = \"\";\n        }\n        if (typeof node == \"string\") {\n          return $(node, setting ? setting.treeObj.get(0).ownerDocument : null);\n        } else {\n          return $(\"#\" + node.tId + exp, setting ? setting.treeObj : null);\n        }\n      },\n      getMDom: function (setting, curDom, targetExpr) {\n        if (!curDom) return null;\n        while (curDom && curDom.id !== setting.treeId) {\n          for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) {\n            if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {\n              return curDom;\n            }\n          }\n          curDom = curDom.parentNode;\n        }\n        return null;\n      },\n      getNodeMainDom: function (target) {\n        return ($(target).parent(\"li\").get(0) || $(target).parentsUntil(\"li\").parent().get(0));\n      },\n      isChildOrSelf: function (dom, parentId) {\n        return ($(dom).closest(\"#\" + parentId).length > 0);\n      },\n      uCanDo: function (setting, e) {\n        return true;\n      }\n    },\n    //method of operate ztree dom\n    view = {\n      addNodes: function (setting, parentNode, index, newNodes, isSilent) {\n        var isParent = data.nodeIsParent(setting, parentNode);\n        if (setting.data.keep.leaf && parentNode && !isParent) {\n          return;\n        }\n        if (!tools.isArray(newNodes)) {\n          newNodes = [newNodes];\n        }\n        if (setting.data.simpleData.enable) {\n          newNodes = data.transformTozTreeFormat(setting, newNodes);\n        }\n        if (parentNode) {\n          var target_switchObj = $$(parentNode, consts.id.SWITCH, setting),\n            target_icoObj = $$(parentNode, consts.id.ICON, setting),\n            target_ulObj = $$(parentNode, consts.id.UL, setting);\n\n          if (!parentNode.open) {\n            view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);\n            view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);\n            parentNode.open = false;\n            target_ulObj.css({\n              \"display\": \"none\"\n            });\n          }\n\n          data.addNodesData(setting, parentNode, index, newNodes);\n          view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);\n          if (!isSilent) {\n            view.expandCollapseParentNode(setting, parentNode, true);\n          }\n        } else {\n          data.addNodesData(setting, data.getRoot(setting), index, newNodes);\n          view.createNodes(setting, 0, newNodes, null, index);\n        }\n      },\n      appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) {\n        if (!nodes) return [];\n        var html = [];\n\n        var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),\n          tmpPChild = data.nodeChildren(setting, tmpPNode),\n          isFirstNode, isLastNode;\n\n        if (!tmpPChild || index >= tmpPChild.length - nodes.length) {\n          index = -1;\n        }\n\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          if (initFlag) {\n            isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0));\n            isLastNode = (index < 0 && i == (nodes.length - 1));\n            data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);\n            data.addNodeCache(setting, node);\n          }\n          var isParent = data.nodeIsParent(setting, node);\n\n          var childHtml = [];\n          var children = data.nodeChildren(setting, node);\n          if (children && children.length > 0) {\n            //make child html first, because checkType\n            childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open);\n          }\n          if (openFlag) {\n            view.makeDOMNodeMainBefore(html, setting, node);\n            view.makeDOMNodeLine(html, setting, node);\n            data.getBeforeA(setting, node, html);\n            view.makeDOMNodeNameBefore(html, setting, node);\n            data.getInnerBeforeA(setting, node, html);\n            view.makeDOMNodeIcon(html, setting, node);\n            data.getInnerAfterA(setting, node, html);\n            view.makeDOMNodeNameAfter(html, setting, node);\n            data.getAfterA(setting, node, html);\n            if (isParent && node.open) {\n              view.makeUlHtml(setting, node, html, childHtml.join(''));\n            }\n            view.makeDOMNodeMainAfter(html, setting, node);\n            data.addCreatedNode(setting, node);\n          }\n        }\n        return html;\n      },\n      appendParentULDom: function (setting, node) {\n        var html = [],\n          nObj = $$(node, setting);\n        if (!nObj.get(0) && !!node.parentTId) {\n          view.appendParentULDom(setting, node.getParentNode());\n          nObj = $$(node, setting);\n        }\n        var ulObj = $$(node, consts.id.UL, setting);\n        if (ulObj.get(0)) {\n          ulObj.remove();\n        }\n        var children = data.nodeChildren(setting, node),\n          childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true);\n        view.makeUlHtml(setting, node, html, childHtml.join(''));\n        nObj.append(html.join(''));\n      },\n      asyncNode: function (setting, node, isSilent, callback) {\n        var i, l;\n        var isParent = data.nodeIsParent(setting, node);\n        if (node && !isParent) {\n          tools.apply(callback);\n          return false;\n        } else if (node && node.isAjaxing) {\n          return false;\n        } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {\n          tools.apply(callback);\n          return false;\n        }\n        if (node) {\n          node.isAjaxing = true;\n          var icoObj = $$(node, consts.id.ICON, setting);\n          icoObj.attr({\"style\": \"\", \"class\": consts.className.BUTTON + \" \" + consts.className.ICO_LOADING});\n        }\n\n        var tmpParam = {};\n        var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam);\n        for (i = 0, l = autoParam.length; node && i < l; i++) {\n          var pKey = autoParam[i].split(\"=\"), spKey = pKey;\n          if (pKey.length > 1) {\n            spKey = pKey[1];\n            pKey = pKey[0];\n          }\n          tmpParam[spKey] = node[pKey];\n        }\n        var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam);\n        if (tools.isArray(otherParam)) {\n          for (i = 0, l = otherParam.length; i < l; i += 2) {\n            tmpParam[otherParam[i]] = otherParam[i + 1];\n          }\n        } else {\n          for (var p in otherParam) {\n            tmpParam[p] = otherParam[p];\n          }\n        }\n\n        var _tmpV = data.getRoot(setting)._ver;\n        $.ajax({\n          contentType: setting.async.contentType,\n          cache: false,\n          type: setting.async.type,\n          url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),\n          data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,\n          dataType: setting.async.dataType,\n          headers: setting.async.headers,\n          xhrFields: setting.async.xhrFields,\n          success: function (msg) {\n            if (_tmpV != data.getRoot(setting)._ver) {\n              return;\n            }\n            var newNodes = [];\n            try {\n              if (!msg || msg.length == 0) {\n                newNodes = [];\n              } else if (typeof msg == \"string\") {\n                newNodes = eval(\"(\" + msg + \")\");\n              } else {\n                newNodes = msg;\n              }\n            } catch (err) {\n              newNodes = msg;\n            }\n\n            if (node) {\n              node.isAjaxing = null;\n              node.zAsync = true;\n            }\n            view.setNodeLineIcos(setting, node);\n            if (newNodes && newNodes !== \"\") {\n              newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);\n              view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);\n            } else {\n              view.addNodes(setting, node, -1, [], !!isSilent);\n            }\n            setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);\n            tools.apply(callback);\n          },\n          error: function (XMLHttpRequest, textStatus, errorThrown) {\n            if (_tmpV != data.getRoot(setting)._ver) {\n              return;\n            }\n            if (node) node.isAjaxing = null;\n            view.setNodeLineIcos(setting, node);\n            setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n          }\n        });\n        return true;\n      },\n      cancelPreSelectedNode: function (setting, node, excludeNode) {\n        var list = data.getRoot(setting).curSelectedList,\n          i, n;\n        for (i = list.length - 1; i >= 0; i--) {\n          n = list[i];\n          if (node === n || (!node && (!excludeNode || excludeNode !== n))) {\n            $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);\n            if (node) {\n              data.removeSelectedNode(setting, node);\n              break;\n            } else {\n              list.splice(i, 1);\n              setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);\n            }\n          }\n        }\n      },\n      createNodeCallback: function (setting) {\n        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n          var root = data.getRoot(setting);\n          while (root.createdNodes.length > 0) {\n            var node = root.createdNodes.shift();\n            tools.apply(setting.view.addDiyDom, [setting.treeId, node]);\n            if (!!setting.callback.onNodeCreated) {\n              setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);\n            }\n          }\n        }\n      },\n      createNodes: function (setting, level, nodes, parentNode, index) {\n        if (!nodes || nodes.length == 0) return;\n        var root = data.getRoot(setting),\n          openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0);\n        root.createdNodes = [];\n        var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),\n          parentObj, nextObj;\n\n        if (!parentNode) {\n          parentObj = setting.treeObj;\n          //setting.treeObj.append(zTreeHtml.join(''));\n        } else {\n          var ulObj = $$(parentNode, consts.id.UL, setting);\n          if (ulObj.get(0)) {\n            parentObj = ulObj;\n            //ulObj.append(zTreeHtml.join(''));\n          }\n        }\n        if (parentObj) {\n          if (index >= 0) {\n            nextObj = parentObj.children()[index];\n          }\n          if (index >= 0 && nextObj) {\n            $(nextObj).before(zTreeHtml.join(''));\n          } else {\n            parentObj.append(zTreeHtml.join(''));\n          }\n        }\n\n        view.createNodeCallback(setting);\n      },\n      destroy: function (setting) {\n        if (!setting) return;\n        data.initCache(setting);\n        data.initRoot(setting);\n        event.unbindTree(setting);\n        event.unbindEvent(setting);\n        setting.treeObj.empty();\n        delete settings[setting.treeId];\n      },\n      expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) {\n        var root = data.getRoot(setting);\n        var tmpCb, _callback;\n        if (!node) {\n          tools.apply(callback, []);\n          return;\n        }\n        var children = data.nodeChildren(setting, node);\n        var isParent = data.nodeIsParent(setting, node);\n        if (root.expandTriggerFlag) {\n          _callback = callback;\n          tmpCb = function () {\n            if (_callback) _callback();\n            if (node.open) {\n              setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);\n            } else {\n              setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);\n            }\n          };\n          callback = tmpCb;\n          root.expandTriggerFlag = false;\n        }\n        if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) {\n          view.appendParentULDom(setting, node);\n          view.createNodeCallback(setting);\n        }\n        if (node.open == expandFlag) {\n          tools.apply(callback, []);\n          return;\n        }\n        var ulObj = $$(node, consts.id.UL, setting),\n          switchObj = $$(node, consts.id.SWITCH, setting),\n          icoObj = $$(node, consts.id.ICON, setting);\n\n        if (isParent) {\n          node.open = !node.open;\n          if (node.iconOpen && node.iconClose) {\n            icoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n          }\n\n          if (node.open) {\n            view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);\n            view.replaceIcoClass(node, icoObj, consts.folder.OPEN);\n            if (animateFlag == false || setting.view.expandSpeed == \"\") {\n              ulObj.show();\n              tools.apply(callback, []);\n            } else {\n              if (children && children.length > 0) {\n                ulObj.slideDown(setting.view.expandSpeed, callback);\n              } else {\n                ulObj.show();\n                tools.apply(callback, []);\n              }\n            }\n          } else {\n            view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);\n            view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);\n            if (animateFlag == false || setting.view.expandSpeed == \"\" || !(children && children.length > 0)) {\n              ulObj.hide();\n              tools.apply(callback, []);\n            } else {\n              ulObj.slideUp(setting.view.expandSpeed, callback);\n            }\n          }\n        } else {\n          tools.apply(callback, []);\n        }\n      },\n      expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) {\n        if (!node) return;\n        if (!node.parentTId) {\n          view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n          return;\n        } else {\n          view.expandCollapseNode(setting, node, expandFlag, animateFlag);\n        }\n        if (node.parentTId) {\n          view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);\n        }\n      },\n      expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) {\n        var root = data.getRoot(setting),\n          treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root),\n          selfAnimateSign = (node) ? false : animateFlag,\n          expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;\n        data.getRoot(setting).expandTriggerFlag = false;\n        if (treeNodes) {\n          for (var i = 0, l = treeNodes.length; i < l; i++) {\n            if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);\n          }\n        }\n        data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;\n        view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n      },\n      isSelectedNode: function (setting, node) {\n        if (!node) {\n          return false;\n        }\n        var list = data.getRoot(setting).curSelectedList,\n          i;\n        for (i = list.length - 1; i >= 0; i--) {\n          if (node === list[i]) {\n            return true;\n          }\n        }\n        return false;\n      },\n      makeDOMNodeIcon: function (html, setting, node) {\n        var nameStr = data.nodeName(setting, node),\n          name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        html.push(\"<span id='\", node.tId, consts.id.ICON,\n          \"' title='' treeNode\", consts.id.ICON, \" class='\", view.makeNodeIcoClass(setting, node),\n          \"' style='\", view.makeNodeIcoStyle(setting, node), \"'></span><span id='\", node.tId, consts.id.SPAN,\n          \"' class='\", consts.className.NAME,\n          \"'>\", name, \"</span>\");\n      },\n      makeDOMNodeLine: function (html, setting, node) {\n        html.push(\"<span id='\", node.tId, consts.id.SWITCH, \"' title='' class='\", view.makeNodeLineClass(setting, node), \"' treeNode\", consts.id.SWITCH, \"></span>\");\n      },\n      makeDOMNodeMainAfter: function (html, setting, node) {\n        html.push(\"</li>\");\n      },\n      makeDOMNodeMainBefore: function (html, setting, node) {\n        html.push(\"<li id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level, \"' tabindex='0' hidefocus='true' treenode>\");\n      },\n      makeDOMNodeNameAfter: function (html, setting, node) {\n        html.push(\"</a>\");\n      },\n      makeDOMNodeNameBefore: function (html, setting, node) {\n        var title = data.nodeTitle(setting, node),\n          url = view.makeNodeUrl(setting, node),\n          fontcss = view.makeNodeFontCss(setting, node),\n          fontStyle = [];\n        for (var f in fontcss) {\n          fontStyle.push(f, \":\", fontcss[f], \";\");\n        }\n        html.push(\"<a id='\", node.tId, consts.id.A, \"' class='\", consts.className.LEVEL, node.level, \"' treeNode\", consts.id.A, \" onclick=\\\"\", (node.click || ''),\n          \"\\\" \", ((url != null && url.length > 0) ? \"href='\" + url + \"'\" : \"\"), \" target='\", view.makeNodeTarget(node), \"' style='\", fontStyle.join(''),\n          \"'\");\n        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {\n          html.push(\"title='\", title.replace(/'/g, \"&#39;\").replace(/</g, '&lt;').replace(/>/g, '&gt;'), \"'\");\n        }\n        html.push(\">\");\n      },\n      makeNodeFontCss: function (setting, node) {\n        var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);\n        return (fontCss && ((typeof fontCss) != \"function\")) ? fontCss : {};\n      },\n      makeNodeIcoClass: function (setting, node) {\n        var icoCss = [\"ico\"];\n        if (!node.isAjaxing) {\n          var isParent = data.nodeIsParent(setting, node);\n          icoCss[0] = (node.iconSkin ? node.iconSkin + \"_\" : \"\") + icoCss[0];\n          if (isParent) {\n            icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n          } else {\n            icoCss.push(consts.folder.DOCU);\n          }\n        }\n        return consts.className.BUTTON + \" \" + icoCss.join('_');\n      },\n      makeNodeIcoStyle: function (setting, node) {\n        var icoStyle = [];\n        if (!node.isAjaxing) {\n          var isParent = data.nodeIsParent(setting, node);\n          var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];\n          if (icon) icoStyle.push(\"background:url(\", icon, \") 0 0 no-repeat;\");\n          if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {\n            icoStyle.push(\"width:0px;height:0px;\");\n          }\n        }\n        return icoStyle.join('');\n      },\n      makeNodeLineClass: function (setting, node) {\n        var lineClass = [];\n        if (setting.view.showLine) {\n          if (node.level == 0 && node.isFirstNode && node.isLastNode) {\n            lineClass.push(consts.line.ROOT);\n          } else if (node.level == 0 && node.isFirstNode) {\n            lineClass.push(consts.line.ROOTS);\n          } else if (node.isLastNode) {\n            lineClass.push(consts.line.BOTTOM);\n          } else {\n            lineClass.push(consts.line.CENTER);\n          }\n        } else {\n          lineClass.push(consts.line.NOLINE);\n        }\n        if (data.nodeIsParent(setting, node)) {\n          lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n        } else {\n          lineClass.push(consts.folder.DOCU);\n        }\n        return view.makeNodeLineClassEx(node) + lineClass.join('_');\n      },\n      makeNodeLineClassEx: function (node) {\n        return consts.className.BUTTON + \" \" + consts.className.LEVEL + node.level + \" \" + consts.className.SWITCH + \" \";\n      },\n      makeNodeTarget: function (node) {\n        return (node.target || \"_blank\");\n      },\n      makeNodeUrl: function (setting, node) {\n        var urlKey = setting.data.key.url;\n        return node[urlKey] ? node[urlKey] : null;\n      },\n      makeUlHtml: function (setting, node, html, content) {\n        html.push(\"<ul id='\", node.tId, consts.id.UL, \"' class='\", consts.className.LEVEL, node.level, \" \", view.makeUlLineClass(setting, node), \"' style='display:\", (node.open ? \"block\" : \"none\"), \"'>\");\n        html.push(content);\n        html.push(\"</ul>\");\n      },\n      makeUlLineClass: function (setting, node) {\n        return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : \"\");\n      },\n      removeChildNodes: function (setting, node) {\n        if (!node) return;\n        var nodes = data.nodeChildren(setting, node);\n        if (!nodes) return;\n\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          data.removeNodeCache(setting, nodes[i]);\n        }\n        data.removeSelectedNode(setting);\n        delete node[setting.data.key.children];\n\n        if (!setting.data.keep.parent) {\n          data.nodeIsParent(setting, node, false);\n          node.open = false;\n          var tmp_switchObj = $$(node, consts.id.SWITCH, setting),\n            tmp_icoObj = $$(node, consts.id.ICON, setting);\n          view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);\n          view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);\n          $$(node, consts.id.UL, setting).remove();\n        } else {\n          $$(node, consts.id.UL, setting).empty();\n        }\n      },\n      scrollIntoView: function (setting, dom) {\n        if (!dom) {\n          return;\n        }\n        // support IE 7\n        if (typeof Element === 'undefined') {\n          var contRect = setting.treeObj.get(0).getBoundingClientRect(),\n            findMeRect = dom.getBoundingClientRect();\n          if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom\n            || findMeRect.right > contRect.right || findMeRect.left < contRect.left) {\n            dom.scrollIntoView();\n          }\n          return;\n        }\n        // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e\n        if (!Element.prototype.scrollIntoViewIfNeeded) {\n          Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {\n            \"use strict\";\n\n            function makeRange(start, length) {\n              return {\"start\": start, \"length\": length, \"end\": start + length};\n            }\n\n            function coverRange(inner, outer) {\n              if (\n                false === centerIfNeeded ||\n                (outer.start < inner.end && inner.start < outer.end)\n              ) {\n                return Math.max(\n                  inner.end - outer.length,\n                  Math.min(outer.start, inner.start)\n                );\n              }\n              return (inner.start + inner.end - outer.length) / 2;\n            }\n\n            function makePoint(x, y) {\n              return {\n                \"x\": x,\n                \"y\": y,\n                \"translate\": function translate(dX, dY) {\n                  return makePoint(x + dX, y + dY);\n                }\n              };\n            }\n\n            function absolute(elem, pt) {\n              while (elem) {\n                pt = pt.translate(elem.offsetLeft, elem.offsetTop);\n                elem = elem.offsetParent;\n              }\n              return pt;\n            }\n\n            var target = absolute(this, makePoint(0, 0)),\n              extent = makePoint(this.offsetWidth, this.offsetHeight),\n              elem = this.parentNode,\n              origin;\n\n            while (elem instanceof HTMLElement) {\n              // Apply desired scroll amount.\n              origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop));\n              elem.scrollLeft = coverRange(\n                makeRange(target.x - origin.x, extent.x),\n                makeRange(elem.scrollLeft, elem.clientWidth)\n              );\n              elem.scrollTop = coverRange(\n                makeRange(target.y - origin.y, extent.y),\n                makeRange(elem.scrollTop, elem.clientHeight)\n              );\n\n              // Determine actual scroll amount by reading back scroll properties.\n              target = target.translate(-elem.scrollLeft, -elem.scrollTop);\n              elem = elem.parentNode;\n            }\n          };\n        }\n        dom.scrollIntoViewIfNeeded();\n      },\n      setFirstNode: function (setting, parentNode) {\n        var children = data.nodeChildren(setting, parentNode);\n        if (children.length > 0) {\n          children[0].isFirstNode = true;\n        }\n      },\n      setLastNode: function (setting, parentNode) {\n        var children = data.nodeChildren(setting, parentNode);\n        if (children.length > 0) {\n          children[children.length - 1].isLastNode = true;\n        }\n      },\n      removeNode: function (setting, node) {\n        var root = data.getRoot(setting),\n          parentNode = (node.parentTId) ? node.getParentNode() : root;\n\n        node.isFirstNode = false;\n        node.isLastNode = false;\n        node.getPreNode = function () {\n          return null;\n        };\n        node.getNextNode = function () {\n          return null;\n        };\n\n        if (!data.getNodeCache(setting, node.tId)) {\n          return;\n        }\n\n        $$(node, setting).remove();\n        data.removeNodeCache(setting, node);\n        data.removeSelectedNode(setting, node);\n\n        var children = data.nodeChildren(setting, parentNode);\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i].tId == node.tId) {\n            children.splice(i, 1);\n            break;\n          }\n        }\n        view.setFirstNode(setting, parentNode);\n        view.setLastNode(setting, parentNode);\n\n        var tmp_ulObj, tmp_switchObj, tmp_icoObj,\n          childLength = children.length;\n\n        //repair nodes old parent\n        if (!setting.data.keep.parent && childLength == 0) {\n          //old parentNode has no child nodes\n          data.nodeIsParent(setting, parentNode, false);\n          parentNode.open = false;\n          delete parentNode[setting.data.key.children];\n          tmp_ulObj = $$(parentNode, consts.id.UL, setting);\n          tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);\n          tmp_icoObj = $$(parentNode, consts.id.ICON, setting);\n          view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);\n          view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);\n          tmp_ulObj.css(\"display\", \"none\");\n\n        } else if (setting.view.showLine && childLength > 0) {\n          //old parentNode has child nodes\n          var newLast = children[childLength - 1];\n          tmp_ulObj = $$(newLast, consts.id.UL, setting);\n          tmp_switchObj = $$(newLast, consts.id.SWITCH, setting);\n          tmp_icoObj = $$(newLast, consts.id.ICON, setting);\n          if (parentNode == root) {\n            if (children.length == 1) {\n              //node was root, and ztree has only one root after move node\n              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);\n            } else {\n              var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting);\n              view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS);\n              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n            }\n          } else {\n            view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n          }\n          tmp_ulObj.removeClass(consts.line.LINE);\n        }\n      },\n      replaceIcoClass: function (node, obj, newName) {\n        if (!obj || node.isAjaxing) return;\n        var tmpName = obj.attr(\"class\");\n        if (tmpName == undefined) return;\n        var tmpList = tmpName.split(\"_\");\n        switch (newName) {\n          case consts.folder.OPEN:\n          case consts.folder.CLOSE:\n          case consts.folder.DOCU:\n            tmpList[tmpList.length - 1] = newName;\n            break;\n        }\n        obj.attr(\"class\", tmpList.join(\"_\"));\n      },\n      replaceSwitchClass: function (node, obj, newName) {\n        if (!obj) return;\n        var tmpName = obj.attr(\"class\");\n        if (tmpName == undefined) return;\n        var tmpList = tmpName.split(\"_\");\n        switch (newName) {\n          case consts.line.ROOT:\n          case consts.line.ROOTS:\n          case consts.line.CENTER:\n          case consts.line.BOTTOM:\n          case consts.line.NOLINE:\n            tmpList[0] = view.makeNodeLineClassEx(node) + newName;\n            break;\n          case consts.folder.OPEN:\n          case consts.folder.CLOSE:\n          case consts.folder.DOCU:\n            tmpList[1] = newName;\n            break;\n        }\n        obj.attr(\"class\", tmpList.join(\"_\"));\n        if (newName !== consts.folder.DOCU) {\n          obj.removeAttr(\"disabled\");\n        } else {\n          obj.attr(\"disabled\", \"disabled\");\n        }\n      },\n      selectNode: function (setting, node, addFlag) {\n        if (!addFlag) {\n          view.cancelPreSelectedNode(setting, null, node);\n        }\n        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);\n        data.addSelectedNode(setting, node);\n        setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);\n      },\n      setNodeFontCss: function (setting, treeNode) {\n        var aObj = $$(treeNode, consts.id.A, setting),\n          fontCss = view.makeNodeFontCss(setting, treeNode);\n        if (fontCss) {\n          aObj.css(fontCss);\n        }\n      },\n      setNodeLineIcos: function (setting, node) {\n        if (!node) return;\n        var switchObj = $$(node, consts.id.SWITCH, setting),\n          ulObj = $$(node, consts.id.UL, setting),\n          icoObj = $$(node, consts.id.ICON, setting),\n          ulLine = view.makeUlLineClass(setting, node);\n        if (ulLine.length == 0) {\n          ulObj.removeClass(consts.line.LINE);\n        } else {\n          ulObj.addClass(ulLine);\n        }\n        switchObj.attr(\"class\", view.makeNodeLineClass(setting, node));\n        if (data.nodeIsParent(setting, node)) {\n          switchObj.removeAttr(\"disabled\");\n        } else {\n          switchObj.attr(\"disabled\", \"disabled\");\n        }\n        icoObj.removeAttr(\"style\");\n        icoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n        icoObj.attr(\"class\", view.makeNodeIcoClass(setting, node));\n      },\n      setNodeName: function (setting, node) {\n        var title = data.nodeTitle(setting, node),\n          nObj = $$(node, consts.id.SPAN, setting);\n        nObj.empty();\n        if (setting.view.nameIsHTML) {\n          nObj.html(data.nodeName(setting, node));\n        } else {\n          nObj.text(data.nodeName(setting, node));\n        }\n        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {\n          var aObj = $$(node, consts.id.A, setting);\n          aObj.attr(\"title\", !title ? \"\" : title);\n        }\n      },\n      setNodeTarget: function (setting, node) {\n        var aObj = $$(node, consts.id.A, setting);\n        aObj.attr(\"target\", view.makeNodeTarget(node));\n      },\n      setNodeUrl: function (setting, node) {\n        var aObj = $$(node, consts.id.A, setting),\n          url = view.makeNodeUrl(setting, node);\n        if (url == null || url.length == 0) {\n          aObj.removeAttr(\"href\");\n        } else {\n          aObj.attr(\"href\", url);\n        }\n      },\n      switchNode: function (setting, node) {\n        if (node.open || !tools.canAsync(setting, node)) {\n          view.expandCollapseNode(setting, node, !node.open);\n        } else if (setting.async.enable) {\n          if (!view.asyncNode(setting, node)) {\n            view.expandCollapseNode(setting, node, !node.open);\n            return;\n          }\n        } else if (node) {\n          view.expandCollapseNode(setting, node, !node.open);\n        }\n      }\n    };\n  // zTree defind\n  $.fn.zTree = {\n    consts: _consts,\n    _z: {\n      tools: tools,\n      view: view,\n      event: event,\n      data: data\n    },\n    getZTreeObj: function (treeId) {\n      var o = data.getZTreeTools(treeId);\n      return o ? o : null;\n    },\n    destroy: function (treeId) {\n      if (!!treeId && treeId.length > 0) {\n        view.destroy(data.getSetting(treeId));\n      } else {\n        for (var s in settings) {\n          view.destroy(settings[s]);\n        }\n      }\n    },\n    init: function (obj, zSetting, zNodes) {\n      var setting = tools.clone(_setting);\n      $.extend(true, setting, zSetting);\n      setting.treeId = obj.attr(\"id\");\n      setting.treeObj = obj;\n      setting.treeObj.empty();\n      settings[setting.treeId] = setting;\n      //For some older browser,(e.g., ie6)\n      if (typeof document.body.style.maxHeight === \"undefined\") {\n        setting.view.expandSpeed = \"\";\n      }\n      data.initRoot(setting);\n      var root = data.getRoot(setting);\n      zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : [];\n      if (setting.data.simpleData.enable) {\n        data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes));\n      } else {\n        data.nodeChildren(setting, root, zNodes);\n      }\n\n      data.initCache(setting);\n      event.unbindTree(setting);\n      event.bindTree(setting);\n      event.unbindEvent(setting);\n      event.bindEvent(setting);\n\n      var zTreeTools = {\n        setting: setting,\n        addNodes: function (parentNode, index, newNodes, isSilent) {\n          if (!parentNode) parentNode = null;\n          var isParent = data.nodeIsParent(setting, parentNode);\n          if (parentNode && !isParent && setting.data.keep.leaf) return null;\n\n          var i = parseInt(index, 10);\n          if (isNaN(i)) {\n            isSilent = !!newNodes;\n            newNodes = index;\n            index = -1;\n          } else {\n            index = i;\n          }\n          if (!newNodes) return null;\n\n\n          var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]);\n\n          function addCallback() {\n            view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true));\n          }\n\n          if (tools.canAsync(setting, parentNode)) {\n            view.asyncNode(setting, parentNode, isSilent, addCallback);\n          } else {\n            addCallback();\n          }\n          return xNewNodes;\n        },\n        cancelSelectedNode: function (node) {\n          view.cancelPreSelectedNode(setting, node);\n        },\n        destroy: function () {\n          view.destroy(setting);\n        },\n        expandAll: function (expandFlag) {\n          expandFlag = !!expandFlag;\n          view.expandCollapseSonNode(setting, null, expandFlag, true);\n          return expandFlag;\n        },\n        expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) {\n          if (!node || !data.nodeIsParent(setting, node)) return null;\n          if (expandFlag !== true && expandFlag !== false) {\n            expandFlag = !node.open;\n          }\n          callbackFlag = !!callbackFlag;\n\n          if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {\n            return null;\n          } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {\n            return null;\n          }\n          if (expandFlag && node.parentTId) {\n            view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);\n          }\n          if (expandFlag === node.open && !sonSign) {\n            return null;\n          }\n\n          data.getRoot(setting).expandTriggerFlag = callbackFlag;\n          if (!tools.canAsync(setting, node) && sonSign) {\n            view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);\n          } else {\n            node.open = !expandFlag;\n            view.switchNode(this.setting, node);\n            showNodeFocus();\n          }\n          return expandFlag;\n\n          function showNodeFocus() {\n            var a = $$(node, setting).get(0);\n            if (a && focus !== false) {\n              view.scrollIntoView(setting, a);\n            }\n          }\n        },\n        getNodes: function () {\n          return data.getNodes(setting);\n        },\n        getNodeByParam: function (key, value, parentNode) {\n          if (!key) return null;\n          return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);\n        },\n        getNodeByTId: function (tId) {\n          return data.getNodeCache(setting, tId);\n        },\n        getNodesByParam: function (key, value, parentNode) {\n          if (!key) return null;\n          return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);\n        },\n        getNodesByParamFuzzy: function (key, value, parentNode) {\n          if (!key) return null;\n          return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);\n        },\n        getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) {\n          isSingle = !!isSingle;\n          if (!filter || (typeof filter != \"function\")) return (isSingle ? null : []);\n          return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam);\n        },\n        getNodeIndex: function (node) {\n          if (!node) return null;\n          var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n          var children = data.nodeChildren(setting, parentNode);\n          for (var i = 0, l = children.length; i < l; i++) {\n            if (children[i] == node) return i;\n          }\n          return -1;\n        },\n        getSelectedNodes: function () {\n          var r = [], list = data.getRoot(setting).curSelectedList;\n          for (var i = 0, l = list.length; i < l; i++) {\n            r.push(list[i]);\n          }\n          return r;\n        },\n        isSelectedNode: function (node) {\n          return data.isSelectedNode(setting, node);\n        },\n        reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) {\n          var promise = new Promise(function (resolve, reject) {\n            try {\n              zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () {\n                resolve(parentNode);\n              });\n            } catch (e) {\n              reject(e);\n            }\n          });\n          return promise;\n        },\n        reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) {\n          if (!this.setting.async.enable) return;\n          var isRoot = !parentNode;\n          if (isRoot) {\n            parentNode = data.getRoot(setting);\n          }\n          if (reloadType == \"refresh\") {\n            var children = data.nodeChildren(setting, parentNode);\n            for (var i = 0, l = children ? children.length : 0; i < l; i++) {\n              data.removeNodeCache(setting, children[i]);\n            }\n            data.removeSelectedNode(setting);\n            data.nodeChildren(setting, parentNode, []);\n            if (isRoot) {\n              this.setting.treeObj.empty();\n            } else {\n              var ulObj = $$(parentNode, consts.id.UL, setting);\n              ulObj.empty();\n            }\n          }\n          view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback);\n        },\n        refresh: function () {\n          this.setting.treeObj.empty();\n          var root = data.getRoot(setting),\n            nodes = data.nodeChildren(setting, root);\n          data.initRoot(setting);\n          data.nodeChildren(setting, root, nodes);\n          data.initCache(setting);\n          view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1);\n        },\n        removeChildNodes: function (node) {\n          if (!node) return null;\n          var nodes = data.nodeChildren(setting, node);\n          view.removeChildNodes(setting, node);\n          return nodes ? nodes : null;\n        },\n        removeNode: function (node, callbackFlag) {\n          if (!node) return;\n          callbackFlag = !!callbackFlag;\n          if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;\n          view.removeNode(setting, node);\n          if (callbackFlag) {\n            this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n          }\n        },\n        selectNode: function (node, addFlag, isSilent) {\n          if (!node) return;\n          if (tools.uCanDo(setting)) {\n            addFlag = setting.view.selectedMulti && addFlag;\n            if (node.parentTId) {\n              view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);\n            } else if (!isSilent) {\n              try {\n                $$(node, setting).focus().blur();\n              } catch (e) {\n              }\n            }\n            view.selectNode(setting, node, addFlag);\n          }\n\n          function showNodeFocus() {\n            if (isSilent) {\n              return;\n            }\n            var a = $$(node, setting).get(0);\n            view.scrollIntoView(setting, a);\n          }\n        },\n        transformTozTreeNodes: function (simpleNodes) {\n          return data.transformTozTreeFormat(setting, simpleNodes);\n        },\n        transformToArray: function (nodes) {\n          return data.transformToArrayFormat(setting, nodes);\n        },\n        updateNode: function (node, checkTypeFlag) {\n          if (!node) return;\n          var nObj = $$(node, setting);\n          if (nObj.get(0) && tools.uCanDo(setting)) {\n            view.setNodeName(setting, node);\n            view.setNodeTarget(setting, node);\n            view.setNodeUrl(setting, node);\n            view.setNodeLineIcos(setting, node);\n            view.setNodeFontCss(setting, node);\n          }\n        }\n      };\n      root.treeTools = zTreeTools;\n      data.setZTreeTools(setting, zTreeTools);\n      var children = data.nodeChildren(setting, root);\n      if (children && children.length > 0) {\n        view.createNodes(setting, 0, children, null, -1);\n      } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {\n        view.asyncNode(setting);\n      }\n      return zTreeTools;\n    }\n  };\n\n  var zt = $.fn.zTree,\n    $$ = tools.$,\n    consts = zt.consts;\n})(jQuery);"
  },
  {
    "path": "lib/zTree_v3/js/jquery.ztree.excheck.js",
    "content": "/*\n * JQuery zTree excheck v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  //default consts of excheck\n  var _consts = {\n      event: {\n        CHECK: \"ztree_check\"\n      },\n      id: {\n        CHECK: \"_check\"\n      },\n      checkbox: {\n        STYLE: \"checkbox\",\n        DEFAULT: \"chk\",\n        DISABLED: \"disable\",\n        FALSE: \"false\",\n        TRUE: \"true\",\n        FULL: \"full\",\n        PART: \"part\",\n        FOCUS: \"focus\"\n      },\n      radio: {\n        STYLE: \"radio\",\n        TYPE_ALL: \"all\",\n        TYPE_LEVEL: \"level\"\n      }\n    },\n    //default setting of excheck\n    _setting = {\n      check: {\n        enable: false,\n        autoCheckTrigger: false,\n        chkStyle: _consts.checkbox.STYLE,\n        nocheckInherit: false,\n        chkDisabledInherit: false,\n        radioType: _consts.radio.TYPE_LEVEL,\n        chkboxType: {\n          \"Y\": \"ps\",\n          \"N\": \"ps\"\n        }\n      },\n      data: {\n        key: {\n          checked: \"checked\"\n        }\n      },\n      callback: {\n        beforeCheck: null,\n        onCheck: null\n      }\n    },\n    //default root of excheck\n    _initRoot = function (setting) {\n      var r = data.getRoot(setting);\n      r.radioCheckedList = [];\n    },\n    //default cache of excheck\n    _initCache = function (treeId) {\n    },\n    //default bind event of excheck\n    _bindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.bind(c.CHECK, function (event, srcEvent, treeId, node) {\n        event.srcEvent = srcEvent;\n        tools.apply(setting.callback.onCheck, [event, treeId, node]);\n      });\n    },\n    _unbindEvent = function (setting) {\n      var o = setting.treeObj,\n        c = consts.event;\n      o.unbind(c.CHECK);\n    },\n    //default event proxy of excheck\n    _eventProxy = function (e) {\n      var target = e.target,\n        setting = data.getSetting(e.data.treeId),\n        tId = \"\", node = null,\n        nodeEventType = \"\", treeEventType = \"\",\n        nodeEventCallback = null, treeEventCallback = null;\n\n      if (tools.eqs(e.type, \"mouseover\")) {\n        if (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.CHECK) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"mouseoverCheck\";\n        }\n      } else if (tools.eqs(e.type, \"mouseout\")) {\n        if (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.CHECK) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"mouseoutCheck\";\n        }\n      } else if (tools.eqs(e.type, \"click\")) {\n        if (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\" + consts.id.CHECK) !== null) {\n          tId = tools.getNodeMainDom(target).id;\n          nodeEventType = \"checkNode\";\n        }\n      }\n      if (tId.length > 0) {\n        node = data.getNodeCache(setting, tId);\n        switch (nodeEventType) {\n          case \"checkNode\" :\n            nodeEventCallback = _handler.onCheckNode;\n            break;\n          case \"mouseoverCheck\" :\n            nodeEventCallback = _handler.onMouseoverCheck;\n            break;\n          case \"mouseoutCheck\" :\n            nodeEventCallback = _handler.onMouseoutCheck;\n            break;\n        }\n      }\n      var proxyResult = {\n        stop: nodeEventType === \"checkNode\",\n        node: node,\n        nodeEventType: nodeEventType,\n        nodeEventCallback: nodeEventCallback,\n        treeEventType: treeEventType,\n        treeEventCallback: treeEventCallback\n      };\n      return proxyResult\n    },\n    //default init node of excheck\n    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      if (!n) return;\n      var checked = data.nodeChecked(setting, n);\n      n.checkedOld = checked;\n      if (typeof n.nocheck == \"string\") n.nocheck = tools.eqs(n.nocheck, \"true\");\n      n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);\n      if (typeof n.chkDisabled == \"string\") n.chkDisabled = tools.eqs(n.chkDisabled, \"true\");\n      n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);\n      if (typeof n.halfCheck == \"string\") n.halfCheck = tools.eqs(n.halfCheck, \"true\");\n      n.halfCheck = !!n.halfCheck;\n      n.check_Child_State = -1;\n      n.check_Focus = false;\n      n.getCheckStatus = function () {\n        return data.getCheckStatus(setting, n);\n      };\n\n      if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) {\n        var r = data.getRoot(setting);\n        r.radioCheckedList.push(n);\n      }\n    },\n    //add dom for check\n    _beforeA = function (setting, node, html) {\n      if (setting.check.enable) {\n        data.makeChkFlag(setting, node);\n        html.push(\"<span ID='\", node.tId, consts.id.CHECK, \"' class='\", view.makeChkClass(setting, node), \"' treeNode\", consts.id.CHECK, (node.nocheck === true ? \" style='display:none;'\" : \"\"), \"></span>\");\n      }\n    },\n    //update zTreeObj, add method of check\n    _zTreeTools = function (setting, zTreeTools) {\n      zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {\n        var nodeChecked = data.nodeChecked(setting, node);\n        if (node.chkDisabled === true) return;\n        if (checked !== true && checked !== false) {\n          checked = !nodeChecked;\n        }\n        callbackFlag = !!callbackFlag;\n\n        if (nodeChecked === checked && !checkTypeFlag) {\n          return;\n        } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {\n          return;\n        }\n        if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {\n          data.nodeChecked(setting, node, checked);\n          var checkObj = $$(node, consts.id.CHECK, this.setting);\n          if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n          view.setChkClass(this.setting, checkObj, node);\n          view.repairParentChkClassWithSelf(this.setting, node);\n          if (callbackFlag) {\n            this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);\n          }\n        }\n      }\n\n      zTreeTools.checkAllNodes = function (checked) {\n        view.repairAllChk(this.setting, !!checked);\n      }\n\n      zTreeTools.getCheckedNodes = function (checked) {\n        var checked = (checked !== false);\n        var children = data.nodeChildren(setting, data.getRoot(this.setting));\n        return data.getTreeCheckedNodes(this.setting, children, checked);\n      }\n\n      zTreeTools.getChangeCheckedNodes = function () {\n        var children = data.nodeChildren(setting, data.getRoot(this.setting));\n        return data.getTreeChangeCheckedNodes(this.setting, children);\n      }\n\n      zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) {\n        disabled = !!disabled;\n        inheritParent = !!inheritParent;\n        inheritChildren = !!inheritChildren;\n        view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);\n        view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);\n      }\n\n      var _updateNode = zTreeTools.updateNode;\n      zTreeTools.updateNode = function (node, checkTypeFlag) {\n        if (_updateNode) _updateNode.apply(zTreeTools, arguments);\n        if (!node || !this.setting.check.enable) return;\n        var nObj = $$(node, this.setting);\n        if (nObj.get(0) && tools.uCanDo(this.setting)) {\n          var checkObj = $$(node, consts.id.CHECK, this.setting);\n          if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n          view.setChkClass(this.setting, checkObj, node);\n          view.repairParentChkClassWithSelf(this.setting, node);\n        }\n      }\n    },\n    //method of operate data\n    _data = {\n      getRadioCheckedList: function (setting) {\n        var checkedList = data.getRoot(setting).radioCheckedList;\n        for (var i = 0, j = checkedList.length; i < j; i++) {\n          if (!data.getNodeCache(setting, checkedList[i].tId)) {\n            checkedList.splice(i, 1);\n            i--;\n            j--;\n          }\n        }\n        return checkedList;\n      },\n      getCheckStatus: function (setting, node) {\n        if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;\n        var checked = data.nodeChecked(setting, node),\n          r = {\n            checked: checked,\n            half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))\n          };\n        return r;\n      },\n      getTreeCheckedNodes: function (setting, nodes, checked, results) {\n        if (!nodes) return [];\n        var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);\n        results = !results ? [] : results;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          var children = data.nodeChildren(setting, node);\n          var nodeChecked = data.nodeChecked(setting, node);\n          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) {\n            results.push(node);\n            if (onlyOne) {\n              break;\n            }\n          }\n          data.getTreeCheckedNodes(setting, children, checked, results);\n          if (onlyOne && results.length > 0) {\n            break;\n          }\n        }\n        return results;\n      },\n      getTreeChangeCheckedNodes: function (setting, nodes, results) {\n        if (!nodes) return [];\n        results = !results ? [] : results;\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          var node = nodes[i];\n          var children = data.nodeChildren(setting, node);\n          var nodeChecked = data.nodeChecked(setting, node);\n          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) {\n            results.push(node);\n          }\n          data.getTreeChangeCheckedNodes(setting, children, results);\n        }\n        return results;\n      },\n      makeChkFlag: function (setting, node) {\n        if (!node) return;\n        var chkFlag = -1;\n        var children = data.nodeChildren(setting, node);\n        if (children) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            var cNode = children[i];\n            var nodeChecked = data.nodeChecked(setting, cNode);\n            var tmp = -1;\n            if (setting.check.chkStyle == consts.radio.STYLE) {\n              if (cNode.nocheck === true || cNode.chkDisabled === true) {\n                tmp = cNode.check_Child_State;\n              } else if (cNode.halfCheck === true) {\n                tmp = 2;\n              } else if (nodeChecked) {\n                tmp = 2;\n              } else {\n                tmp = cNode.check_Child_State > 0 ? 2 : 0;\n              }\n              if (tmp == 2) {\n                chkFlag = 2;\n                break;\n              } else if (tmp == 0) {\n                chkFlag = 0;\n              }\n            } else if (setting.check.chkStyle == consts.checkbox.STYLE) {\n              if (cNode.nocheck === true || cNode.chkDisabled === true) {\n                tmp = cNode.check_Child_State;\n              } else if (cNode.halfCheck === true) {\n                tmp = 1;\n              } else if (nodeChecked) {\n                tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;\n              } else {\n                tmp = (cNode.check_Child_State > 0) ? 1 : 0;\n              }\n              if (tmp === 1) {\n                chkFlag = 1;\n                break;\n              } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {\n                chkFlag = 1;\n                break;\n              } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {\n                chkFlag = 1;\n                break;\n              } else if (tmp > -1) {\n                chkFlag = tmp;\n              }\n            }\n          }\n        }\n        node.check_Child_State = chkFlag;\n      }\n    },\n    //method of event proxy\n    _event = {},\n    //method of event handler\n    _handler = {\n      onCheckNode: function (event, node) {\n        if (node.chkDisabled === true) return false;\n        var setting = data.getSetting(event.data.treeId);\n        if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;\n        var nodeChecked = data.nodeChecked(setting, node);\n        data.nodeChecked(setting, node, !nodeChecked);\n        view.checkNodeRelation(setting, node);\n        var checkObj = $$(node, consts.id.CHECK, setting);\n        view.setChkClass(setting, checkObj, node);\n        view.repairParentChkClassWithSelf(setting, node);\n        setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);\n        return true;\n      },\n      onMouseoverCheck: function (event, node) {\n        if (node.chkDisabled === true) return false;\n        var setting = data.getSetting(event.data.treeId),\n          checkObj = $$(node, consts.id.CHECK, setting);\n        node.check_Focus = true;\n        view.setChkClass(setting, checkObj, node);\n        return true;\n      },\n      onMouseoutCheck: function (event, node) {\n        if (node.chkDisabled === true) return false;\n        var setting = data.getSetting(event.data.treeId),\n          checkObj = $$(node, consts.id.CHECK, setting);\n        node.check_Focus = false;\n        view.setChkClass(setting, checkObj, node);\n        return true;\n      }\n    },\n    //method of tools for zTree\n    _tools = {},\n    //method of operate ztree dom\n    _view = {\n      checkNodeRelation: function (setting, node) {\n        var pNode, i, l,\n          r = consts.radio;\n        var nodeChecked = data.nodeChecked(setting, node);\n        if (setting.check.chkStyle == r.STYLE) {\n          var checkedList = data.getRadioCheckedList(setting);\n          if (nodeChecked) {\n            if (setting.check.radioType == r.TYPE_ALL) {\n              for (i = checkedList.length - 1; i >= 0; i--) {\n                pNode = checkedList[i];\n                var pNodeChecked = data.nodeChecked(setting, pNode);\n                if (pNodeChecked && pNode != node) {\n                  data.nodeChecked(setting, pNode, false);\n                  checkedList.splice(i, 1);\n\n                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n                  if (pNode.parentTId != node.parentTId) {\n                    view.repairParentChkClassWithSelf(setting, pNode);\n                  }\n                }\n              }\n              checkedList.push(node);\n            } else {\n              var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n              var children = data.nodeChildren(setting, parentNode);\n              for (i = 0, l = children.length; i < l; i++) {\n                pNode = children[i];\n                var pNodeChecked = data.nodeChecked(setting, pNode);\n                if (pNodeChecked && pNode != node) {\n                  data.nodeChecked(setting, pNode, false);\n                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n                }\n              }\n            }\n          } else if (setting.check.radioType == r.TYPE_ALL) {\n            for (i = 0, l = checkedList.length; i < l; i++) {\n              if (node == checkedList[i]) {\n                checkedList.splice(i, 1);\n                break;\n              }\n            }\n          }\n\n        } else {\n          var children = data.nodeChildren(setting, node);\n          if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf(\"s\") > -1)) {\n            view.setSonNodeCheckBox(setting, node, true);\n          }\n          if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf(\"s\") > -1)) {\n            view.setSonNodeCheckBox(setting, node, false);\n          }\n          if (nodeChecked && setting.check.chkboxType.Y.indexOf(\"p\") > -1) {\n            view.setParentNodeCheckBox(setting, node, true);\n          }\n          if (!nodeChecked && setting.check.chkboxType.N.indexOf(\"p\") > -1) {\n            view.setParentNodeCheckBox(setting, node, false);\n          }\n        }\n      },\n      makeChkClass: function (setting, node) {\n        var c = consts.checkbox, r = consts.radio,\n          fullStyle = \"\";\n        var nodeChecked = data.nodeChecked(setting, node);\n        if (node.chkDisabled === true) {\n          fullStyle = c.DISABLED;\n        } else if (node.halfCheck) {\n          fullStyle = c.PART;\n        } else if (setting.check.chkStyle == r.STYLE) {\n          fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART;\n        } else {\n          fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART);\n        }\n        var chkName = setting.check.chkStyle + \"_\" + (nodeChecked ? c.TRUE : c.FALSE) + \"_\" + fullStyle;\n        chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + \"_\" + c.FOCUS : chkName;\n        return consts.className.BUTTON + \" \" + c.DEFAULT + \" \" + chkName;\n      },\n      repairAllChk: function (setting, checked) {\n        if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {\n          var root = data.getRoot(setting);\n          var children = data.nodeChildren(setting, root);\n          for (var i = 0, l = children.length; i < l; i++) {\n            var node = children[i];\n            if (node.nocheck !== true && node.chkDisabled !== true) {\n              data.nodeChecked(setting, node, checked);\n            }\n            view.setSonNodeCheckBox(setting, node, checked);\n          }\n        }\n      },\n      repairChkClass: function (setting, node) {\n        if (!node) return;\n        data.makeChkFlag(setting, node);\n        if (node.nocheck !== true) {\n          var checkObj = $$(node, consts.id.CHECK, setting);\n          view.setChkClass(setting, checkObj, node);\n        }\n      },\n      repairParentChkClass: function (setting, node) {\n        if (!node || !node.parentTId) return;\n        var pNode = node.getParentNode();\n        view.repairChkClass(setting, pNode);\n        view.repairParentChkClass(setting, pNode);\n      },\n      repairParentChkClassWithSelf: function (setting, node) {\n        if (!node) return;\n        var children = data.nodeChildren(setting, node);\n        if (children && children.length > 0) {\n          view.repairParentChkClass(setting, children[0]);\n        } else {\n          view.repairParentChkClass(setting, node);\n        }\n      },\n      repairSonChkDisabled: function (setting, node, chkDisabled, inherit) {\n        if (!node) return;\n        if (node.chkDisabled != chkDisabled) {\n          node.chkDisabled = chkDisabled;\n        }\n        view.repairChkClass(setting, node);\n        var children = data.nodeChildren(setting, node);\n        if (children && inherit) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            var sNode = children[i];\n            view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);\n          }\n        }\n      },\n      repairParentChkDisabled: function (setting, node, chkDisabled, inherit) {\n        if (!node) return;\n        if (node.chkDisabled != chkDisabled && inherit) {\n          node.chkDisabled = chkDisabled;\n        }\n        view.repairChkClass(setting, node);\n        view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);\n      },\n      setChkClass: function (setting, obj, node) {\n        if (!obj) return;\n        if (node.nocheck === true) {\n          obj.hide();\n        } else {\n          obj.show();\n        }\n        obj.attr('class', view.makeChkClass(setting, node));\n      },\n      setParentNodeCheckBox: function (setting, node, value, srcNode) {\n        var checkObj = $$(node, consts.id.CHECK, setting);\n        if (!srcNode) srcNode = node;\n        data.makeChkFlag(setting, node);\n        if (node.nocheck !== true && node.chkDisabled !== true) {\n          data.nodeChecked(setting, node, value);\n          view.setChkClass(setting, checkObj, node);\n          if (setting.check.autoCheckTrigger && node != srcNode) {\n            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n          }\n        }\n        if (node.parentTId) {\n          var pSign = true;\n          if (!value) {\n            var pNodes = data.nodeChildren(setting, node.getParentNode());\n            for (var i = 0, l = pNodes.length; i < l; i++) {\n              var pNode = pNodes[i];\n              var nodeChecked = data.nodeChecked(setting, pNode);\n              if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked)\n                || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) {\n                pSign = false;\n                break;\n              }\n            }\n          }\n          if (pSign) {\n            view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);\n          }\n        }\n      },\n      setSonNodeCheckBox: function (setting, node, value, srcNode) {\n        if (!node) return;\n        var checkObj = $$(node, consts.id.CHECK, setting);\n        if (!srcNode) srcNode = node;\n\n        var hasDisable = false;\n        var children = data.nodeChildren(setting, node);\n        if (children) {\n          for (var i = 0, l = children.length; i < l; i++) {\n            var sNode = children[i];\n            view.setSonNodeCheckBox(setting, sNode, value, srcNode);\n            if (sNode.chkDisabled === true) hasDisable = true;\n          }\n        }\n\n        if (node != data.getRoot(setting) && node.chkDisabled !== true) {\n          if (hasDisable && node.nocheck !== true) {\n            data.makeChkFlag(setting, node);\n          }\n          if (node.nocheck !== true && node.chkDisabled !== true) {\n            data.nodeChecked(setting, node, value);\n            if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1;\n          } else {\n            node.check_Child_State = -1;\n          }\n          view.setChkClass(setting, checkObj, node);\n          if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {\n            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n          }\n        }\n\n      }\n    },\n\n    _z = {\n      tools: _tools,\n      view: _view,\n      event: _event,\n      data: _data\n    };\n  $.extend(true, $.fn.zTree.consts, _consts);\n  $.extend(true, $.fn.zTree._z, _z);\n\n  var zt = $.fn.zTree,\n    tools = zt._z.tools,\n    consts = zt.consts,\n    view = zt._z.view,\n    data = zt._z.data,\n    event = zt._z.event,\n    $$ = tools.$;\n\n  data.nodeChecked = function (setting, node, newChecked) {\n    if (!node) {\n      return false;\n    }\n    var key = setting.data.key.checked;\n    if (typeof newChecked !== 'undefined') {\n      if (typeof newChecked === \"string\") {\n        newChecked = tools.eqs(newChecked, \"true\");\n      }\n      newChecked = !!newChecked;\n      node[key] = newChecked;\n    } else if (typeof node[key] == \"string\"){\n      node[key] = tools.eqs(node[key], \"true\");\n    } else {\n      node[key] = !!node[key];\n    }\n    return node[key];\n  };\n\n  data.exSetting(_setting);\n  data.addInitBind(_bindEvent);\n  data.addInitUnBind(_unbindEvent);\n  data.addInitCache(_initCache);\n  data.addInitNode(_initNode);\n  data.addInitProxy(_eventProxy, true);\n  data.addInitRoot(_initRoot);\n  data.addBeforeA(_beforeA);\n  data.addZTreeTools(_zTreeTools);\n\n  var _createNodes = view.createNodes;\n  view.createNodes = function (setting, level, nodes, parentNode, index) {\n    if (_createNodes) _createNodes.apply(view, arguments);\n    if (!nodes) return;\n    view.repairParentChkClassWithSelf(setting, parentNode);\n  }\n  var _removeNode = view.removeNode;\n  view.removeNode = function (setting, node) {\n    var parentNode = node.getParentNode();\n    if (_removeNode) _removeNode.apply(view, arguments);\n    if (!node || !parentNode) return;\n    view.repairChkClass(setting, parentNode);\n    view.repairParentChkClass(setting, parentNode);\n  }\n\n  var _appendNodes = view.appendNodes;\n  view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) {\n    var html = \"\";\n    if (_appendNodes) {\n      html = _appendNodes.apply(view, arguments);\n    }\n    if (parentNode) {\n      data.makeChkFlag(setting, parentNode);\n    }\n    return html;\n  }\n})(jQuery);"
  },
  {
    "path": "lib/zTree_v3/js/jquery.ztree.exedit.js",
    "content": "/*\n * JQuery zTree exedit v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  //default consts of exedit\n  var _consts = {\n      event: {\n        DRAG: \"ztree_drag\",\n        DROP: \"ztree_drop\",\n        RENAME: \"ztree_rename\",\n        DRAGMOVE: \"ztree_dragmove\"\n      },\n      id: {\n        EDIT: \"_edit\",\n        INPUT: \"_input\",\n        REMOVE: \"_remove\"\n      },\n      move: {\n        TYPE_INNER: \"inner\",\n        TYPE_PREV: \"prev\",\n        TYPE_NEXT: \"next\"\n      },\n      node: {\n        CURSELECTED_EDIT: \"curSelectedNode_Edit\",\n        TMPTARGET_TREE: \"tmpTargetzTree\",\n        TMPTARGET_NODE: \"tmpTargetNode\"\n      }\n    },\n    //default setting of exedit\n    _setting = {\n      edit: {\n        enable: false,\n        editNameSelectAll: false,\n        showRemoveBtn: true,\n        showRenameBtn: true,\n        removeTitle: \"remove\",\n        renameTitle: \"rename\",\n        drag: {\n          autoExpandTrigger: false,\n          isCopy: true,\n          isMove: true,\n          prev: true,\n          next: true,\n          inner: true,\n          minMoveSize: 5,\n          borderMax: 10,\n          borderMin: -5,\n          maxShowNodeNum: 5,\n          autoOpenTime: 500\n        }\n      },\n      view: {\n        addHoverDom: null,\n        removeHoverDom: null\n      },\n      callback: {\n        beforeDrag: null,\n        beforeDragOpen: null,\n        beforeDrop: null,\n        beforeEditName: null,\n        beforeRename: null,\n        onDrag: null,\n        onDragMove: null,\n        onDrop: null,\n        onRename: null\n      }\n    },\n    //default root of exedit\n    _initRoot = function (setting) {\n      var r = data.getRoot(setting), rs = data.getRoots();\n      r.curEditNode = null;\n      r.curEditInput = null;\n      r.curHoverNode = null;\n      r.dragFlag = 0;\n      r.dragNodeShowBefore = [];\n      r.dragMaskList = new Array();\n      rs.showHoverDom = true;\n    },\n    //default cache of exedit\n    _initCache = function (treeId) {\n    },\n    //default bind event of exedit\n    _bindEvent = function (setting) {\n      var o = setting.treeObj;\n      var c = consts.event;\n      o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {\n        tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);\n      });\n\n      o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {\n        tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);\n      });\n\n      o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {\n        tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);\n      });\n\n      o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {\n        tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);\n      });\n    },\n    _unbindEvent = function (setting) {\n      var o = setting.treeObj;\n      var c = consts.event;\n      o.unbind(c.RENAME);\n      o.unbind(c.DRAG);\n      o.unbind(c.DRAGMOVE);\n      o.unbind(c.DROP);\n    },\n    //default event proxy of exedit\n    _eventProxy = function (e) {\n      var target = e.target,\n        setting = data.getSetting(e.data.treeId),\n        relatedTarget = e.relatedTarget,\n        tId = \"\", node = null,\n        nodeEventType = \"\", treeEventType = \"\",\n        nodeEventCallback = null, treeEventCallback = null,\n        tmp = null;\n\n      if (tools.eqs(e.type, \"mouseover\")) {\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n          nodeEventType = \"hoverOverNode\";\n        }\n      } else if (tools.eqs(e.type, \"mouseout\")) {\n        tmp = tools.getMDom(setting, relatedTarget, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (!tmp) {\n          tId = \"remove\";\n          nodeEventType = \"hoverOutNode\";\n        }\n      } else if (tools.eqs(e.type, \"mousedown\")) {\n        tmp = tools.getMDom(setting, target, [{tagName: \"a\", attrName: \"treeNode\" + consts.id.A}]);\n        if (tmp) {\n          tId = tools.getNodeMainDom(tmp).id;\n          nodeEventType = \"mousedownNode\";\n        }\n      }\n      if (tId.length > 0) {\n        node = data.getNodeCache(setting, tId);\n        switch (nodeEventType) {\n          case \"mousedownNode\" :\n            nodeEventCallback = _handler.onMousedownNode;\n            break;\n          case \"hoverOverNode\" :\n            nodeEventCallback = _handler.onHoverOverNode;\n            break;\n          case \"hoverOutNode\" :\n            nodeEventCallback = _handler.onHoverOutNode;\n            break;\n        }\n      }\n      var proxyResult = {\n        stop: false,\n        node: node,\n        nodeEventType: nodeEventType,\n        nodeEventCallback: nodeEventCallback,\n        treeEventType: treeEventType,\n        treeEventCallback: treeEventCallback\n      };\n      return proxyResult\n    },\n    //default init node of exedit\n    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      if (!n) return;\n      n.isHover = false;\n      n.editNameFlag = false;\n    },\n    //update zTreeObj, add method of edit\n    _zTreeTools = function (setting, zTreeTools) {\n      zTreeTools.cancelEditName = function (newName) {\n        var root = data.getRoot(this.setting);\n        if (!root.curEditNode) return;\n        view.cancelCurEditNode(this.setting, newName ? newName : null, true);\n      }\n      zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {\n        if (!node) return null;\n        var isParent = data.nodeIsParent(setting, targetNode);\n        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;\n        var _this = this,\n          newNode = tools.clone(node);\n        if (!targetNode) {\n          targetNode = null;\n          moveType = consts.move.TYPE_INNER;\n        }\n        if (moveType == consts.move.TYPE_INNER) {\n          function copyCallback() {\n            view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);\n          }\n\n          if (tools.canAsync(this.setting, targetNode)) {\n            view.asyncNode(this.setting, targetNode, isSilent, copyCallback);\n          } else {\n            copyCallback();\n          }\n        } else {\n          view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);\n          view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);\n        }\n        return newNode;\n      }\n      zTreeTools.editName = function (node) {\n        if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;\n        if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);\n        view.editNode(this.setting, node)\n      }\n      zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {\n        if (!node) return node;\n        var isParent = data.nodeIsParent(setting, targetNode);\n        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {\n          return null;\n        } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find(\"#\" + targetNode.tId).length > 0)) {\n          return null;\n        } else if (!targetNode) {\n          targetNode = null;\n        }\n        var _this = this;\n\n        function moveCallback() {\n          view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);\n        }\n\n        if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {\n          view.asyncNode(this.setting, targetNode, isSilent, moveCallback);\n        } else {\n          moveCallback();\n        }\n        return node;\n      }\n      zTreeTools.setEditable = function (editable) {\n        this.setting.edit.enable = editable;\n        return this.refresh();\n      }\n    },\n    //method of operate data\n    _data = {\n      setSonNodeLevel: function (setting, parentNode, node) {\n        if (!node) return;\n        var children = data.nodeChildren(setting, node);\n        node.level = (parentNode) ? parentNode.level + 1 : 0;\n        if (!children) return;\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i]) data.setSonNodeLevel(setting, node, children[i]);\n        }\n      }\n    },\n    //method of event proxy\n    _event = {},\n    //method of event handler\n    _handler = {\n      onHoverOverNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId),\n          root = data.getRoot(setting);\n        if (root.curHoverNode != node) {\n          _handler.onHoverOutNode(event);\n        }\n        root.curHoverNode = node;\n        view.addHoverDom(setting, node);\n      },\n      onHoverOutNode: function (event, node) {\n        var setting = data.getSetting(event.data.treeId),\n          root = data.getRoot(setting);\n        if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {\n          view.removeTreeDom(setting, root.curHoverNode);\n          root.curHoverNode = null;\n        }\n      },\n      onMousedownNode: function (eventMouseDown, _node) {\n        var i, l,\n          setting = data.getSetting(eventMouseDown.data.treeId),\n          root = data.getRoot(setting), roots = data.getRoots();\n        //right click can't drag & drop\n        if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;\n\n        //input of edit node name can't drag & drop\n        var target = eventMouseDown.target,\n          _nodes = data.getRoot(setting).curSelectedList,\n          nodes = [];\n        if (!data.isSelectedNode(setting, _node)) {\n          nodes = [_node];\n        } else {\n          for (i = 0, l = _nodes.length; i < l; i++) {\n            if (_nodes[i].editNameFlag && tools.eqs(target.tagName, \"input\") && target.getAttribute(\"treeNode\" + consts.id.INPUT) !== null) {\n              return true;\n            }\n            nodes.push(_nodes[i]);\n            if (nodes[0].parentTId !== _nodes[i].parentTId) {\n              nodes = [_node];\n              break;\n            }\n          }\n        }\n\n        view.editNodeBlur = true;\n        view.cancelCurEditNode(setting);\n\n        var doc = $(setting.treeObj.get(0).ownerDocument),\n          body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,\n          isOtherTree = false,\n          targetSetting = setting,\n          sourceSetting = setting,\n          preNode, nextNode,\n          preTmpTargetNodeId = null,\n          preTmpMoveType = null,\n          tmpTargetNodeId = null,\n          moveType = consts.move.TYPE_INNER,\n          mouseDownX = eventMouseDown.clientX,\n          mouseDownY = eventMouseDown.clientY,\n          startTime = (new Date()).getTime();\n\n        if (tools.uCanDo(setting)) {\n          doc.bind(\"mousemove\", _docMouseMove);\n        }\n\n        function _docMouseMove(event) {\n          //avoid start drag after click node\n          if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize\n            && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {\n            return true;\n          }\n          var i, l, tmpNode, tmpDom, tmpNodes;\n          body.css(\"cursor\", \"pointer\");\n\n          if (root.dragFlag == 0) {\n            if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {\n              _docMouseUp(event);\n              return true;\n            }\n\n            for (i = 0, l = nodes.length; i < l; i++) {\n              if (i == 0) {\n                root.dragNodeShowBefore = [];\n              }\n              tmpNode = nodes[i];\n              if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {\n                view.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n                root.dragNodeShowBefore[tmpNode.tId] = true;\n              } else {\n                root.dragNodeShowBefore[tmpNode.tId] = false;\n              }\n            }\n\n            root.dragFlag = 1;\n            roots.showHoverDom = false;\n            tools.showIfameMask(setting, true);\n\n            //sort\n            var isOrder = true, lastIndex = -1;\n            if (nodes.length > 1) {\n              var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);\n              tmpNodes = [];\n              for (i = 0, l = pNodes.length; i < l; i++) {\n                if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {\n                  if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {\n                    isOrder = false;\n                  }\n                  tmpNodes.push(pNodes[i]);\n                  lastIndex = i;\n                }\n                if (nodes.length === tmpNodes.length) {\n                  nodes = tmpNodes;\n                  break;\n                }\n              }\n            }\n            if (isOrder) {\n              preNode = nodes[0].getPreNode();\n              nextNode = nodes[nodes.length - 1].getNextNode();\n            }\n\n            //set node in selected\n            curNode = $$(\"<ul class='zTreeDragUL'></ul>\", setting);\n            for (i = 0, l = nodes.length; i < l; i++) {\n              tmpNode = nodes[i];\n              tmpNode.editNameFlag = false;\n              view.selectNode(setting, tmpNode, i > 0);\n              view.removeTreeDom(setting, tmpNode);\n\n              if (i > setting.edit.drag.maxShowNodeNum - 1) {\n                continue;\n              }\n\n              tmpDom = $$(\"<li id='\" + tmpNode.tId + \"_tmp'></li>\", setting);\n              tmpDom.append($$(tmpNode, consts.id.A, setting).clone());\n              tmpDom.css(\"padding\", \"0\");\n              tmpDom.children(\"#\" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);\n              curNode.append(tmpDom);\n              if (i == setting.edit.drag.maxShowNodeNum - 1) {\n                tmpDom = $$(\"<li id='\" + tmpNode.tId + \"_moretmp'><a>  ...  </a></li>\", setting);\n                curNode.append(tmpDom);\n              }\n            }\n            curNode.attr(\"id\", nodes[0].tId + consts.id.UL + \"_tmp\");\n            curNode.addClass(setting.treeObj.attr(\"class\"));\n            curNode.appendTo(body);\n\n            tmpArrow = $$(\"<span class='tmpzTreeMove_arrow'></span>\", setting);\n            tmpArrow.attr(\"id\", \"zTreeMove_arrow_tmp\");\n            tmpArrow.appendTo(body);\n\n            setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);\n          }\n\n          if (root.dragFlag == 1) {\n            if (tmpTarget && tmpArrow.attr(\"id\") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {\n              var xT = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget);\n              event.target = (xT.length > 0) ? xT.get(0) : event.target;\n            } else if (tmpTarget) {\n              tmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n              if (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n                .removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n            }\n            tmpTarget = null;\n            tmpTargetNodeId = null;\n\n            //judge drag & drop in multi ztree\n            isOtherTree = false;\n            targetSetting = setting;\n            var settings = data.getSettings();\n            for (var s in settings) {\n              if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId\n                && (event.target.id == settings[s].treeId || $(event.target).parents(\"#\" + settings[s].treeId).length > 0)) {\n                isOtherTree = true;\n                targetSetting = settings[s];\n              }\n            }\n\n            var docScrollTop = doc.scrollTop(),\n              docScrollLeft = doc.scrollLeft(),\n              treeOffset = targetSetting.treeObj.offset(),\n              scrollHeight = targetSetting.treeObj.get(0).scrollHeight,\n              scrollWidth = targetSetting.treeObj.get(0).scrollWidth,\n              dTop = (event.clientY + docScrollTop - treeOffset.top),\n              dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),\n              dLeft = (event.clientX + docScrollLeft - treeOffset.left),\n              dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),\n              isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),\n              isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),\n              isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),\n              isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),\n              isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,\n              isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),\n              isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),\n              isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),\n              isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);\n\n            if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n              //get node <li> dom\n              var targetObj = event.target;\n              while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, \"li\") && targetObj.id != targetSetting.treeId) {\n                targetObj = targetObj.parentNode;\n              }\n\n              var canMove = true;\n              //don't move to self or children of self\n              for (i = 0, l = nodes.length; i < l; i++) {\n                tmpNode = nodes[i];\n                if (targetObj.id === tmpNode.tId) {\n                  canMove = false;\n                  break;\n                } else if ($$(tmpNode, setting).find(\"#\" + targetObj.id).length > 0) {\n                  canMove = false;\n                  break;\n                }\n              }\n              if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {\n                tmpTarget = $(targetObj);\n                tmpTargetNodeId = targetObj.id;\n              }\n            }\n\n            //the mouse must be in zTree\n            tmpNode = nodes[0];\n            if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n              //judge mouse move in root of ztree\n              if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {\n                tmpTarget = targetSetting.treeObj;\n              }\n              //auto scroll top\n              if (isTop) {\n                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);\n              } else if (isBottom) {\n                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);\n              }\n              if (isLeft) {\n                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);\n              } else if (isRight) {\n                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);\n              }\n              //auto scroll left\n              if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {\n                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);\n              }\n            }\n\n            curNode.css({\n              \"top\": (event.clientY + docScrollTop + 3) + \"px\",\n              \"left\": (event.clientX + docScrollLeft + 3) + \"px\"\n            });\n\n            var dX = 0;\n            var dY = 0;\n            if (tmpTarget && tmpTarget.attr(\"id\") != targetSetting.treeId) {\n              var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),\n                isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),\n                isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),\n                isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),\n                isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),\n                canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),\n                canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),\n                canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);\n\n              function clearMove() {\n                tmpTarget = null;\n                tmpTargetNodeId = \"\";\n                moveType = consts.move.TYPE_INNER;\n                tmpArrow.css({\n                  \"display\": \"none\"\n                });\n                if (window.zTreeMoveTimer) {\n                  clearTimeout(window.zTreeMoveTimer);\n                  window.zTreeMoveTargetNodeTId = null\n                }\n              }\n\n              if (!canPrev && !canNext && !canInner) {\n                clearMove();\n              } else {\n                var tmpTargetA = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget),\n                  tmpNextA = tmpTargetNode.isLastNode ? null : $(\"#\" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),\n                  tmpTop = tmpTargetA.offset().top,\n                  tmpLeft = tmpTargetA.offset().left,\n                  prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,\n                  nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,\n                  dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();\n\n                if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {\n                  dX = 1 - tmpArrow.width();\n                  dY = tmpTop - tmpArrow.height() / 2;\n                  moveType = consts.move.TYPE_PREV;\n                } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {\n                  dX = 1 - tmpArrow.width();\n                  dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);\n                  moveType = consts.move.TYPE_NEXT;\n                } else if (canInner) {\n                  dX = 5 - tmpArrow.width();\n                  dY = tmpTop;\n                  moveType = consts.move.TYPE_INNER;\n                } else {\n                  clearMove();\n                }\n\n                if (tmpTarget) {\n                  tmpArrow.css({\n                    \"display\": \"block\",\n                    \"top\": dY + \"px\",\n                    \"left\": (tmpLeft + dX) + \"px\"\n                  });\n                  tmpTargetA.addClass(consts.node.TMPTARGET_NODE + \"_\" + moveType);\n\n                  if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {\n                    startTime = (new Date()).getTime();\n                  }\n                  if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {\n                    var startTimer = true;\n                    if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {\n                      clearTimeout(window.zTreeMoveTimer);\n                      window.zTreeMoveTargetNodeTId = null;\n                    } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {\n                      startTimer = false;\n                    }\n                    if (startTimer) {\n                      window.zTreeMoveTimer = setTimeout(function () {\n                        if (moveType != consts.move.TYPE_INNER) return;\n                        if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime\n                          && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {\n                          view.switchNode(targetSetting, tmpTargetNode);\n                          if (targetSetting.edit.drag.autoExpandTrigger) {\n                            targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);\n                          }\n                        }\n                      }, targetSetting.edit.drag.autoOpenTime + 50);\n                      window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;\n                    }\n                  }\n                }\n              }\n            } else {\n              moveType = consts.move.TYPE_INNER;\n              if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {\n                tmpTarget.addClass(consts.node.TMPTARGET_TREE);\n              } else {\n                tmpTarget = null;\n              }\n              tmpArrow.css({\n                \"display\": \"none\"\n              });\n              if (window.zTreeMoveTimer) {\n                clearTimeout(window.zTreeMoveTimer);\n                window.zTreeMoveTargetNodeTId = null;\n              }\n            }\n            preTmpTargetNodeId = tmpTargetNodeId;\n            preTmpMoveType = moveType;\n\n            setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);\n          }\n          return false;\n        }\n\n        doc.bind(\"mouseup\", _docMouseUp);\n\n        function _docMouseUp(event) {\n          if (window.zTreeMoveTimer) {\n            clearTimeout(window.zTreeMoveTimer);\n            window.zTreeMoveTargetNodeTId = null;\n          }\n          preTmpTargetNodeId = null;\n          preTmpMoveType = null;\n          doc.unbind(\"mousemove\", _docMouseMove);\n          doc.unbind(\"mouseup\", _docMouseUp);\n          doc.unbind(\"selectstart\", _docSelect);\n          body.css(\"cursor\", \"\");\n          if (tmpTarget) {\n            tmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n            if (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n              .removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n          }\n          tools.showIfameMask(setting, false);\n\n          roots.showHoverDom = true;\n          if (root.dragFlag == 0) return;\n          root.dragFlag = 0;\n\n          var i, l, tmpNode;\n          for (i = 0, l = nodes.length; i < l; i++) {\n            tmpNode = nodes[i];\n            if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {\n              view.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n              delete root.dragNodeShowBefore[tmpNode.tId];\n            }\n          }\n\n          if (curNode) curNode.remove();\n          if (tmpArrow) tmpArrow.remove();\n\n          var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);\n          if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {\n            tmpTarget = null;\n          }\n          if (tmpTarget) {\n            var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);\n            if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {\n              view.selectNodes(sourceSetting, nodes);\n              return;\n            }\n            var newNodes = isCopy ? tools.clone(nodes) : nodes;\n\n            function dropCallback() {\n              if (isOtherTree) {\n                if (!isCopy) {\n                  for (var i = 0, l = nodes.length; i < l; i++) {\n                    view.removeNode(setting, nodes[i]);\n                  }\n                }\n                if (moveType == consts.move.TYPE_INNER) {\n                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n                } else {\n                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);\n                }\n              } else {\n                if (isCopy && moveType == consts.move.TYPE_INNER) {\n                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n                } else if (isCopy) {\n                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);\n                } else {\n                  if (moveType != consts.move.TYPE_NEXT) {\n                    for (i = 0, l = newNodes.length; i < l; i++) {\n                      view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);\n                    }\n                  } else {\n                    for (i = -1, l = newNodes.length - 1; i < l; l--) {\n                      view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);\n                    }\n                  }\n                }\n              }\n              view.selectNodes(targetSetting, newNodes);\n\n              var a = $$(newNodes[0], setting).get(0);\n              view.scrollIntoView(setting, a);\n\n              setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);\n            }\n\n            if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {\n              view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);\n            } else {\n              dropCallback();\n            }\n\n          } else {\n            view.selectNodes(sourceSetting, nodes);\n            setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);\n          }\n        }\n\n        doc.bind(\"selectstart\", _docSelect);\n\n        function _docSelect() {\n          return false;\n        }\n\n        // 2018-03-30 FireFox has fixed this issue.\n        //Avoid FireFox's Bug\n        //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.\n        // if(eventMouseDown.preventDefault) {\n        // \teventMouseDown.preventDefault();\n        // }\n        return true;\n      }\n    },\n    //method of tools for zTree\n    _tools = {\n      getAbs: function (obj) {\n        var oRect = obj.getBoundingClientRect(),\n          scrollTop = document.body.scrollTop + document.documentElement.scrollTop,\n          scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n        return [oRect.left + scrollLeft, oRect.top + scrollTop];\n      },\n      inputFocus: function (inputObj) {\n        if (inputObj.get(0)) {\n          inputObj.focus();\n          tools.setCursorPosition(inputObj.get(0), inputObj.val().length);\n        }\n      },\n      inputSelect: function (inputObj) {\n        if (inputObj.get(0)) {\n          inputObj.focus();\n          inputObj.select();\n        }\n      },\n      setCursorPosition: function (obj, pos) {\n        if (obj.setSelectionRange) {\n          obj.focus();\n          obj.setSelectionRange(pos, pos);\n        } else if (obj.createTextRange) {\n          var range = obj.createTextRange();\n          range.collapse(true);\n          range.moveEnd('character', pos);\n          range.moveStart('character', pos);\n          range.select();\n        }\n      },\n      showIfameMask: function (setting, showSign) {\n        var root = data.getRoot(setting);\n        //clear full mask\n        while (root.dragMaskList.length > 0) {\n          root.dragMaskList[0].remove();\n          root.dragMaskList.shift();\n        }\n        if (showSign) {\n          //show mask\n          var iframeList = $$(\"iframe\", setting);\n          for (var i = 0, l = iframeList.length; i < l; i++) {\n            var obj = iframeList.get(i),\n              r = tools.getAbs(obj),\n              dragMask = $$(\"<div id='zTreeMask_\" + i + \"' class='zTreeMask' style='top:\" + r[1] + \"px; left:\" + r[0] + \"px; width:\" + obj.offsetWidth + \"px; height:\" + obj.offsetHeight + \"px;'></div>\", setting);\n            dragMask.appendTo($$(\"body\", setting));\n            root.dragMaskList.push(dragMask);\n          }\n        }\n      }\n    },\n    //method of operate ztree dom\n    _view = {\n      addEditBtn: function (setting, node) {\n        if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {\n          return;\n        }\n        if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {\n          return;\n        }\n        var aObj = $$(node, consts.id.A, setting),\n          editStr = \"<span class='\" + consts.className.BUTTON + \" edit' id='\" + node.tId + consts.id.EDIT + \"' title='\" + tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle) + \"' treeNode\" + consts.id.EDIT + \" style='display:none;'></span>\";\n        aObj.append(editStr);\n\n        $$(node, consts.id.EDIT, setting).bind('click',\n          function () {\n            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;\n            view.editNode(setting, node);\n            return false;\n          }\n        ).show();\n      },\n      addRemoveBtn: function (setting, node) {\n        if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {\n          return;\n        }\n        if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {\n          return;\n        }\n        var aObj = $$(node, consts.id.A, setting),\n          removeStr = \"<span class='\" + consts.className.BUTTON + \" remove' id='\" + node.tId + consts.id.REMOVE + \"' title='\" + tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle) + \"' treeNode\" + consts.id.REMOVE + \" style='display:none;'></span>\";\n        aObj.append(removeStr);\n\n        $$(node, consts.id.REMOVE, setting).bind('click',\n          function () {\n            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;\n            view.removeNode(setting, node);\n            setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n            return false;\n          }\n        ).bind('mousedown',\n          function (eventMouseDown) {\n            return true;\n          }\n        ).show();\n      },\n      addHoverDom: function (setting, node) {\n        if (data.getRoots().showHoverDom) {\n          node.isHover = true;\n          if (setting.edit.enable) {\n            view.addEditBtn(setting, node);\n            view.addRemoveBtn(setting, node);\n          }\n          tools.apply(setting.view.addHoverDom, [setting.treeId, node]);\n        }\n      },\n      cancelCurEditNode: function (setting, forceName, isCancel) {\n        var root = data.getRoot(setting),\n          node = root.curEditNode;\n\n        if (node) {\n          var inputObj = root.curEditInput,\n            newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());\n          if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {\n            return false;\n          }\n          data.nodeName(setting, node, newName);\n          var aObj = $$(node, consts.id.A, setting);\n          aObj.removeClass(consts.node.CURSELECTED_EDIT);\n          inputObj.unbind();\n          view.setNodeName(setting, node);\n          node.editNameFlag = false;\n          root.curEditNode = null;\n          root.curEditInput = null;\n          view.selectNode(setting, node, false);\n          setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);\n        }\n        root.noSelection = true;\n        return true;\n      },\n      editNode: function (setting, node) {\n        var root = data.getRoot(setting);\n        view.editNodeBlur = false;\n        if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n          setTimeout(function () {\n            tools.inputFocus(root.curEditInput);\n          }, 0);\n          return;\n        }\n        node.editNameFlag = true;\n        view.removeTreeDom(setting, node);\n        view.cancelCurEditNode(setting);\n        view.selectNode(setting, node, false);\n        $$(node, consts.id.SPAN, setting).html(\"<input type=text class='rename' id='\" + node.tId + consts.id.INPUT + \"' treeNode\" + consts.id.INPUT + \" >\");\n        var inputObj = $$(node, consts.id.INPUT, setting);\n        inputObj.attr(\"value\", data.nodeName(setting, node));\n        if (setting.edit.editNameSelectAll) {\n          tools.inputSelect(inputObj);\n        } else {\n          tools.inputFocus(inputObj);\n        }\n\n        inputObj.bind('blur', function (event) {\n          if (!view.editNodeBlur) {\n            view.cancelCurEditNode(setting);\n          }\n        }).bind('keydown', function (event) {\n          if (event.keyCode == \"13\") {\n            view.editNodeBlur = true;\n            view.cancelCurEditNode(setting);\n          } else if (event.keyCode == \"27\") {\n            view.cancelCurEditNode(setting, null, true);\n          }\n        }).bind('click', function (event) {\n          return false;\n        }).bind('dblclick', function (event) {\n          return false;\n        });\n\n        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);\n        root.curEditInput = inputObj;\n        root.noSelection = false;\n        root.curEditNode = node;\n      },\n      moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {\n        var root = data.getRoot(setting);\n        if (targetNode == node) return;\n        if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;\n        var oldParentNode = (node.parentTId ? node.getParentNode() : root),\n          targetNodeIsRoot = (targetNode === null || targetNode == root);\n        if (targetNodeIsRoot && targetNode === null) targetNode = root;\n        if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;\n        var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);\n\n        if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {\n          moveType = consts.move.TYPE_INNER;\n        }\n\n        if (moveType == consts.move.TYPE_INNER) {\n          if (targetNodeIsRoot) {\n            //parentTId of root node is null\n            node.parentTId = null;\n          } else {\n            if (!data.nodeIsParent(setting, targetNode)) {\n              data.nodeIsParent(setting, targetNode, true);\n              targetNode.open = !!targetNode.open;\n              view.setNodeLineIcos(setting, targetNode);\n            }\n            node.parentTId = targetNode.tId;\n          }\n        }\n\n        //move node Dom\n        var targetObj, target_ulObj;\n        if (targetNodeIsRoot) {\n          targetObj = setting.treeObj;\n          target_ulObj = targetObj;\n        } else {\n          if (!isSilent && moveType == consts.move.TYPE_INNER) {\n            view.expandCollapseNode(setting, targetNode, true, false);\n          } else if (!isSilent) {\n            view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);\n          }\n          targetObj = $$(targetNode, setting);\n          target_ulObj = $$(targetNode, consts.id.UL, setting);\n          if (!!targetObj.get(0) && !target_ulObj.get(0)) {\n            var ulstr = [];\n            view.makeUlHtml(setting, targetNode, ulstr, '');\n            targetObj.append(ulstr.join(''));\n          }\n          target_ulObj = $$(targetNode, consts.id.UL, setting);\n        }\n        var nodeDom = $$(node, setting);\n        if (!nodeDom.get(0)) {\n          nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');\n        } else if (!targetObj.get(0)) {\n          nodeDom.remove();\n        }\n        if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {\n          target_ulObj.append(nodeDom);\n        } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {\n          targetObj.before(nodeDom);\n        } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {\n          targetObj.after(nodeDom);\n        }\n\n        //repair the data after move\n        var i, l,\n          tmpSrcIndex = -1,\n          tmpTargetIndex = 0,\n          oldNeighbor = null,\n          newNeighbor = null,\n          oldLevel = node.level;\n        var oldChildren = data.nodeChildren(setting, oldParentNode);\n        var targetParentChildren = data.nodeChildren(setting, targetParentNode);\n        var targetChildren = data.nodeChildren(setting, targetNode);\n        if (node.isFirstNode) {\n          tmpSrcIndex = 0;\n          if (oldChildren.length > 1) {\n            oldNeighbor = oldChildren[1];\n            oldNeighbor.isFirstNode = true;\n          }\n        } else if (node.isLastNode) {\n          tmpSrcIndex = oldChildren.length - 1;\n          oldNeighbor = oldChildren[tmpSrcIndex - 1];\n          oldNeighbor.isLastNode = true;\n        } else {\n          for (i = 0, l = oldChildren.length; i < l; i++) {\n            if (oldChildren[i].tId == node.tId) {\n              tmpSrcIndex = i;\n              break;\n            }\n          }\n        }\n        if (tmpSrcIndex >= 0) {\n          oldChildren.splice(tmpSrcIndex, 1);\n        }\n        if (moveType != consts.move.TYPE_INNER) {\n          for (i = 0, l = targetParentChildren.length; i < l; i++) {\n            if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;\n          }\n        }\n        if (moveType == consts.move.TYPE_INNER) {\n          if (!targetChildren) {\n            targetChildren = data.nodeChildren(setting, targetNode, []);\n          }\n          if (targetChildren.length > 0) {\n            newNeighbor = targetChildren[targetChildren.length - 1];\n            newNeighbor.isLastNode = false;\n          }\n          targetChildren.splice(targetChildren.length, 0, node);\n          node.isLastNode = true;\n          node.isFirstNode = (targetChildren.length == 1);\n        } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {\n          targetParentChildren.splice(tmpTargetIndex, 0, node);\n          newNeighbor = targetNode;\n          newNeighbor.isFirstNode = false;\n          node.parentTId = targetNode.parentTId;\n          node.isFirstNode = true;\n          node.isLastNode = false;\n\n        } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {\n          targetParentChildren.splice(tmpTargetIndex + 1, 0, node);\n          newNeighbor = targetNode;\n          newNeighbor.isLastNode = false;\n          node.parentTId = targetNode.parentTId;\n          node.isFirstNode = false;\n          node.isLastNode = true;\n\n        } else {\n          if (moveType == consts.move.TYPE_PREV) {\n            targetParentChildren.splice(tmpTargetIndex, 0, node);\n          } else {\n            targetParentChildren.splice(tmpTargetIndex + 1, 0, node);\n          }\n          node.parentTId = targetNode.parentTId;\n          node.isFirstNode = false;\n          node.isLastNode = false;\n        }\n        data.fixPIdKeyValue(setting, node);\n        data.setSonNodeLevel(setting, node.getParentNode(), node);\n\n        //repair node what been moved\n        view.setNodeLineIcos(setting, node);\n        view.repairNodeLevelClass(setting, node, oldLevel);\n\n        //repair node's old parentNode dom\n        if (!setting.data.keep.parent && oldChildren.length < 1) {\n          //old parentNode has no child nodes\n          data.nodeIsParent(setting, oldParentNode, false);\n          oldParentNode.open = false;\n          var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),\n            tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),\n            tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);\n          view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);\n          view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);\n          tmp_ulObj.css(\"display\", \"none\");\n\n        } else if (oldNeighbor) {\n          //old neigbor node\n          view.setNodeLineIcos(setting, oldNeighbor);\n        }\n\n        //new neigbor node\n        if (newNeighbor) {\n          view.setNodeLineIcos(setting, newNeighbor);\n        }\n\n        //repair checkbox / radio\n        if (!!setting.check && setting.check.enable && view.repairChkClass) {\n          view.repairChkClass(setting, oldParentNode);\n          view.repairParentChkClassWithSelf(setting, oldParentNode);\n          if (oldParentNode != node.parent)\n            view.repairParentChkClassWithSelf(setting, node);\n        }\n\n        //expand parents after move\n        if (!isSilent) {\n          view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);\n        }\n      },\n      removeEditBtn: function (setting, node) {\n        $$(node, consts.id.EDIT, setting).unbind().remove();\n      },\n      removeRemoveBtn: function (setting, node) {\n        $$(node, consts.id.REMOVE, setting).unbind().remove();\n      },\n      removeTreeDom: function (setting, node) {\n        node.isHover = false;\n        view.removeEditBtn(setting, node);\n        view.removeRemoveBtn(setting, node);\n        tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);\n      },\n      repairNodeLevelClass: function (setting, node, oldLevel) {\n        if (oldLevel === node.level) return;\n        var liObj = $$(node, setting),\n          aObj = $$(node, consts.id.A, setting),\n          ulObj = $$(node, consts.id.UL, setting),\n          oldClass = consts.className.LEVEL + oldLevel,\n          newClass = consts.className.LEVEL + node.level;\n        liObj.removeClass(oldClass);\n        liObj.addClass(newClass);\n        aObj.removeClass(oldClass);\n        aObj.addClass(newClass);\n        ulObj.removeClass(oldClass);\n        ulObj.addClass(newClass);\n      },\n      selectNodes: function (setting, nodes) {\n        for (var i = 0, l = nodes.length; i < l; i++) {\n          view.selectNode(setting, nodes[i], i > 0);\n        }\n      }\n    },\n\n    _z = {\n      tools: _tools,\n      view: _view,\n      event: _event,\n      data: _data\n    };\n  $.extend(true, $.fn.zTree.consts, _consts);\n  $.extend(true, $.fn.zTree._z, _z);\n\n  var zt = $.fn.zTree,\n    tools = zt._z.tools,\n    consts = zt.consts,\n    view = zt._z.view,\n    data = zt._z.data,\n    event = zt._z.event,\n    $$ = tools.$;\n\n  data.exSetting(_setting);\n  data.addInitBind(_bindEvent);\n  data.addInitUnBind(_unbindEvent);\n  data.addInitCache(_initCache);\n  data.addInitNode(_initNode);\n  data.addInitProxy(_eventProxy);\n  data.addInitRoot(_initRoot);\n  data.addZTreeTools(_zTreeTools);\n\n  var _cancelPreSelectedNode = view.cancelPreSelectedNode;\n  view.cancelPreSelectedNode = function (setting, node) {\n    var list = data.getRoot(setting).curSelectedList;\n    for (var i = 0, j = list.length; i < j; i++) {\n      if (!node || node === list[i]) {\n        view.removeTreeDom(setting, list[i]);\n        if (node) break;\n      }\n    }\n    if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);\n  }\n\n  var _createNodes = view.createNodes;\n  view.createNodes = function (setting, level, nodes, parentNode, index) {\n    if (_createNodes) {\n      _createNodes.apply(view, arguments);\n    }\n    if (!nodes) return;\n    if (view.repairParentChkClassWithSelf) {\n      view.repairParentChkClassWithSelf(setting, parentNode);\n    }\n  }\n\n  var _makeNodeUrl = view.makeNodeUrl;\n  view.makeNodeUrl = function (setting, node) {\n    return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));\n  }\n\n  var _removeNode = view.removeNode;\n  view.removeNode = function (setting, node) {\n    var root = data.getRoot(setting);\n    if (root.curEditNode === node) root.curEditNode = null;\n    if (_removeNode) {\n      _removeNode.apply(view, arguments);\n    }\n  }\n\n  var _selectNode = view.selectNode;\n  view.selectNode = function (setting, node, addFlag) {\n    var root = data.getRoot(setting);\n    if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n      return false;\n    }\n    if (_selectNode) _selectNode.apply(view, arguments);\n    view.addHoverDom(setting, node);\n    return true;\n  }\n\n  var _uCanDo = tools.uCanDo;\n  tools.uCanDo = function (setting, e) {\n    var root = data.getRoot(setting);\n    if (e && (tools.eqs(e.type, \"mouseover\") || tools.eqs(e.type, \"mouseout\") || tools.eqs(e.type, \"mousedown\") || tools.eqs(e.type, \"mouseup\"))) {\n      return true;\n    }\n    if (root.curEditNode) {\n      view.editNodeBlur = false;\n      root.curEditInput.focus();\n    }\n    return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);\n  }\n})(jQuery);"
  },
  {
    "path": "lib/zTree_v3/js/jquery.ztree.exhide.js",
    "content": "/*\n * JQuery zTree exHideNodes v3.5.40\n * http://treejs.cn/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2019-01-18\n */\n(function ($) {\n  var _setting = {\n    data: {\n      key: {\n        isHidden: \"isHidden\"\n      }\n    }\n  };\n  //default init node of exLib\n  var _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n      var isHidden = data.isHidden(setting, n);\n      data.isHidden(setting, n, isHidden);\n      data.initHideForExCheck(setting, n);\n    },\n    //add dom for check\n    _beforeA = function (setting, node, html) {\n    },\n    //update zTreeObj, add method of exLib\n    _zTreeTools = function (setting, zTreeTools) {\n      zTreeTools.showNodes = function (nodes, options) {\n        view.showNodes(setting, nodes, options);\n      }\n      zTreeTools.showNode = function (node, options) {\n        if (!node) {\n          return;\n        }\n        view.showNodes(setting, [node], options);\n      }\n      zTreeTools.hideNodes = function (nodes, options) {\n        view.hideNodes(setting, nodes, options);\n      }\n      zTreeTools.hideNode = function (node, options) {\n        if (!node) {\n          return;\n        }\n        view.hideNodes(setting, [node], options);\n      }\n\n      var _checkNode = zTreeTools.checkNode;\n      if (_checkNode) {\n        zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {\n          if (!!node && !!data.isHidden(setting, node)) {\n            return;\n          }\n          _checkNode.apply(zTreeTools, arguments);\n        }\n      }\n    },\n    //method of operate data\n    _data = {\n      initHideForExCheck: function (setting, n) {\n        var isHidden = data.isHidden(setting, n);\n        if (isHidden && setting.check && setting.check.enable) {\n          if (typeof n._nocheck == \"undefined\") {\n            n._nocheck = !!n.nocheck\n            n.nocheck = true;\n          }\n          n.check_Child_State = -1;\n          if (view.repairParentChkClassWithSelf) {\n            view.repairParentChkClassWithSelf(setting, n);\n          }\n        }\n      },\n      initShowForExCheck: function (setting, n) {\n        var isHidden = data.isHidden(setting, n);\n        if (!isHidden && setting.check && setting.check.enable) {\n          if (typeof n._nocheck != \"undefined\") {\n            n.nocheck = n._nocheck;\n            delete n._nocheck;\n          }\n          if (view.setChkClass) {\n            var checkObj = $$(n, consts.id.CHECK, setting);\n            view.setChkClass(setting, checkObj, n);\n          }\n          if (view.repairParentChkClassWithSelf) {\n            view.repairParentChkClassWithSelf(setting, n);\n          }\n        }\n      }\n    },\n    //method of operate ztree dom\n    _view = {\n      clearOldFirstNode: function (setting, node) {\n        var n = node.getNextNode();\n        while (!!n) {\n          if (n.isFirstNode) {\n            n.isFirstNode = false;\n            view.setNodeLineIcos(setting, n);\n            break;\n          }\n          if (n.isLastNode) {\n            break;\n          }\n          n = n.getNextNode();\n        }\n      },\n      clearOldLastNode: function (setting, node, openFlag) {\n        var n = node.getPreNode();\n        while (!!n) {\n          if (n.isLastNode) {\n            n.isLastNode = false;\n            if (openFlag) {\n              view.setNodeLineIcos(setting, n);\n            }\n            break;\n          }\n          if (n.isFirstNode) {\n            break;\n          }\n          n = n.getPreNode();\n        }\n      },\n      makeDOMNodeMainBefore: function (html, setting, node) {\n        var isHidden = data.isHidden(setting, node);\n        html.push(\"<li \", (isHidden ? \"style='display:none;' \" : \"\"), \"id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level, \"' tabindex='0' hidefocus='true' treenode>\");\n      },\n      showNode: function (setting, node, options) {\n        data.isHidden(setting, node, false);\n        data.initShowForExCheck(setting, node);\n        $$(node, setting).show();\n      },\n      showNodes: function (setting, nodes, options) {\n        if (!nodes || nodes.length == 0) {\n          return;\n        }\n        var pList = {}, i, j;\n        for (i = 0, j = nodes.length; i < j; i++) {\n          var n = nodes[i];\n          if (!pList[n.parentTId]) {\n            var pn = n.getParentNode();\n            pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\n          }\n          view.showNode(setting, n, options);\n        }\n        for (var tId in pList) {\n          var children = data.nodeChildren(setting, pList[tId]);\n          view.setFirstNodeForShow(setting, children);\n          view.setLastNodeForShow(setting, children);\n        }\n      },\n      hideNode: function (setting, node, options) {\n        data.isHidden(setting, node, true);\n        node.isFirstNode = false;\n        node.isLastNode = false;\n        data.initHideForExCheck(setting, node);\n        view.cancelPreSelectedNode(setting, node);\n        $$(node, setting).hide();\n      },\n      hideNodes: function (setting, nodes, options) {\n        if (!nodes || nodes.length == 0) {\n          return;\n        }\n        var pList = {}, i, j;\n        for (i = 0, j = nodes.length; i < j; i++) {\n          var n = nodes[i];\n          if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {\n            var pn = n.getParentNode();\n            pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\n          }\n          view.hideNode(setting, n, options);\n        }\n        for (var tId in pList) {\n          var children = data.nodeChildren(setting, pList[tId]);\n          view.setFirstNodeForHide(setting, children);\n          view.setLastNodeForHide(setting, children);\n        }\n      },\n      setFirstNode: function (setting, parentNode) {\n        var children = data.nodeChildren(setting, parentNode);\n        var isHidden = data.isHidden(setting, children[0], false);\n        if (children.length > 0 && !isHidden) {\n          children[0].isFirstNode = true;\n        } else if (children.length > 0) {\n          view.setFirstNodeForHide(setting, children);\n        }\n      },\n      setLastNode: function (setting, parentNode) {\n        var children = data.nodeChildren(setting, parentNode);\n        var isHidden = data.isHidden(setting, children[0]);\n        if (children.length > 0 && !isHidden) {\n          children[children.length - 1].isLastNode = true;\n        } else if (children.length > 0) {\n          view.setLastNodeForHide(setting, children);\n        }\n      },\n      setFirstNodeForHide: function (setting, nodes) {\n        var n, i, j;\n        for (i = 0, j = nodes.length; i < j; i++) {\n          n = nodes[i];\n          if (n.isFirstNode) {\n            break;\n          }\n          var isHidden = data.isHidden(setting, n);\n          if (!isHidden && !n.isFirstNode) {\n            n.isFirstNode = true;\n            view.setNodeLineIcos(setting, n);\n            break;\n          } else {\n            n = null;\n          }\n        }\n        return n;\n      },\n      setFirstNodeForShow: function (setting, nodes) {\n        var n, i, j, first, old;\n        for (i = 0, j = nodes.length; i < j; i++) {\n          n = nodes[i];\n          var isHidden = data.isHidden(setting, n);\n          if (!first && !isHidden && n.isFirstNode) {\n            first = n;\n            break;\n          } else if (!first && !isHidden && !n.isFirstNode) {\n            n.isFirstNode = true;\n            first = n;\n            view.setNodeLineIcos(setting, n);\n          } else if (first && n.isFirstNode) {\n            n.isFirstNode = false;\n            old = n;\n            view.setNodeLineIcos(setting, n);\n            break;\n          } else {\n            n = null;\n          }\n        }\n        return {\"new\": first, \"old\": old};\n      },\n      setLastNodeForHide: function (setting, nodes) {\n        var n, i;\n        for (i = nodes.length - 1; i >= 0; i--) {\n          n = nodes[i];\n          if (n.isLastNode) {\n            break;\n          }\n          var isHidden = data.isHidden(setting, n);\n          if (!isHidden && !n.isLastNode) {\n            n.isLastNode = true;\n            view.setNodeLineIcos(setting, n);\n            break;\n          } else {\n            n = null;\n          }\n        }\n        return n;\n      },\n      setLastNodeForShow: function (setting, nodes) {\n        var n, i, j, last, old;\n        for (i = nodes.length - 1; i >= 0; i--) {\n          n = nodes[i];\n          var isHidden = data.isHidden(setting, n);\n          if (!last && !isHidden && n.isLastNode) {\n            last = n;\n            break;\n          } else if (!last && !isHidden && !n.isLastNode) {\n            n.isLastNode = true;\n            last = n;\n            view.setNodeLineIcos(setting, n);\n          } else if (last && n.isLastNode) {\n            n.isLastNode = false;\n            old = n;\n            view.setNodeLineIcos(setting, n);\n            break;\n          } else {\n            n = null;\n          }\n        }\n        return {\"new\": last, \"old\": old};\n      }\n    },\n\n    _z = {\n      view: _view,\n      data: _data\n    };\n  $.extend(true, $.fn.zTree._z, _z);\n\n  var zt = $.fn.zTree,\n    tools = zt._z.tools,\n    consts = zt.consts,\n    view = zt._z.view,\n    data = zt._z.data,\n    event = zt._z.event,\n    $$ = tools.$;\n\n  data.isHidden = function (setting, node, newIsHidden) {\n    if (!node) {\n      return false;\n    }\n    var key = setting.data.key.isHidden;\n    if (typeof newIsHidden !== 'undefined') {\n      if (typeof newIsHidden === \"string\") {\n        newIsHidden = tools.eqs(newIsHidden, \"true\");\n      }\n      newIsHidden = !!newIsHidden;\n      node[key] = newIsHidden;\n    } else if (typeof node[key] == \"string\"){\n      node[key] = tools.eqs(node[key], \"true\");\n    } else {\n      node[key] = !!node[key];\n    }\n    return node[key];\n  };\n\n  data.exSetting(_setting);\n  data.addInitNode(_initNode);\n  data.addBeforeA(_beforeA);\n  data.addZTreeTools(_zTreeTools);\n\n//\tOverride method in core\n  var _dInitNode = data.initNode;\n  data.initNode = function (setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {\n    var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),\n      children = tmpPNode[setting.data.key.children];\n    data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);\n    data.tmpHideLastNode = view.setLastNodeForHide(setting, children);\n    if (openFlag) {\n      view.setNodeLineIcos(setting, data.tmpHideFirstNode);\n      view.setNodeLineIcos(setting, data.tmpHideLastNode);\n    }\n    isFirstNode = (data.tmpHideFirstNode === node);\n    isLastNode = (data.tmpHideLastNode === node);\n    if (_dInitNode) _dInitNode.apply(data, arguments);\n    if (openFlag && isLastNode) {\n      view.clearOldLastNode(setting, node, openFlag);\n    }\n  };\n\n  var _makeChkFlag = data.makeChkFlag;\n  if (!!_makeChkFlag) {\n    data.makeChkFlag = function (setting, node) {\n      if (!!node && !!data.isHidden(setting, node)) {\n        return;\n      }\n      _makeChkFlag.apply(data, arguments);\n    }\n  }\n\n  var _getTreeCheckedNodes = data.getTreeCheckedNodes;\n  if (!!_getTreeCheckedNodes) {\n    data.getTreeCheckedNodes = function (setting, nodes, checked, results) {\n      if (!!nodes && nodes.length > 0) {\n        var p = nodes[0].getParentNode();\n        if (!!p && !!data.isHidden(setting, p)) {\n          return [];\n        }\n      }\n      return _getTreeCheckedNodes.apply(data, arguments);\n    }\n  }\n\n  var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;\n  if (!!_getTreeChangeCheckedNodes) {\n    data.getTreeChangeCheckedNodes = function (setting, nodes, results) {\n      if (!!nodes && nodes.length > 0) {\n        var p = nodes[0].getParentNode();\n        if (!!p && !!data.isHidden(setting, p)) {\n          return [];\n        }\n      }\n      return _getTreeChangeCheckedNodes.apply(data, arguments);\n    }\n  }\n\n  var _expandCollapseSonNode = view.expandCollapseSonNode;\n  if (!!_expandCollapseSonNode) {\n    view.expandCollapseSonNode = function (setting, node, expandFlag, animateFlag, callback) {\n      if (!!node && !!data.isHidden(setting, node)) {\n        return;\n      }\n      _expandCollapseSonNode.apply(view, arguments);\n    }\n  }\n\n  var _setSonNodeCheckBox = view.setSonNodeCheckBox;\n  if (!!_setSonNodeCheckBox) {\n    view.setSonNodeCheckBox = function (setting, node, value, srcNode) {\n      if (!!node && !!data.isHidden(setting, node)) {\n        return;\n      }\n      _setSonNodeCheckBox.apply(view, arguments);\n    }\n  }\n\n  var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;\n  if (!!_repairParentChkClassWithSelf) {\n    view.repairParentChkClassWithSelf = function (setting, node) {\n      if (!!node && !!data.isHidden(setting, node)) {\n        return;\n      }\n      _repairParentChkClassWithSelf.apply(view, arguments);\n    }\n  }\n})(jQuery);"
  },
  {
    "path": "lib/zTree_v3/log v3.x.txt",
    "content": "﻿=ZTree v3.x (JQuery Tree插件) 更新日志=\n\n<font color=\"red\">为了更好的优化及扩展zTree, 因此决定升级为v3.x，并且对之前的v2.x不兼容，会有很多结构上的修改，对此深感无奈与抱歉，请大家谅解。</font>\n<font color=\"red\">\n\n具体修改内容可参考：\n\n   * [http://www.treejs.cn/v3/api.php zTree v3.x API 文档]\n\n   * [http://www.treejs.cn/v3/demo.php#_101 zTree v3.x Demo 演示]\n\n   * [http://www.treejs.cn/v3/faq.php#_101 zTree v3.x 常见问题]\n\n</font>\n\n*2019.01.18* v3.5.40\n   * [修改] fuzzySearch.js    Thanks @yigger\n\n*2019.01.17* v3.5.39\n   * [修改] data.nodeChecked & data.isHidden & data.nodeIsParent 的 返回值规范为 boolean   Thanks @xinhochen & @田biubiu & @FelixFly\n\n*2019.01.08* v3.5.38\n   * [修改] data.nodeChecked & data.isHidden 的 返回值规范为 boolean   Thanks @xinhochen\n\n*2018.12.10* v3.5.37\n   * [修改] fuzzySearch.js & Demo   Thanks @SadWood & @JerryWang24\n\n*2018.08.21* v3.5.37\n   * [修改] 替换 scrollIntoViewIfNeeded 方法    Thanks @jocki84\n   * [修改] 部分 API 文字错误\n\n*2018.06.26* v3.5.36\n   * [增加] setting.async.headers & setting.async.xhrFields\n\n*2018.04.24* v3.5.35\n   * [增加] Demo：模糊搜索（Fuzzy Search）  Thanks @bigablecat\n\n*2018.03.30* v3.5.35\n   * [修改] 关闭拖拽方法内的 eventMouseDown.preventDefault(); 避免影响 zTree 外部的事件  Thanks @heyusysu\n\n*2018.02.12* v3.5.34\n   * [修改] nodeChecked 方法内的错误  Thanks @勇哥\n\n*2018.01.30* v3.5.33\n   * [修改] nodeIsParent 方法内的错误  Thanks @netmou\n\n*2018.01.06* v3.5.32\n   * [修改] setting.async.autoParam / otherParam 支持 function\n   * [修改] isParent / isHidden 允许自定义属性名称 setting.data.key.isParent / isHidden\n\n*2017.12.28* v3.5.31\n   * [修改] 初始化节点数据的规则，支持 treeNode { name: \"Node2\", children: []}, 情况下自动设置为 isParent = true\n\n*2017.11.11* v3.5.30\n   * [修改] scrollIntoViewIfNeeded 方法对 IE7 的兼容\n\n*2017.06.23* v3.5.29\n   * [修改] 拖拽操作后 body.css(\"cursor\", \"auto\"); 修改为 body.css(\"cursor\", \"\");（感谢 Jim）\n\n*2017.06.19* v3.5.29\n   * [增加] reAsyncChildNodesPromise(parentNode, reloadType, isSilent) 方法支持 ES6 Promise\n   * [修改] reAsyncChildNodes 方法增加 callback 参数\n\n*2017.01.20* v3.5.28\n   * [修改] scrollIntoViewIfNeeded 方法对 IE8 的兼容\n\n*2016.12.27* v3.5.27\n   * [修改] addNodes 方法设置 index 参数后，导致 treeNode.isLastNode 错误\n\n*2016.11.03* v3.5.26\n   * [修改] 使用 scrollIntoViewIfNeeded 替代 scrollIntoView，兼容各种浏览器\n\n*2016.09.27* v3.5.25\n   * [修改] ajax 异步加载支持 contentType = 'application/json'\n\n*2016.06.06* v3.5.24\n   * [修改] selectNode 方法中 某些情况下，isSilent 参数无效\n   * [修改] 数据中 id = 'length'时， 导致 transformTozTreeFormat() 方法异常\n\n*2016.04.08* v3.5.23\n   * [修改] expandCollapseNode 方法被 gulp 压缩后，在 IE8 上会导致溢出\n\n*2016.04.06* v3.5.23\n   * [修改] 替换 arguments.callee 避免 'use strict' 严格模式下报错\n\n*2016.04.01* v3.5.23\n   * [修改] selectNode 方法 增加 isSilent 参数，可以禁止 选中节点时，自动滚动到视图\n   \n*2016.03.01* v3.5.22\n   * [修改] metro Demo 的样式错误\n   * [修改] 增加 <a> 的 padding 后， 导致 setting.edit.drag.inner 无效\n\n*2016.02.17* v3.5.21\n   * [修改] zTree js 文件名 （为了便于发布到 https://cdnjs.com/）\n\n*2016.01.20* v3.5.20\n   * [修改] checkAllNodes() 方法不处理 (chkDisabled = true) 的父节点的子节点的 bug\n\n*2015.12.04* v3.5.19.3\n   * [修改] 为避免定位节点时抢焦点， 使用 scrollIntoView 方法替换之前的 focus 方法（对于IE6等旧浏览器仍然使用 focus方法）\n\n*2015.11.15* v3.5.19.2\n   * [增加] 给节点名称的 span 标签增加 class，便于用户设置 css\n\n*2015.10.26* v3.5.19.1\n   * [修改] addNodes 新方法 导致 拖拽节点时报错\n   * [增加] treeNode.getIndex 方法，可以快速获取 节点在 子节点中的位置\n   * [增加] treeNode.getPath 方法，可以快速获取 节点的所有父节点\n\n*2015.10.22* v3.5.19\n   * [修改] addNodes 方法支持直接添加新节点到任意位置 addNodes(parentNode, index, newNodes, isSilent)\n   * [修改] selectstart 事件未解绑导致的内存泄漏\n\n*2015.08.26* v3.5.18\n   * [修改] onSelected/onUnSelected 回调参数，由 (event, treeId, node) 修改为 （treeId, node）；另外 删除 已选择的节点时，也会触发 onUnSelected 回调\n   * [增加] Allow nodes to specify their own icon using an 'icon' property of the 'setting.data.key'\n   * [增加] metro 风格 demo\n   * [增加] awesome 风格 demo\n   * [增加] 回调 onSelected / onUnSelected\n\n*2015.02.15* v3.5.17\n   * [修改] excheck 扩展中 removeClass 与 jQueryUI 1.9 冲突的问题，目前放弃 removeClass 方法\n   * [修改] 优化 exhide 扩展包初始化效率，避免数据多时 ie8 假死的 bug（感谢：https://github.com/sarxos）\n   * [修改] 若干 Demo & API 的小错误\n   * [修改] 异步加载 低版本 IE 缓存严重的问题\n   * [修改] 在 onRename 回调中使用 updateNode 方法无效的问题\n\n*2014.03.09* v3.5.16\n   * [增加] onDragMove 回调，便于控制 zTree 节点与其他 DOM 的拖拽操作。（感谢 yumi301）\n   * [增加] 针对 Mac 系统 Cmd 键的支持， Cmd 键 + 左键 也可以多选节点\n\n   * [修改] 使用 destory 方法销毁树以后，依然可以从 getZTreeObj 方法中获取到 zTree 对象的 bug。\n   * [修改] onCheck 回调的 event，恢复为 zTree 自身的 event 事件，同时利用 srcEvent 传递原始 event 对象。（感谢 yumi301）\n   * [修改] 拖拽多个节点时，超出 maxShowNodeNum 设置个数的节点会失去 被选择状态的 bug\n   * [修改] excheck & exedit 扩展包的 zTree 方法中 setting 数据错误导致 checkNode、updateNode 等方法操作 radio 失效的 bug\n   * [修改] 不加载 exedit 扩展包时，使用 removeNode 方法无法触发 beforeRemove 和 onRemove 回调的 bug\n\n*2013.10.19* v3.5.15\n   * [增加] setting.view.txtSelectedEnable 属性，满足部分项目中客户对于可以选择节点文本信息的强烈欲望。\n\n   * [修改]  exhide 扩展包导致操作子节点后 isLastNode 属性异常 的bug\n   * [修改]  使用 cancelEditName 方法时，beforeRename & onRename 的 isCancel 始终为 false 的bug\n   * [修改]  编辑状态， beforeRename 回调 return false 时，提示信息导致 input 失去焦点后， 当树再次得到焦点时，让 input 自动获取焦点\n   * [修改]  判断拖拽到节点的 <a> 标签中自定义的无 id 组件判断错误的bug\n   * [修改]  async_edit.html demo 中 添加按钮 显示的 bug\n   * [修改]  当没有开启异步加载模式下，对于没有子节点的父节点，即使设置 open=true 在初始化时也不会设置为展开状态的bug （对于异步加载模式下依然会强行设置为折叠状态）\n\n*2013.06.28* v3.5.14\n   * [修改]  拖拽节点时 iframe 遮罩异常的bug\n   * [修改]  清空子节点后重新添加子节点无法显示的bug\n\n*2013.06.02* v3.5.13\n\n   * [增加] beforeRename & onRename 增加 isCancel 参数，可以监控用户 ESC 取消编辑的事件\n\n   * [修改] 初始化时 radioType=\"all\", 父节点未展开 且 子节点有被勾选，点击其他 radio 时，不会取消勾选该子节点的bug\n   * [修改] 多棵树拖拽时，拖拽无效后会导致目标书已选择的节点清空的 bug。\n   * [修改] 多棵树拖拽时，会触发 addHoverDom 的bug。\n   * [修改] 多棵树拖拽时，由于 beforeDrog 或 prev / inner / next 返回 false 后未触发原始节点的 addHoverDom 的bug\n   * [修改] 异步加载时，对于未加载子节点的父节点使用 expandNode 方法时， sonSign 设置为 true后，导致异步加载的节点无法正常显示的bug\n   * [修改] 一次性加载全部数据，如果父节点 A 未展开，但下一级的父节点 A1 设置了 open=true 的时候，使用 expandAll 方法导致 A1 的下一级父节点出现重复的 bug\n   * [修改] 增加对 iframe 的支持，可以只在主页面加载 zTree 的 js，在 iframe 内创建树 [https://github.com/zTree/zTree_v3/issues/7 Issue Info]\n   * [修改] 引入 exhide 扩展包 导致页面上同时加载多棵树时，根节点 的 连接线图标出现异常 的 bug [http://tieba.baidu.com/p/2277416574]\n   * [修改] excheck & exedit 扩展包中事件代理获取节点 tId 的方法，保证适当修改 DOM 结构也能得到 tId\n\n*2013.03.11* v3.5.12\n   * [修改] 由于 jquery 1.9 中移除 event.srcElement 导致的 js 报错的bug。\n   * [修改] 在异步加载模式下，使用 moveNode 方法，且 moveType != \"inner\" 时，也会导致 targetNode 自动加载子节点的 bug\n   * [修改] 对已经显示的节点(nocheck=true)使用 showNodes 或 showNode 方法后，导致勾选框出现的bug。\n   * [修改] 对已经隐藏的节点(nocheck=false)使用 hideNodes 或 hideNode 方法后，导致勾选框消失的bug。\n   * [修改] getNodesByParamFuzzy 支持 大小写模糊。\n   * [修改] className 结构，提取 _consts.className.BUTTON / LEVEL / ICO_LOADING / SWITCH，便于快速修改 css 冲突。\n     例如：与 WordPress 产生冲突后，直接修改 core 中的 \"button\" 和 \"level\" 即可。  Issue: https://github.com/zTree/zTree_v3/issues/2\n\n*2013.01.28* v3.5.02\n   * [增加] setting.check.chkDisabledInherit 属性，用于设置 chkDisabled 在初始化时子节点是否可以继承父节点的 chkDisabled 属性\n   * [删除] 内部 noSel 方法，使用 selectstart事件 和 \"-moz-user-select\"样式 处理禁止 节点文字被选择的功能\n   * [修改] 不兼容 jQuery 1.9 的bug\n   * [修改] onDrop 的触发规则，保证异步加载模式下，可以在延迟加载结束后触发，避免 onDrop 中被拖拽的节点是已经更新后的数据。\n   * [修改] setChkDisabled 方法，增加 inheritParent, inheritChildren 参数设置是否让父子节点继承 disabled\n   * [修改] 异步加载时 拼接参数的方法，由 string 修改为 json 对象\n   * [修正] 1-2-3 3级节点时，如果 2级节点 全部设置为 nocheck 或 chkDisabled后，勾选3级节点时，1级节点的半勾选状态错误的 bug\n   * [修改] Demo: checkbox_nocheck.html & checkbox_chkDisabled.html;\n   * [修改] Demo: edit_super.html，增加 showRenameBtn & showRemoveBtn 的演示\n   * [修改] Demo: asyncForAll, 将 post 修改为 get；为了避免由于 IE10 的 bug 造成的客户端 以及 服务端崩溃\n      IE10 ajax Post 无法提交参数的bug (http://bugs.jquery.com/ticket/12790)\n\n*2012.12.21* v3.5.01\n   * [优化] clone 方法\n   * [修正] 对于初始化无 children 属性的父节点进行 reAsyncChildNodes 操作时出错的 bug\n   * [修正] beforeRename 回调中使用 cancelEditName 方法后，再 return false 导致无法重新进行编辑的 bug\n   * [修正] exedit 扩展包让 setting.data.key.url 失效的 bug\n   * [修正] setting.check.autoCheckTrigger 设置为 true 时，onCheck 回调缺少 event 参数的 bug\n   * [修正] singlepath.html Demo 中的 bug\n\n*2012.11.20* v3.5\n   * [优化] 原先的 clone 方法 （特别感谢：愚人码头）\n   * [修改] 隐藏父节点后，使用 expandAll 方法导致 父节点展开的 bug\n   * [修改] 使用 jQuery v1.7 以上时，设置 zTree 容器 ul 隐藏（visibility: hidden;）后， 调用 selectNode 导致 IE 浏览器报错 Can't move focus 的 bug\n   * [修改] 正在异步加载时，执行 destory 或 init 方法后，异步加载的节点影响新树的 bug\n   * [修改] 方法 reAsyncChildNodes 在 refresh 的时候未清空内部 cache 导致内存泄露 的 bug\n   * [修改] 批量节点拖拽到其他父节点内（inner）时，导致顺序反转 的 bug\n   * [修改] 对于 使用 html格式的 节点无法触发 双击事件 的 bug\n   * [修改] onCheck 回调中的 event ，保证与触发事件中的 event 一致\n   * [修改] 异步加载时，在 onNodeCreated 中执行 selectNode 后，导致节点折叠的 bug\n   * [修改] API 中 dataFilter 的参数名称 childNodes ->  responseData\n   * [修改] API 中 iconSkin 的 举例内容\n   * [修改] API 中 chkDisabled 的说明\n   * [修改] Demo 中 index.html 内的 loadReady 重复绑定问题\n\n*2012.09.03* v3.4\n   * [增加]  Demo —— OutLook 样式的左侧菜单\n   * [增加] 清空 zTree 的方法 $.fn.zTree.destory(treeId) & zTree.destory()\n\n   * [修改] core核心文件内 _eventProxy 方法中获取 tId 的方法，提高 DOM 的灵活性\n   * [修改] 初始化时 多层父节点的 checkbox 半选状态计算错误的 bug\n   * [修改] 同时选中父、子节点后，利用 getSelectedNodes 获取选中节点并利用 removeNode 删除时报错的 bug\n   * [修改] treeNode.chkDisabled / nocheck 属性，支持字符串格式的 \"false\"/\"true\"\n   * [修改] 异步加载模式下无法利用 server 返回 xml 并且 在 dataFilter 中继续处理的 bug\n   * [修改] title 只允许设置为 string 类型值的问题。 修正后允许设置为 number 类型的值\n   * [修改] zId 计数规则 & Cache 保存，减少 IE9 的 bug 造成的内存泄漏\n   * [修改] API 页面搜索功能导致 IE 崩溃的 bug\n\n*2012.07.16* v3.3\n   * [增加] 扩展库 exhide -- 节点隐藏功能\n\n   * [修改] getNodesByFilter 方法，添加 invokeParam 自定义参数\n   * [修改] 拖拽中测试代码未删除，导致出现黄颜色的 iframe 遮罩层的 bug\n   * [修改] 延迟加载方法 对于使用 expandAll 进行全部展开时，导致 onNodeCreated 回调 和 addDiyDom 方法触发过早的 bug\n   * [修改] 使用 moveNode 移动尚未生成 DOM 的节点时，视图会出现异常的 bug\n   * [修改] 删除节点后，相关节点的 isFirstNode 属性未重置的 bug\n   * [修改] getPreNode(),getNextNode() 方法在对于特殊情况时计算错误的 bug\n   * [修改] 设置 title 之后，如果重新将 title 内容设置为空后，会导致无法更新 title 的 bug\n   * [修改] 针对 setting.check.chkStyle==\"radio\" && setting.check.radioType==\"all\" 的情况时，getTreeCheckedNodes方法优化，找到一个结果就 break\n   * [修改] zTreeObj.getCheckedNodes(false) 在 radioType = \"all\" 时计算错误的 bug\n   * [修改] 完善 API 中 beforeDrop / onDrop 的关于 treeId 的说明\n\n*2012.05.13* v3.2\n   * [增加] setting.data.key.url 允许修改 treeNode.url 属性\n   * [增加] getNodesByFilter(filter, isSingle) 方法\n   * [增加] \"与其他 DOM 拖拽互动\" 的 Demo (http://www.treejs.cn/v3/demo.php#_511)\n   * [增加] \"异步加载模式下全部展开\" 的 Demo (http://www.treejs.cn/v3/demo.php#_512)\n\n   * [修改] 代码结构，将 addNodes、removeNode、removeChildNodes 方法 和 beforeRemove、onRemove 回调 转移到 core 内\n   * [修改] IE7的环境下无子节点的父节点反复展开出现多余空行的 bug\n   * [修改] 异步加载时，如果出现网络异常等，会导致 图标显示错误的 bug\n   * [修改] dataFilter中 return null 导致异常 的 bug\n   * [修改] removeChildNodes 方法清空子节点后，无法正常添加节点的 bug\n   * [修改] moveNode 后节点中的自定义元素的事件丢失的 bug\n   * [修改] moveNode 方法中设置 isSilent = true 时，如果移动到已展开的 父节点后，出现异常的 bug\n   * [修改] onClick/onDrag/onDrop 回调中 event 不是原始 event 的 bug\n   * [修改] onDrop 回调中 当拖拽无效时，无法获得 treeNodes 的 bug\n   * [修改] onDrop 无法判断拖拽是 移动还是复制的问题\n   * [修改] 未开启异步加载模式时，拖拽节点到子节点为空的父节点内时 出现异常 的 bug\n   * [修改] 拖拽过程中，反复在 父节点图标上划动时，会出现停顿的 bug\n            (需要css 结构—— button -> span.button)\n\n   * [修改] 拖拽操作时箭头 与 targetNode 背景之间的细节现实问题，便于用户拖拽时更容易区分 prev、next 和 inner 操作\n   * [修改] 拖拽操作时IE6/7 下 在 节点<a> 右侧 10px 内会导致 targetNode = root 的 bug\n   * [修改] 编辑模式下 默认的编辑按钮、删除按钮点击后，如果相应的 before 回调 return false 时会触发 onClick 回调的 bug\n\n*2012.02.14* v3.1\n   * [增加] ajax 的参数 setting.async.contentType ，让提交参数适用于 json 数据提交 （主要适用于 .Net 的开发）。\n   * [增加] setting.edit.editNameSelectAll, 用于设定编辑节点名称时初次显示 input 后 text 内容为全选\n   * [修改] 异步加载 规则，不再仅仅依靠父节点的子节点数来判定，增加内部属性 zAsync，保证默认状态下父节点及时无子节点也只能异步加载一次，除非使用 reAsyncChildNodes 方法强行控制异步加载。\n   * [修改] 放大浏览器后导致 界面出现多余连接线的bug （需要更新：icon 图标和 css ）\n   * [修改] 在编辑状态，如果节点名超过编辑框宽度，左右键在框内不起作用的bug（IE 6 7 8 出现）\n      CSS 中 filter:alpha(opacity=80) 造成的，应该是 ie 的 bug，需要更新 css 文件\n   * [修改] title 设置后，如果属性不存在，则默认为 title 为空，便于数据容错和用户灵活使用\n   * [修改] editName 方法如果针对尚未展开的 父节点，会导致该父节点自动展开的 bug\n   * [修改] title 中存在标签时导致 title 显示异常的bug（例如：蓝色字22%\"'`<input/>`）\n\n*2012.01.10* v3.0\n   * [增加] setting.check.autoCheckTrigger 默认值 false，可以设置联动选中时是否触发事件回调函数\n   * [增加] setting.callback.beforeEditName 回调函数，以保证用户可以捕获点击编辑按钮的事件\n   * [增加] treeNode.chkDisabled 属性，显示 checkbox 但是用户无法修改 checkbox 状态，并且该 checkbox 会影响父节点的 checkbox 的半选状态\n   * [增加] setting.check.nocheckInherit 属性，用户设置子节点继承 nocheck 属性，用于批量初始化节点，不适用于已经显示的节点\n   * [增加] setting.edit.drag.autoExpandTrigger 默认值 false，可以设置自动展开、折叠操作时是否触发事件回调函数\n   * [增加] setting.view.nameIsHTML 默认值 false，允许用户对 name 设置 DOM 对象\n   * [增加] treeNode.click 属性的说明文档\n   * [增加] treeObj.setChkDisabled 方法用于设置 checkbox / radio disabled 状态\n   * [增加] treeNode.halfCheck 属性，用于强制设定节点的半选状态\n\n   * [修改] 异步加载 & 编辑功能 共存时，拖拽节点 或 增加节点 导致 ie 上报错的 bug （apply 方法引起）\n   * [修改] zTreeStyle 样式冲突\n   * [修改] setting.data.key.title 默认值设置为 \"\"，初始化时自动赋值为 setting.data.key.name 这样可避免希望 title 与 name 一致的用户反复设置参数\n   * [修改] 点击叶子节点的连接线会触发 expand 事件的 bug\n   * [修改] IE 下 点击叶子节点连线会出现虚线框的 bug\n   * [修改] updateNode 导致 checkbox 半选状态错误的 bug\n   * [修改] checkNode 方法实现 toggle 操作, 取消 expandAll 方法的 toggle 操作\n   * [修改] zTree 内鼠标移动会抢页面上 input 内的焦点的 bug\n   * [修改] beforeRename / onRename 的触发方式——即使名称内容未改变也会触发，便于用户配合 beforeEditName 捕获编辑状态的结束，赋予用户更多调整规则的权利\n   * [修改] 与 easyUI 共存时无法拖拽的bug\n   * [修改] beforeRename 在 Firefox 下如果利用 alert，会触发两次的 bug\n   * [修改] checkNode/expandNode/removeNode 方法，默认不触发回调函数，恢复 v2.6 的默认状态，同时增加 callbackFlag 参数，设置为 true 时，可以触发回调函数\n   * [修改] IE9下“根据参数查找节点”的Demo 报错：行14 重新声明常量属性(Demo 自身的问题，定义了history变量)\n   * [修改] 初始化 zTree 时 onNodeCreated 事件回调函数中无法 用 getZTreeObj 获取 zTree 对象的 bug\n   * [修改] setting.edit.drag.prev / next / inner 参数，增加被拖拽的节点集合\n   * [修改] 异步加载模式下，otherParam 使用Array数组会出错的 bug。例如： [\"id\", \"1\", \"name\", \"test\"]\n   * [修改] FireFox 下多棵树拖拽异常的 bug\n   * [修改] exedit 中调用 excheck库的方法时没有进行容错处理，导致如果只加入 exedit 而没有 excheck的时候，会出现 js 错误\n   * [修改] 显示 checkbox 的 zTree 在编辑模式下，移动节点不会更新父节点半选状态的 bug\n   * [修改] treeNode.childs --> children; treeObject.removeChilds --> removeChildNodes; setting.data.key.childs --> children（英文不好惹的祸！抱歉了！）\n   * [修改] onRemove 回调中得到的 treeNode 还可以查找 preNode、nextNode 的bug。 修正后，getPreNode 和 getNextNode 都返回 null； 为了便于查找父节点，getParentNode 仍保留\n   * [修改] 简单数据模式下，如果 id 与 pId 的值相同会导致该节点无法正常加载的 bug\n   * [修改] 移动或删除中间节点会导致最后一个节点连接线图标变小的 bug\n\n*2011.09.05* v3.0 beta\n   * [修改] zTree 的 js 代码架构全面修改，并且拆分\n   * [修改] zTree 的 css 样式全面修改，对浏览器可以更好地兼容，同时解决了以前1个像素差的问题\n   * [优化] 采用延迟加载技术，一次性加载大数据量的节点性能飞速提升\n   * [增加] 支持多节点同时选中、拖拽\n   * [增加] checkNode、checkAllNodes 等多种方法\n   * [增加] IE6 自动取消动画展开、折叠的功能\n   * [修正] 异步加载 & 编辑模式 能够更完美的共存\n   * [修正] setting 配置更加合理，并且增加了若干项配置参数\n   * [修正] treeNode 节点数据的属性更加合理，并且增加了一些方法\n   * [修正] 拖拽操作更加灵活方便，更容易制定自己的规则\n   * [修正] 其他若干修改，详细对比请参考 url：[http://www.treejs.cn/v3/faq.php#_101 zTree v3.0 常见问题]\n"
  },
  {
    "path": "pages/map/map1.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>柱状图</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n</head>\n<body>\n<div id=\"main\" style=\"width: 100%;height:400px;margin-top: 50px;\"></div>\n<script src=\"../../lib/echarts/echarts.common.min.js\"></script>\n<script type=\"text/javascript\">\n    // 基于准备好的dom，初始化echarts实例\n    var myChart = echarts.init(document.getElementById(\"main\"));\n\n    // 指定图表的配置项和数据\n    var option = {\n        title: {\n            text: \"衣物销量图\"\n        },\n        tooltip: {},\n        legend: {\n            data: [\"销量\"]\n        },\n        xAxis: {\n            data: [\"衬衫\", \"羊毛衫\", \"雪纺衫\", \"裤子\", \"高跟鞋\", \"袜子\"]\n        },\n        yAxis: {},\n        series: [{\n            name: \"销量\",\n            type: \"bar\",\n            data: [5, 20, 36, 10, 10, 20]\n        }]\n    };\n\n    // 使用刚指定的配置项和数据显示图表。\n    myChart.setOption(option);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/map/map2.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>折线图</title>\n</head>\n<body>\n<div id=\"main\" style=\"width: 100%;height:400px;margin-top: 50px;\"></div>\n<script src=\"../../lib/echarts/echarts.common.min.js\"></script>\n<script type=\"text/javascript\">\n    // 基于准备好的dom，初始化echarts实例\n    var myChart = echarts.init(document.getElementById(\"main\"));\n\n    // 指定图表的配置项和数据\n    var option = {\n        title: {\n            text: \"折线图\"\n        },\n        xAxis: {\n            type: \"category\",\n            data: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\n        },\n        yAxis: {\n            type: \"value\"\n        },\n        series: [{\n            data: [820, 932, 901, 934, 1290, 1330, 1320],\n            type: \"line\"\n        }]\n    };\n\n    // 使用刚指定的配置项和数据显示图表。\n    myChart.setOption(option);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/map/map3.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>折线堆叠图</title>\n</head>\n<body>\n<div id=\"main\" style=\"width: 100%;height:400px;margin-top: 50px;\"></div>\n<script src=\"../../lib/echarts/echarts.common.min.js\"></script>\n<script type=\"text/javascript\">\n    // 基于准备好的dom，初始化echarts实例\n    var myChart = echarts.init(document.getElementById(\"main\"));\n\n    // 指定图表的配置项和数据\n    var option = {\n        title: {\n            text: \"折线图堆叠\"\n        },\n        tooltip: {\n            trigger: \"axis\"\n        },\n        legend: {\n            data: [\"邮件营销\", \"联盟广告\", \"视频广告\", \"直接访问\", \"搜索引擎\"]\n        },\n        grid: {\n            left: \"3%\",\n            right: \"4%\",\n            bottom: \"3%\",\n            containLabel: true\n        },\n        toolbox: {\n            feature: {\n                saveAsImage: {}\n            }\n        },\n        xAxis: {\n            type: \"category\",\n            boundaryGap: false,\n            data: [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\", \"周日\"]\n        },\n        yAxis: {\n            type: \"value\"\n        },\n        series: [\n            {\n                name: \"邮件营销\",\n                type: \"line\",\n                stack: \"总量\",\n                data: [120, 132, 101, 134, 90, 230, 210]\n            },\n            {\n                name: \"联盟广告\",\n                type: \"line\",\n                stack: \"总量\",\n                data: [220, 182, 191, 234, 290, 330, 310]\n            },\n            {\n                name: \"视频广告\",\n                type: \"line\",\n                stack: \"总量\",\n                data: [150, 232, 201, 154, 190, 330, 410]\n            },\n            {\n                name: \"直接访问\",\n                type: \"line\",\n                stack: \"总量\",\n                data: [320, 332, 301, 334, 390, 330, 320]\n            },\n            {\n                name: \"搜索引擎\",\n                type: \"line\",\n                stack: \"总量\",\n                data: [820, 932, 901, 934, 1290, 1330, 1320]\n            }\n        ]\n    };\n\n    // 使用刚指定的配置项和数据显示图表。\n    myChart.setOption(option);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/map/map4.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>饼图</title>\n</head>\n<body>\n<div id=\"main\" style=\"width: 100%;height:400px;margin-top: 50px;\"></div>\n<script src=\"../../lib/echarts/echarts.common.min.js\"></script>\n<script type=\"text/javascript\">\n    // 基于准备好的dom，初始化echarts实例\n    var myChart = echarts.init(document.getElementById(\"main\"));\n\n    // 指定图表的配置项和数据\n    var option = {\n        backgroundColor: \"#2c343c\",\n\n        title: {\n            text: \"定制饼图\",\n            left: \"center\",\n            top: 20,\n            textStyle: {\n                color: \"#ccc\"\n            }\n        },\n\n        tooltip: {\n            trigger: \"item\",\n            formatter: \"{a} <br/>{b} : {c} ({d}%)\"\n        },\n\n        visualMap: {\n            show: false,\n            min: 80,\n            max: 600,\n            inRange: {\n                colorLightness: [0, 1]\n            }\n        },\n        series: [\n            {\n                name: \"访问来源\",\n                type: \"pie\",\n                radius: \"55%\",\n                center: [\"50%\", \"50%\"],\n                data: [\n                    {value: 335, name: \"直接访问\"},\n                    {value: 310, name: \"邮件营销\"},\n                    {value: 274, name: \"联盟广告\"},\n                    {value: 235, name: \"视频广告\"},\n                    {value: 400, name: \"搜索引擎\"}\n                ].sort(function (a, b) {\n                    return a.value - b.value;\n                }),\n                roseType: \"radius\",\n                label: {\n                    normal: {\n                        textStyle: {\n                            color: \"rgba(255, 255, 255, 0.3)\"\n                        }\n                    }\n                },\n                labelLine: {\n                    normal: {\n                        lineStyle: {\n                            color: \"rgba(255, 255, 255, 0.3)\"\n                        },\n                        smooth: 0.2,\n                        length: 10,\n                        length2: 20\n                    }\n                },\n                itemStyle: {\n                    normal: {\n                        color: \"#c23531\",\n                        shadowBlur: 200,\n                        shadowColor: \"rgba(0, 0, 0, 0.5)\"\n                    }\n                },\n\n                animationType: \"scale\",\n                animationEasing: \"elasticOut\",\n                animationDelay: function (idx) {\n                    return Math.random() * 200;\n                }\n            }\n        ]\n    };\n\n    // 使用刚指定的配置项和数据显示图表。\n    myChart.setOption(option);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/map/map5.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>环形图</title>\n</head>\n<body>\n<div id=\"main\" style=\"width: 100%;height:400px;margin-top: 50px;\"></div>\n<script src=\"../../lib/echarts/echarts.common.min.js\"></script>\n<script type=\"text/javascript\">\n    // 基于准备好的dom，初始化echarts实例\n    var myChart = echarts.init(document.getElementById(\"main\"));\n\n    // 指定图表的配置项和数据\n    var option = {\n        tooltip: {\n            trigger: \"item\",\n            formatter: \"{a} <br/>{b}: {c} ({d}%)\"\n        },\n        legend: {\n            orient: \"vertical\",\n            x: \"left\",\n            data: [\"直接访问\", \"邮件营销\", \"联盟广告\", \"视频广告\", \"搜索引擎\"]\n        },\n        series: [\n            {\n                name: \"访问来源\",\n                type: \"pie\",\n                radius: [\"50%\", \"70%\"],\n                avoidLabelOverlap: false,\n                label: {\n                    normal: {\n                        show: false,\n                        position: \"center\"\n                    },\n                    emphasis: {\n                        show: true,\n                        textStyle: {\n                            fontSize: \"30\",\n                            fontWeight: \"bold\"\n                        }\n                    }\n                },\n                labelLine: {\n                    normal: {\n                        show: false\n                    }\n                },\n                data: [\n                    {value: 335, name: \"直接访问\"},\n                    {value: 310, name: \"邮件营销\"},\n                    {value: 234, name: \"联盟广告\"},\n                    {value: 135, name: \"视频广告\"},\n                    {value: 1548, name: \"搜索引擎\"}\n                ]\n            }\n        ]\n    };\n\n    // 使用刚指定的配置项和数据显示图表。\n    myChart.setOption(option);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/map/map6.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>热力图</title>\n</head>\n<body>\n<div id=\"main\" style=\"width: 100%;height:400px;margin-top: 50px;\"></div>\n<script src=\"../../lib/echarts/echarts.common.min.js\"></script>\n<script type=\"text/javascript\">\n    // 基于准备好的dom，初始化echarts实例\n    var myChart = echarts.init(document.getElementById(\"main\"));\n\n    var dataBJ = [\n        [1, 55, 9, 56, 0.46, 18, 6, \"良\"],\n        [2, 25, 11, 21, 0.65, 34, 9, \"优\"],\n        [3, 56, 7, 63, 0.3, 14, 5, \"良\"],\n        [4, 33, 7, 29, 0.33, 16, 6, \"优\"],\n        [5, 42, 24, 44, 0.76, 40, 16, \"优\"],\n        [6, 82, 58, 90, 1.77, 68, 33, \"良\"],\n        [7, 74, 49, 77, 1.46, 48, 27, \"良\"],\n        [8, 78, 55, 80, 1.29, 59, 29, \"良\"],\n        [9, 267, 216, 280, 4.8, 108, 64, \"重度污染\"],\n        [10, 185, 127, 216, 2.52, 61, 27, \"中度污染\"],\n        [11, 39, 19, 38, 0.57, 31, 15, \"优\"],\n        [12, 41, 11, 40, 0.43, 21, 7, \"优\"],\n        [13, 64, 38, 74, 1.04, 46, 22, \"良\"],\n        [14, 108, 79, 120, 1.7, 75, 41, \"轻度污染\"],\n        [15, 108, 63, 116, 1.48, 44, 26, \"轻度污染\"],\n        [16, 33, 6, 29, 0.34, 13, 5, \"优\"],\n        [17, 94, 66, 110, 1.54, 62, 31, \"良\"],\n        [18, 186, 142, 192, 3.88, 93, 79, \"中度污染\"],\n        [19, 57, 31, 54, 0.96, 32, 14, \"良\"],\n        [20, 22, 8, 17, 0.48, 23, 10, \"优\"],\n        [21, 39, 15, 36, 0.61, 29, 13, \"优\"],\n        [22, 94, 69, 114, 2.08, 73, 39, \"良\"],\n        [23, 99, 73, 110, 2.43, 76, 48, \"良\"],\n        [24, 31, 12, 30, 0.5, 32, 16, \"优\"],\n        [25, 42, 27, 43, 1, 53, 22, \"优\"],\n        [26, 154, 117, 157, 3.05, 92, 58, \"中度污染\"],\n        [27, 234, 185, 230, 4.09, 123, 69, \"重度污染\"],\n        [28, 160, 120, 186, 2.77, 91, 50, \"中度污染\"],\n        [29, 134, 96, 165, 2.76, 83, 41, \"轻度污染\"],\n        [30, 52, 24, 60, 1.03, 50, 21, \"良\"],\n        [31, 46, 5, 49, 0.28, 10, 6, \"优\"]\n    ];\n\n    var dataGZ = [\n        [1, 26, 37, 27, 1.163, 27, 13, \"优\"],\n        [2, 85, 62, 71, 1.195, 60, 8, \"良\"],\n        [3, 78, 38, 74, 1.363, 37, 7, \"良\"],\n        [4, 21, 21, 36, 0.634, 40, 9, \"优\"],\n        [5, 41, 42, 46, 0.915, 81, 13, \"优\"],\n        [6, 56, 52, 69, 1.067, 92, 16, \"良\"],\n        [7, 64, 30, 28, 0.924, 51, 2, \"良\"],\n        [8, 55, 48, 74, 1.236, 75, 26, \"良\"],\n        [9, 76, 85, 113, 1.237, 114, 27, \"良\"],\n        [10, 91, 81, 104, 1.041, 56, 40, \"良\"],\n        [11, 84, 39, 60, 0.964, 25, 11, \"良\"],\n        [12, 64, 51, 101, 0.862, 58, 23, \"良\"],\n        [13, 70, 69, 120, 1.198, 65, 36, \"良\"],\n        [14, 77, 105, 178, 2.549, 64, 16, \"良\"],\n        [15, 109, 68, 87, 0.996, 74, 29, \"轻度污染\"],\n        [16, 73, 68, 97, 0.905, 51, 34, \"良\"],\n        [17, 54, 27, 47, 0.592, 53, 12, \"良\"],\n        [18, 51, 61, 97, 0.811, 65, 19, \"良\"],\n        [19, 91, 71, 121, 1.374, 43, 18, \"良\"],\n        [20, 73, 102, 182, 2.787, 44, 19, \"良\"],\n        [21, 73, 50, 76, 0.717, 31, 20, \"良\"],\n        [22, 84, 94, 140, 2.238, 68, 18, \"良\"],\n        [23, 93, 77, 104, 1.165, 53, 7, \"良\"],\n        [24, 99, 130, 227, 3.97, 55, 15, \"良\"],\n        [25, 146, 84, 139, 1.094, 40, 17, \"轻度污染\"],\n        [26, 113, 108, 137, 1.481, 48, 15, \"轻度污染\"],\n        [27, 81, 48, 62, 1.619, 26, 3, \"良\"],\n        [28, 56, 48, 68, 1.336, 37, 9, \"良\"],\n        [29, 82, 92, 174, 3.29, 0, 13, \"良\"],\n        [30, 106, 116, 188, 3.628, 101, 16, \"轻度污染\"],\n        [31, 118, 50, 0, 1.383, 76, 11, \"轻度污染\"]\n    ];\n\n    var dataSH = [\n        [1, 91, 45, 125, 0.82, 34, 23, \"良\"],\n        [2, 65, 27, 78, 0.86, 45, 29, \"良\"],\n        [3, 83, 60, 84, 1.09, 73, 27, \"良\"],\n        [4, 109, 81, 121, 1.28, 68, 51, \"轻度污染\"],\n        [5, 106, 77, 114, 1.07, 55, 51, \"轻度污染\"],\n        [6, 109, 81, 121, 1.28, 68, 51, \"轻度污染\"],\n        [7, 106, 77, 114, 1.07, 55, 51, \"轻度污染\"],\n        [8, 89, 65, 78, 0.86, 51, 26, \"良\"],\n        [9, 53, 33, 47, 0.64, 50, 17, \"良\"],\n        [10, 80, 55, 80, 1.01, 75, 24, \"良\"],\n        [11, 117, 81, 124, 1.03, 45, 24, \"轻度污染\"],\n        [12, 99, 71, 142, 1.1, 62, 42, \"良\"],\n        [13, 95, 69, 130, 1.28, 74, 50, \"良\"],\n        [14, 116, 87, 131, 1.47, 84, 40, \"轻度污染\"],\n        [15, 108, 80, 121, 1.3, 85, 37, \"轻度污染\"],\n        [16, 134, 83, 167, 1.16, 57, 43, \"轻度污染\"],\n        [17, 79, 43, 107, 1.05, 59, 37, \"良\"],\n        [18, 71, 46, 89, 0.86, 64, 25, \"良\"],\n        [19, 97, 71, 113, 1.17, 88, 31, \"良\"],\n        [20, 84, 57, 91, 0.85, 55, 31, \"良\"],\n        [21, 87, 63, 101, 0.9, 56, 41, \"良\"],\n        [22, 104, 77, 119, 1.09, 73, 48, \"轻度污染\"],\n        [23, 87, 62, 100, 1, 72, 28, \"良\"],\n        [24, 168, 128, 172, 1.49, 97, 56, \"中度污染\"],\n        [25, 65, 45, 51, 0.74, 39, 17, \"良\"],\n        [26, 39, 24, 38, 0.61, 47, 17, \"优\"],\n        [27, 39, 24, 39, 0.59, 50, 19, \"优\"],\n        [28, 93, 68, 96, 1.05, 79, 29, \"良\"],\n        [29, 188, 143, 197, 1.66, 99, 51, \"中度污染\"],\n        [30, 174, 131, 174, 1.55, 108, 50, \"中度污染\"],\n        [31, 187, 143, 201, 1.39, 89, 53, \"中度污染\"]\n    ];\n\n    var schema = [\n        {name: \"date\", index: 0, text: \"日\"},\n        {name: \"AQIindex\", index: 1, text: \"AQI指数\"},\n        {name: \"PM25\", index: 2, text: \"PM2.5\"},\n        {name: \"PM10\", index: 3, text: \"PM10\"},\n        {name: \"CO\", index: 4, text: \"一氧化碳（CO）\"},\n        {name: \"NO2\", index: 5, text: \"二氧化氮（NO2）\"},\n        {name: \"SO2\", index: 6, text: \"二氧化硫（SO2）\"}\n    ];\n\n\n    var itemStyle = {\n        normal: {\n            opacity: 0.8,\n            shadowBlur: 10,\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n            shadowColor: \"rgba(0, 0, 0, 0.5)\"\n        }\n    };\n\n    // 指定图表的配置项和数据\n    var option = {\n        backgroundColor: \"#404a59\",\n        color: [\n            \"#dd4444\", \"#fec42c\", \"#80F1BE\"\n        ],\n        legend: {\n            y: \"top\",\n            data: [\"北京\", \"上海\", \"广州\"],\n            textStyle: {\n                color: \"#fff\",\n                fontSize: 16\n            }\n        },\n        grid: {\n            x: \"10%\",\n            x2: 150,\n            y: \"18%\",\n            y2: \"10%\"\n        },\n        tooltip: {\n            padding: 10,\n            backgroundColor: \"#222\",\n            borderColor: \"#777\",\n            borderWidth: 1,\n            formatter: function (obj) {\n                var value = obj.value;\n                return '<div style=\"border-bottom: 1px solid rgba(255,255,255,.3); font-size: 18px;padding-bottom: 7px;margin-bottom: 7px\">'\n                    + obj.seriesName + ' ' + value[0] + '日：'\n                    + value[7]\n                    + '</div>'\n                    + schema[1].text + '：' + value[1] + '<br>'\n                    + schema[2].text + '：' + value[2] + '<br>'\n                    + schema[3].text + '：' + value[3] + '<br>'\n                    + schema[4].text + '：' + value[4] + '<br>'\n                    + schema[5].text + '：' + value[5] + '<br>'\n                    + schema[6].text + '：' + value[6] + '<br>';\n            }\n        },\n        xAxis: {\n            type: \"value\",\n            name: \"日期\",\n            nameGap: 16,\n            nameTextStyle: {\n                color: \"#fff\",\n                fontSize: 14\n            },\n            max: 31,\n            splitLine: {\n                show: false\n            },\n            axisLine: {\n                lineStyle: {\n                    color: \"#eee\"\n                }\n            }\n        },\n        yAxis: {\n            type: \"value\",\n            name: \"AQI指数\",\n            nameLocation: \"end\",\n            nameGap: 20,\n            nameTextStyle: {\n                color: \"#fff\",\n                fontSize: 16\n            },\n            axisLine: {\n                lineStyle: {\n                    color: \"#eee\"\n                }\n            },\n            splitLine: {\n                show: false\n            }\n        },\n        visualMap: [\n            {\n                left: \"right\",\n                top: \"10%\",\n                dimension: 2,\n                min: 0,\n                max: 250,\n                itemWidth: 30,\n                itemHeight: 120,\n                calculable: true,\n                precision: 0.1,\n                text: [\"圆形大小：PM2.5\"],\n                textGap: 30,\n                textStyle: {\n                    color: \"#fff\"\n                },\n                inRange: {\n                    symbolSize: [10, 70]\n                },\n                outOfRange: {\n                    symbolSize: [10, 70],\n                    color: [\"rgba(255,255,255,.2)\"]\n                },\n                controller: {\n                    inRange: {\n                        color: [\"#c23531\"]\n                    },\n                    outOfRange: {\n                        color: [\"#444\"]\n                    }\n                }\n            },\n            {\n                left: \"right\",\n                bottom: \"5%\",\n                dimension: 6,\n                min: 0,\n                max: 50,\n                itemHeight: 120,\n                calculable: true,\n                precision: 0.1,\n                text: [\"明暗：二氧化硫\"],\n                textGap: 30,\n                textStyle: {\n                    color: \"#fff\"\n                },\n                inRange: {\n                    colorLightness: [1, 0.5]\n                },\n                outOfRange: {\n                    color: [\"rgba(255,255,255,.2)\"]\n                },\n                controller: {\n                    inRange: {\n                        color: [\"#c23531\"]\n                    },\n                    outOfRange: {\n                        color: [\"#444\"]\n                    }\n                }\n            }\n        ],\n        series: [\n            {\n                name: \"北京\",\n                type: \"scatter\",\n                itemStyle: itemStyle,\n                data: dataBJ\n            },\n            {\n                name: \"上海\",\n                type: 'scatter',\n                itemStyle: itemStyle,\n                data: dataSH\n            },\n            {\n                name: \"广州\",\n                type: \"scatter\",\n                itemStyle: itemStyle,\n                data: dataGZ\n            }\n        ]\n    };\n\n    // 使用刚指定的配置项和数据显示图表。\n    myChart.setOption(option);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/permission-add.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>添加权限</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>权限列表</cite></a>\n            <a><cite>添加权限</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form layui-form-pane ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">权限名称</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"username\" placeholder=\"请输入权限名称\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">权限标识</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"reallyName\" placeholder=\"请输入权限标识\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">菜单</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"phone\" placeholder=\"请输入菜单\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"phone\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">类型</label>\n            <div class=\"layui-input-block\">\n                <select name=\"role\">\n                    <option value=\"0\">目录</option>\n                    <option value=\"1\">菜单</option>\n                    <option value=\"2\">按钮</option>\n                </select>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"add\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    // TODO 权限模块需要大改！！！！！！\n    layui.use([\"element\", \"form\", \"laydate\"], function () {\n        var form = layui.form;\n        var $ = layui.jquery;\n\n        form.on(\"submit(add)\", function (data) {\n            console.log(data.field);\n            layer.msg(\"添加成功！\", {icon: 6, time: 1000, anim: 4}, function () {\n                parent.layer.close(parent.layer.getFrameIndex(window.name));\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/permission-edit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>添加权限</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>权限列表</cite></a>\n            <a><cite>编辑权限</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">权限名称</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"username\" placeholder=\"请输入权限名称\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">权限标识</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"reallyName\" placeholder=\"请输入权限标识\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">菜单</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"phone\" placeholder=\"请输入菜单\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"phone\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">类型</label>\n            <div class=\"layui-input-block\">\n                <select name=\"role\">\n                    <option value=\"0\">目录</option>\n                    <option value=\"1\">菜单</option>\n                    <option value=\"2\">按钮</option>\n                </select>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"add\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    // TODO 权限模块需要大改！！！！！！\n    layui.use([\"element\", \"form\", \"laydate\"], function () {\n        var form = layui.form;\n        var $ = layui.jquery;\n\n        form.on(\"submit(add)\", function (data) {\n            console.log(data.field);\n            layer.msg(\"添加成功！\", {icon: 6, time: 1000, anim: 4}, function () {\n                parent.layer.close(parent.layer.getFrameIndex(window.name));\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/permission.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>权限列表</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>权限列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--模糊搜索区域-->\n    <div class=\"layui-row\">\n        <form class=\"layui-form layui-col-md12 ok-search\">\n            <input class=\"layui-input\" placeholder=\"开始日期\" autocomplete=\"off\" id=\"startTime\">\n            <input class=\"layui-input\" placeholder=\"截止日期\" autocomplete=\"off\" id=\"endTime\">\n            <input class=\"layui-input\" placeholder=\"请输入权限名\" autocomplete=\"off\">\n            <button class=\"layui-btn\" lay-submit=\"\" lay-filter=\"search\">\n                <i class=\"layui-icon layui-icon-search\"></i>\n            </button>\n        </form>\n    </div>\n    <!--工具栏-->\n    <okToolbar>\n\t\t<button class=\"layui-btn\" id=\"add\">\n\t\t    <i class=\"layui-icon\">&#xe61f;</i>添加权限\n\t\t</button>\n        <button class=\"layui-btn layui-btn-danger\" id=\"batchDel\">\n            <i class=\"layui-icon layui-icon-delete\"></i>批量删除\n        </button>\n        <span>共有数据：<i id=\"countNum\"></i> 条</span>\n    </okToolbar>\n    <!--数据表格-->\n    <table class=\"layui-hide\" id=\"tableId\" lay-filter=\"tableFilter\"></table>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    // TODO 权限模块需要大改！！！！！！\n    layui.use([\"element\", \"table\", \"form\", \"laydate\", \"treetable\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var table = layui.table;\n        var $ = layui.jquery;\n        var laydate = layui.laydate;\n        var treetable = layui.treetable;\n\t\tvar okLayer = layui.okLayer;\n\t\tvar okUtils = layui.okUtils;\n\n        laydate.render({elem: \"#startTime\", type: \"datetime\"});\n        laydate.render({elem: \"#endTime\", type: \"datetime\"});\n\n        layer.load(2);\n        treetable.render({\n            treeColIndex: 1,\n            treeSpid: -1,\n            treeIdName: \"authorityId\",\n            treePidName: \"parentId\",\n            elem: \"#tableId\",\n            url: \"../../data/permission-table.json\",\n            page: false,\n            size: \"sm\",\n            cols: [[\n                {type: \"numbers\"},\n                {field: \"authorityName\", minWidth: 200, title: \"权限名称\"},\n                {field: \"authority\", title: \"权限标识\"},\n                {field: \"menuUrl\", title: \"菜单\"},\n                {field: \"orderNumber\", width: 80, align: \"center\", title: \"排序号\"},\n                {\n                    field: \"isMenu\", width: 80, align: \"center\", templet: function (d) {\n                        if (d.isMenu == 1) {\n                            return '<span class=\"layui-badge layui-bg-gray\">按钮</span>';\n                        }\n                        if (d.parentId == -1) {\n                            return '<span class=\"layui-badge layui-bg-blue\">目录</span>';\n                        } else {\n                            return '<span class=\"layui-badge-rim\">菜单</span>';\n                        }\n                    },\n                    title: \"类型\"\n                },\n                {width: 120, align: \"center\", title: \"操作\", templet: \"#operationTpl\"}\n            ]],\n            done: function (res, curr, count) {\n                layer.closeAll(\"loading\");\n                $(\"#countNum\").text(count);\n            }\n        });\n\n        form.on(\"submit(search)\", function () {\n            layer.msg(\"正在查询，请稍后...\");\n            return false;\n        });\n\n        table.on(\"tool(tableFilter)\", function (obj) {\n            var data = obj.data;\n            switch (obj.event) {\n            \tcase \"edit\":\n            \t\tedit(data.id);\n            \t\tbreak;\n            \tcase \"del\":\n            \t\tdel(data.id);\n            \t\tbreak;\n            }\n        });\n\n\t\t$(\"#add\").click(function () {\n\t\t\tokLayer.open(\"添加权限\", \"permission-add.html\", \"90%\", \"90%\", function () {\n\t\t\t\t$(\".layui-laypage-btn\")[0].click();\n\t\t\t})\n\t\t});\n\n\t\t$(\"#batchDel\").click(function () {\n\t\t\tokLayer.confirm(\"确定要批量删除吗？\", function (index) {\n\t\t\t    layer.close(index);\n\t\t\t    var idsStr = okUtils.table.batchCheck(table);\n\t\t\t    if (idsStr) {\n\t\t\t        okUtils.ajax(\"/permission/batchDel\", \"post\", {idsStr: idsStr}).done(function (response) {\n\t\t\t            console.log(response)\n\t\t\t            okUtils.table.operationSuccessMsg(\"批量删除成功\");\n\t\t\t        }).fail(function (error) {\n\t\t\t            console.log(error)\n\t\t\t        });\n\t\t\t    }\n\t\t\t});\n\t\t});\n\n\t\tfunction edit (id) {\n\t\t\tokLayer.open(\"编辑角色\", \"permission-edit.html?id=\" + id, \"90%\", \"90%\", function () {\n\t\t\t\t$(\".layui-laypage-btn\")[0].click();\n\t\t\t})\n\t\t}\n\n\t\tfunction del (id) {\n\t\t\tokLayer.confirm(\"确定要删除吗？\", function () {\n\t\t\t    okUtils.ajax(\"/permission/batchDel\", \"post\", {idsStr: id}).done(function (response) {\n\t\t\t        console.log(response)\n\t\t\t        okUtils.table.operationSuccessMsg(\"删除成功\");\n\t\t\t    }).fail(function (error) {\n\t\t\t        console.log(error)\n\t\t\t    });\n\t\t\t})\n\t\t}\n    })\n</script>\n<!--行工具栏模板-->\n<script type=\"text/html\" id=\"operationTpl\">\n    <a href=\"javascript:;\" title=\"编辑\" lay-event=\"edit\"><i class=\"layui-icon\">&#xe642;</i></a>\n    <a href=\"javascript:;\" title=\"删除\" lay-event=\"del\"><i class=\"layui-icon\">&#xe640;</i></a>\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/role-add.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>添加角色</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>角色列表</cite></a>\n            <a><cite>添加角色</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form layui-form-pane ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">角色名</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"name\" placeholder=\"请输入角色名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">备注</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"remarks\" placeholder=\"请输入备注\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">权限</label>\n            <div class=\"layui-input-block\">\n\t\t\t\t<div id=\"permissionTree\"></div>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"add\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script type=\"text/javascript\">\n    layui.use([\"element\", \"form\", \"tree\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n\t\tvar tree = layui.tree;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        var data = [{\"title\":\"根目录\",\"spread\":true,\"children\":[{\"title\":\"会员管理\",\"spread\":true,\"children\":[{\"title\":\"用户管理\",\"spread\":true,\"children\":[{\"title\":\"添加用户\"},{\"title\":\"编辑用户\"},{\"title\":\"删除用户\"}]},{\"title\":\"角色管理\",\"spread\":true,\"children\":[{\"title\":\"添加角色\"},{\"title\":\"编辑角色\"},{\"title\":\"删除角色\"}]},{\"title\":\"权限管理\",\"spread\":true,\"children\":[{\"title\":\"添加权限\"},{\"title\":\"编辑权限\"},{\"title\":\"删除权限\"}]}]}]}];\n\n        tree.render({\n            elem: \"#permissionTree\",\n            // data: okUtils.mockApi.permission.list,\n            data: data,\n            showCheckbox: true\n        });\n\n        form.on(\"submit(add)\", function (data) {\n            // TODO 权限节点校验\n\n            // 请求后台\n            okUtils.ajax(\"/role/add\", \"post\", data.field).done(function (response) {\n                console.log(response)\n                okLayer.msg.greenTick(\"添加成功\", function () {\n                    parent.layer.close(parent.layer.getFrameIndex(window.name));\n                });\n            }).fail(function (error) {\n                console.log(error)\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/role-edit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>编辑角色</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n    <link rel=\"stylesheet\" href=\"../../lib/zTree_v3/css/zTreeStyle/zTreeStyle.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>角色列表</cite></a>\n            <a><cite>编辑角色</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">角色名</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"name\" placeholder=\"请输入角色名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">备注</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"remarks\" placeholder=\"请输入备注\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">权限</label>\n            <div class=\"layui-input-block\">\n                <!--权限树-->\n                <ul class=\"ztree\" id=\"permissionTree\"></ul>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"edit\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script src=\"https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js\"></script>\n<script src=\"../../lib/zTree_v3/js/jquery.ztree.all.js\"></script>\n<script type=\"text/javascript\">\n    layui.use([\"element\", \"form\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        // zTree设置\n        var setting = {\n            data: {\n                simpleData: {enable: true, idKey: \"id\", pIdKey: \"parentId\", rootPId: 0}\n            },\n            check: {enable: true, chkStyle: \"checkbox\", radioType: \"all\"}\n        };\n\n        // zTree异步请求所有权限树节点\n        var treeObj;\n        okUtils.ajax(\"../../data/permission-tree.json\", \"get\").done(function (response) {\n            treeObj = $.fn.zTree.init($(\"#permissionTree\"), setting, response);\n            treeObj.expandAll(true);\n        }).fail(function (error) {\n            console.log(error)\n        });\n\n        form.on(\"submit(edit)\", function (data) {\n            // 权限节点校验\n            var nodes = treeObj.getCheckedNodes(true);\n            if (nodes.length == 0) {\n                okLayer.msg.redCross(\"请选择权限节点\");\n                return false;\n            }\n\n            // 权限节点获取\n            var permissionIds = \"\";\n            for (var i = 0; i < nodes.length; i++) {\n                permissionIds = permissionIds + nodes[i].id + \",\";\n            }\n\n            // 请求后台\n            okUtils.ajax(\"/role/edit\", \"post\", data.field).done(function (response) {\n                console.log(response)\n                okLayer.msg.greenTick(\"编辑成功\", function () {\n                    parent.layer.close(parent.layer.getFrameIndex(window.name));\n                });\n            }).fail(function (error) {\n                console.log(error)\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/role.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>角色列表</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>角色列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--模糊搜索区域-->\n    <div class=\"layui-row\">\n        <form class=\"layui-form layui-col-md12 ok-search\">\n            <input class=\"layui-input\" placeholder=\"开始日期\" autocomplete=\"off\" id=\"startTime\" name=\"startTime\">\n            <input class=\"layui-input\" placeholder=\"截止日期\" autocomplete=\"off\" id=\"endTime\" name=\"endTime\">\n            <input class=\"layui-input\" placeholder=\"请输入角色名\" autocomplete=\"off\" name=\"name\">\n            <button class=\"layui-btn\" lay-submit=\"\" lay-filter=\"search\">\n                <i class=\"layui-icon layui-icon-search\"></i>\n            </button>\n        </form>\n    </div>\n    <!--数据表格-->\n    <table class=\"layui-hide\" id=\"tableId\" lay-filter=\"tableFilter\"></table>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"table\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var table = layui.table;\n        var form = layui.form;\n        var laydate = layui.laydate;\n\t\tvar okLayer = layui.okLayer;\n\t\tvar okUtils = layui.okUtils;\n\n        laydate.render({elem: \"#startTime\", type: \"datetime\"});\n        laydate.render({elem: \"#endTime\", type: \"datetime\"});\n\n        var roleTable = table.render({\n            elem: \"#tableId\",\n            url: okUtils.mockApi.role.list,\n            limit: 10,\n            page: true,\n\t\t\ttoolbar: \"#toolbarTpl\",\n            size: \"sm\",\n            cols: [[\n                {type: \"checkbox\"},\n                {field: \"id\", title: \"ID\", width: 80, sort: true},\n                {field: \"name\", title: \"角色名\", width: 100},\n                {field: \"remarks\", title: \"备注\", width: 100},\n                {field: \"createUser\", title: \"创建者\", width: 85},\n                {field: \"createTime\", title: \"创建时间\", width: 200},\n                {title: \"操作\", width: 200, align: \"center\", templet: \"#operationTpl\"}\n            ]],\n            done: function (res, curr, count) {\n                console.log(res, curr, count);\n            }\n        });\n\n        form.on(\"submit(search)\", function () {\n            roleTable.reload({\n                where: data.field,\n                page: {curr: 1}\n            });\n            return false;\n        });\n\n\t\ttable.on(\"toolbar(tableFilter)\", function (obj) {\n\t\t\tswitch (obj.event) {\n\t\t\t\tcase \"add\":\n\t\t\t\t\tadd();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"batchDel\":\n\t\t\t\t\tbatchDel();\n\t\t\t\t\tbreak;\n\t\t\t}\n        });\n\n        table.on(\"tool(tableFilter)\", function (obj) {\n            var data = obj.data;\n\t\t\tswitch (obj.event) {\n\t\t\t\tcase \"edit\":\n\t\t\t\t\tedit(data.id);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"del\":\n\t\t\t\t\tdel(data.id);\n\t\t\t\t\tbreak;\n\t\t\t}\n        });\n\n\t\tfunction add () {\n\t\t\tokLayer.open(\"添加角色\", \"role-add.html\", \"90%\", \"90%\", null, function () {\n                roleTable.reload();\n\t\t\t})\n\t\t}\n\n\t\tfunction batchDel () {\n\t\t\tokLayer.confirm(\"确定要批量删除吗？\", function (index) {\n\t\t\t    layer.close(index);\n\t\t\t    var idsStr = okUtils.table.batchCheck(table);\n\t\t\t    if (idsStr) {\n\t\t\t        okUtils.ajax(\"/role/batchDel\", \"post\", {idsStr: idsStr}).done(function (response) {\n\t\t\t            console.log(response)\n\t\t\t            okUtils.table.successMsg(\"批量删除成功\");\n\t\t\t        }).fail(function (error) {\n\t\t\t            console.log(error)\n\t\t\t        });\n\t\t\t    }\n\t\t\t});\n\t\t}\n\n\t\tfunction edit (id) {\n\t\t\tokLayer.open(\"编辑角色\", \"role-edit.html?id=\" + id, \"90%\", \"90%\", null, function () {\n                roleTable.reload();\n\t\t\t})\n\t\t}\n\n\t\tfunction del (id) {\n\t\t\tokLayer.confirm(\"确定要删除吗？\", function () {\n\t\t\t    okUtils.ajax(\"/user/batchDel\", \"post\", {idsStr: id}).done(function (response) {\n\t\t\t        console.log(response)\n\t\t\t        okUtils.table.successMsg(\"删除成功\");\n\t\t\t    }).fail(function (error) {\n\t\t\t        console.log(error)\n\t\t\t    });\n\t\t\t})\n\t\t}\n    })\n</script>\n<!-- 头工具栏模板 -->\n<script type=\"text/html\" id=\"toolbarTpl\">\n\t<div class=\"layui-btn-container\">\n\t\t<div class=\"layui-inline\" lay-event=\"add\"><i class=\"layui-icon layui-icon-add-1\"></i></div>\n\t\t<div class=\"layui-inline\" lay-event=\"batchDel\"><i class=\"layui-icon layui-icon-delete\"></i></div>\n\t</div>\n</script>\n<!-- 行工具栏模板 -->\n<script type=\"text/html\" id=\"operationTpl\">\n    <a href=\"javascript:;\" title=\"编辑\" lay-event=\"edit\"><i class=\"layui-icon\">&#xe642;</i></a>\n    <a href=\"javascript:;\" title=\"删除\" lay-event=\"del\"><i class=\"layui-icon\">&#xe640;</i></a>\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user-add.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>添加用户</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>用户列表</cite></a>\n            <a><cite>添加用户</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form layui-form-pane ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">用户名</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"username\" placeholder=\"请输入用户名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">真实姓名</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"reallyName\" placeholder=\"请输入真实姓名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">手机号码</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"phone\" placeholder=\"请输入手机号码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"phone\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">邮箱</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"email\" placeholder=\"请输入邮箱\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"email\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">密码</label>\n            <div class=\"layui-input-block\">\n                <input type=\"password\" name=\"password\" placeholder=\"请输入密码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">出生日期</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"birthday\" placeholder=\"请选择出生日期 格式为yyyy-MM-dd HH:mm:ss\" autocomplete=\"off\" class=\"layui-input\" id=\"birthday\" lay-verify=\"birthdayVerify\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">角色</label>\n            <div class=\"layui-input-block\">\n                <select name=\"role\">\n                    <option value=\"0\">管理员</option>\n                    <option value=\"1\">普通用户</option>\n                </select>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">兴趣</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"like[write]\" title=\"写作\">\n                <input type=\"checkbox\" name=\"like[read]\" title=\"阅读\">\n                <input type=\"checkbox\" name=\"like[run]\" title=\"运动\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">状态</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"status\" lay-skin=\"switch\" lay-text=\"启用|停用\" checked value=\"0\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">性别</label>\n            <div class=\"layui-input-block\">\n                <input type=\"radio\" name=\"sex\" value=\"0\" title=\"男\">\n                <input type=\"radio\" name=\"sex\" value=\"1\" title=\"女\" checked>\n            </div>\n        </div>\n        <div class=\"layui-form-item layui-form-text\">\n            <label class=\"layui-form-label\">备注</label>\n            <div class=\"layui-input-block\">\n                <textarea name=\"remarks\" placeholder=\"请输入内容\" class=\"layui-textarea\"></textarea>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"add\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var laydate = layui.laydate;\n\t\tvar okLayer = layui.okLayer;\n\t\tvar okUtils = layui.okUtils;\n\n        laydate.render({elem: \"#birthday\", type: \"datetime\"});\n\n        form.verify({\n            birthdayVerify: [/^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))(\\s(([01]\\d{1})|(2[0123])):([0-5]\\d):([0-5]\\d))?$/, '日期格式不正确']\n        });\n\n        form.on(\"submit(add)\", function (data) {\n\t\t\tokUtils.ajax(okUtils.mockApi.user.add, \"post\", data.field).done(function (response) {\n\t\t\t    console.log(response)\n                okLayer.msg.greenTick(\"添加成功\", function () {\n                    parent.layer.close(parent.layer.getFrameIndex(window.name));\n                });\n\t\t\t}).fail(function (error) {\n\t\t\t    console.log(error)\n\t\t\t});\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user-center.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>个人中心</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>顶部导航</cite></a>\n            <a><cite>个人中心</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n\t<fieldset class=\"layui-elem-field layui-field-title\" style=\"margin-top: 30px;\">\n\t\t<legend>设置我的资料</legend>\n\t</fieldset>\n\t<!--form表单-->\n\t<form class=\"layui-form ok-form\" lay-filter=\"filter\">\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">用户名</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"text\" name=\"username\" placeholder=\"请输入用户名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\" value=\"bobi\" readonly=\"readonly\">\n\t        </div>\n\t\t\t<div class=\"layui-form-mid layui-word-aux\">用户名不可进行修改</div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">真实姓名</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"text\" name=\"reallyName\" placeholder=\"请输入真实姓名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">手机号码</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"text\" name=\"phone\" placeholder=\"请输入手机号码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"phone\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">邮箱</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"text\" name=\"email\" placeholder=\"请输入邮箱\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"email\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">密码</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"password\" name=\"password\" placeholder=\"请输入密码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">出生日期</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"text\" name=\"birthday\" placeholder=\"请选择出生日期\" autocomplete=\"off\" class=\"layui-input\" id=\"birthday\" lay-verify=\"birthdayVerify\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">角色</label>\n\t        <div class=\"layui-input-inline\">\n\t            <select name=\"role\">\n\t                <option value=\"0\">管理员</option>\n\t                <option value=\"1\">普通用户</option>\n\t            </select>\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">兴趣</label>\n\t        <div class=\"layui-input-block\">\n\t            <input type=\"checkbox\" name=\"like[write]\" value=\"1\" title=\"写作\">\n\t            <input type=\"checkbox\" name=\"like[read]\" value=\"2\" title=\"阅读\">\n\t            <input type=\"checkbox\" name=\"like[run]\" value=\"3\" title=\"运动\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">状态</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"checkbox\" name=\"status\" lay-skin=\"switch\" lay-text=\"启用|停用\" checked value=\"0\">\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">性别</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"radio\" name=\"sex\" value=\"0\" title=\"男\">\n\t            <input type=\"radio\" name=\"sex\" value=\"1\" title=\"女\" checked>\n\t        </div>\n\t    </div>\n\t\t<div class=\"layui-form-item\">\n\t\t    <label class=\"layui-form-label\">头像</label>\n\t\t    <div class=\"layui-input-inline\">\n\t\t\t\t<input type=\"password\" name=\"password\" placeholder=\"请输入头像地址\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n\t\t    </div>\n\t\t\t<button type=\"button\" class=\"layui-btn\" id=\"upload\">\n\t\t\t\t<i class=\"layui-icon\">&#xe67c;</i>上传图片\n\t\t\t</button>\n\t\t\t<div class=\"layui-inline layui-word-aux\">图片最大为100KB</div>\n\t\t</div>\n\t    <div class=\"layui-form-item layui-form-text\">\n\t        <label class=\"layui-form-label\">备注</label>\n\t        <div class=\"layui-input-block\">\n\t            <textarea name=\"remarks\" placeholder=\"请输入内容\" class=\"layui-textarea\"></textarea>\n\t        </div>\n\t    </div>\n\t    <div class=\"layui-form-item\">\n\t        <div class=\"layui-input-block\">\n\t            <button class=\"layui-btn\" lay-submit lay-filter=\"edit\">立即提交</button>\n\t            <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n\t        </div>\n\t    </div>\n\t</form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"form\", \"laydate\", \"upload\", \"util\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var laydate = layui.laydate;\n\t\tvar upload = layui.upload;\n        var util = layui.util;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        util.fixbar({});\n\t\t\n\t\tlaydate.render({elem: \"#birthday\", type: \"datetime\"});\n\n\t\tupload.render({\n\t\t\telem: \"#upload\",\n\t\t\turl: \"/file/upload\",\n\t\t\tdone: function(res){\n\t\t\t  console.log(\"上传完毕回调\");\n\t\t\t},\n\t\t\terror: function(){\n\t\t\t  console.log(\"请求异常回调\");\n\t\t\t}\n\t\t});\n\t\t\n\t\tform.verify({\n\t\t    birthdayVerify: [/^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))(\\s(([01]\\d{1})|(2[0123])):([0-5]\\d):([0-5]\\d))?$/, '日期格式不正确']\n\t\t});\n\t\t\n\t\tform.on(\"submit(edit)\", function (data) {\n\t\t    okUtils.ajax(okUtils.mockApi.user.edit, \"put\", data.field).done(function (response) {\n\t\t        console.log(response)\n\t\t        okLayer.msg.greenTick(\"编辑成功\", function () {\n\t\t            parent.layer.close(parent.layer.getFrameIndex(window.name));\n\t\t        });\n\t\t    }).fail(function (error) {\n\t\t        console.log(error)\n\t\t    });\n\t\t    return false;\n\t\t});\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user-edit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>编辑用户</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>用户列表</cite></a>\n            <a><cite>编辑用户</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form ok-form\" lay-filter=\"filter\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">用户名</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"username\" placeholder=\"请输入用户名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">真实姓名</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"reallyName\" placeholder=\"请输入真实姓名\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">手机号码</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"phone\" placeholder=\"请输入手机号码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"phone\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">邮箱</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"email\" placeholder=\"请输入邮箱\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"email\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">密码</label>\n            <div class=\"layui-input-block\">\n                <input type=\"password\" name=\"password\" placeholder=\"请输入密码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">出生日期</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"birthday\" placeholder=\"请选择出生日期 格式为yyyy-MM-dd HH:mm:ss\" autocomplete=\"off\" class=\"layui-input\" id=\"birthday\" lay-verify=\"birthdayVerify\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">角色</label>\n            <div class=\"layui-input-block\">\n                <select name=\"role\">\n                    <option value=\"0\">管理员</option>\n                    <option value=\"1\">普通用户</option>\n                </select>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">兴趣</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"like[write]\" value=\"1\" title=\"写作\">\n                <input type=\"checkbox\" name=\"like[read]\" value=\"2\" title=\"阅读\">\n                <input type=\"checkbox\" name=\"like[run]\" value=\"3\" title=\"运动\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">状态</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"status\" lay-skin=\"switch\" lay-text=\"启用|停用\" checked value=\"0\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">性别</label>\n            <div class=\"layui-input-block\">\n                <input type=\"radio\" name=\"sex\" value=\"0\" title=\"男\">\n                <input type=\"radio\" name=\"sex\" value=\"1\" title=\"女\" checked>\n            </div>\n        </div>\n        <div class=\"layui-form-item layui-form-text\">\n            <label class=\"layui-form-label\">备注</label>\n            <div class=\"layui-input-block\">\n                <textarea name=\"remarks\" placeholder=\"请输入内容\" class=\"layui-textarea\"></textarea>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"edit\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n\n\tvar initData;\n\tfunction initForm(data) {\n\t\tvar jsonString = JSON.stringify(data)\n\t\tinitData = JSON.parse(jsonString);\n\t}\n\n    layui.use([\"element\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var laydate = layui.laydate;\n\t\tvar okLayer = layui.okLayer;\n\t\tvar okUtils = layui.okUtils;\n\n\t\tform.val(\"filter\", initData);\n\n        laydate.render({elem: \"#birthday\", type: \"datetime\"});\n\n        form.verify({\n            birthdayVerify: [/^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))(\\s(([01]\\d{1})|(2[0123])):([0-5]\\d):([0-5]\\d))?$/, '日期格式不正确']\n        });\n\n        form.on(\"submit(edit)\", function (data) {\n            okUtils.ajax(okUtils.mockApi.user.edit, \"put\", data.field).done(function (response) {\n                console.log(response)\n                okLayer.msg.greenTick(\"编辑成功\", function () {\n                    parent.layer.close(parent.layer.getFrameIndex(window.name));\n                });\n            }).fail(function (error) {\n                console.log(error)\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user-info.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>user-info</title>\n</head>\n<body>\n    <h1>user-info</h1>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user-notify.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>消息中心</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>顶部导航</cite></a>\n            <a><cite>消息中心</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n\t<!-- Tab选项卡 -->\n\t<div class=\"layui-tab layui-tab-brief\">\n\t\t<ul class=\"layui-tab-title\">\n\t\t\t<li class=\"layui-this\">全部消息</li>\n\t\t\t<li>通知<span class=\"layui-badge\">6</span></li>\n\t\t\t<li>私信</li>\n\t\t</ul>\n\t\t<div class=\"layui-tab-content\"></div>\n\t</div>  \n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"form\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n\t\tvar $ = layui.jquery;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user-pwd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>修改密码</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>顶部导航</cite></a>\n            <a><cite>修改密码</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n\t<fieldset class=\"layui-elem-field layui-field-title\" style=\"margin-top: 30px;\">\n\t\t<legend>修改我的密码</legend>\n\t</fieldset>\n\t<!--form表单-->\n\t<form class=\"layui-form ok-form\" lay-filter=\"filter\">\n\t    <div class=\"layui-form-item\">\n\t        <label class=\"layui-form-label\">当前密码</label>\n\t        <div class=\"layui-input-inline\">\n\t            <input type=\"password\" name=\"currentPassword\" placeholder=\"请输入当前密码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n\t        </div>\n\t    </div>\n\t\t<div class=\"layui-form-item\">\n\t\t    <label class=\"layui-form-label\">新密码</label>\n\t\t    <div class=\"layui-input-inline\">\n\t\t        <input type=\"password\" name=\"password\" placeholder=\"请输入新密码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"password\">\n\t\t    </div>\n\t\t\t<div class=\"layui-form-mid layui-word-aux\">6到16个字符</div>\n\t\t</div>\n\t\t<div class=\"layui-form-item\">\n\t\t    <label class=\"layui-form-label\">确认新密码</label>\n\t\t    <div class=\"layui-input-inline\">\n\t\t        <input type=\"password\" name=\"repassword\" placeholder=\"请确认新密码\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"repassword\">\n\t\t    </div>\n\t\t</div>\n\t    <div class=\"layui-form-item\">\n\t        <div class=\"layui-input-block\">\n\t            <button class=\"layui-btn\" lay-submit lay-filter=\"edit\">立即提交</button>\n\t            <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n\t        </div>\n\t    </div>\n\t</form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"form\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n\t\tvar $ = layui.jquery;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\t\t\n\t\tform.verify({\n\t\t\tpassword: [/^[\\S]{6,16}$/, \"密码必须6到16位，且不能出现空格\"],\n\t\t\trepassword: function (value, item) {\n\t\t\t\tvar passwordVal = $(\"input[name='password']\").val();\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn \"请输入确认密码\";\n\t\t\t\t}\n\t\t\t\tconsole.log(value, passwordVal)\n\t\t\t\tif (value != passwordVal) {\n\t\t\t\t\treturn \"两次输入的密码不一致\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tform.on(\"submit(edit)\", function (data) {\n\t\t    okUtils.ajax(okUtils.mockApi.user.edit, \"put\", data.field).done(function (response) {\n\t\t        console.log(response)\n\t\t        okLayer.msg.greenTick(\"编辑成功\", function () {\n\t\t            parent.layer.close(parent.layer.getFrameIndex(window.name));\n\t\t        });\n\t\t    }).fail(function (error) {\n\t\t        console.log(error)\n\t\t    });\n\t\t    return false;\n\t\t});\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/member/user.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>用户列表</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>会员管理</cite></a>\n            <a><cite>用户列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--模糊搜索区域-->\n    <div class=\"layui-row\">\n        <form class=\"layui-form layui-col-md12 ok-search\">\n            <input class=\"layui-input\" placeholder=\"开始日期\" autocomplete=\"off\" id=\"startTime\" name=\"startTime\">\n            <input class=\"layui-input\" placeholder=\"截止日期\" autocomplete=\"off\" id=\"endTime\" name=\"endTime\">\n            <input class=\"layui-input\" placeholder=\"请输入用户名\" autocomplete=\"off\" name=\"username\">\n            <button class=\"layui-btn\" lay-submit=\"\" lay-filter=\"search\">\n                <i class=\"layui-icon layui-icon-search\"></i>\n            </button>\n        </form>\n    </div>\n    <!--数据表格-->\n    <table class=\"layui-hide\" id=\"tableId\" lay-filter=\"tableFilter\"></table>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"table\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var table = layui.table;\n        var form = layui.form;\n        var laydate = layui.laydate;\n        var util = layui.util;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        util.fixbar({});\n\n        laydate.render({elem: \"#startTime\", type: \"datetime\"});\n        laydate.render({elem: \"#endTime\", type: \"datetime\"});\n\n        var userTable = table.render({\n            elem: \"#tableId\",\n            url: okUtils.mockApi.user.list,\n            method: \"get\",\n            limit: 20,\n            page: true,\n\t\t\ttoolbar: true,\n\t\t\ttoolbar: \"#toolbarTpl\",\n            size: \"sm\",\n            cols: [[\n                {type: \"checkbox\"},\n                {field: \"id\", title: \"ID\", width: 80, sort: true},\n                {field: \"username\", title: \"用户名\", width: 100},\n                {field: \"reallyName\", title: \"姓名\", width: 100},\n                {field: \"password\", title: \"密码\", width: 100},\n                {field: \"role\", title: \"角色\", width: 100, templet: \"#roleTpl\"},\n\t\t\t\t{field: \"email\", title: \"邮箱\", width: 200},\n                {field: \"phone\", title: \"电话号码\", width: 200},\n                {field: \"createTime\", title: \"创建时间\", width: 200},\n\t\t\t\t{field: \"status\", title: \"状态\", width: 100, templet: \"#statusTpl\"},\n                {field: \"logins\", title: \"登陆次数\", width: 100},\n                {title: \"操作\", width: 100, align: 'center', templet: \"#operationTpl\", fixed: \"right\"}\n            ]],\n            done: function (res, curr, count) {\n                console.log(res, curr, count)\n            }\n        });\n\n        form.on(\"submit(search)\", function (data) {\n            userTable.reload({\n\t\t\t\twhere: data.field,\n\t\t\t\tpage: {curr: 1}\n\t\t\t});\n            return false;\n        });\n\n\t\ttable.on(\"toolbar(tableFilter)\", function (obj) {\n\t\t\tswitch (obj.event) {\n\t\t\t\tcase \"batchEnabled\":\n\t\t\t\t\tbatchEnabled();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"batchDisabled\":\n\t\t\t\t\tbatchDisabled();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"batchDel\":\n\t\t\t\t\tbatchDel();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"add\":\n\t\t\t\t\tadd();\n\t\t\t\t\tbreak;\n\t\t\t}\n        });\n\n        table.on(\"tool(tableFilter)\", function (obj) {\n            var data = obj.data;\n\t\t\tconsole.log(data);\n\t\t\tswitch (obj.event) {\n\t\t\t\tcase \"edit\":\n\t\t\t\t\tedit(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"del\":\n\t\t\t\t\tdel(data.id);\n\t\t\t\t\tbreak;\n\t\t\t}\n        });\n\n\t\tfunction batchEnabled () {\n\t\t\tokLayer.confirm(\"确定要批量启用吗？\", function (index) {\n\t\t\t    // TODO\n\t\t\t    layer.close(index);\n\t\t\t    var idsStr = okUtils.table.batchCheck(table);\n\t\t\t    if (idsStr) {\n\t\t\t        okUtils.ajax(okUtils.mockApi.user.batchNormal, \"put\", {idsStr: idsStr}).done(function (response) {\n\t\t\t            console.log(response)\n\t\t\t            okUtils.table.successMsg(\"批量启用成功\");\n\t\t\t        }).fail(function (error) {\n\t\t\t            console.log(error)\n\t\t\t        });\n\t\t\t    }\n\t\t\t});\n\t\t}\n\n\t\tfunction batchDisabled () {\n\t\t\tokLayer.confirm(\"确定要批量停用吗？\", function (index) {\n\t\t\t    layer.close(index);\n\t\t\t    var idsStr = okUtils.table.batchCheck(table);\n\t\t\t    if (idsStr) {\n\t\t\t        okUtils.ajax(okUtils.mockApi.user.batchStop, \"put\", {idsStr: idsStr}).done(function (response) {\n\t\t\t            console.log(response)\n\t\t\t            okUtils.table.successMsg(\"批量停用成功\");\n\t\t\t        }).fail(function (error) {\n\t\t\t            console.log(error)\n\t\t\t        });\n\t\t\t    }\n\t\t\t});\n\t\t}\n\n\t\tfunction batchDel () {\n\t\t\tokLayer.confirm(\"确定要批量删除吗？\", function (index) {\n\t\t\t    layer.close(index);\n\t\t\t    var idsStr = okUtils.table.batchCheck(table);\n\t\t\t    if (idsStr) {\n\t\t\t        okUtils.ajax(okUtils.mockApi.user.batchDel, \"delete\", {idsStr: idsStr}).done(function (response) {\n\t\t\t            console.log(response)\n\t\t\t            okUtils.table.successMsg(\"批量删除成功\");\n\t\t\t        }).fail(function (error) {\n\t\t\t            console.log(error)\n\t\t\t        });\n\t\t\t    }\n\t\t\t});\n\t\t}\n\n\t\tfunction add () {\n\t\t\tokLayer.open(\"添加用户\", \"user-add.html\", \"90%\", \"90%\", null, function () {\n                userTable.reload();\n\t\t\t})\n\t\t}\n\n\t\tfunction edit (data) {\n\t\t\tokLayer.open(\"编辑用户\", \"user-edit.html\", \"90%\", \"90%\", function (layero) {\n\t\t\t\tvar iframeWin = window[layero.find(\"iframe\")[0][\"name\"]];\n\t\t\t\tiframeWin.initForm(data);\n\t\t\t}, function () {\n\t\t\t\tuserTable.reload();\n\t\t\t})\n\t\t}\n\n\t\tfunction del (id) {\n\t\t\tokLayer.confirm(\"确定要删除吗？\", function () {\n\t\t\t    okUtils.ajax(okUtils.mockApi.user.batchDel, \"delete\", {idsStr: id}).done(function (response) {\n\t\t\t        console.log(response)\n\t\t\t        okUtils.table.successMsg(\"删除成功\");\n\t\t\t    }).fail(function (error) {\n\t\t\t        console.log(error)\n\t\t\t    });\n\t\t\t})\n\t\t}\n    })\n</script>\n<!-- 头工具栏模板 -->\n<script type=\"text/html\" id=\"toolbarTpl\">\n\t<div class=\"layui-btn-container\">\n\t\t<button class=\"layui-btn layui-btn-sm layui-btn-normal\" lay-event=\"batchEnabled\"><i class=\"iconfont icon-shangsheng\"></i>批量启用</button>\n\t\t<button class=\"layui-btn layui-btn-sm layui-btn-warm\" lay-event=\"batchDisabled\"><i class=\"iconfont icon-web-icon-\"></i>批量停用</button>\n\t\t<button class=\"layui-btn layui-btn-sm layui-btn-danger\" lay-event=\"batchDel\"><i class=\"layui-icon layui-icon-delete\"></i>批量删除</button>\n\t\t<button class=\"layui-btn layui-btn-sm\" lay-event=\"add\"><i class=\"layui-icon\">&#xe61f;</i>添加用户</button>\n\t</div>\n</script>\n<!-- 启用|停用模板\n    <input type=\"checkbox\" name=\"status\" value=\"{{d.id}}\" lay-skin=\"switch\" lay-text=\"启用|停用\" {{ d.status== 0 ? 'checked' : ''}}>\n-->\n<script type=\"text/html\" id=\"statusTpl\">\n    {{#  if(d.status == 0){ }}\n        <span class=\"layui-btn layui-btn-normal layui-btn-xs\">已启用</span>\n    {{#  } else if(d.status == 1) { }}\n        <span class=\"layui-btn layui-btn-warm layui-btn-xs\">已停用</span>\n    {{#  } }}\n</script>\n<!-- 角色模板 -->\n<script type=\"text/html\" id=\"roleTpl\">\n    {{ d.role == 0 ? '管理员' : '普通用户    '}}\n</script>\n<!-- 行工具栏模板 -->\n<script type=\"text/html\" id=\"operationTpl\">\n    <a href=\"javascript:;\" title=\"编辑\" lay-event=\"edit\"><i class=\"layui-icon\">&#xe642;</i></a>\n    <a href=\"javascript:;\" title=\"删除\" lay-event=\"del\"><i class=\"layui-icon\">&#xe640;</i></a>\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/article-add.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>添加文章</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>常用页面</cite></a>\n            <a><cite>用户列表</cite></a>\n            <a><cite>添加文章</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form layui-form-pane ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">标题</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"title\" placeholder=\"请输入文章标题\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">分类</label>\n            <div class=\"layui-input-block\">\n                <select name=\"classify\">\n                    <option value=\"0\">公告</option>\n                    <option value=\"1\">言情</option>\n                    <option value=\"2\">都市</option>\n                    <option value=\"3\">修仙</option>\n                </select>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">标签</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"label\" placeholder=\"请输入文章标签\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">状态</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"status\" lay-skin=\"switch\" lay-text=\"启用|停用\" checked value=\"0\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">置顶</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"isTop\" lay-skin=\"switch\" lay-text=\"是|否\" value=\"0\">\n            </div>\n        </div>\n        <div class=\"layui-form-item layui-form-text\">\n            <label class=\"layui-form-label\">内容</label>\n            <div class=\"layui-input-block\">\n                <textarea id=\"content\" name=\"content\" lay-verify=\"content\" style=\"display: none;\"></textarea>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"add\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"form\", \"layedit\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var layedit = layui.layedit;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        var index = layedit.build(\"content\", {});\n\t\tform.verify({\n\t\t\t// layedit内容校验\n\t\t\tcontent: function () {\n\t\t\t\tlayedit.sync(index);\n\t\t\t\tvar content = layedit.getContent(index);\n\t\t\t\tif (content.length < 10) {\n\t\t\t\t\treturn \"文章内容不得少于10个字符！\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n        form.on(\"submit(add)\", function (data) {\n            okUtils.ajax(\"/article/add\", \"post\", data.field).done(function (response) {\n                console.log(response)\n                okLayer.msg.greenTick(\"添加成功\", function () {\n                    parent.layer.close(parent.layer.getFrameIndex(window.name));\n                });\n            }).fail(function (error) {\n                console.log(error)\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/article-edit.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>编辑文章</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>常用页面</cite></a>\n            <a><cite>用户列表</cite></a>\n            <a><cite>编辑文章</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form ok-form\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">标题</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"title\" placeholder=\"请输入文章标题\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">分类</label>\n            <div class=\"layui-input-block\">\n                <select name=\"classify\">\n                    <option value=\"0\">公告</option>\n                    <option value=\"1\">言情</option>\n                    <option value=\"2\">都市</option>\n                    <option value=\"3\">修仙</option>\n                </select>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">标签</label>\n            <div class=\"layui-input-block\">\n                <input type=\"text\" name=\"label\" placeholder=\"请输入文章标签\" autocomplete=\"off\" class=\"layui-input\" lay-verify=\"required\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">状态</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"status\" lay-skin=\"switch\" lay-text=\"启用|停用\" checked value=\"0\">\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">置顶</label>\n            <div class=\"layui-input-block\">\n                <input type=\"checkbox\" name=\"isTop\" lay-skin=\"switch\" lay-text=\"是|否\" value=\"0\">\n            </div>\n        </div>\n        <div class=\"layui-form-item layui-form-text\">\n            <label class=\"layui-form-label\">内容</label>\n            <div class=\"layui-input-block\">\n                <textarea id=\"content\" name=\"content\" lay-verify=\"content\" style=\"display: none;\"></textarea>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"edit\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"form\", \"layedit\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var layedit = layui.layedit;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        var index = layedit.build(\"content\", {});\n        form.verify({\n        \t// layedit内容校验\n        \tcontent: function () {\n        \t\tlayedit.sync(index);\n        \t\tvar content = layedit.getContent(index);\n        \t\tif (content.length < 10) {\n        \t\t\treturn \"文章内容不得少于10个字符！\";\n        \t\t}\n        \t}\n        });\n\n        form.on(\"submit(edit)\", function (data) {\n            okUtils.ajax(\"/article/edit\", \"post\", data.field).done(function (response) {\n                console.log(response)\n                okLayer.msg.greenTick(\"编辑成功\", function () {\n                    parent.layer.close(parent.layer.getFrameIndex(window.name));\n                });\n            }).fail(function (error) {\n                console.log(error)\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/article.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>文章列表</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>常用页面</cite></a>\n            <a><cite>文章列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--模糊搜索区域-->\n    <div class=\"layui-row\">\n        <form class=\"layui-form layui-col-md12 ok-search\">\n            <input class=\"layui-input\" placeholder=\"开始日期\" autocomplete=\"off\" id=\"startTime\" name=\"startTime\">\n            <input class=\"layui-input\" placeholder=\"截止日期\" autocomplete=\"off\" id=\"endTime\" name=\"endTime\">\n            <input class=\"layui-input\" placeholder=\"请输入标题\" autocomplete=\"off\" name=\"title\">\n            <button class=\"layui-btn\" lay-submit=\"\" lay-filter=\"search\">\n                <i class=\"layui-icon layui-icon-search\"></i>\n            </button>\n        </form>\n    </div>\n    <!--数据表格-->\n    <table class=\"layui-hide\" id=\"tableId\" lay-filter=\"tableFilter\"></table>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"table\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var table = layui.table;\n        var form = layui.form;\n        var util = layui.util;\n        var laydate = layui.laydate;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        util.fixbar({});\n\n        laydate.render({elem: \"#startTime\", type: \"datetime\"});\n        laydate.render({elem: \"#endTime\", type: \"datetime\"});\n\n        var articleTable = table.render({\n            elem: \"#tableId\",\n            url: okUtils.mockApi.article.list,\n            limit: 20,\n            page: true,\n            even: true,\n            toolbar: \"#toolbarTpl\",\n            size: \"sm\",\n            cols: [[\n                {type: \"checkbox\"},\n                {field: \"id\", title: \"ID\", width: 80, sort: true},\n                {field: \"title\", title: \"标题\", width: 350},\n                {field: \"url\", title: \"链接\", width: 250, templet: \"#urlTpl\"},\n                {field: \"readSize\", title: \"阅读量\", width: 80},\n                {field: \"publisher\", title: \"发布者\", width: 100},\n                {field: \"isTop\", title: \"是否置顶\", width: 100, align: \"center\", templet: \"#topTpl\"},\n                {field: \"status\", title: \"发布状态\", width: 110, align: \"center\", templet: \"#statusTpl\"},\n                {title: \"操作\", width: 200, align: \"center\", templet: \"#operationTpl\"}\n            ]],\n            done: function (res, curr, count) {\n                console.log(res, curr, count)\n            }\n        });\n\n        form.on(\"submit(search)\", function () {\n            articleTable.reload({\n                where: data.field,\n                page: {curr: 1}\n            });\n            return false;\n        });\n\n        table.on(\"toolbar(tableFilter)\", function (obj) {\n            switch (obj.event) {\n                case \"batchEnabled\":\n                    batchEnabled();\n                    break;\n                case \"batchDisabled\":\n                    batchDisabled();\n                    break;\n                case \"batchDel\":\n                    batchDel();\n                    break;\n                case \"add\":\n                    add();\n                    break;\n            }\n        });\n\n        table.on(\"tool(tableFilter)\", function (obj) {\n            var data = obj.data;\n            switch (obj.event) {\n                case \"edit\":\n                    edit(data.id);\n                    break;\n                case \"del\":\n                    del(data.id);\n                    break;\n            }\n        });\n\n        function batchEnabled() {\n            okLayer.confirm(\"确定要批量上架吗？\", function (index) {\n                layer.close(index);\n                var idsStr = okUtils.table.batchCheck(table);\n                if (idsStr) {\n                    okUtils.ajax(\"/article/batchNormal\", \"post\", {idsStr: idsStr}).done(function (response) {\n                        console.log(response)\n                        okUtils.table.successMsg(\"批量上架成功\");\n                    }).fail(function (error) {\n                        console.log(error)\n                    });\n                }\n            });\n        }\n\n        function batchDisabled(){\n            okLayer.confirm(\"确定要批量下架吗？\", function (index) {\n                layer.close(index);\n                var idsStr = okUtils.table.batchCheck(table);\n                if (idsStr) {\n                    okUtils.ajax(\"/article/batchStop\", \"post\", {idsStr: idsStr}).done(function (response) {\n                        console.log(response)\n                        okUtils.table.successMsg(\"批量下架成功\");\n                    }).fail(function (error) {\n                        console.log(error)\n                    });\n                }\n            });\n        }\n\n        function batchDel(){\n            okLayer.confirm(\"确定要批量删除吗？\", function (index) {\n                layer.close(index);\n                var idsStr = okUtils.table.batchCheck(table);\n                if (idsStr) {\n                    okUtils.ajax(\"/article/batchDel\", \"post\", {idsStr: idsStr}).done(function (response) {\n                        console.log(response)\n                        okUtils.table.successMsg(\"批量删除成功\");\n                    }).fail(function (error) {\n                        console.log(error)\n                    });\n                }\n            });\n        }\n\n        function add () {\n            okLayer.open(\"添加文章\", \"article-add.html\", \"90%\", \"90%\", null, function () {\n                articleTable.reload();\n            })\n        }\n\n        function edit (id) {\n            okLayer.open(\"编辑文章\", \"article-edit.html?id=\" + id, \"90%\", \"90%\", null, function () {\n                articleTable.reload();\n            })\n        }\n\n        function del (id) {\n            okLayer.confirm(\"确定要删除吗？\", function () {\n                okUtils.ajax(\"/article/batchDel\", \"post\", {idsStr: id}).done(function (response) {\n                    console.log(response)\n                    okUtils.table.successMsg(\"删除成功\");\n                }).fail(function (error) {\n                    console.log(error)\n                });\n            })\n        }\n    })\n</script>\n<!-- 头工具栏模板 -->\n<script type=\"text/html\" id=\"toolbarTpl\">\n    <div class=\"layui-btn-container\">\n        <button class=\"layui-btn layui-btn-sm layui-btn-normal\" lay-event=\"batchEnabled\"><i class=\"iconfont icon-shangsheng\"></i>批量上架</button>\n        <button class=\"layui-btn layui-btn-sm layui-btn-warm\" lay-event=\"batchDisabled\"><i class=\"iconfont icon-web-icon-\"></i>批量下架</button>\n        <button class=\"layui-btn layui-btn-sm layui-btn-danger\" lay-event=\"batchDel\"><i class=\"layui-icon layui-icon-delete\"></i>批量删除</button>\n        <button class=\"layui-btn layui-btn-sm\" lay-event=\"add\"><i class=\"layui-icon\">&#xe61f;</i>添加文章</button>\n    </div>\n</script>\n<!-- 链接模板 -->\n<script type=\"text/html\" id=\"urlTpl\">\n    <a href=\"{{d.url}}\" target=\"_blank\">{{d.url}}</a>\n</script>\n<!-- 是否指顶模板\n    <input type=\"checkbox\" name=\"isTop\" value=\"{{d.isTop}}\" lay-skin=\"switch\" lay-text=\"是|否\" {{ d.isTop== true ? 'checked' : ''}}>\n-->\n<script type=\"text/html\" id=\"topTpl\">\n    {{#  if(d.isTop == true){ }}\n        <span class=\"layui-btn layui-btn-normal layui-btn-xs\">已置顶</span>\n    {{#  } else if(d.isTop == false) { }}\n        <span class=\"layui-btn layui-btn-warm layui-btn-xs\">未置顶</span>\n    {{#  } }}\n</script>\n<!-- 发布状态模板\n    <input type=\"checkbox\" name=\"top\" value=\"{{d.status}}\" lay-skin=\"switch\" lay-text=\"已发布|未发布\" {{ d.status== true ? 'checked' : ''}}>\n-->\n<script type=\"text/html\" id=\"statusTpl\">\n    {{#  if(d.status == true){ }}\n        <span class=\"layui-btn layui-btn-normal layui-btn-xs\">已发布</span>\n    {{#  } else if(d.status == false) { }}\n        <span class=\"layui-btn layui-btn-warm layui-btn-xs\">未发布</span>\n    {{#  } }}\n</script>\n<!-- 行工具栏模板 -->\n<script type=\"text/html\" id=\"operationTpl\">\n    <a href=\"javascript:;\" title=\"编辑\" lay-event=\"edit\"><i class=\"layui-icon\">&#xe642;</i></a>\n    <a href=\"javascript:;\" title=\"删除\" lay-event=\"del\"><i class=\"layui-icon\">&#xe640;</i></a>\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/download.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>下载列表</title>\n</head>\n<body>\n    <h1>下载列表</h1>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/image.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>图片列表</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>常用页面</cite></a>\n            <a><cite>图片列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n</div>\n<script src=\"../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\"], function () {\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/link.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>链接列表</title>\n</head>\n<body>\n    <h1>链接列表</h1>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/message.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>留言列表</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>常用页面</cite></a>\n            <a><cite>留言列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--模糊搜索区域-->\n    <div class=\"layui-row\">\n        <form class=\"layui-form layui-col-md12 ok-search\">\n            <input class=\"layui-input\" placeholder=\"开始日期\" autocomplete=\"off\" id=\"startTime\" name=\"startTime\">\n            <input class=\"layui-input\" placeholder=\"截止日期\" autocomplete=\"off\" id=\"endTime\" name=\"endTime\">\n            <input class=\"layui-input\" placeholder=\"请输入内容\" autocomplete=\"off\" name=\"title\">\n            <button class=\"layui-btn\" lay-submit=\"\" lay-filter=\"search\">\n                <i class=\"layui-icon layui-icon-search\"></i>\n            </button>\n        </form>\n    </div>\n    <!--数据表格-->\n    <table class=\"layui-hide\" id=\"tableId\" lay-filter=\"tableFilter\"></table>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"table\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var table = layui.table;\n        var form = layui.form;\n        var util = layui.util;\n        var laydate = layui.laydate;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        util.fixbar({});\n\n        laydate.render({elem: \"#startTime\", type: \"datetime\"});\n        laydate.render({elem: \"#endTime\", type: \"datetime\"});\n\n        var articleTable = table.render({\n            elem: \"#tableId\",\n            url: okUtils.mockApi.message.list,\n            limit: 20,\n            page: true,\n            even: true,\n            toolbar: \"#toolbarTpl\",\n            size: \"sm\",\n            cols: [[\n                {type: \"checkbox\"},\n                {field: \"id\", title: \"ID\", width: 80, sort: true},\n                {field: \"content\", title: \"留言内容\", width: 350},\n                {field: \"username\", title: \"留言人\", width: 100},\n                {field: \"createTime\", title: \"留言时间\", width: 150},\n                {field: \"status\", title: \"状态\", width: 110, align: \"center\", templet: \"#statusTpl\"},\n                {title: \"操作\", width: 200, align: \"center\", templet: \"#operationTpl\"}\n            ]],\n            done: function (res, curr, count) {\n                console.log(res, curr, count)\n            }\n        });\n\n        form.on(\"submit(search)\", function () {\n            articleTable.reload({\n                where: data.field,\n                page: {curr: 1}\n            });\n            return false;\n        });\n\n        table.on(\"toolbar(tableFilter)\", function (obj) {\n            switch (obj.event) {\n                case \"batchRead\":\n                    batchEnabled();\n                    break;\n                case \"batchDel\":\n                    batchDel();\n                    break;\n            }\n        });\n\n        table.on(\"tool(tableFilter)\", function (obj) {\n            var data = obj.data;\n            switch (obj.event) {\n                case \"edit\":\n                    edit(data.id);\n                    break;\n                case \"del\":\n                    del(data.id);\n                    break;\n            }\n        });\n\n        function batchEnabled() {\n            okLayer.confirm(\"确定要批量已读吗？\", function (index) {\n                layer.close(index);\n                var idsStr = okUtils.table.batchCheck(table);\n                if (idsStr) {\n                    okUtils.ajax(\"/message/batchRead\", \"post\", {idsStr: idsStr}).done(function (response) {\n                        console.log(response)\n                        okUtils.table.successMsg(\"批量已读成功\");\n                    }).fail(function (error) {\n                        console.log(error)\n                    });\n                }\n            });\n        }\n\n        function batchDel(){\n            okLayer.confirm(\"确定要批量删除吗？\", function (index) {\n                layer.close(index);\n                var idsStr = okUtils.table.batchCheck(table);\n                if (idsStr) {\n                    okUtils.ajax(\"/message/batchDel\", \"post\", {idsStr: idsStr}).done(function (response) {\n                        console.log(response)\n                        okUtils.table.successMsg(\"批量删除成功\");\n                    }).fail(function (error) {\n                        console.log(error)\n                    });\n                }\n            });\n        }\n\n        function edit (id) {\n            okLayer.open(\"留言回复\", \"message-reply.html?id=\" + id, \"90%\", \"90%\", null, function () {\n                articleTable.reload();\n            })\n        }\n\n        function del (id) {\n            okLayer.confirm(\"确定要删除吗？\", function () {\n                okUtils.ajax(\"/message/batchDel\", \"post\", {idsStr: id}).done(function (response) {\n                    console.log(response)\n                    okUtils.table.successMsg(\"删除成功\");\n                }).fail(function (error) {\n                    console.log(error)\n                });\n            })\n        }\n    })\n</script>\n<!-- 头工具栏模板 -->\n<script type=\"text/html\" id=\"toolbarTpl\">\n    <div class=\"layui-btn-container\">\n        <button class=\"layui-btn layui-btn-sm layui-btn-normal\" lay-event=\"batchRead\">批量已读</button>\n        <button class=\"layui-btn layui-btn-sm layui-btn-danger\" lay-event=\"batchDel\">批量删除</button>\n    </div>\n</script>\n<!-- 状态模板 -->\n<script type=\"text/html\" id=\"statusTpl\">\n    {{#  if(d.status == true){ }}\n    <span class=\"layui-btn layui-btn-normal layui-btn-xs\">已读</span>\n    {{#  } else if(d.status == false) { }}\n    <span class=\"layui-btn layui-btn-warm layui-btn-xs\">未读</span>\n    {{#  } }}\n</script>\n<!-- 行工具栏模板 -->\n<script type=\"text/html\" id=\"operationTpl\">\n    <a href=\"javascript:;\" title=\"编辑\" lay-event=\"edit\"><i class=\"layui-icon\">&#xe642;</i></a>\n    <a href=\"javascript:;\" title=\"删除\" lay-event=\"del\"><i class=\"layui-icon\">&#xe640;</i></a>\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/often/process.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Title</title>\n</head>\n<body>\n    <h1>流程列表</h1>\n</body>\n</html>"
  },
  {
    "path": "pages/often/product.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>产品列表</title>\n</head>\n<body>\n    <h1>产品列表</h1>\n</body>\n</html>\n"
  },
  {
    "path": "pages/other/403.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>403</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n    <style>\n        .box {\n            text-align: center;\n            font-size: 14px;\n        }\n\n        .box .iconfont {\n            font-size: 300px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"box animated fadeInDown\">\n    <i class=\"iconfont icon-icon-test2\"></i>\n    <p>哦豁，403错误！</p>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "pages/other/404.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>404</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n    <style>\n        .box {\n            text-align: center;\n            font-size: 14px;\n        }\n\n        .box .iconfont {\n            font-size: 300px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"box animated fadeInDown\">\n    <i class=\"iconfont icon-icon-test3\"></i>\n    <p>哦豁，404错误！</p>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "pages/other/500.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>500</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n    <style>\n        .box {\n            text-align: center;\n            font-size: 14px;\n        }\n\n        .box .iconfont {\n            font-size: 300px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"box animated fadeInDown\">\n    <i class=\"iconfont icon-icon-test4\"></i>\n    <p>哦豁，500错误！</p>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "pages/other/donate.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>捐赠页面</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>常用页面</cite></a>\n            <a><cite>捐赠列表</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <table class=\"layui-table\">\n        <colgroup>\n            <col width=\"250\">\n            <col width=\"250\">\n            <col width=\"250\">\n            <col>\n        </colgroup>\n        <thead>\n        <tr>\n            <th>ID</th>\n            <th>用户</th>\n            <th>金额</th>\n            <th>时间</th>\n            <th>渠道</th>\n        </tr>\n        </thead>\n        <tbody>\n        <tr>\n            <td>001</td>\n            <td>*明</td>\n            <td>￥3.80</td>\n            <td>2018-07-16</td>\n            <td><button class=\"layui-btn layui-btn-sm\">支付宝</button></td>\n        </tr>\n        <tr>\n            <td>002</td>\n            <td>*东</td>\n            <td>￥6.80</td>\n            <td>2018-08-05</td>\n            <td><button class=\"layui-btn layui-btn-sm\">支付宝</button></td>\n        </tr>\n        <tr>\n            <td>003</td>\n            <td>**</td>\n            <td>￥0.01</td>\n            <td>2018-08-08</td>\n            <td><button class=\"layui-btn layui-btn-danger layui-btn-sm\">微&nbsp;&nbsp;&nbsp;&nbsp;信</button></td>\n        </tr>\n        <tr>\n            <td>004</td>\n            <td>*棣</td>\n            <td>￥8.80</td>\n            <td>2018-08-09</td>\n            <td><button class=\"layui-btn layui-btn-sm\">支付宝</button></td>\n        </tr>\n        <tr>\n            <td>005</td>\n            <td>**</td>\n            <td>￥0.01</td>\n            <td>2018-08-11</td>\n            <td><button class=\"layui-btn layui-btn-danger layui-btn-sm\">微&nbsp;&nbsp;&nbsp;&nbsp;信</button></td>\n        </tr>\n        <tr>\n            <td>006</td>\n            <td>*你</td>\n            <td>￥1.00</td>\n            <td>2018-08-22</td>\n            <td><button class=\"layui-btn layui-btn-sm\">支付宝</button></td>\n        </tr>\n        </tbody>\n    </table>\n</div>\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"layer\"], function () {\n        layer.alert(\"谢谢各位大佬的支持！</br>您的肯定是我前进的动力，O(∩_∩)O谢谢~\", {icon: 6, time: 3000, title: '感谢', anim: 1});\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/other/login.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ok-admin v1.0 | 很赞的后台模版</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <meta name=\"keywords\" content=\"ok-admin v1.0,ok-admin网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载\">\n    <meta name=\"description\" content=\"ok-admin v1.0，顾名思义，很赞的后台模版，它是一款基于Layui框架的轻量级扁平化且完全免费开源的网站后台管理系统模板，适合中小型CMS后台系统。\">\n    <link rel=\"shortcut icon\" href=\"../../imgs/favicon.ico\"/>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\"/>\n</head>\n<body class=\"login-body\">\n<div class=\"login-box animated rotateIn\">\n    <div class=\"head\"></div>\n    <div class=\"input-box\">\n        <form class=\"layui-form\" action=\"\">\n            <input type=\"text\" name=\"username\" required lay-verify=\"required\" placeholder=\"邮箱/手机号/平台账号\" autocomplete=\"off\" class=\"layui-input\">\n            <input type=\"password\" name=\"password\" required lay-verify=\"required\" placeholder=\"密码\" autocomplete=\"off\" class=\"layui-input\">\n            <div class=\"remember-me\">\n                <span>记住我：</span>\n                <input type=\"checkbox\" name=\"zzz\" lay-skin=\"switch\" lay-text=\"是|否\">\n            </div>\n            <input type=\"submit\" value=\"登 录\" lay-submit lay-filter=\"login\">\n        </form>\n        <div class=\"oauth\">\n            <i class=\"iconfont icon-WechatIMG\" style=\"font-size: 25px;\"></i>\n            <i class=\"iconfont icon-github\"></i>\n            <i class=\"iconfont icon-logo-weibo\"></i>\n            <i class=\"iconfont icon-qq\"></i>\n            <i class=\"iconfont icon-weixin\"></i>\n            <i class=\"iconfont icon-zhifubao\"></i>\n        </div>\n    </div>\n    <div class=\"copyright\">\n        © 2018-<span id=\"endYear\"></span> ok-admin. All rights reserved.\n    </div>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script type=\"text/javascript\">\n    layui.use([\"form\", \"okLayer\", \"okUtils\", \"okProgress\"], function () {\n        var form = layui.form;\n        var $ = layui.jquery;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        // 修改copyright结束时间\n        var data = new Date();\n        var year = data.getFullYear();\n        $(\"#endYear\").text(year);\n\n        // 登陆逻辑\n        form.on('submit(login)', function (data) {\n            okUtils.ajax(okUtils.mockApi.login, \"post\", data.field).done(function (response) {\n                console.log(response)\n                okLayer.msg.greenTick(\"登陆成功\", function () {\n                    window.location = \"../../index.html\";\n                })\n            }).fail(function (error) {\n                console.log(error)\n            });\n            return false;\n        });\n\n        // oauth三方登陆逻辑\n        $(\".oauth .icon-WechatIMG\").click(function () {\n            layer.msg('正在打开Gitee登陆页面，请稍后...');\n        });\n\n        $(\".oauth .icon-github\").click(function () {\n            layer.msg('正在打开Github登陆页面，请稍后...');\n        });\n\n        $(\".oauth .icon-logo-weibo\").click(function () {\n            layer.msg('正在打开微博登陆页面，请稍后...');\n        });\n\n        $(\".oauth .icon-qq\").click(function () {\n            layer.msg('正在打开QQ登陆页面，请稍后...');\n        });\n\n        $(\".oauth .icon-weixin\").click(function () {\n            layer.msg('正在打开微信登陆页面，请稍后...');\n        });\n\n        $(\".oauth .icon-zhifubao\").click(function () {\n            layer.msg('正在打开支付宝登陆页面，请稍后...');\n        });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/system/alertSkin.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>编辑用户</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>顶部导航</cite></a>\n            <a><cite>皮肤动画</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--form表单-->\n    <form class=\"layui-form ok-form\" lay-filter=\"filter\">\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">弹窗皮肤</label>\n            <div class=\"layui-input-block\" id=\"skin\">\n                <input type=\"radio\" name=\"skin\" value=\"1\" title=\"灰白色\">\n                <input type=\"radio\" name=\"skin\" value=\"2\" title=\"墨绿色\" >\n                <input type=\"radio\" name=\"skin\" value=\"3\" title=\"天蓝色\">\n                <input type=\"radio\" name=\"skin\" value=\"4\" title=\"随机\" checked>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <label class=\"layui-form-label\">弹窗动画</label>\n            <div class=\"layui-input-block\" id=\"anim\">\n                <input type=\"radio\" name=\"anim\" value=\"0\" title=\"平滑放大\">\n                <input type=\"radio\" name=\"anim\" value=\"1\" title=\"从上掉落\" >\n                <input type=\"radio\" name=\"anim\" value=\"2\" title=\"从底部往上滑入\">\n                <input type=\"radio\" name=\"anim\" value=\"3\" title=\"从左滑入\">\n                <input type=\"radio\" name=\"anim\" value=\"4\" title=\"从左翻滚\">\n                <input type=\"radio\" name=\"anim\" value=\"5\" title=\"渐显\">\n                <input type=\"radio\" name=\"anim\" value=\"6\" title=\"抖动\">\n                <input type=\"radio\" name=\"anim\" value=\"7\" title=\"随机\" checked>\n            </div>\n        </div>\n        <div class=\"layui-form-item\">\n            <div class=\"layui-input-block\">\n                <button class=\"layui-btn\" lay-submit lay-filter=\"edit\">立即提交</button>\n                <button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>\n            </div>\n        </div>\n    </form>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n\n    layui.use([\"element\", \"form\", \"okLayer\", \"okUtils\"], function () {\n        var form = layui.form;\n        var $ = layui.jquery;\n\t\tvar okLayer = layui.okLayer;\n\t\tvar okUtils = layui.okUtils;\n\n        // 单选框控件默认选中\n        var storage = window.localStorage;\n        var skin = storage.getItem(\"skin\");\n        var anim = storage.getItem(\"anim\");\n        var _skin = okUtils.number.isNumberWith(skin, 1, 4) ? skin : 4;\n        $(\"#skin\").find(\"input\").each(function () {\n            var val = $(this).val();\n            if (val == _skin) {\n                console.log(val, _skin)\n                $(this).prop(\"checked\", true);\n            }\n        });\n\n        var _anim = okUtils.number.isNumberWith(anim, 0, 7) ? anim : 7;\n        $(\"#anim\").find(\"input\").each(function () {\n            var val = $(this).val();\n            if (val == _anim) {\n                console.log(val, anim)\n                $(this).prop(\"checked\", true);\n            }\n        });\n\n        form.render()\n\n        form.on(\"submit(edit)\", function (data) {\n            // 持久化skin和anim\n            var storage = window.localStorage;\n            storage.skin = data.field.skin;\n            storage.anim = data.field.anim;\n            okLayer.msg.greenTick(\"设置成功\", function () {\n                parent.layer.close(parent.layer.getFrameIndex(window.name));\n            });\n            return false;\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/system/system-log-detail.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>日志详情</title>\n</head>\n<body>\n    <h1>日志详情</h1>\n</body>\n</html>\n"
  },
  {
    "path": "pages/system/system-log.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>系统日志</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>系统管理</cite></a>\n            <a><cite>系统日志</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <!--模糊搜索区域-->\n    <div class=\"layui-row\">\n        <form class=\"layui-form layui-col-md12 ok-search\">\n            <input class=\"layui-input\" placeholder=\"开始日期\" autocomplete=\"off\" id=\"startTime\" name=\"startTime\">\n            <input class=\"layui-input\" placeholder=\"截止日期\" autocomplete=\"off\" id=\"endTime\" name=\"endTime\">\n            <input class=\"layui-input\" placeholder=\"请输入地址\" autocomplete=\"off\" name=\"url\">\n            <button class=\"layui-btn\" lay-submit=\"\" lay-filter=\"search\">\n                <i class=\"layui-icon layui-icon-search\"></i>\n            </button>\n        </form>\n    </div>\n    <!--数据表格-->\n    <table class=\"layui-hide\" id=\"tableId\" lay-filter=\"tableFilter\"></table>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"table\", \"form\", \"laydate\", \"okLayer\", \"okUtils\"], function () {\n        var table = layui.table;\n        var form = layui.form;\n        var laydate = layui.laydate;\n        var okLayer = layui.okLayer;\n        var okUtils = layui.okUtils;\n\n        laydate.render({elem: \"#startTime\", type: \"datetime\"});\n        laydate.render({elem: \"#endTime\", type: \"datetime\"});\n\n        var logTable = table.render({\n            elem: \"#tableId\",\n            url: okUtils.mockApi.log.list,\n            limit: 10,\n            page: true,\n\t\t\ttoolbar: true,\n            toolbar: \"#toolbarTpl\",\n            size: \"sm\",\n            cols: [[\n                {type: \"checkbox\"},\n                {field: \"id\", title: \"ID\", width: 80, sort: true},\n                {field: \"url\", title: \"请求地址\", width: 230},\n                {field: \"method\", title: \"操作方式\", width: 100},\n                {field: \"ip\", title: \"操作IP\", width: 100},\n                {field: \"timeConsuming\", title: \"耗时\", width: 100},\n                {field: \"status\", title: \"状态\", width: 100, templet: \"#statusTpl\"},\n                {field: \"operator\", title: \"操作人\", width: 200},\n                {field: \"operatingTime\", title: \"操作时间\", width: 200},\n                {title: \"操作\", width: 200, align: 'center', templet: \"#operationTpl\"}\n            ]],\n            done: function (res, curr, count) {\n                console.log(res, curr, count);\n            }\n        });\n\n        form.on(\"submit(search)\", function () {\n            logTable.reload({\n                where: data.field,\n                page: {curr: 1}\n            });\n            return false;\n        });\n\n        table.on(\"toolbar(tableFilter)\", function (obj) {\n            switch (obj.event) {\n                case \"batchDel\":\n                    batchDel();\n                    break;\n            }\n        });\n\n        table.on(\"tool(tableFilter)\", function (obj) {\n            var data = obj.data;\n            switch (obj.event) {\n                case \"del\":\n                    del(data.id);\n                    break;\n\t\t\t\tcase \"detail\":\n\t\t\t\t    detail(data.id);\n\t\t\t\t    break;\n            }\n        });\n\n        function batchDel () {\n            okLayer.confirm(\"确定要批量删除吗？\", function (index) {\n                layer.close(index);\n                var idsStr = okUtils.table.batchCheck(table);\n                if (idsStr) {\n                    okUtils.ajax(\"/log/batchDel\", \"post\", {idsStr: idsStr}).done(function (response) {\n                        console.log(response)\n                        okUtils.table.successMsg(\"批量删除成功\");\n                    }).fail(function (error) {\n                        console.log(error)\n                    });\n                }\n            });\n        }\n\n\t\tfunction detail (id) {\n\t\t\tokLayer.open(\"日志详情\", \"system-log-detail.html?id=\" + id, \"90%\", \"90%\")\n\t\t}\n\n        function del (id) {\n            okLayer.confirm(\"确定要删除吗？\", function () {\n                okUtils.ajax(\"/log/batchDel\", \"post\", {idsStr: id}).done(function (response) {\n                    console.log(response)\n                    okUtils.table.successMsg(\"删除成功\");\n                }).fail(function (error) {\n                    console.log(error)\n                });\n            })\n        }\n    })\n</script>\n<!-- 头工具栏模板 -->\n<script type=\"text/html\" id=\"toolbarTpl\">\n    <div class=\"layui-btn-container\">\n        <div class=\"layui-inline\" lay-event=\"batchDel\"><i class=\"layui-icon layui-icon-delete\"></i></div>\n    </div>\n</script>\n<!--模板-->\n<script type=\"text/html\" id=\"statusTpl\">\n    {{ d.role == 0 ? '正常' : '异常'}}\n</script>\n<!-- 行工具栏模板 -->\n<script type=\"text/html\" id=\"operationTpl\">\n\t<a href=\"javascript:;\" title=\"详情\" lay-event=\"detail\"><i class=\"layui-icon layui-icon-tips\"></i></a>\n    <a href=\"javascript:;\" title=\"删除\" lay-event=\"del\"><i class=\"layui-icon layui-icon-delete\"></i></a>\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/system/system-setting.html",
    "content": "<!--<!DOCTYPE html>-->\n<!--<html>-->\n<!--<head>-->\n    <!--<meta charset=\"UTF-8\">-->\n    <!--<title>网站配置</title>-->\n    <!--<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">-->\n    <!--<link rel=\"stylesheet\" href=\"../../css/okadmin.css\">-->\n<!--</head>-->\n<!--<body>-->\n<!--<div class=\"ok-body\">-->\n    <!--&lt;!&ndash;面包屑导航区域&ndash;&gt;-->\n    <!--<div class=\"ok-body-breadcrumb\">-->\n        <!--<span class=\"layui-breadcrumb\">-->\n            <!--<a><cite>首页</cite></a>-->\n            <!--<a><cite>系统管理</cite></a>-->\n            <!--<a><cite>网站配置</cite></a>-->\n        <!--</span>-->\n        <!--<a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">-->\n            <!--<i class=\"layui-icon layui-icon-refresh\"></i>-->\n        <!--</a>-->\n    <!--</div>-->\n\t<!--&lt;!&ndash; tab选项卡 &ndash;&gt;-->\n\t<!--<div class=\"layui-tab layui-tab-card\" lay-filter=\"docDemoTabBrief\">-->\n\t\t<!--<ul class=\"layui-tab-title\">-->\n\t\t\t<!--<li class=\"layui-this\">弹窗皮肤/动画</li>-->\n\t\t\t<!--<li>网站皮肤</li>-->\n\t\t\t<!--<li>系统基本参数</li>-->\n\t\t\t<!--<li>待开发1</li>-->\n\t\t\t<!--<li>待开发2</li>-->\n\t\t<!--</ul>-->\n\t\t<!--<div class=\"layui-tab-content\">-->\n\t\t\t<!--&lt;!&ndash; ====================================弹窗皮肤/动画==================================== &ndash;&gt;-->\n\t\t\t<!--<div class=\"layui-tab-item layui-show\">-->\n\t\t\t\t<!--<blockquote class=\"layui-elem-quote\">-->\n\t\t\t\t    <!--推荐配置：弹窗皮肤（墨绿色），弹窗动画（随机）-->\n\t\t\t\t<!--</blockquote>-->\n\t\t\t\t<!--<form class=\"layui-form\">-->\n\t\t\t\t\t<!--<table class=\"layui-table\">-->\n\t\t\t\t\t\t<!--<colgroup>-->\n\t\t\t\t\t\t\t<!--<col>-->\n\t\t\t\t\t\t\t<!--<col>-->\n\t\t\t\t\t\t\t<!--<col>-->\n\t\t\t\t\t\t<!--</colgroup>-->\n\t\t\t\t\t\t<!--<thead>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<th>类别</th>-->\n\t\t\t\t\t\t\t\t<!--<th>说明</th>-->\n\t\t\t\t\t\t\t\t<!--<th>参数值</th>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t<!--</thead>-->\n\t\t\t\t\t\t<!--<tbody>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>弹窗皮肤</td>-->\n\t\t\t\t\t\t\t\t<!--<td>控制了msg()、confirm()、open()方法的弹窗皮肤</td>-->\n\t\t\t\t\t\t\t\t<!--<td>-->\n\t\t\t\t\t\t\t\t\t<!--<select name=\"skin\" id=\"skin\">-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"1\">灰白色（默认皮肤）</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"2\">墨绿色</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"3\">天蓝色</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"4\">随机</option>-->\n\t\t\t\t\t\t\t\t\t<!--</select>-->\n\t\t\t\t\t\t\t\t<!--</td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>弹窗动画</td>-->\n\t\t\t\t\t\t\t\t<!--<td>控制了msg()、confirm()、open()方法的弹窗动画</td>-->\n\t\t\t\t\t\t\t\t<!--<td>-->\n\t\t\t\t\t\t\t\t\t<!--<select name=\"anim\" id=\"anim\">-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"0\">平滑放大（默认动画）</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"1\">从上掉落</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"2\">从最底部往上滑入</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"3\">从左滑入</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"4\">从左翻滚</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"5\">渐显</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"6\">抖动</option>-->\n\t\t\t\t\t\t\t\t\t\t<!--<option value=\"7\">随机</option>-->\n\t\t\t\t\t\t\t\t\t<!--</select>-->\n\t\t\t\t\t\t\t\t<!--</td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t<!--</tbody>-->\n\t\t\t\t\t<!--</table>-->\n\t\t\t\t\t<!--<div class=\"tar\">-->\n\t\t\t\t\t\t<!--<button class=\"layui-btn\" lay-submit lay-filter=\"skinAnimSubmit\">立即提交</button>-->\n\t\t\t\t\t\t<!--<button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>-->\n\t\t\t\t\t<!--</div>-->\n\t\t\t\t<!--</form>-->\n\t\t\t<!--</div>-->\n\t\t\t<!--&lt;!&ndash; ====================================网站皮肤==================================== &ndash;&gt;-->\n\t\t\t<!--<div class=\"layui-tab-item\">网站皮肤</div>-->\n\t\t\t<!--&lt;!&ndash; ====================================系统基本参数==================================== &ndash;&gt;-->\n\t\t\t<!--<div class=\"layui-tab-item\">-->\n\t\t\t\t<!--<form class=\"layui-form\">-->\n\t\t\t\t\t<!--<table class=\"layui-table\">-->\n\t\t\t\t\t\t<!--<colgroup>-->\n\t\t\t\t\t\t\t<!--<col>-->\n\t\t\t\t\t\t\t<!--<col>-->\n\t\t\t\t\t\t\t<!--<col>-->\n\t\t\t\t\t\t<!--</colgroup>-->\n\t\t\t\t\t\t<!--<thead>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<th>参数说明</th>-->\n\t\t\t\t\t\t\t\t<!--<th>变量名</th>-->\n\t\t\t\t\t\t\t\t<!--<th>参数值</th>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t<!--</thead>-->\n\t\t\t\t\t\t<!--<tbody>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>网站名称</td>-->\n\t\t\t\t\t\t\t\t<!--<td>website</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"网站名称\" autocomplete=\"off\" value=\"ok-admin\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>当前版本</td>-->\n\t\t\t\t\t\t\t\t<!--<td>version</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"当前版本\" autocomplete=\"off\" value=\"v1.0\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>开发作者</td>-->\n\t\t\t\t\t\t\t\t<!--<td>author</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"开发作者\" autocomplete=\"off\" value=\"bobi\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>网站首页</td>-->\n\t\t\t\t\t\t\t\t<!--<td>homePage</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"网站首页\" autocomplete=\"off\" value=\"index.html\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>服务器环境</td>-->\n\t\t\t\t\t\t\t\t<!--<td>server</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"服务器环境\" autocomplete=\"off\" value=\"CentOS\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>数据库版本</td>-->\n\t\t\t\t\t\t\t\t<!--<td>dataBase</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"数据库版本\" autocomplete=\"off\" value=\"MySQL5.7\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>最大上传限制</td>-->\n\t\t\t\t\t\t\t\t<!--<td>maxUpload</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"最大上传限制\" autocomplete=\"off\" value=\"2M\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>用户权限</td>-->\n\t\t\t\t\t\t\t\t<!--<td>userRights</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"用户权限\" autocomplete=\"off\" value=\"超级管理员\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>网站关键字</td>-->\n\t\t\t\t\t\t\t\t<!--<td>keywords</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"默认关键字\" autocomplete=\"off\" value=\"ok-admin v1.0,ok-admin网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>网站描述</td>-->\n\t\t\t\t\t\t\t\t<!--<td>description</td>-->\n\t\t\t\t\t\t\t\t<!--<td><textarea class=\"layui-textarea\" placeholder=\"网站描述\" autocomplete=\"off\">ok-admin v1.0，顾名思义，很赞的后台模版，它是一款基于Layui框架的轻量级扁平化且完全免费开源的网站后台管理系统模板，适合中小型CMS后台系统。</textarea></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>版权信息</td>-->\n\t\t\t\t\t\t\t\t<!--<td>powerby</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"版权信息\" autocomplete=\"off\" value=\"Copyright ©2018-©2019 ok-admin v1.0 All Rights Reserved\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t\t<!--<tr>-->\n\t\t\t\t\t\t\t\t<!--<td>网站备案号</td>-->\n\t\t\t\t\t\t\t\t<!--<td>record</td>-->\n\t\t\t\t\t\t\t\t<!--<td><input class=\"layui-input\" placeholder=\"网站备案号\" autocomplete=\"off\" value=\"川ICP备xxxxxxxx号\"></td>-->\n\t\t\t\t\t\t\t<!--</tr>-->\n\t\t\t\t\t\t<!--</tbody>-->\n\t\t\t\t\t<!--</table>-->\n\t\t\t\t\t<!--<div class=\"tar\">-->\n\t\t\t\t\t\t<!--<button class=\"layui-btn\" lay-submit lay-filter=\"basicParamSubmit\">立即提交</button>-->\n\t\t\t\t\t\t<!--<button type=\"reset\" class=\"layui-btn layui-btn-primary\">重置</button>-->\n\t\t\t\t\t<!--</div>-->\n\t\t\t\t<!--</form>-->\n\t\t\t<!--</div>-->\n\t\t\t<!--<div class=\"layui-tab-item\">待开发1</div>-->\n\t\t\t<!--<div class=\"layui-tab-item\">待开发2</div>-->\n\t\t<!--</div>-->\n\t<!--</div>-->\n<!--</div>-->\n<!--&lt;!&ndash;js逻辑&ndash;&gt;-->\n<!--<script src=\"../../lib/layui/layui.js\"></script>-->\n<!--<script>-->\n    <!--layui.use([\"element\", \"form\", \"okLayer\", \"okUtils\"], function () {-->\n        <!--var $ = layui.jquery;-->\n\t\t<!--var form = layui.form;-->\n        <!--var okLayer = layui.okLayer;-->\n        <!--var okUtils = layui.okUtils;-->\n\n\t\t<!--// select控件默认选中-->\n\t\t<!--var storage = window.localStorage;-->\n\t\t<!--var skin = storage.getItem(\"skin\");-->\n\t\t<!--var anim = storage.getItem(\"anim\");-->\n\t\t<!--$(\"#skin\").val(okUtils.number.isNumberWith(skin, 1, 4) ? skin : 1);-->\n\t\t<!--$(\"#anim\").val(okUtils.number.isNumberWith(anim, 0, 7) ? anim : 0);-->\n\t\t<!--form.render()-->\n\n\t\t<!--form.on(\"submit(skinAnimSubmit)\", function (data) {-->\n\t\t\t<!--storage.skin = data.field.skin;-->\n\t\t\t<!--storage.anim = data.field.anim;-->\n\t\t\t<!--okLayer.msg.greenTick(\"设置成功\")-->\n\t\t    <!--return false;-->\n\t\t<!--});-->\n\n\t\t<!--form.on(\"submit(basicParamSubmit)\", function (data) {-->\n\t\t    <!--alert(\"basicParamSubmit\");-->\n\t\t    <!--return false;-->\n\t\t<!--});-->\n    <!--})-->\n<!--</script>-->\n<!--</body>-->\n<!--</html>-->\n"
  },
  {
    "path": "pages/system/system-shield.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>屏蔽词</title>\n</head>\n<body>\n    <h1>屏蔽词</h1>\n</body>\n</html>\n"
  },
  {
    "path": "pages/test/okLayer.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okLayer测试</title>\n</head>\n<body>\n\n<script src=\"../../lib/layui/layui.js\"></script>\n<script type=\"text/javascript\">\n    layui.use(\"okLayer\", function () {\n        var okLayer = layui.okLayer;\n        // okLayer.tableNotCheckMsg();\n        // okLayer.tableNotCheckMsg(\"哈哈\");\n        okLayer.tableNotCheckMsg(\"哈哈\", \"l\", 3);\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/test/okProgress.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okProgress测试</title>\n</head>\n<body>\n\n<script src=\"../../lib/layui/layui.js\"></script>\n<script type=\"text/javascript\">\n    layui.use(\"okProgress\", function () {\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/test/okutils.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okutils测试</title>\n    <script src=\"js/okutils.js\"></script>\n</head>\n<body>\n\n<script type=\"text/javascript\">\n    console.log(\"当前时间格式化:\", dateUtil.dateFormat(new Date(), \"yyyy-MM-dd hh:mm:ss\"))\n\n    console.log(\"判断字符串是否为空:\", strUtil.isEmpty(\"\"));\n    console.log(\"判断两个字符串是否相同:\", strUtil.isEquals(\"abc\", \"abc\"));\n    console.log(\"忽略大小写判断字符串是否相同:\", strUtil.isEqualsIgnoreCase(\"abc\", \"Abc\"));\n    console.log(\"判断是否是数字:\", strUtil.isNum(\"123\"));\n    console.log(\"判断是否是中文:\", strUtil.isChinese(\"xxx你好\"));\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/demo.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>demo</title>\n</head>\n<body>\n<script>\n    /**\n     *\n     * @param obj\n     * @returns {boolean}\n     */\n    function isEmpty(obj) {\n        if (obj) {\n            return true;\n        }\n        // if (obj && typeof obj === \"string\") {\n        //     return true;\n        // }\n        // if (obj && typeof obj === \"number\") {\n        //     return true;\n        // }\n        return false;\n    }\n\n    console.log(isEmpty());\n    console.log(isEmpty(null));\n    console.log(isEmpty(\"\"));\n    console.log(isEmpty(undefined));\n    console.log(isEmpty(\"hello\"));\n    console.log(isEmpty(10));\n    console.log(isEmpty(true));\n    console.log(isEmpty(false));\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/use-okLayer.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okLayer使用</title>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>框架使用</cite></a>\n            <a><cite>okLayer使用</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <br>\n    <!--代码块1-->\n    <blockquote class=\"layui-elem-quote\">\n        okLayer.tableCheck()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n// 对表格进行批量操作时的预检查\nokLayer.tableCheck(table)\n</pre>\n\n    <!--代码块2-->\n    <blockquote class=\"layui-elem-quote\">\n        okLayer.tableOperationMsg()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n// 对表格操作后的提示信息\nokLayer.tableOperationMsg(\"批量启用成功\");\nokLayer.tableOperationMsg(\"批量停用成功\");\n</pre>\n\n    <!--代码块3-->\n    <blockquote class=\"layui-elem-quote\">\n        okLayer.confirm()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\nokLayer.confirm(\"确定要批量删除吗？\", function (index) {\n    layer.close(index);\n    // 代码逻辑\n});\n</pre>\n\n\t<!--代码块4-->\n\t<blockquote class=\"layui-elem-quote\">\n\t\tokLayer.open()\n\t</blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n/**\n * 弹窗打开窗口页面\n * @param title 标题\n * @param content 内容url\n * @param width 弹窗宽度\n * @param height 弹窗高度\n * @param successFunction 弹出后回调函数\n * @param endFunction 销毁后回调函数\n */\nokLayer.open(\"添加用户\", \"user-add.html\", \"90%\", \"90%\", function(layero, index) {}, function() {})\n</pre>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"code\"], function () {\n        layui.code({about: false});\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/use-okMenu.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okMenu使用</title>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>框架使用</cite></a>\n            <a><cite>okMenu使用</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <br>\n    <!--代码块1-->\n    <blockquote class=\"layui-elem-quote\">\n        菜单树json串\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n{\n  \"status\": 1000,\n  \"msg\": \"操作成功\",\n  \"data\": {\n      \"title\": \"多级菜单\",\n      \"path\": \"\",\n      \"font\": \"layui-icon\",\n      \"icon\": \"&#xe658;\",\n      \"spread\": false,\n      \"children\": [\n        {\n          \"title\": \"购物网站\",\n          \"path\": \"\",\n          \"font\": \"layui-icon\",\n          \"icon\": \"&#xe658;\",\n          \"spread\": false,\n          \"children\": [\n            {\n              \"title\": \"苏宁\",\n              \"path\": \"https://www.suning.com\",\n              \"font\": \"layui-icon\",\n              \"icon\": \"&#xe600;\",\n              \"spread\": false\n            },\n            {\n              \"title\": \"京东\",\n              \"path\": \"https://www.jd.com\",\n              \"font\": \"layui-icon\",\n              \"icon\": \"&#xe600;\",\n              \"spread\": false\n            },\n            {\n              \"title\": \"阿里\",\n              \"path\": \"\",\n              \"font\": \"layui-icon\",\n              \"icon\": \"&#xe658;\",\n              \"spread\": false,\n              \"children\": [\n                {\n                  \"title\": \"淘宝\",\n                  \"path\": \"https://www.taobao.com\",\n                  \"font\": \"layui-icon\",\n                  \"icon\": \"&#xe600;\",\n                  \"spread\": false\n                },\n                {\n                  \"title\": \"天猫\",\n                  \"path\": \"https://www.tmall.com\",\n                  \"font\": \"layui-icon\",\n                  \"icon\": \"&#xe600;\",\n                  \"spread\": false\n                },\n                {\n                  \"title\": \"聚划算\",\n                  \"path\": \"https://ju.taobao.com\",\n                  \"font\": \"layui-icon\",\n                  \"icon\": \"&#xe600;\",\n                  \"spread\": false\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"title\": \"新浪微博\",\n          \"path\": \"https://www.sina.com.cn\",\n          \"font\": \"layui-icon\",\n          \"icon\": \"&#xe600;\",\n          \"spread\": false\n        },\n        {\n          \"title\": \"搜索引擎\",\n          \"path\": \"\",\n          \"font\": \"layui-icon\",\n          \"icon\": \"&#xe658;\",\n          \"spread\": false,\n          \"children\": [\n            {\n              \"title\": \"百度\",\n              \"path\": \"https://www.baidu.com\",\n              \"font\": \"layui-icon\",\n              \"icon\": \"&#xe600;\",\n              \"spread\": false\n            },\n            {\n              \"title\": \"谷歌\",\n              \"path\": \"https://www.google.com\",\n              \"font\": \"layui-icon\",\n              \"icon\": \"&#xe600;\",\n              \"spread\": false\n            },\n            {\n              \"title\": \"360搜索\",\n              \"path\": \"https://www.so.com\",\n              \"font\": \"layui-icon\",\n              \"icon\": \"&#xe600;\",\n              \"spread\": false\n            }\n          ]\n        },\n        {\n          \"title\": \"搜狐\",\n          \"path\": \"http://www.sohu.com\",\n          \"font\": \"layui-icon\",\n          \"icon\": \"&#xe600;\",\n          \"spread\": false\n        },\n        {\n          \"title\": \"网易\",\n          \"path\": \"https://www.163.com\",\n          \"font\": \"layui-icon\",\n          \"icon\": \"&#xe600;\",\n          \"spread\": false\n        }\n      ]\n    }\n}\n</pre>\n\n    <!--代码块2-->\n    <blockquote class=\"layui-elem-quote\">\n        调用生成菜单树\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n// 生成左侧菜单树\nokMenu.generatorMenu(\"data/menu.json\", \"get\");\n</pre>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"code\"], function () {\n        layui.code({about: false});\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/use-okTab-sub.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>子页面</title>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>框架使用</cite></a>\n            <a><cite>okTab使用</cite></a>\n\t\t\t<a><cite>子页面</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <br>\n    <!--代码块1-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法1：用按钮点击打开\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n/**\n * 添加tab\n * @param title 标题\n * @param path 路径\n */\nokTab.tabAdd(\"ok-tool\", \"http://www.xlbweb.cn\")\n</pre>\n\n    <button class=\"layui-btn\" id=\"addTab1\">打开一个新的Tab1</button>\n\t<button class=\"layui-btn\" id=\"addTab2\">打开一个新的Tab2</button>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"code\", \"okTab\"], function () {\n        var $ = layui.jquery;\n\t\tvar okTab = layui.okTab;\n\n        layui.code({about: false});\n\n        $(\"#addTab1\").click(function () {\n            okTab.add(\"瓜子二手车\", \"https://www.guazi.com\");\n        });\n\n\t\t$(\"#addTab2\").click(function () {\n\t\t    okTab.add(\"国美电器\", \"https://www.gome.com.cn\");\n\t\t});\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/use-okTab.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okTab使用</title>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>框架使用</cite></a>\n            <a><cite>okTab使用</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <br>\n    <!--代码块1-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法1：在index.html左侧中添加\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"HTML\" lay-encode=\"true\">\n<li class=\"layui-nav-item\">\n    <a class=\"\" href=\"javascript:;\">\n        <i class=\"iconfont icon-ai-new\"></i> XX管理\n    </a>\n    <dl class=\"layui-nav-child\">\n        <dd><a href=\"javascript:;\" path=\"xx.html\"><i class=\"iconfont icon-xx\"></i> xx列表</a></dd>\n    </dl>\n</li>\n</pre>\n\n    <!--代码块2-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法2：在index.html顶部中添加\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"HTML\" lay-encode=\"true\">\n<dl class=\"layui-nav-child\">\n    <dd><a href=\"javascript:;\" path=\"user-center.html\">个人中心<span class=\"layui-badge-dot\"></span></a></dd>\n    <dd><a href=\"javascript:;\" path=\"user-info.html\">基本资料</a></dd>\n    <dd><a href=\"javascript:;\" path=\"user-security.html\">安全设置</a></dd>\n    <dd><a href=\"javascript:;\" id=\"lock\">锁定账户</a></dd>\n</dl>\n</pre>\n\n    <!--代码块3-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法3：用按钮点击打开\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n/**\n * 添加tab\n * @param title 标题\n * @param path 路径\n */\nokTab.tabAdd(\"ok-tool\", \"http://www.xlbweb.cn\")\n</pre>\n\n    <button class=\"layui-btn\" id=\"addTab1\">打开一个新的Tab1</button>\n\t<button class=\"layui-btn\" id=\"addTab2\">打开一个新的Tab2</button>\n\t<button class=\"layui-btn\" id=\"addTab3\">参数填写错误的Tab2</button>\n\t<button class=\"layui-btn\" id=\"addTab4\">在子页面打开一个新的Tab3</button>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script>\n    layui.use([\"element\", \"code\", \"okTab\", \"okLayer\"], function () {\n        var $ = layui.jquery;\n\t\tvar okTab = layui.okTab;\n\t\tvar okLayer = layui.okLayer;\n\n        layui.code({about: false});\n\n        $(\"#addTab1\").click(function () {\n            okTab.add(\"okLayer\", \"pages/use/use-okLayer.html\");\n        });\n\n\t\t$(\"#addTab2\").click(function () {\n\t\t    okTab.add(\"ok-tool\", \"http://tool.xlbweb.cn\");\n\t\t});\n\n\t\t$(\"#addTab3\").click(function () {\n\t\t    // 参数漏写或为空\n            // okTab.add(\"test\");\n            okTab.add(\"test\", \"\");\n\t\t});\n\n        $(\"#addTab4\").click(function () {\n            okLayer.open(\"子页面\", \"use-okTab-sub.html\", \"90%\", \"90%\", function() {})\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/use-okUtils.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>okUtils使用</title>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>框架使用</cite></a>\n            <a><cite>okUtils使用</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <br>\n    <!--代码块1-->\n    <blockquote class=\"layui-elem-quote\">\n        okUtils.ajax()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n/**\n * 弹窗打开窗口页面\n * @param url 请求url\n * @param type 请求类型\n * @param param 请求参数\n */\nokUtils.ajax(\"/user/batchDel\", \"post\", {idsStr: idsStr}).done(function (response) {\n    console.log(response)\n    okLayer.tableOperationMsg(\"批量删除成功\");\n}).fail(function (error) {\n    console.log(error)\n});\n</pre>\n\n    <!--代码块2-->\n    <blockquote class=\"layui-elem-quote\">\n        okUtils.table.xxx()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n// 做批量操作时，table行数据检查\nokUtils.table.batchCheck(table)\n// table页面操作执行成功后的提示\nokUtils.table.successMsg()\n</pre>\n\n    <!--代码块3-->\n    <blockquote class=\"layui-elem-quote\">\n        okUtils.isNum()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n// 判断是否为一个正常的数字\nokUtils.isNum()\n// 判断一个数字是否包括在某个范围\nokUtils.isNum(num, begin, end)\n</pre>\n\n    <!--代码块3-->\n    <blockquote class=\"layui-elem-quote\">\n        okUtils.date.xxx()\n    </blockquote>\n\n<pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n// 格式化日期时间\nokUtils.dateFormat(date, fmt)\n</pre>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script src=\"../../js/okadmin.js\"></script>\n<script>\n    layui.use([\"element\", \"code\"], function () {\n        layui.code({about: false});\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/use/use-tab.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Tab使用</title>\n    <link rel=\"stylesheet\" href=\"../../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <!--面包屑导航区域-->\n    <div class=\"ok-body-breadcrumb\">\n        <span class=\"layui-breadcrumb\">\n            <a><cite>首页</cite></a>\n            <a><cite>框架使用</cite></a>\n            <a><cite>Tab使用</cite></a>\n        </span>\n        <a class=\"layui-btn layui-btn-sm\" href=\"javascript:location.replace(location.href);\" title=\"刷新\">\n            <i class=\"layui-icon layui-icon-refresh\"></i>\n        </a>\n    </div>\n    <br>\n    <!--代码块1-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法1：在index.html左侧中添加\n    </blockquote>\n    <pre class=\"layui-code\" lay-title=\"HTML\" lay-encode=\"true\">\n<li class=\"layui-nav-item\">\n    <a class=\"\" href=\"javascript:;\">\n        <i class=\"iconfont icon-ai-new\"></i> XX管理\n    </a>\n    <dl class=\"layui-nav-child\">\n        // tab-id不可和其它菜单重复\n        <dd><a href=\"javascript:;\" path=\"xx.html\" tab-id=\"xx-1\"><i class=\"iconfont icon-xx\"></i> xx列表</a></dd>\n    </dl>\n</li>\n    </pre>\n\n    <!--代码块2-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法2：在index.html顶部中添加\n    </blockquote>\n    <pre class=\"layui-code\" lay-title=\"HTML\" lay-encode=\"true\">\n<dl class=\"layui-nav-child\">\n    <dd><a href=\"javascript:;\" path=\"user-center.html\" tab-id=\"0-1\">个人中心<span class=\"layui-badge-dot\"></span></a></dd>\n    <dd><a href=\"javascript:;\" path=\"user-info.html\" tab-id=\"0-2\">基本资料</a></dd>\n    <dd><a href=\"javascript:;\" path=\"user-security.html\" tab-id=\"0-3\">安全设置</a></dd>\n    <dd><a href=\"javascript:;\" id=\"lock\">锁定账户</a></dd>\n</dl>\n    </pre>\n\n    <!--代码块3-->\n    <blockquote class=\"layui-elem-quote\">\n        使用方法3：用按钮点击打开\n    </blockquote>\n    <pre class=\"layui-code\" lay-title=\"JavaScript\" lay-encode=\"true\">\n/**\n * 添加tab\n * @param title 标题\n * @param path 路径\n * @param tabId tabId必须唯一\n */\ntabAdd(\"百度\", \"http://www.xlbweb.cn\", \"11-1\")\n    </pre>\n    <button class=\"layui-btn\" id=\"addTab\">打开一个新的Tab</button>\n</div>\n<!--js逻辑-->\n<script src=\"../../lib/layui/layui.js\"></script>\n<script src=\"../../js/okadmin.js\"></script>\n<script>\n    layui.use([\"element\", \"code\"], function () {\n        layui.code({about: false});\n        var $ = layui.jquery;\n\n        $(\"#addTab\").click(function () {\n            tabAdd(\"ok-tool\", \"http://tool.xlbweb.cn\", \"11-1\")\n        });\n    })\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "pages/welcome.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>ok-admin v1.0 | 很赞的后台模版</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <meta name=\"keywords\" content=\"ok-admin v1.0,ok-admin网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载\">\n    <meta name=\"description\" content=\"ok-admin v1.0，顾名思义，很赞的后台模版，它是一款基于Layui框架的轻量级扁平化且完全免费开源的网站后台管理系统模板，适合中小型CMS后台系统。\">\n    <link rel=\"shortcut icon\" href=\"../imgs/favicon.ico\"/>\n    <link rel=\"stylesheet\" href=\"../css/okadmin.css\">\n</head>\n<body>\n<div class=\"ok-body\">\n    <blockquote class=\"layui-elem-quote\">\n        欢迎管理员：<span class=\"x-red\">bobi</span>！当前时间: <span id=\"nowTime\"></span> <span id=\"weekday\"></span>\n    </blockquote>\n    <fieldset class=\"layui-elem-field\">\n        <legend>数据统计</legend>\n        <div class=\"layui-row layui-col-space10 layui-row-margin\">\n            <div class=\"layui-col-md2\">\n                <div class=\"layui-bg-green md2-sub1\">\n                    <i class=\"iconfont icon-dianliyonghuzongshu\"></i>\n                </div>\n                <div class=\"md2-sub2\">\n                    <span>100</span>\n                    <cite>用户总数</cite>\n                </div>\n            </div>\n            <div class=\"layui-col-md2\">\n                <div class=\"layui-bg-blue md2-sub1\">\n                    <i class=\"iconfont icon-wenzhang2\"></i>\n                </div>\n                <div class=\"md2-sub2\">\n                    <span>100</span>\n                    <cite>文章总数</cite>\n                </div>\n            </div>\n            <div class=\"layui-col-md2\">\n                <div class=\"layui-bg-black md2-sub1\">\n                    <i class=\"iconfont icon-pinglun\"></i>\n                </div>\n                <div class=\"md2-sub2\">\n                    <span>100</span>\n                    <cite>评论总数</cite>\n                </div>\n            </div>\n            <div class=\"layui-col-md2\">\n                <div class=\"layui-bg-orange md2-sub1\">\n                    <i class=\"iconfont icon-goods\"></i>\n                </div>\n                <div class=\"md2-sub2\">\n                    <span>100</span>\n                    <cite>商品总数</cite>\n                </div>\n            </div>\n            <div class=\"layui-col-md2\">\n                <div class=\"layui-bg-red md2-sub1\">\n                    <i class=\"iconfont icon-jiaose\"></i>\n                </div>\n                <div class=\"md2-sub2\">\n                    <span>100</span>\n                    <cite>角色总数</cite>\n                </div>\n            </div>\n            <div class=\"layui-col-md2\">\n                <div class=\"layui-bg-cyan md2-sub1\">\n                    <i class=\"iconfont icon-webpage\"></i>\n                </div>\n                <div class=\"md2-sub2\">\n                    <span>100</span>\n                    <cite>页面总数</cite>\n                </div>\n            </div>\n        </div>\n    </fieldset>\n\n    <blockquote class=\"layui-elem-quote\">\n        系统基本参数\n    </blockquote>\n    <table class=\"layui-table\">\n        <colgroup>\n            <col width=\"300\">\n            <col>\n        </colgroup>\n        <tbody>\n        <tr>\n            <td>本机IP地址</td>\n            <td>1.1.1.1</td>\n        </tr>\n        <tr>\n            <td>ok-admin v1.0 服务器地址</td>\n            <td><a href=\"http://ok-admin-v1.xlbweb.cn\" target=\"_blank\">http://ok-admin-v1.xlbweb.cn</a></td>\n        </tr>\n\t\t<tr>\n\t\t    <td>ok-admin v2.0 服务器地址</td>\n\t\t    <td><a href=\"http://ok-admin.xlbweb.cn\" target=\"_blank\">http://ok-admin.xlbweb.cn</a></td>\n\t\t</tr>\n        <tr>\n            <td>操作系统</td>\n            <td>CentOS</td>\n        </tr>\n        <tr>\n            <td>运行环境</td>\n            <td>JDK 1.8.0_171</td>\n        </tr>\n        <tr>\n            <td>数据库版本</td>\n            <td>MySQL 5.7</td>\n        </tr>\n        <tr>\n            <td>最大上传限制</td>\n            <td>5M</td>\n        </tr>\n        <tr>\n            <td>当前用户权限</td>\n            <td>超级管理员</td>\n        </tr>\n        <tr>\n            <td>剩余空间</td>\n            <td>888888M</td>\n        </tr>\n        </tbody>\n    </table>\n\n    <blockquote class=\"layui-elem-quote\">\n        作者信息\n    </blockquote>\n    <table class=\"layui-table\">\n        <colgroup>\n            <col width=\"300\">\n            <col>\n        </colgroup>\n        <tbody>\n        <tr>\n            <td>开发者</td>\n            <td>bobi - <a href=\"mailto:bobi1234@foxmail.com\">bobi1234@foxmail.com</a></td>\n        </tr>\n        <tr>\n            <td>下载地址1</td>\n            <td>\n                <a class=\"layui-btn layui-btn-xs\" href=\"https://gitee.com/bobi1234/ok-admin\" target=\"_blank\">Gitee</a>\n                &nbsp;&nbsp;&nbsp;&nbsp;目前正在不间断迭代开发中，请大家多多\n                <a class=\"layui-btn layui-btn-danger layui-btn-xs\" href=\"https://gitee.com/bobi1234/ok-admin\" target=\"_blank\">Star</a>\n                ，您的鼓励就是我开发的动力，O(∩_∩)O谢谢~\n            </td>\n        </tr>\n        <tr>\n            <td>下载地址2</td>\n            <td>\n                <a class=\"layui-btn layui-btn-xs\" href=\"https://github.com/bobi1234/ok-admin\" target=\"_blank\">Github</a>\n                &nbsp;&nbsp;目前正在不间断迭代开发中，请大家多多\n                <a class=\"layui-btn layui-btn-danger layui-btn-xs\" href=\"https://github.com/bobi1234/ok-admin\" target=\"_blank\">Star</a>\n                ，您的鼓励就是我开发的动力，O(∩_∩)O谢谢~\n            </td>\n        </tr>\n        </tbody>\n    </table>\n\n    <blockquote class=\"layui-elem-quote\">\n        更新日志\n    </blockquote>\n    <ul class=\"layui-timeline\">\n        <li class=\"layui-timeline-item\">\n            <i class=\"layui-icon layui-timeline-axis\">&#xe756;</i>\n            <div class=\"layui-timeline-content layui-text\">\n                <h3 class=\"layui-timeline-title\">6月15日</h3>\n                <p>\n                   ok-admin大体架构成型。\n                    <br>不枉近半个月日日夜夜与之为伴。\n                    <br>无论它能走多远，抑或如何支撑？至少我曾倾注全心，无怨无悔 <i class=\"layui-icon\">&#xe6af;</i>\n                </p>\n            </div>\n        </li>\n        <li class=\"layui-timeline-item\">\n            <i class=\"layui-icon layui-timeline-axis\">&#xe63f;</i>\n            <div class=\"layui-timeline-content layui-text\">\n                <h3 class=\"layui-timeline-title\">5月13日</h3>\n                <p>毕业答辩结束，至此感觉<em>大学，就这样结束了。</em>送两句话给自己：</p>\n                <ul>\n                    <li>但行好事 莫问前程</li>\n                    <li>纵有疾风起 人生不言弃</li>\n                </ul>\n            </div>\n        </li>\n        <li class=\"layui-timeline-item\">\n            <i class=\"layui-icon layui-timeline-axis\">&#xe63f;</i>\n            <div class=\"layui-timeline-content layui-text\">\n                <h3 class=\"layui-timeline-title\">5月4日</h3>\n                <p>\n                    正在准备毕业答辩\n                    <br>常常在想，要是有一个满足我项目所有基础页面的CMS该多好\n                    <br>今天，初始化项目\n                </p>\n            </div>\n        </li>\n        <li class=\"layui-timeline-item\">\n            <i class=\"layui-icon layui-timeline-axis layui-anim layui-anim-rotate layui-anim-loop\">&#xe63e;</i>\n            <div class=\"layui-timeline-content layui-text\">\n                <div class=\"layui-timeline-title\">过去</div>\n            </div>\n        </li>\n    </ul>\n</div>\n<!--js引入-->\n<script src=\"../lib/layui/layui.js\"></script>\n<!--js逻辑-->\n<script type=\"text/javascript\">\n\n    layui.use(\"util\", function () {\n        var util = layui.util;\n        util.fixbar({});\n    });\n\n    /**\n     * 初始化函数\n     */\n    setDate();\n\n    /**\n     * 获取当前时间\n     */\n    var nowDate1 = \"\";\n    function setDate() {\n        var date = new Date();\n        var year = date.getFullYear();\n        nowDate1 = year + \"-\" + addZero((date.getMonth() + 1)) + \"-\" + addZero(date.getDate()) + \"  \";\n        nowDate1 += addZero(date.getHours()) + \":\" + addZero(date.getMinutes()) + \":\" + addZero(date.getSeconds());\n        document.getElementById(\"nowTime\").innerHTML = nowDate1;\n        setTimeout('setDate()', 1000);\n    }\n\n    /**\n     * 年月日是分秒为10以下的数字则添加0字符串\n     * @param time\n     * @returns {number | *}\n     */\n    function addZero(time) {\n        var i = parseInt(time);\n        if (i / 10 < 1) {\n            i = \"0\" + i;\n        }\n        return i;\n    }\n\n    /**\n     * 初始化星期几\n     * @type {string}\n     */\n    var weekday = \"星期\" + \"日一二三四五六\".charAt(new Date().getDay());\n    document.getElementById(\"weekday\").innerHTML = weekday;\n</script>\n</body>\n</html>\n"
  }
]