From a7b6b88833177f1b918ddb20e7296e5b2d556612 Mon Sep 17 00:00:00 2001 From: cym1102 Date: Sun, 1 Sep 2024 16:54:09 +0800 Subject: [PATCH] 1 --- .gitignore | 33 + lib/jpaHelper-release.jar | Bin 0 -> 35898 bytes pom.xml | 194 + src/main/java/com/cym/CdnWebUI.java | 17 + .../java/com/cym/config/FreeMarkerConfig.java | 40 + .../java/com/cym/config/MultipartConfig.java | 27 + .../controller/page/ExampleController.java | 85 + src/main/java/com/cym/ext/AdminExt.java | 49 + src/main/java/com/cym/ext/ExampleExt.java | 18 + src/main/java/com/cym/ext/NameValue.java | 36 + src/main/java/com/cym/ext/UserExt.java | 78 + src/main/java/com/cym/model/Admin.java | 153 + src/main/java/com/cym/model/Example.java | 55 + src/main/java/com/cym/model/Level.java | 106 + src/main/java/com/cym/model/User.java | 482 + .../java/com/cym/service/ExampleService.java | 21 + .../java/com/cym/utils/BaseController.java | 136 + src/main/java/com/cym/utils/JsonResult.java | 71 + src/main/java/com/cym/utils/MenuUtils.java | 222 + .../cym/utils/cert/CertExportEmailDTO.java | 27 + .../com/cym/utils/cert/CertExportEmailVO.java | 337 + .../java/com/cym/utils/cert/CertInfoDTO.java | 110 + .../com/cym/utils/cert/CertificateChain.java | 65 + .../utils/cert/CertificateDetectionUtils.java | 839 + .../java/com/cym/utils/cert/DateUtils.java | 928 + .../java/com/cym/utils/cert/PunyUtils.java | 194 + .../utils/cert/ssl/AccessDescriptions.java | 21 + .../cym/utils/cert/ssl/AccessLocation.java | 20 + .../com/cym/utils/cert/ssl/AccessMethod.java | 4 + .../com/cym/utils/cert/ssl/AlgorithmId.java | 26 + .../com/cym/utils/cert/ssl/AuthKeyId.java | 12 + .../ssl/AuthorityInfoAccessExtension.java | 70 + .../ssl/AuthorityKeyIdentifierExtension.java | 62 + .../cert/ssl/BasicConstraintsExtension.java | 62 + .../ssl/CRLDistributionPointsExtension.java | 62 + .../ssl/CertificatePoliciesExtension.java | 62 + .../cert/ssl/ExtendedKeyUsageExtension.java | 70 + .../com/cym/utils/cert/ssl/ExtensionId.java | 4 + .../com/cym/utils/cert/ssl/HostObject.java | 21 + .../java/com/cym/utils/cert/ssl/IssuerDN.java | 100 + .../java/com/cym/utils/cert/ssl/Name.java | 52 + src/main/java/com/cym/utils/cert/ssl/OID.java | 4 + .../com/cym/utils/cert/ssl/PublicKey.java | 21 + .../java/com/cym/utils/cert/ssl/Root.java | 77 + .../com/cym/utils/cert/ssl/SSLBasicInfo.java | 72 + .../cym/utils/cert/ssl/SSLDetailsInfo.java | 47 + .../java/com/cym/utils/cert/ssl/SSLInfo.java | 26 + .../com/cym/utils/cert/ssl/SSLIssuerInfo.java | 22 + .../cym/utils/cert/ssl/SSLSubjectInfo.java | 25 + .../utils/cert/ssl/SerialNumberObject.java | 12 + .../ssl/SubjectAlternativeNameExtension.java | 62 + .../com/cym/utils/cert/ssl/SubjectDN.java | 100 + .../com/cym/utils/cert/ssl/SubjectKeyId.java | 12 + .../ssl/SubjectKeyIdentifierExtension.java | 62 + .../com/cym/utils/cert/ssl/XccSSLInfo.java | 79 + src/main/resources/application-dev.yml | 6 + src/main/resources/application.yml | 109 + src/main/resources/static/css/base.css | 68 + src/main/resources/static/favicon.ico | Bin 0 -> 15406 bytes src/main/resources/static/js/base.js | 333 + src/main/resources/static/js/example/index.js | 109 + .../resources/static/lib/base64/base64.js | 303 + .../static/lib/echarts/echarts.min.js | 12 + .../resources/static/lib/layui/css/layui.css | 1 + .../static/lib/layui/exts/xmSelect/index.html | 7 + .../lib/layui/exts/xmSelect/static/2.js | 9 + .../lib/layui/exts/xmSelect/static/3.js | 9 + .../lib/layui/exts/xmSelect/static/docs.js | 33 + .../static/element-icons.535877f.woff | Bin 0 -> 28200 bytes .../xmSelect/static/element-icons.732389d.ttf | Bin 0 -> 55956 bytes .../layui/exts/xmSelect/static/wx.b556b2e.jpg | Bin 0 -> 103123 bytes .../lib/layui/exts/xmSelect/xm-select.js | 8 + .../static/lib/layui/font/iconfont.eot | Bin 0 -> 54172 bytes .../static/lib/layui/font/iconfont.svg | 405 + .../static/lib/layui/font/iconfont.ttf | Bin 0 -> 53996 bytes .../static/lib/layui/font/iconfont.woff | Bin 0 -> 34624 bytes .../static/lib/layui/font/iconfont.woff2 | Bin 0 -> 29736 bytes src/main/resources/static/lib/layui/layui.js | 1 + .../lib/left-side/css/left-side-menu.css | 132 + .../static/lib/left-side/font/iconfont.css | 81 + .../static/lib/left-side/font/iconfont.eot | Bin 0 -> 12996 bytes .../static/lib/left-side/font/iconfont.js | 1 + .../static/lib/left-side/font/iconfont.svg | 129 + .../static/lib/left-side/font/iconfont.ttf | Bin 0 -> 12832 bytes .../static/lib/left-side/font/iconfont.woff | Bin 0 -> 8920 bytes .../static/lib/left-side/images/mini.png | Bin 0 -> 141 bytes .../static/lib/left-side/js/jquery.min.js | 5 + .../lib/left-side/js/jquery.slimscroll.min.js | 16 + .../static/lib/left-side/js/left-side-menu.js | 97 + .../jquery.sweet-dropdown.min.css | 1 + .../jquery.sweet-dropdown.min.js | 11 + .../resources/static/lib/wangEditor/index.js | 24129 ++++++++++++++++ .../resources/static/lib/wangEditor/style.css | 27 + .../static/lib/ztree/api/API_cn.html | 103 + .../static/lib/ztree/api/API_en.html | 102 + .../static/lib/ztree/api/apiCss/api.js | 599 + .../static/lib/ztree/api/apiCss/common.css | 218 + .../lib/ztree/api/apiCss/common_ie6.css | 23 + .../lib/ztree/api/apiCss/img/apiMenu.gif | Bin 0 -> 1736 bytes .../lib/ztree/api/apiCss/img/apiMenu.png | Bin 0 -> 3954 bytes .../lib/ztree/api/apiCss/img/background.jpg | Bin 0 -> 36520 bytes .../lib/ztree/api/apiCss/img/chinese.png | Bin 0 -> 1556 bytes .../static/lib/ztree/api/apiCss/img/close.png | Bin 0 -> 1908 bytes .../lib/ztree/api/apiCss/img/contact-bg.png | Bin 0 -> 177 bytes .../lib/ztree/api/apiCss/img/english.png | Bin 0 -> 1356 bytes .../lib/ztree/api/apiCss/img/header-bg.png | Bin 0 -> 148 bytes .../lib/ztree/api/apiCss/img/lightbulb.png | Bin 0 -> 27355 bytes .../ztree/api/apiCss/img/overlay_arrow.gif | Bin 0 -> 625 bytes .../ztree/api/apiCss/img/overlay_arrow.png | Bin 0 -> 830 bytes .../lib/ztree/api/apiCss/img/overlay_bg.png | Bin 0 -> 109 bytes .../api/apiCss/img/overlay_close_IE6.gif | Bin 0 -> 441 bytes .../ztree/api/apiCss/img/zTreeStandard.gif | Bin 0 -> 6851 bytes .../ztree/api/apiCss/img/zTreeStandard.png | Bin 0 -> 12573 bytes .../lib/ztree/api/apiCss/jquery-1.6.2.min.js | 18 + .../lib/ztree/api/apiCss/jquery.ztree.core.js | 75 + .../lib/ztree/api/apiCss/zTreeStyleForApi.css | 49 + .../static/lib/ztree/api/cn/fn.zTree._z.html | 13 + .../lib/ztree/api/cn/fn.zTree.destroy.html | 28 + .../ztree/api/cn/fn.zTree.getZTreeObj.html | 24 + .../lib/ztree/api/cn/fn.zTree.init.html | 74 + .../ztree/api/cn/setting.async.autoParam.html | 49 + .../api/cn/setting.async.contentType.html | 29 + .../api/cn/setting.async.dataFilter.html | 45 + .../ztree/api/cn/setting.async.dataType.html | 29 + .../ztree/api/cn/setting.async.enable.html | 30 + .../ztree/api/cn/setting.async.headers.html | 18 + .../api/cn/setting.async.otherParam.html | 50 + .../lib/ztree/api/cn/setting.async.type.html | 30 + .../lib/ztree/api/cn/setting.async.url.html | 50 + .../ztree/api/cn/setting.async.xhrFields.html | 18 + .../api/cn/setting.callback.beforeAsync.html | 35 + .../api/cn/setting.callback.beforeCheck.html | 34 + .../api/cn/setting.callback.beforeClick.html | 49 + .../cn/setting.callback.beforeCollapse.html | 34 + .../cn/setting.callback.beforeDblClick.html | 36 + .../api/cn/setting.callback.beforeDrag.html | 39 + .../cn/setting.callback.beforeDragOpen.html | 37 + .../api/cn/setting.callback.beforeDrop.html | 48 + .../cn/setting.callback.beforeEditName.html | 38 + .../api/cn/setting.callback.beforeExpand.html | 34 + .../cn/setting.callback.beforeMouseDown.html | 35 + .../cn/setting.callback.beforeMouseUp.html | 35 + .../api/cn/setting.callback.beforeRemove.html | 37 + .../api/cn/setting.callback.beforeRename.html | 46 + .../cn/setting.callback.beforeRightClick.html | 35 + .../api/cn/setting.callback.onAsyncError.html | 42 + .../cn/setting.callback.onAsyncSuccess.html | 38 + .../api/cn/setting.callback.onCheck.html | 34 + .../api/cn/setting.callback.onClick.html | 49 + .../api/cn/setting.callback.onCollapse.html | 34 + .../api/cn/setting.callback.onDblClick.html | 35 + .../ztree/api/cn/setting.callback.onDrag.html | 34 + .../api/cn/setting.callback.onDragMove.html | 34 + .../ztree/api/cn/setting.callback.onDrop.html | 46 + .../api/cn/setting.callback.onExpand.html | 34 + .../api/cn/setting.callback.onMouseDown.html | 35 + .../api/cn/setting.callback.onMouseUp.html | 35 + .../cn/setting.callback.onNodeCreated.html | 35 + .../api/cn/setting.callback.onRemove.html | 34 + .../api/cn/setting.callback.onRename.html | 40 + .../api/cn/setting.callback.onRightClick.html | 36 + .../cn/setting.check.autoCheckTrigger.html | 28 + .../cn/setting.check.chkDisabledInherit.html | 28 + .../ztree/api/cn/setting.check.chkStyle.html | 48 + .../api/cn/setting.check.chkboxType.html | 31 + .../ztree/api/cn/setting.check.enable.html | 25 + .../api/cn/setting.check.nocheckInherit.html | 28 + .../ztree/api/cn/setting.check.radioType.html | 29 + .../ztree/api/cn/setting.data.keep.leaf.html | 28 + .../api/cn/setting.data.keep.parent.html | 28 + .../api/cn/setting.data.key.checked.html | 24 + .../api/cn/setting.data.key.children.html | 23 + .../api/cn/setting.data.key.isHidden.html | 24 + .../api/cn/setting.data.key.isParent.html | 24 + .../ztree/api/cn/setting.data.key.name.html | 23 + .../ztree/api/cn/setting.data.key.title.html | 24 + .../ztree/api/cn/setting.data.key.url.html | 24 + .../cn/setting.data.simpleData.enable.html | 38 + .../api/cn/setting.data.simpleData.idKey.html | 32 + .../cn/setting.data.simpleData.pIdKey.html | 32 + .../cn/setting.data.simpleData.rootPId.html | 32 + .../setting.edit.drag.autoExpandTrigger.html | 28 + .../cn/setting.edit.drag.autoOpenTime.html | 25 + .../api/cn/setting.edit.drag.borderMax.html | 25 + .../api/cn/setting.edit.drag.borderMin.html | 25 + .../ztree/api/cn/setting.edit.drag.inner.html | 59 + .../api/cn/setting.edit.drag.isCopy.html | 32 + .../api/cn/setting.edit.drag.isMove.html | 32 + .../cn/setting.edit.drag.maxShowNodeNum.html | 25 + .../api/cn/setting.edit.drag.minMoveSize.html | 25 + .../ztree/api/cn/setting.edit.drag.next.html | 58 + .../ztree/api/cn/setting.edit.drag.prev.html | 58 + .../cn/setting.edit.editNameSelectAll.html | 27 + .../lib/ztree/api/cn/setting.edit.enable.html | 38 + .../api/cn/setting.edit.removeTitle.html | 48 + .../api/cn/setting.edit.renameTitle.html | 48 + .../api/cn/setting.edit.showRemoveBtn.html | 49 + .../api/cn/setting.edit.showRenameBtn.html | 51 + .../lib/ztree/api/cn/setting.treeId.html | 14 + .../lib/ztree/api/cn/setting.treeObj.html | 14 + .../ztree/api/cn/setting.view.addDiyDom.html | 40 + .../api/cn/setting.view.addHoverDom.html | 45 + .../cn/setting.view.autoCancelSelected.html | 26 + .../api/cn/setting.view.dblClickExpand.html | 44 + .../api/cn/setting.view.expandSpeed.html | 31 + .../ztree/api/cn/setting.view.fontCss.html | 42 + .../ztree/api/cn/setting.view.nameIsHTML.html | 27 + .../api/cn/setting.view.removeHoverDom.html | 45 + .../api/cn/setting.view.selectedMulti.html | 27 + .../ztree/api/cn/setting.view.showIcon.html | 44 + .../ztree/api/cn/setting.view.showLine.html | 25 + .../ztree/api/cn/setting.view.showTitle.html | 46 + .../cn/setting.view.txtSelectedEnable.html | 25 + .../api/cn/treeNode.check_Child_State.html | 43 + .../ztree/api/cn/treeNode.check_Focus.html | 19 + .../lib/ztree/api/cn/treeNode.checked.html | 32 + .../lib/ztree/api/cn/treeNode.checkedOld.html | 25 + .../lib/ztree/api/cn/treeNode.children.html | 35 + .../ztree/api/cn/treeNode.chkDisabled.html | 28 + .../lib/ztree/api/cn/treeNode.click.html | 24 + .../static/lib/ztree/api/cn/treeNode.diy.html | 15 + .../ztree/api/cn/treeNode.editNameFlag.html | 19 + .../ztree/api/cn/treeNode.getCheckStatus.html | 63 + .../lib/ztree/api/cn/treeNode.getIndex.html | 26 + .../ztree/api/cn/treeNode.getNextNode.html | 27 + .../ztree/api/cn/treeNode.getParentNode.html | 27 + .../lib/ztree/api/cn/treeNode.getPath.html | 26 + .../lib/ztree/api/cn/treeNode.getPreNode.html | 27 + .../lib/ztree/api/cn/treeNode.halfCheck.html | 29 + .../lib/ztree/api/cn/treeNode.icon.html | 33 + .../lib/ztree/api/cn/treeNode.iconClose.html | 33 + .../lib/ztree/api/cn/treeNode.iconOpen.html | 33 + .../lib/ztree/api/cn/treeNode.iconSkin.html | 43 + .../lib/ztree/api/cn/treeNode.isAjaxing.html | 26 + .../ztree/api/cn/treeNode.isFirstNode.html | 28 + .../lib/ztree/api/cn/treeNode.isHidden.html | 27 + .../lib/ztree/api/cn/treeNode.isHover.html | 19 + .../lib/ztree/api/cn/treeNode.isLastNode.html | 28 + .../lib/ztree/api/cn/treeNode.isParent.html | 28 + .../lib/ztree/api/cn/treeNode.level.html | 25 + .../lib/ztree/api/cn/treeNode.name.html | 25 + .../lib/ztree/api/cn/treeNode.nocheck.html | 26 + .../lib/ztree/api/cn/treeNode.open.html | 30 + .../lib/ztree/api/cn/treeNode.parentTId.html | 27 + .../static/lib/ztree/api/cn/treeNode.tId.html | 25 + .../lib/ztree/api/cn/treeNode.target.html | 24 + .../static/lib/ztree/api/cn/treeNode.url.html | 25 + .../lib/ztree/api/cn/treeNode.zAsync.html | 28 + .../lib/ztree/api/cn/zTreeObj.addNodes.html | 47 + .../ztree/api/cn/zTreeObj.cancelEditName.html | 30 + .../api/cn/zTreeObj.cancelSelectedNode.html | 35 + .../ztree/api/cn/zTreeObj.checkAllNodes.html | 29 + .../lib/ztree/api/cn/zTreeObj.checkNode.html | 44 + .../lib/ztree/api/cn/zTreeObj.copyNode.html | 44 + .../lib/ztree/api/cn/zTreeObj.destroy.html | 25 + .../lib/ztree/api/cn/zTreeObj.editName.html | 29 + .../lib/ztree/api/cn/zTreeObj.expandAll.html | 30 + .../lib/ztree/api/cn/zTreeObj.expandNode.html | 50 + .../cn/zTreeObj.getChangeCheckedNodes.html | 24 + .../api/cn/zTreeObj.getCheckedNodes.html | 28 + .../ztree/api/cn/zTreeObj.getNodeByParam.html | 32 + .../ztree/api/cn/zTreeObj.getNodeByTId.html | 27 + .../ztree/api/cn/zTreeObj.getNodeIndex.html | 30 + .../lib/ztree/api/cn/zTreeObj.getNodes.html | 26 + .../api/cn/zTreeObj.getNodesByFilter.html | 43 + .../api/cn/zTreeObj.getNodesByParam.html | 31 + .../api/cn/zTreeObj.getNodesByParamFuzzy.html | 32 + .../api/cn/zTreeObj.getSelectedNodes.html | 23 + .../lib/ztree/api/cn/zTreeObj.hideNode.html | 29 + .../lib/ztree/api/cn/zTreeObj.hideNodes.html | 29 + .../lib/ztree/api/cn/zTreeObj.moveNode.html | 46 + .../api/cn/zTreeObj.reAsyncChildNodes.html | 45 + .../cn/zTreeObj.reAsyncChildNodesPromise.html | 44 + .../lib/ztree/api/cn/zTreeObj.refresh.html | 24 + .../api/cn/zTreeObj.removeChildNodes.html | 32 + .../lib/ztree/api/cn/zTreeObj.removeNode.html | 34 + .../lib/ztree/api/cn/zTreeObj.selectNode.html | 38 + .../ztree/api/cn/zTreeObj.setChkDisabled.html | 44 + .../ztree/api/cn/zTreeObj.setEditable.html | 27 + .../lib/ztree/api/cn/zTreeObj.setting.html | 13 + .../lib/ztree/api/cn/zTreeObj.showNode.html | 31 + .../lib/ztree/api/cn/zTreeObj.showNodes.html | 29 + .../api/cn/zTreeObj.transformToArray.html | 25 + .../cn/zTreeObj.transformTozTreeNodes.html | 43 + .../lib/ztree/api/cn/zTreeObj.updateNode.html | 37 + .../static/lib/ztree/api/en/fn.zTree._z.html | 15 + .../lib/ztree/api/en/fn.zTree.destroy.html | 29 + .../ztree/api/en/fn.zTree.getZTreeObj.html | 27 + .../lib/ztree/api/en/fn.zTree.init.html | 81 + .../ztree/api/en/setting.async.autoParam.html | 52 + .../api/en/setting.async.contentType.html | 30 + .../api/en/setting.async.dataFilter.html | 45 + .../ztree/api/en/setting.async.dataType.html | 29 + .../ztree/api/en/setting.async.enable.html | 30 + .../ztree/api/en/setting.async.headers.html | 18 + .../api/en/setting.async.otherParam.html | 50 + .../lib/ztree/api/en/setting.async.type.html | 30 + .../lib/ztree/api/en/setting.async.url.html | 50 + .../ztree/api/en/setting.async.xhrFields.html | 18 + .../api/en/setting.callback.beforeAsync.html | 36 + .../api/en/setting.callback.beforeCheck.html | 34 + .../api/en/setting.callback.beforeClick.html | 49 + .../en/setting.callback.beforeCollapse.html | 34 + .../en/setting.callback.beforeDblClick.html | 36 + .../api/en/setting.callback.beforeDrag.html | 39 + .../en/setting.callback.beforeDragOpen.html | 37 + .../api/en/setting.callback.beforeDrop.html | 50 + .../en/setting.callback.beforeEditName.html | 38 + .../api/en/setting.callback.beforeExpand.html | 34 + .../en/setting.callback.beforeMouseDown.html | 35 + .../en/setting.callback.beforeMouseUp.html | 35 + .../api/en/setting.callback.beforeRemove.html | 37 + .../api/en/setting.callback.beforeRename.html | 46 + .../en/setting.callback.beforeRightClick.html | 35 + .../api/en/setting.callback.onAsyncError.html | 42 + .../en/setting.callback.onAsyncSuccess.html | 38 + .../api/en/setting.callback.onCheck.html | 34 + .../api/en/setting.callback.onClick.html | 49 + .../api/en/setting.callback.onCollapse.html | 34 + .../api/en/setting.callback.onDblClick.html | 35 + .../ztree/api/en/setting.callback.onDrag.html | 34 + .../api/en/setting.callback.onDragMove.html | 34 + .../ztree/api/en/setting.callback.onDrop.html | 48 + .../api/en/setting.callback.onExpand.html | 34 + .../api/en/setting.callback.onMouseDown.html | 35 + .../api/en/setting.callback.onMouseUp.html | 35 + .../en/setting.callback.onNodeCreated.html | 35 + .../api/en/setting.callback.onRemove.html | 34 + .../api/en/setting.callback.onRename.html | 40 + .../api/en/setting.callback.onRightClick.html | 36 + .../en/setting.check.autoCheckTrigger.html | 29 + .../en/setting.check.chkDisabledInherit.html | 28 + .../ztree/api/en/setting.check.chkStyle.html | 48 + .../api/en/setting.check.chkboxType.html | 31 + .../ztree/api/en/setting.check.enable.html | 26 + .../api/en/setting.check.nocheckInherit.html | 28 + .../ztree/api/en/setting.check.radioType.html | 29 + .../ztree/api/en/setting.data.keep.leaf.html | 28 + .../api/en/setting.data.keep.parent.html | 28 + .../api/en/setting.data.key.checked.html | 24 + .../api/en/setting.data.key.children.html | 23 + .../api/en/setting.data.key.isHidden.html | 24 + .../api/en/setting.data.key.isParent.html | 24 + .../ztree/api/en/setting.data.key.name.html | 23 + .../ztree/api/en/setting.data.key.title.html | 24 + .../ztree/api/en/setting.data.key.url.html | 24 + .../en/setting.data.simpleData.enable.html | 39 + .../api/en/setting.data.simpleData.idKey.html | 32 + .../en/setting.data.simpleData.pIdKey.html | 32 + .../en/setting.data.simpleData.rootPId.html | 32 + .../setting.edit.drag.autoExpandTrigger.html | 29 + .../en/setting.edit.drag.autoOpenTime.html | 25 + .../api/en/setting.edit.drag.borderMax.html | 25 + .../api/en/setting.edit.drag.borderMin.html | 25 + .../ztree/api/en/setting.edit.drag.inner.html | 60 + .../api/en/setting.edit.drag.isCopy.html | 32 + .../api/en/setting.edit.drag.isMove.html | 32 + .../en/setting.edit.drag.maxShowNodeNum.html | 25 + .../api/en/setting.edit.drag.minMoveSize.html | 25 + .../ztree/api/en/setting.edit.drag.next.html | 59 + .../ztree/api/en/setting.edit.drag.prev.html | 59 + .../en/setting.edit.editNameSelectAll.html | 27 + .../lib/ztree/api/en/setting.edit.enable.html | 39 + .../api/en/setting.edit.removeTitle.html | 48 + .../api/en/setting.edit.renameTitle.html | 48 + .../api/en/setting.edit.showRemoveBtn.html | 50 + .../api/en/setting.edit.showRenameBtn.html | 52 + .../lib/ztree/api/en/setting.treeId.html | 14 + .../lib/ztree/api/en/setting.treeObj.html | 14 + .../ztree/api/en/setting.view.addDiyDom.html | 40 + .../api/en/setting.view.addHoverDom.html | 45 + .../en/setting.view.autoCancelSelected.html | 27 + .../api/en/setting.view.dblClickExpand.html | 45 + .../api/en/setting.view.expandSpeed.html | 31 + .../ztree/api/en/setting.view.fontCss.html | 42 + .../ztree/api/en/setting.view.nameIsHTML.html | 28 + .../api/en/setting.view.removeHoverDom.html | 45 + .../api/en/setting.view.selectedMulti.html | 28 + .../ztree/api/en/setting.view.showIcon.html | 45 + .../ztree/api/en/setting.view.showLine.html | 26 + .../ztree/api/en/setting.view.showTitle.html | 47 + .../en/setting.view.txtSelectedEnable.html | 26 + .../api/en/treeNode.check_Child_State.html | 43 + .../ztree/api/en/treeNode.check_Focus.html | 19 + .../lib/ztree/api/en/treeNode.checked.html | 32 + .../lib/ztree/api/en/treeNode.checkedOld.html | 25 + .../lib/ztree/api/en/treeNode.children.html | 35 + .../ztree/api/en/treeNode.chkDisabled.html | 28 + .../lib/ztree/api/en/treeNode.click.html | 24 + .../static/lib/ztree/api/en/treeNode.diy.html | 15 + .../ztree/api/en/treeNode.editNameFlag.html | 19 + .../ztree/api/en/treeNode.getCheckStatus.html | 63 + .../lib/ztree/api/en/treeNode.getIndex.html | 26 + .../ztree/api/en/treeNode.getNextNode.html | 27 + .../ztree/api/en/treeNode.getParentNode.html | 27 + .../lib/ztree/api/en/treeNode.getPath.html | 26 + .../lib/ztree/api/en/treeNode.getPreNode.html | 27 + .../lib/ztree/api/en/treeNode.halfCheck.html | 29 + .../lib/ztree/api/en/treeNode.icon.html | 33 + .../lib/ztree/api/en/treeNode.iconClose.html | 33 + .../lib/ztree/api/en/treeNode.iconOpen.html | 33 + .../lib/ztree/api/en/treeNode.iconSkin.html | 43 + .../lib/ztree/api/en/treeNode.isAjaxing.html | 26 + .../ztree/api/en/treeNode.isFirstNode.html | 28 + .../lib/ztree/api/en/treeNode.isHidden.html | 28 + .../lib/ztree/api/en/treeNode.isHover.html | 19 + .../lib/ztree/api/en/treeNode.isLastNode.html | 28 + .../lib/ztree/api/en/treeNode.isParent.html | 28 + .../lib/ztree/api/en/treeNode.level.html | 25 + .../lib/ztree/api/en/treeNode.name.html | 25 + .../lib/ztree/api/en/treeNode.nocheck.html | 26 + .../lib/ztree/api/en/treeNode.open.html | 30 + .../lib/ztree/api/en/treeNode.parentTId.html | 27 + .../static/lib/ztree/api/en/treeNode.tId.html | 25 + .../lib/ztree/api/en/treeNode.target.html | 24 + .../static/lib/ztree/api/en/treeNode.url.html | 25 + .../lib/ztree/api/en/treeNode.zAsync.html | 28 + .../lib/ztree/api/en/zTreeObj.addNodes.html | 47 + .../ztree/api/en/zTreeObj.cancelEditName.html | 30 + .../api/en/zTreeObj.cancelSelectedNode.html | 35 + .../ztree/api/en/zTreeObj.checkAllNodes.html | 29 + .../lib/ztree/api/en/zTreeObj.checkNode.html | 44 + .../lib/ztree/api/en/zTreeObj.copyNode.html | 47 + .../lib/ztree/api/en/zTreeObj.destroy.html | 25 + .../lib/ztree/api/en/zTreeObj.editName.html | 29 + .../lib/ztree/api/en/zTreeObj.expandAll.html | 30 + .../lib/ztree/api/en/zTreeObj.expandNode.html | 50 + .../en/zTreeObj.getChangeCheckedNodes.html | 24 + .../api/en/zTreeObj.getCheckedNodes.html | 28 + .../ztree/api/en/zTreeObj.getNodeByParam.html | 32 + .../ztree/api/en/zTreeObj.getNodeByTId.html | 27 + .../ztree/api/en/zTreeObj.getNodeIndex.html | 30 + .../lib/ztree/api/en/zTreeObj.getNodes.html | 26 + .../api/en/zTreeObj.getNodesByFilter.html | 43 + .../api/en/zTreeObj.getNodesByParam.html | 31 + .../api/en/zTreeObj.getNodesByParamFuzzy.html | 32 + .../api/en/zTreeObj.getSelectedNodes.html | 23 + .../lib/ztree/api/en/zTreeObj.hideNode.html | 29 + .../lib/ztree/api/en/zTreeObj.hideNodes.html | 29 + .../lib/ztree/api/en/zTreeObj.moveNode.html | 49 + .../api/en/zTreeObj.reAsyncChildNodes.html | 48 + .../en/zTreeObj.reAsyncChildNodesPromise.html | 47 + .../lib/ztree/api/en/zTreeObj.refresh.html | 24 + .../api/en/zTreeObj.removeChildNodes.html | 32 + .../lib/ztree/api/en/zTreeObj.removeNode.html | 34 + .../lib/ztree/api/en/zTreeObj.selectNode.html | 37 + .../ztree/api/en/zTreeObj.setChkDisabled.html | 44 + .../ztree/api/en/zTreeObj.setEditable.html | 27 + .../lib/ztree/api/en/zTreeObj.setting.html | 14 + .../lib/ztree/api/en/zTreeObj.showNode.html | 31 + .../lib/ztree/api/en/zTreeObj.showNodes.html | 29 + .../api/en/zTreeObj.transformToArray.html | 27 + .../en/zTreeObj.transformTozTreeNodes.html | 44 + .../lib/ztree/api/en/zTreeObj.updateNode.html | 37 + .../lib/ztree/css/awesomeStyle/awesome.css | 386 + .../lib/ztree/css/awesomeStyle/awesome.less | 146 + .../static/lib/ztree/css/awesomeStyle/fa.less | 480 + .../ztree/css/awesomeStyle/img/loading.gif | Bin 0 -> 381 bytes .../resources/static/lib/ztree/css/demo.css | 33 + .../ztree/css/metroStyle/img/line_conn.png | Bin 0 -> 933 bytes .../lib/ztree/css/metroStyle/img/loading.gif | Bin 0 -> 381 bytes .../lib/ztree/css/metroStyle/img/metro.gif | Bin 0 -> 4679 bytes .../lib/ztree/css/metroStyle/img/metro.png | Bin 0 -> 5283 bytes .../lib/ztree/css/metroStyle/metroStyle.css | 96 + .../ztree/css/zTreeStyle/img/diy/1_close.png | Bin 0 -> 601 bytes .../ztree/css/zTreeStyle/img/diy/1_open.png | Bin 0 -> 580 bytes .../lib/ztree/css/zTreeStyle/img/diy/2.png | Bin 0 -> 570 bytes .../lib/ztree/css/zTreeStyle/img/diy/3.png | Bin 0 -> 762 bytes .../lib/ztree/css/zTreeStyle/img/diy/4.png | Bin 0 -> 399 bytes .../lib/ztree/css/zTreeStyle/img/diy/5.png | Bin 0 -> 710 bytes .../lib/ztree/css/zTreeStyle/img/diy/6.png | Bin 0 -> 432 bytes .../lib/ztree/css/zTreeStyle/img/diy/7.png | Bin 0 -> 534 bytes .../lib/ztree/css/zTreeStyle/img/diy/8.png | Bin 0 -> 529 bytes .../lib/ztree/css/zTreeStyle/img/diy/9.png | Bin 0 -> 467 bytes .../ztree/css/zTreeStyle/img/line_conn.gif | Bin 0 -> 45 bytes .../lib/ztree/css/zTreeStyle/img/loading.gif | Bin 0 -> 381 bytes .../css/zTreeStyle/img/zTreeStandard.gif | Bin 0 -> 5564 bytes .../css/zTreeStyle/img/zTreeStandard.png | Bin 0 -> 11173 bytes .../lib/ztree/css/zTreeStyle/zTreeStyle.css | 97 + .../static/lib/ztree/js/jquery-1.4.4.min.js | 167 + .../static/lib/ztree/js/jquery.ztree.all.js | 3835 +++ .../lib/ztree/js/jquery.ztree.all.min.js | 166 + .../static/lib/ztree/js/jquery.ztree.core.js | 1983 ++ .../lib/ztree/js/jquery.ztree.core.min.js | 75 + .../lib/ztree/js/jquery.ztree.excheck.js | 648 + .../lib/ztree/js/jquery.ztree.excheck.min.js | 34 + .../lib/ztree/js/jquery.ztree.exedit.js | 1203 + .../lib/ztree/js/jquery.ztree.exedit.min.js | 53 + .../lib/ztree/js/jquery.ztree.exhide.js | 400 + .../lib/ztree/js/jquery.ztree.exhide.min.js | 23 + src/main/resources/templates/common.html | 35 + src/main/resources/templates/copyright.html | 1 + .../resources/templates/example/index.html | 122 + src/main/resources/templates/header.html | 55 + src/main/resources/templates/menu.html | 18 + src/main/resources/templates/script.html | 49 + src/main/resources/templates/server.html | 16 + src/test/java/com/cym/test/MainTest.java | 23 + 498 files changed, 54225 insertions(+) create mode 100644 .gitignore create mode 100644 lib/jpaHelper-release.jar create mode 100644 pom.xml create mode 100644 src/main/java/com/cym/CdnWebUI.java create mode 100644 src/main/java/com/cym/config/FreeMarkerConfig.java create mode 100644 src/main/java/com/cym/config/MultipartConfig.java create mode 100644 src/main/java/com/cym/controller/page/ExampleController.java create mode 100644 src/main/java/com/cym/ext/AdminExt.java create mode 100644 src/main/java/com/cym/ext/ExampleExt.java create mode 100644 src/main/java/com/cym/ext/NameValue.java create mode 100644 src/main/java/com/cym/ext/UserExt.java create mode 100644 src/main/java/com/cym/model/Admin.java create mode 100644 src/main/java/com/cym/model/Example.java create mode 100644 src/main/java/com/cym/model/Level.java create mode 100644 src/main/java/com/cym/model/User.java create mode 100644 src/main/java/com/cym/service/ExampleService.java create mode 100644 src/main/java/com/cym/utils/BaseController.java create mode 100644 src/main/java/com/cym/utils/JsonResult.java create mode 100644 src/main/java/com/cym/utils/MenuUtils.java create mode 100644 src/main/java/com/cym/utils/cert/CertExportEmailDTO.java create mode 100644 src/main/java/com/cym/utils/cert/CertExportEmailVO.java create mode 100644 src/main/java/com/cym/utils/cert/CertInfoDTO.java create mode 100644 src/main/java/com/cym/utils/cert/CertificateChain.java create mode 100644 src/main/java/com/cym/utils/cert/CertificateDetectionUtils.java create mode 100644 src/main/java/com/cym/utils/cert/DateUtils.java create mode 100644 src/main/java/com/cym/utils/cert/PunyUtils.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AccessDescriptions.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AccessLocation.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AccessMethod.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AlgorithmId.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AuthKeyId.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AuthorityInfoAccessExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/AuthorityKeyIdentifierExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/BasicConstraintsExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/CRLDistributionPointsExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/CertificatePoliciesExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/ExtendedKeyUsageExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/ExtensionId.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/HostObject.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/IssuerDN.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/Name.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/OID.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/PublicKey.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/Root.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SSLBasicInfo.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SSLDetailsInfo.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SSLInfo.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SSLIssuerInfo.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SSLSubjectInfo.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SerialNumberObject.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SubjectAlternativeNameExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SubjectDN.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SubjectKeyId.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/SubjectKeyIdentifierExtension.java create mode 100644 src/main/java/com/cym/utils/cert/ssl/XccSSLInfo.java create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/static/css/base.css create mode 100644 src/main/resources/static/favicon.ico create mode 100644 src/main/resources/static/js/base.js create mode 100644 src/main/resources/static/js/example/index.js create mode 100644 src/main/resources/static/lib/base64/base64.js create mode 100644 src/main/resources/static/lib/echarts/echarts.min.js create mode 100644 src/main/resources/static/lib/layui/css/layui.css create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/index.html create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/static/2.js create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/static/3.js create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/static/docs.js create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/static/element-icons.535877f.woff create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/static/element-icons.732389d.ttf create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/static/wx.b556b2e.jpg create mode 100644 src/main/resources/static/lib/layui/exts/xmSelect/xm-select.js create mode 100644 src/main/resources/static/lib/layui/font/iconfont.eot create mode 100644 src/main/resources/static/lib/layui/font/iconfont.svg create mode 100644 src/main/resources/static/lib/layui/font/iconfont.ttf create mode 100644 src/main/resources/static/lib/layui/font/iconfont.woff create mode 100644 src/main/resources/static/lib/layui/font/iconfont.woff2 create mode 100644 src/main/resources/static/lib/layui/layui.js create mode 100644 src/main/resources/static/lib/left-side/css/left-side-menu.css create mode 100644 src/main/resources/static/lib/left-side/font/iconfont.css create mode 100644 src/main/resources/static/lib/left-side/font/iconfont.eot create mode 100644 src/main/resources/static/lib/left-side/font/iconfont.js create mode 100644 src/main/resources/static/lib/left-side/font/iconfont.svg create mode 100644 src/main/resources/static/lib/left-side/font/iconfont.ttf create mode 100644 src/main/resources/static/lib/left-side/font/iconfont.woff create mode 100644 src/main/resources/static/lib/left-side/images/mini.png create mode 100644 src/main/resources/static/lib/left-side/js/jquery.min.js create mode 100644 src/main/resources/static/lib/left-side/js/jquery.slimscroll.min.js create mode 100644 src/main/resources/static/lib/left-side/js/left-side-menu.js create mode 100644 src/main/resources/static/lib/sweet-dropdown/jquery.sweet-dropdown.min.css create mode 100644 src/main/resources/static/lib/sweet-dropdown/jquery.sweet-dropdown.min.js create mode 100644 src/main/resources/static/lib/wangEditor/index.js create mode 100644 src/main/resources/static/lib/wangEditor/style.css create mode 100644 src/main/resources/static/lib/ztree/api/API_cn.html create mode 100644 src/main/resources/static/lib/ztree/api/API_en.html create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/api.js create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/common.css create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/common_ie6.css create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/apiMenu.gif create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/apiMenu.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/background.jpg create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/chinese.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/close.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/contact-bg.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/english.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/header-bg.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/lightbulb.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/overlay_arrow.gif create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/overlay_arrow.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/overlay_bg.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/overlay_close_IE6.gif create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/zTreeStandard.gif create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/img/zTreeStandard.png create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/jquery-1.6.2.min.js create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/jquery.ztree.core.js create mode 100644 src/main/resources/static/lib/ztree/api/apiCss/zTreeStyleForApi.css create mode 100644 src/main/resources/static/lib/ztree/api/cn/fn.zTree._z.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/fn.zTree.destroy.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/fn.zTree.getZTreeObj.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/fn.zTree.init.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.autoParam.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.contentType.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.dataFilter.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.dataType.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.headers.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.otherParam.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.type.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.url.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.async.xhrFields.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeAsync.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCheck.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeClick.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCollapse.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDblClick.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrag.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDragOpen.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrop.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeEditName.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeExpand.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseDown.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseUp.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRemove.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRename.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRightClick.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncError.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncSuccess.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onCheck.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onClick.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onCollapse.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onDblClick.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrag.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onDragMove.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrop.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onExpand.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseDown.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseUp.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onNodeCreated.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onRemove.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onRename.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.callback.onRightClick.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.autoCheckTrigger.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.chkDisabledInherit.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.chkStyle.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.chkboxType.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.nocheckInherit.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.check.radioType.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.keep.leaf.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.keep.parent.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.checked.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.children.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.isHidden.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.isParent.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.name.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.title.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.key.url.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.idKey.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.pIdKey.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.rootPId.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoExpandTrigger.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoOpenTime.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMax.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMin.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.inner.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isCopy.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isMove.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.maxShowNodeNum.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.minMoveSize.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.next.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.prev.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.editNameSelectAll.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.removeTitle.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.renameTitle.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.showRemoveBtn.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.edit.showRenameBtn.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.treeId.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.treeObj.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.addDiyDom.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.addHoverDom.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.autoCancelSelected.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.dblClickExpand.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.expandSpeed.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.fontCss.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.nameIsHTML.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.removeHoverDom.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.selectedMulti.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.showIcon.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.showLine.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.showTitle.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/setting.view.txtSelectedEnable.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.check_Child_State.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.check_Focus.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.checked.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.checkedOld.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.children.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.chkDisabled.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.click.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.diy.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.editNameFlag.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.getCheckStatus.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.getIndex.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.getNextNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.getParentNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.getPath.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.getPreNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.halfCheck.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.icon.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.iconClose.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.iconOpen.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.iconSkin.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.isAjaxing.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.isFirstNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.isHidden.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.isHover.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.isLastNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.isParent.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.level.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.name.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.nocheck.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.open.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.parentTId.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.tId.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.target.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.url.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/treeNode.zAsync.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.addNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelEditName.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelSelectedNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkAllNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.copyNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.destroy.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.editName.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandAll.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getChangeCheckedNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getCheckedNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByParam.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByTId.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeIndex.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByFilter.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParam.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParamFuzzy.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.getSelectedNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.moveNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodesPromise.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.refresh.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeChildNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.selectNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.setChkDisabled.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.setEditable.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.setting.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNode.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformToArray.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformTozTreeNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/cn/zTreeObj.updateNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/fn.zTree._z.html create mode 100644 src/main/resources/static/lib/ztree/api/en/fn.zTree.destroy.html create mode 100644 src/main/resources/static/lib/ztree/api/en/fn.zTree.getZTreeObj.html create mode 100644 src/main/resources/static/lib/ztree/api/en/fn.zTree.init.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.autoParam.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.contentType.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.dataFilter.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.dataType.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.headers.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.otherParam.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.type.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.url.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.async.xhrFields.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeAsync.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCheck.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeClick.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCollapse.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDblClick.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrag.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDragOpen.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrop.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeEditName.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeExpand.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseDown.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseUp.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRemove.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRename.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRightClick.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncError.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncSuccess.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onCheck.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onClick.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onCollapse.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onDblClick.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onDrag.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onDragMove.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onDrop.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onExpand.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseDown.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseUp.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onNodeCreated.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onRemove.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onRename.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.callback.onRightClick.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.autoCheckTrigger.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.chkDisabledInherit.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.chkStyle.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.chkboxType.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.nocheckInherit.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.check.radioType.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.keep.leaf.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.keep.parent.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.checked.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.children.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.isHidden.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.isParent.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.name.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.title.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.key.url.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.idKey.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.pIdKey.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.rootPId.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoExpandTrigger.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoOpenTime.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMax.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMin.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.inner.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isCopy.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isMove.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.maxShowNodeNum.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.minMoveSize.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.next.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.drag.prev.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.editNameSelectAll.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.enable.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.removeTitle.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.renameTitle.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.showRemoveBtn.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.edit.showRenameBtn.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.treeId.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.treeObj.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.addDiyDom.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.addHoverDom.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.autoCancelSelected.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.dblClickExpand.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.expandSpeed.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.fontCss.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.nameIsHTML.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.removeHoverDom.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.selectedMulti.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.showIcon.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.showLine.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.showTitle.html create mode 100644 src/main/resources/static/lib/ztree/api/en/setting.view.txtSelectedEnable.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.check_Child_State.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.check_Focus.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.checked.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.checkedOld.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.children.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.chkDisabled.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.click.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.diy.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.editNameFlag.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.getCheckStatus.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.getIndex.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.getNextNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.getParentNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.getPath.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.getPreNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.halfCheck.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.icon.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.iconClose.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.iconOpen.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.iconSkin.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.isAjaxing.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.isFirstNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.isHidden.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.isHover.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.isLastNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.isParent.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.level.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.name.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.nocheck.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.open.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.parentTId.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.tId.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.target.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.url.html create mode 100644 src/main/resources/static/lib/ztree/api/en/treeNode.zAsync.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.addNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelEditName.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelSelectedNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.checkAllNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.checkNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.copyNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.destroy.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.editName.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.expandAll.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.expandNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getChangeCheckedNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getCheckedNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByParam.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByTId.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeIndex.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByFilter.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParam.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParamFuzzy.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.getSelectedNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.moveNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodesPromise.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.refresh.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.removeChildNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.removeNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.selectNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.setChkDisabled.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.setEditable.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.setting.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.showNode.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.showNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.transformToArray.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.transformTozTreeNodes.html create mode 100644 src/main/resources/static/lib/ztree/api/en/zTreeObj.updateNode.html create mode 100644 src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.css create mode 100644 src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.less create mode 100644 src/main/resources/static/lib/ztree/css/awesomeStyle/fa.less create mode 100644 src/main/resources/static/lib/ztree/css/awesomeStyle/img/loading.gif create mode 100644 src/main/resources/static/lib/ztree/css/demo.css create mode 100644 src/main/resources/static/lib/ztree/css/metroStyle/img/line_conn.png create mode 100644 src/main/resources/static/lib/ztree/css/metroStyle/img/loading.gif create mode 100644 src/main/resources/static/lib/ztree/css/metroStyle/img/metro.gif create mode 100644 src/main/resources/static/lib/ztree/css/metroStyle/img/metro.png create mode 100644 src/main/resources/static/lib/ztree/css/metroStyle/metroStyle.css create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/1_close.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/1_open.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/2.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/3.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/4.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/5.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/6.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/7.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/8.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/9.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/line_conn.gif create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/loading.gif create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/zTreeStandard.gif create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/img/zTreeStandard.png create mode 100644 src/main/resources/static/lib/ztree/css/zTreeStyle/zTreeStyle.css create mode 100644 src/main/resources/static/lib/ztree/js/jquery-1.4.4.min.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.all.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.all.min.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.core.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.core.min.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.min.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.min.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.exhide.js create mode 100644 src/main/resources/static/lib/ztree/js/jquery.ztree.exhide.min.js create mode 100644 src/main/resources/templates/common.html create mode 100644 src/main/resources/templates/copyright.html create mode 100644 src/main/resources/templates/example/index.html create mode 100644 src/main/resources/templates/header.html create mode 100644 src/main/resources/templates/menu.html create mode 100644 src/main/resources/templates/script.html create mode 100644 src/main/resources/templates/server.html create mode 100644 src/test/java/com/cym/test/MainTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b646bf2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +/**/target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ + +~$* \ No newline at end of file diff --git a/lib/jpaHelper-release.jar b/lib/jpaHelper-release.jar new file mode 100644 index 0000000000000000000000000000000000000000..7e0428420d0f3f708e8c3a66a82a075250d21efe GIT binary patch literal 35898 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 + 4.0.0 + com.cym + cdnServerPlugin + jar + release + + + org.springframework.boot + spring-boot-starter-parent + 3.3.3 + + + + + 21 + + + + + + com.cym + jpaHelper + release + system + ${project.basedir}/lib/jpaHelper-release.jar + + + com.mysql + mysql-connector-j + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.session + spring-session-jdbc + + + + + org.springframework.boot + spring-boot-starter-quartz + + + io.github.binance + binance-connector-java + 3.2.0 + + + + com.github.odiszapc + nginxparser + 0.9.6 + + + + com.clickhouse + clickhouse-jdbc + 0.6.2 + all + + + + cn.hutool + hutool-all + 5.8.25 + + + + org.apache.poi + poi-ooxml + 5.2.3 + + + + net.jodah + expiringmap + 0.5.11 + + + com.sun.mail + javax.mail + 1.6.2 + + + + com.huaweicloud.sdk + huaweicloud-sdk-dns + 3.1.104 + + + com.alipay.sdk + alipay-sdk-java + 4.38.28.ALL + + + + com.google.zxing + core + 3.3.0 + + + com.google.zxing + javase + 3.3.0 + + + org.apache.axis + axis + 1.4 + + + org.jsoup + jsoup + 1.16.2 + + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + 4.5.0 + + + org.projectlombok + lombok + true + + + + com.google.guava + guava + 21.0 + + + org.apache.commons + commons-lang3 + + + + + + org.apache.curator + curator-recipes + 5.6.0 + + + + com.upyun + java-sdk + 4.2.3 + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + + \ No newline at end of file diff --git a/src/main/java/com/cym/CdnWebUI.java b/src/main/java/com/cym/CdnWebUI.java new file mode 100644 index 0000000..a1b3076 --- /dev/null +++ b/src/main/java/com/cym/CdnWebUI.java @@ -0,0 +1,17 @@ +package com.cym; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@EnableAsync +@EnableTransactionManagement +@SpringBootApplication +public class CdnWebUI { + public static void main(String[] args) { + + SpringApplication.run(CdnWebUI.class, args); + } + +} diff --git a/src/main/java/com/cym/config/FreeMarkerConfig.java b/src/main/java/com/cym/config/FreeMarkerConfig.java new file mode 100644 index 0000000..42c4dec --- /dev/null +++ b/src/main/java/com/cym/config/FreeMarkerConfig.java @@ -0,0 +1,40 @@ +package com.cym.config; + +import java.io.IOException; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; +import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; + +import freemarker.template.TemplateException; + +@Configuration +public class FreeMarkerConfig { + + @Bean + public FreeMarkerConfigurer freeMarkerConfigurer() throws IOException, TemplateException { + FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer(); + freeMarkerConfigurer.setTemplateLoaderPath("classpath:templates/"); + + freemarker.template.Configuration configuration = freeMarkerConfigurer.createConfiguration(); + configuration.setDefaultEncoding("UTF-8"); + configuration.setSetting("classic_compatible", "true");// 使用经典语法 + configuration.setSetting("number_format", "0.##"); + + freeMarkerConfigurer.setConfiguration(configuration); + return freeMarkerConfigurer; + } + + @Bean + public FreeMarkerViewResolver freeMarkerViewResolver() { + FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); + resolver.setPrefix(""); + resolver.setSuffix(".html"); + resolver.setContentType("text/html; charset=UTF-8"); + resolver.setRequestContextAttribute("request"); // 将上下文路径注入request变量 + resolver.setExposeSessionAttributes(true); // 将session属性展示 + return resolver; + + } +} diff --git a/src/main/java/com/cym/config/MultipartConfig.java b/src/main/java/com/cym/config/MultipartConfig.java new file mode 100644 index 0000000..b29f222 --- /dev/null +++ b/src/main/java/com/cym/config/MultipartConfig.java @@ -0,0 +1,27 @@ +package com.cym.config; + +import org.springframework.boot.web.servlet.MultipartConfigFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.unit.DataSize; + +import jakarta.servlet.MultipartConfigElement; + +@Configuration +public class MultipartConfig { + + @Bean + public MultipartConfigElement multipartConfigElement() { + MultipartConfigFactory factory = new MultipartConfigFactory(); + + // 置文件大小限制 ,超出此大小页面会抛出异常信息 + factory.setMaxFileSize(DataSize.ofGigabytes(5)); // KB,MB + // 设置总上传数据总大小 + factory.setMaxRequestSize(DataSize.ofGigabytes(5)); + // 设置文件临时文件夹路径 + factory.setLocation(System.getProperty("java.io.tmpdir")); + // 如果文件大于这个值,将以文件的形式存储,如果小/于这个值文件将存储在内存中,默认为0 + // factory.setMaxRequestSize(0); + return factory.createMultipartConfig(); + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/controller/page/ExampleController.java b/src/main/java/com/cym/controller/page/ExampleController.java new file mode 100644 index 0000000..c013328 --- /dev/null +++ b/src/main/java/com/cym/controller/page/ExampleController.java @@ -0,0 +1,85 @@ +package com.cym.controller.page; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import com.cym.bean.Page; +import com.cym.ext.ExampleExt; +import com.cym.model.Admin; +import com.cym.model.Example; +import com.cym.service.ExampleService; +import com.cym.utils.BaseController; +import com.cym.utils.JsonResult; + +import cn.hutool.core.bean.BeanUtil; +import jakarta.transaction.Transactional; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Controller +@RequestMapping("/adminPage/example") +public class ExampleController extends BaseController { + @Autowired + ExampleService exampleService; + + @RequestMapping("") + public ModelAndView index(ModelAndView modelAndView, Page page) { + page = exampleService.search(page); + + List exts = new ArrayList(); + for (Example example : (List) page.getList()) { + ExampleExt exampleExt = new ExampleExt(); + BeanUtil.copyProperties(example, exampleExt); + + exampleExt.setAdmin(jpaHelper.findById(example.getAdminId(), Admin.class)); + + exts.add(exampleExt); + } + page.setList(exts); + + + modelAndView.addObject("adminList", jpaHelper.findAll(Admin.class)); + modelAndView.addObject("page", page); + modelAndView.setViewName("/example/index"); + return modelAndView; + } + + + + @RequestMapping("addOver") + @ResponseBody + public JsonResult addOver(Example example) { + + jpaHelper.insertOrUpdate(example); + + return renderSuccess(); + } + + + @RequestMapping("detail") + @ResponseBody + public JsonResult detail(String id) { + Example example = jpaHelper.findById(id, Example.class); + ExampleExt exampleExt = new ExampleExt(); + BeanUtil.copyProperties(example, exampleExt); + + exampleExt.setAdmin(jpaHelper.findById(example.getAdminId(), Admin.class)); + + return renderSuccess(exampleExt); + } + + @Transactional + @RequestMapping("del") + @ResponseBody + public JsonResult del(String id) { + jpaHelper.deleteById(id, Example.class); + + return renderSuccess(); + } +} diff --git a/src/main/java/com/cym/ext/AdminExt.java b/src/main/java/com/cym/ext/AdminExt.java new file mode 100644 index 0000000..65a8447 --- /dev/null +++ b/src/main/java/com/cym/ext/AdminExt.java @@ -0,0 +1,49 @@ +package com.cym.ext; + +import java.util.List; + +import com.cym.model.Admin; +import com.cym.utils.MenuUtils.Menu; +import com.cym.utils.MenuUtils.MenuCategory; + +public class AdminExt extends Admin { + + private static final long serialVersionUID = 1137434496709241566L; + + List menuCategoryList; + + List menuList; + + List nameValues; + + + public List getNameValues() { + return nameValues; + } + + public void setNameValues(List nameValues) { + this.nameValues = nameValues; + } + + public List getMenuCategoryList() { + return menuCategoryList; + } + + public void setMenuCategoryList(List menuCategoryList) { + this.menuCategoryList = menuCategoryList; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public List getMenuList() { + return menuList; + } + + public void setMenuList(List menuList) { + this.menuList = menuList; + } + + +} diff --git a/src/main/java/com/cym/ext/ExampleExt.java b/src/main/java/com/cym/ext/ExampleExt.java new file mode 100644 index 0000000..0bcf479 --- /dev/null +++ b/src/main/java/com/cym/ext/ExampleExt.java @@ -0,0 +1,18 @@ +package com.cym.ext; + +import com.cym.model.Admin; +import com.cym.model.Example; + +public class ExampleExt extends Example { + + Admin admin; + + public Admin getAdmin() { + return admin; + } + + public void setAdmin(Admin admin) { + this.admin = admin; + } + +} diff --git a/src/main/java/com/cym/ext/NameValue.java b/src/main/java/com/cym/ext/NameValue.java new file mode 100644 index 0000000..396a45d --- /dev/null +++ b/src/main/java/com/cym/ext/NameValue.java @@ -0,0 +1,36 @@ +package com.cym.ext; + +import java.io.Serializable; + +public class NameValue implements Serializable { + private static final long serialVersionUID = 7601908525981573453L; + + String name; + String value; + + public NameValue() { + + } + + public NameValue(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} \ No newline at end of file diff --git a/src/main/java/com/cym/ext/UserExt.java b/src/main/java/com/cym/ext/UserExt.java new file mode 100644 index 0000000..181587d --- /dev/null +++ b/src/main/java/com/cym/ext/UserExt.java @@ -0,0 +1,78 @@ +package com.cym.ext; + +import com.cym.model.Level; +import com.cym.model.User; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "用户Ext") +public class UserExt extends User { + private static final long serialVersionUID = 3218155943288312071L; + + @Schema(description = "用户等级") + Level level; + @Schema(description = "域名数") + Long domainCount; + @Schema(description = "四层转发数") + Long upstreamCount; + @Schema(description = "证书数") + Long certCount; + @Schema(description = "推广url") + String parentUrl; + + @Schema(description = "主机数量") + Long machineCount; + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public Long getMachineCount() { + return machineCount; + } + + public void setMachineCount(Long machineCount) { + this.machineCount = machineCount; + } + + public Level getLevel() { + return level; + } + + public void setLevel(Level level) { + this.level = level; + } + + public Long getDomainCount() { + return domainCount; + } + + public void setDomainCount(Long domainCount) { + this.domainCount = domainCount; + } + + public Long getUpstreamCount() { + return upstreamCount; + } + + public void setUpstreamCount(Long upstreamCount) { + this.upstreamCount = upstreamCount; + } + + public Long getCertCount() { + return certCount; + } + + public void setCertCount(Long certCount) { + this.certCount = certCount; + } + + public String getParentUrl() { + return parentUrl; + } + + public void setParentUrl(String parentUrl) { + this.parentUrl = parentUrl; + } + +} diff --git a/src/main/java/com/cym/model/Admin.java b/src/main/java/com/cym/model/Admin.java new file mode 100644 index 0000000..e55e28e --- /dev/null +++ b/src/main/java/com/cym/model/Admin.java @@ -0,0 +1,153 @@ +package com.cym.model; + +import java.io.Serializable; + +import com.cym.bean.CreateTime; +import com.cym.bean.InitValue; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Schema(description = "管理员") +@Entity +public class Admin implements Serializable { + + private static final long serialVersionUID = -4917355177911155544L; + + @Id + String id; + + @Schema(description = "用户名") + @Column(unique = true) + String name; + + @Schema(description = "密码") + String pass; + + @Schema(description = "电话") + String phone; + @Schema(description = "邮箱") + String email; + + @Schema(description = "自动登录key") + String autoKey; + + @CreateTime + Long createTime; + + @InitValue("0") + @Schema(description = "类型 0:普通管理员 1:超级管理员") + Integer type; + + @Schema(description = "tg对话id") + String chatId; + + @Schema(description = "api token") + String token; + + @Schema(description = "token有效期") + Long tokenExpiresTime; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public Long getTokenExpiresTime() { + return tokenExpiresTime; + } + + public void setTokenExpiresTime(Long tokenExpiresTime) { + this.tokenExpiresTime = tokenExpiresTime; + } + + public String getChatId() { + return chatId; + } + + public void setChatId(String chatId) { + this.chatId = chatId; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Long getCreateTime() { + return createTime; + } + + public void setCreateTime(Long createTime) { + this.createTime = createTime; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + +// public Integer getType() { +// return type; +// } +// +// public void setType(Integer type) { +// this.type = type; +// } + + public String getAutoKey() { + return autoKey; + } + + public void setAutoKey(String autoKey) { + this.autoKey = autoKey; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPass() { + return pass; + } + + public void setPass(String pass) { + this.pass = pass; + } + +} diff --git a/src/main/java/com/cym/model/Example.java b/src/main/java/com/cym/model/Example.java new file mode 100644 index 0000000..ff2b9b4 --- /dev/null +++ b/src/main/java/com/cym/model/Example.java @@ -0,0 +1,55 @@ +package com.cym.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Schema(description = "演示表") +@Entity +public class Example { + @Id + String id; + + @Schema(description = "名称") + String name; + + @Schema(description = "描述") + String descr; + @Schema(description = "管理员id") + String adminId; + + + + public String getAdminId() { + return adminId; + } + + public void setAdminId(String adminId) { + this.adminId = adminId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescr() { + return descr; + } + + public void setDescr(String descr) { + this.descr = descr; + } + +} diff --git a/src/main/java/com/cym/model/Level.java b/src/main/java/com/cym/model/Level.java new file mode 100644 index 0000000..c500792 --- /dev/null +++ b/src/main/java/com/cym/model/Level.java @@ -0,0 +1,106 @@ +package com.cym.model; + +import java.io.Serializable; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +import com.cym.bean.CreateTime; +import com.cym.bean.InitValue; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.SchemaProperty; + +@Schema(description ="用户等级") +@Entity +public class Level implements Serializable{ + /** + * + */ + private static final long serialVersionUID = 105453908518958974L; + + @Schema(description ="主键") + @Id + String id; + + @Schema(description ="名称") + String name; + + @Schema(description ="类型 0:折扣 1:扣减金额") + @InitValue("0") + Integer type; + + @Schema(description ="折扣") + Double discount; + +// @InitValue("0") +// @Schema(description ="扣减金额(CNY)") +// Double subtractionCny; + + @InitValue("0") + @Schema(description ="扣减金额(USD)") + Double subtractionUsd; + + @CreateTime + Long createTime; + + public Long getCreateTime() { + return createTime; + } + + public void setCreateTime(Long createTime) { + this.createTime = createTime; + } + +// public Double getSubtractionCny() { +// return subtractionCny; +// } +// +// public void setSubtractionCny(Double subtractionCny) { +// this.subtractionCny = subtractionCny; +// } + + public Double getSubtractionUsd() { + return subtractionUsd; + } + + public void setSubtractionUsd(Double subtractionUsd) { + this.subtractionUsd = subtractionUsd; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getDiscount() { + return discount; + } + + public void setDiscount(Double discount) { + this.discount = discount; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + +} diff --git a/src/main/java/com/cym/model/User.java b/src/main/java/com/cym/model/User.java new file mode 100644 index 0000000..693f5de --- /dev/null +++ b/src/main/java/com/cym/model/User.java @@ -0,0 +1,482 @@ +package com.cym.model; + +import java.io.Serializable; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +import com.cym.bean.CreateTime; +import com.cym.bean.InitValue; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.SchemaProperty; + +@Schema(description ="用户") +@Entity +public class User implements Serializable { + + private static final long serialVersionUID = -3591882129154972699L; + + @Schema(description ="主键") + @Id + String id; + @Schema(description ="用户名") + @Column(unique = true) + String name; + @Schema(description ="用户真实名称") + String realname; + @Schema(description ="地址") + String addr; + + /*-----------OEM信息----------*/ + @Schema(description ="访问域名") + String host; + @Schema(description ="公司名") + String companyName; + @Schema(description ="版权") + String copyright; + + @Schema(description ="qq") + String qq; + @Schema(description ="电话") + String phone; + @Schema(description ="邮箱") + String email; + @Schema(description ="密码") + String pass; + + @Schema(description ="货币类型 CNY:人民币 USD:美元") + @InitValue("CNY") + String moneyType; + + @Schema(description ="余额") + @Column(columnDefinition = "decimal(20,2)") + @InitValue("0") + Double money; + + @Schema(description ="分润(美元)") + @InitValue("0") + Double profitUsd; + + + @Schema(description ="注册ip") + String registIp; + + @Schema(description ="注册时间") + Long registTime; + + @Schema(description ="实名认证状态 0:未认证 1:认证中 2:已认证 3:认证失败") + @InitValue("0") + Integer realNameStatus; + + @Schema(description ="推广人id") + String parentUserId; + + @Schema(description ="api key") + String apiKey; + + @Schema(description ="api apiSecret") + String apiSecret; + + @Schema(description ="api token") + String token; + + @Schema(description ="token有效期") + Long tokenExpiresTime; + + @Schema(description ="用户等级id") + String levelId; + + @Schema(description ="身份证号码") + String idCard; + + @Schema(description ="身份证正面") + String cardFront; + + @Schema(description ="身份证背面") + String cardBack; + + @Schema(description ="手持身份证照片") + String cardHand; + + @Schema(description ="自动登录key") + String autoKey; + + @Schema(description ="创建时间") + @CreateTime + Long createTime; + + @Schema(description ="是否从fk同步过来") + @InitValue("false") + Boolean fromFk; + + @InitValue("0") + @Schema(description ="保证金") + Double ensureMoney; + + @Schema(description ="保证金时间") + Long ensureMoneyTime; + + @InitValue("false") + @Schema(description ="是否长期合作伙伴") + Boolean longTime; + + @Schema(description ="tg对话id") + String chatId; + + @Schema(description ="短信条数") + @InitValue("0") + Long smsCount; + + @Schema(description ="使用短信通知") + @InitValue("false") + Boolean smsNotice; + + + // acme-dns需要的参数 + String username; + String password; + String fulldomain; + String subdomain; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getFulldomain() { + return fulldomain; + } + + public void setFulldomain(String fulldomain) { + this.fulldomain = fulldomain; + } + + public String getSubdomain() { + return subdomain; + } + + public void setSubdomain(String subdomain) { + this.subdomain = subdomain; + } + + public Boolean getSmsNotice() { + return smsNotice; + } + + public void setSmsNotice(Boolean smsNotice) { + this.smsNotice = smsNotice; + } + + public Long getSmsCount() { + return smsCount; + } + + public void setSmsCount(Long smsCount) { + this.smsCount = smsCount; + } + + public Double getProfitUsd() { + return profitUsd; + } + + public void setProfitUsd(Double profitUsd) { + this.profitUsd = profitUsd; + } + + public String getChatId() { + return chatId; + } + + public void setChatId(String chatId) { + this.chatId = chatId; + } + + public String getCopyright() { + return copyright; + } + + public void setCopyright(String copyright) { + this.copyright = copyright; + } + + public Boolean getLongTime() { + return longTime; + } + + public void setLongTime(Boolean longTime) { + this.longTime = longTime; + } + + public Double getMoney() { + return money; + } + + public void setMoney(Double money) { + this.money = money; + } + + public Double getEnsureMoney() { + return ensureMoney; + } + + public void setEnsureMoney(Double ensureMoney) { + this.ensureMoney = ensureMoney; + } + + public Long getEnsureMoneyTime() { + return ensureMoneyTime; + } + + public void setEnsureMoneyTime(Long ensureMoneyTime) { + this.ensureMoneyTime = ensureMoneyTime; + } + + public String getCardHand() { + return cardHand; + } + + public void setCardHand(String cardHand) { + this.cardHand = cardHand; + } + + public Boolean getFromFk() { + return fromFk; + } + + public void setFromFk(Boolean fromFk) { + this.fromFk = fromFk; + } + + public Long getCreateTime() { + return createTime; + } + + public Long getRegistTime() { + return registTime; + } + + public void setRegistTime(Long registTime) { + this.registTime = registTime; + } + + public void setCreateTime(Long createTime) { + this.createTime = createTime; + } + + public String getAutoKey() { + return autoKey; + } + + public void setAutoKey(String autoKey) { + this.autoKey = autoKey; + } + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + public String getCardFront() { + return cardFront; + } + + public void setCardFront(String cardFront) { + this.cardFront = cardFront; + } + + public String getCardBack() { + return cardBack; + } + + public void setCardBack(String cardBack) { + this.cardBack = cardBack; + } + +// public String getAdminId() { +// return adminId; +// } +// +// public void setAdminId(String adminId) { +// this.adminId = adminId; +// } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getLevelId() { + return levelId; + } + + public void setLevelId(String levelId) { + this.levelId = levelId; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiSecret() { + return apiSecret; + } + + public void setApiSecret(String apiSecret) { + this.apiSecret = apiSecret; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public Long getTokenExpiresTime() { + return tokenExpiresTime; + } + + public void setTokenExpiresTime(Long tokenExpiresTime) { + this.tokenExpiresTime = tokenExpiresTime; + } + + public String getParentUserId() { + return parentUserId; + } + + public void setParentUserId(String parentUserId) { + this.parentUserId = parentUserId; + } + +// public Integer getMoneyType() { +// return moneyType; +// } +// +// public void setMoneyType(Integer moneyType) { +// this.moneyType = moneyType; +// } + + public Integer getRealNameStatus() { + return realNameStatus; + } + + public void setRealNameStatus(Integer realNameStatus) { + this.realNameStatus = realNameStatus; + } + + public String getRegistIp() { + return registIp; + } + + public void setRegistIp(String registIp) { + this.registIp = registIp; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPass() { + return pass; + } + + public void setPass(String pass) { + this.pass = pass; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public String getAddr() { + return addr; + } + + public void setAddr(String addr) { + this.addr = addr; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getQq() { + return qq; + } + + public void setQq(String qq) { + this.qq = qq; + } + + public String getMoneyType() { + return moneyType; + } + + public void setMoneyType(String moneyType) { + this.moneyType = moneyType; + } + +} diff --git a/src/main/java/com/cym/service/ExampleService.java b/src/main/java/com/cym/service/ExampleService.java new file mode 100644 index 0000000..68e850d --- /dev/null +++ b/src/main/java/com/cym/service/ExampleService.java @@ -0,0 +1,21 @@ +package com.cym.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.cym.bean.Page; +import com.cym.model.Example; +import com.cym.utils.JpaHelper; + +@Service +public class ExampleService { + @Autowired + JpaHelper jpaHelper; + + public Page search(Page page) { + page = jpaHelper.findPageByQuery(page, Example.class); + + return page; + } + +} diff --git a/src/main/java/com/cym/utils/BaseController.java b/src/main/java/com/cym/utils/BaseController.java new file mode 100644 index 0000000..d736838 --- /dev/null +++ b/src/main/java/com/cym/utils/BaseController.java @@ -0,0 +1,136 @@ +package com.cym.utils; + +import java.util.Date; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import com.cym.bean.Page; +import com.cym.ext.AdminExt; +import com.cym.ext.UserExt; +import com.cym.model.User; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + +/** + * Author: D.Yang Email: koyangslash@gmail.com Date: 16/10/9 Time: 下午1:37 + * Describe: 基础控制器 + */ +@Component +public class BaseController { + @Autowired + public JpaHelper jpaHelper; + + public JsonResult renderError() { + JsonResult result = new JsonResult(); + result.setSuccess(false); + result.setStatus("200"); + result.setTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); + ; + return result; + } + + public JsonResult renderError(String msg) { + JsonResult result = renderError(); + result.setMsg(msg); + return result; + } + + public JsonResult renderSuccess() { + JsonResult result = new JsonResult(); + result.setSuccess(true); + result.setStatus("200"); + result.setTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); + return result; + } + + public JsonResult renderSuccess(Object obj) { + JsonResult result = renderSuccess(); + result.setObj(obj); + return result; + } + + public AdminExt getAdmin() { + HttpSession httpSession = getHttpSession(); + if (httpSession != null) { + AdminExt adminExt = (AdminExt) httpSession.getAttribute("adminLogin"); + return adminExt; + } else { + return null; + } + } + + public String getAdminId() { + AdminExt adminExt = getAdmin(); + return adminExt != null ? adminExt.getId() : null; + } + + public String getLoginIp() { + HttpSession httpSession = getHttpSession(); + if (httpSession != null) { + return (String) getHttpSession().getAttribute("loginIp"); + } else { + return null; + } + } + + public String getUserId() { + User user = getUser(); + return user != null ? user.getId() : null; + } + + public User getUser() { + UserExt userExt = (UserExt) getHttpSession().getAttribute("userLogin"); + if (userExt != null) { + return jpaHelper.findById(userExt.getId(), User.class); + } else { + String token = getHttpServletRequest().getHeader("token"); + if (StrUtil.isNotEmpty(token)) { + return jpaHelper.findOneByQuery(new ConditionAndWrapper().eq(User::getToken, token), User.class); + } + } + + return null; + } + + public Page buildPage(Integer pageNum, Integer pageSize) { + Page page = new Page<>(); + if (pageNum != null) { + page.setPageNum(pageNum); + } + if (pageSize != null) { + page.setPageSize(pageSize); + } + return page; + } + + public String removeHttp(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.replace("http://", "").replace("https://", "").replace("/", ""); + } + + return str; + } + + public HttpSession getHttpSession() { + ServletRequestAttributes requestAttributes = ServletRequestAttributes.class.cast(RequestContextHolder.getRequestAttributes()); + if (requestAttributes != null) { + HttpServletRequest request = requestAttributes.getRequest(); + HttpSession httpSession = request.getSession(); + return httpSession; + } + return null; + } + + public HttpServletRequest getHttpServletRequest() { + ServletRequestAttributes requestAttributes = ServletRequestAttributes.class.cast(RequestContextHolder.getRequestAttributes()); + HttpServletRequest request = requestAttributes.getRequest(); + + return request; + } +} diff --git a/src/main/java/com/cym/utils/JsonResult.java b/src/main/java/com/cym/utils/JsonResult.java new file mode 100644 index 0000000..4707381 --- /dev/null +++ b/src/main/java/com/cym/utils/JsonResult.java @@ -0,0 +1,71 @@ +package com.cym.utils; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import cn.hutool.json.JSONUtil; +import io.swagger.v3.oas.annotations.media.Schema; + +/** + * Author: D.Yang Email: koyangslash@gmail.com Date: 16/8/31 Time: 下午5:50 + * Describe: 封装Json返回信息 + */ +@Schema(description = "返回结果") +@JsonInclude(JsonInclude.Include.NON_NULL) +public class JsonResult { + @Schema(description = "请求结果") + private boolean success; + @Schema(description = "请求状态 200:请求成功 401:token无效 500:服务器错误") + private String status; + @Schema(description = "错误信息") + private String msg; + @Schema(description = "时间") + private String time; + @Schema(description = "返回内容") + private T obj; + + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String toString() { + return JSONUtil.toJsonStr(this); + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public T getObj() { + return obj; + } + + public void setObj(T obj) { + this.obj = obj; + } + +} diff --git a/src/main/java/com/cym/utils/MenuUtils.java b/src/main/java/com/cym/utils/MenuUtils.java new file mode 100644 index 0000000..6cfac52 --- /dev/null +++ b/src/main/java/com/cym/utils/MenuUtils.java @@ -0,0 +1,222 @@ +package com.cym.utils; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Component; + +@Component +public class MenuUtils { + // List menuCategoryList; + + public List getAll() { + List menuCategoryList = new ArrayList<>(); + // DNS管理 + MenuCategory menuCategory = new MenuCategory("DNS管理", "other"); + menuCategory.getMenus().add(new Menu("adminPage/dns?pageSize=50", "DNS管理")); + menuCategory.getMenus().add(new Menu("adminPage/hwKey?pageSize=20", "华为key管理")); + menuCategory.getMenus().add(new Menu("adminPage/lineGroup?pageSize=20", "线路组")); + menuCategory.getMenus().add(new Menu("adminPage/lineRoute?pageSize=20", "线路组解析")); + menuCategoryList.add(menuCategory); + + // 服务器管理 + menuCategory = new MenuCategory("服务器管理", "system"); + menuCategory.getMenus().add(new Menu("adminPage/node?pageSize=50", "节点管理")); + menuCategory.getMenus().add(new Menu("adminPage/nodeStatus?pageSize=50", "节点状态")); + menuCategory.getMenus().add(new Menu("adminPage/property?pageSize=50", "资产管理")); + menuCategory.getMenus().add(new Menu("adminPage/area?pageSize=20", "地域管理")); + menuCategory.getMenus().add(new Menu("adminPage/ruleTab?", "缓存规则")); + menuCategory.getMenus().add(new Menu("adminPage/ip?pageSize=20", "IP管理")); + menuCategory.getMenus().add(new Menu("adminPage/task?pageSize=20", "同步任务")); + menuCategoryList.add(menuCategory); + + // 站点管理 + menuCategory = new MenuCategory("站点管理", "user"); + menuCategory.getMenus().add(new Menu("adminPage/domainAdmin?pageSize=20", "域名列表")); + menuCategory.getMenus().add(new Menu("adminPage/upstreamAdmin?pageSize=20", "四层转发")); + menuCategory.getMenus().add(new Menu("adminPage/certAdmin?pageSize=20", "证书列表")); + menuCategory.getMenus().add(new Menu("adminPage/dnsApi?pageSize=20", "DNS API")); + menuCategory.getMenus().add(new Menu("adminPage/transfer?pageSize=20", "中转管理")); + menuCategory.getMenus().add(new Menu("adminPage/statsTab?", "数据统计")); + menuCategory.getMenus().add(new Menu("adminPage/domainRank?", "域名排行")); + menuCategory.getMenus().add(new Menu("adminPage/refresh?", "刷新缓存")); + menuCategoryList.add(menuCategory); + + // 套餐管理 + menuCategory = new MenuCategory("套餐管理", "product"); + menuCategory.getMenus().add(new Menu("adminPage/product?pageSize=20", "套餐管理")); + menuCategory.getMenus().add(new Menu("adminPage/orderAdmin?pageSize=20", "售出套餐")); + menuCategory.getMenus().add(new Menu("adminPage/customOrder?pageSize=20", "自定义套餐")); + menuCategoryList.add(menuCategory); + + // IDC管理 + menuCategory = new MenuCategory("IDC管理", "product"); + menuCategory.getMenus().add(new Menu("adminPage/machineOrderAdmin?pageSize=20", "售出主机")); + menuCategory.getMenus().add(new Menu("adminPage/machine?pageSize=50", "服务器产品")); + menuCategory.getMenus().add(new Menu("adminPage/machineVps?pageSize=50", "云主机产品")); + menuCategory.getMenus().add(new Menu("adminPage/machineRoom?pageSize=20", "机房管理")); + menuCategory.getMenus().add(new Menu("adminPage/machineProvider?pageSize=20", "供应商管理")); + menuCategory.getMenus().add(new Menu("adminPage/icp?pageSize=20", "ICP白名单")); + menuCategoryList.add(menuCategory); + + // 财务管理 + menuCategory = new MenuCategory("财务管理", "user"); + menuCategory.getMenus().add(new Menu("adminPage/consumeRecord?pageSize=20", "消费充值记录")); + menuCategoryList.add(menuCategory); + + // 用户管理 + menuCategory = new MenuCategory("用户管理", "user"); + menuCategory.getMenus().add(new Menu("adminPage/user?pageSize=20", "用户管理")); + menuCategory.getMenus().add(new Menu("adminPage/admin?pageSize=20", "管理员管理")); + menuCategory.getMenus().add(new Menu("adminPage/level?pageSize=20", "用户等级管理")); + menuCategory.getMenus().add(new Menu("adminPage/workOrder?pageSize=20", "工单管理")); + menuCategoryList.add(menuCategory); + + // 系统设置 + menuCategory = new MenuCategory("系统设置", "system"); + menuCategory.getMenus().add(new Menu("adminPage/errorPage?", "错误页面")); + menuCategory.getMenus().add(new Menu("adminPage/quartzJob?pageSize=50", "定时任务")); + menuCategoryList.add(menuCategory); + + // 日志管理 + menuCategory = new MenuCategory("日志管理", "other"); + menuCategory.getMenus().add(new Menu("adminPage/dnsOperationLog?pageSize=50", "DNS操作日志")); + menuCategory.getMenus().add(new Menu("adminPage/operationLog?pageSize=50", "操作日志")); + menuCategory.getMenus().add(new Menu("adminPage/domainFreeCheck?pageSize=50", "违规监控")); + menuCategory.getMenus().add(new Menu("adminPage/checkLog?pageSize=50", "监控记录")); + menuCategory.getMenus().add(new Menu("adminPage/checkLogRank?pageSize=50", "监控排行")); + menuCategoryList.add(menuCategory); + + // 邮件管理 + menuCategory = new MenuCategory("邮件管理", "other"); + menuCategory.getMenus().add(new Menu("adminPage/emailSendLog?pageSize=20", "邮件日志")); + menuCategory.getMenus().add(new Menu("adminPage/emailTemplate?pageSize=20", "邮件模板")); + menuCategory.getMenus().add(new Menu("adminPage/telegramSendLog?pageSize=20", "Telegram日志")); + menuCategoryList.add(menuCategory); + + return menuCategoryList; + } + + public List getByUrls(List urls) { + List menuCategoryUsers = getAll(); + + for (MenuCategory menuCategory : menuCategoryUsers) { + for (Menu menu : menuCategory.getMenus()) { + menu.setShow(false); + if (urls.contains(menu.getUrl())) { + menu.setShow(true); + } + } + } + + return menuCategoryUsers; + } + + public List getAllMenu() { + List menus = new ArrayList<>(); + for (MenuCategory menuCategory : getAll()) { + menus.addAll(menuCategory.getMenus()); + } + + return menus; + } + + /** + * 菜单分类 + * + * @author CYM + * + */ + public static class MenuCategory implements Serializable { + private static final long serialVersionUID = 3175408543485317759L; + + private String name; + + private String group; + + private List menus; + + public MenuCategory(String name, String group) { + this.name = name; + this.group = group; + this.menus = new ArrayList<>(); + + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getMenus() { + return menus; + } + + public void setMenus(List menus) { + this.menus = menus; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + } + + /** + * 菜单 + * + * @author CYM + * + */ + public static class Menu implements Serializable { + private static final long serialVersionUID = 6848241258354172694L; + + private String url; + private String name; + private Boolean show; + + public Menu(String url, String name) { + this.url = url; + this.name = name; + this.show = true; + } + + public Boolean getShow() { + return show; + } + + public void setShow(Boolean show) { + this.show = show; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + } + +} diff --git a/src/main/java/com/cym/utils/cert/CertExportEmailDTO.java b/src/main/java/com/cym/utils/cert/CertExportEmailDTO.java new file mode 100644 index 0000000..03deb59 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/CertExportEmailDTO.java @@ -0,0 +1,27 @@ +package com.cym.utils.cert; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + + +/** + * @author ZhangSan_Plus + * @version 1.0 + * @className SSLEmailDTO + * @description + * @date 2021/5/20 9:57 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CertExportEmailDTO implements Serializable { + private List certExportEmailVOS; + private String[] email; + private Map maps; +} diff --git a/src/main/java/com/cym/utils/cert/CertExportEmailVO.java b/src/main/java/com/cym/utils/cert/CertExportEmailVO.java new file mode 100644 index 0000000..5f51b17 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/CertExportEmailVO.java @@ -0,0 +1,337 @@ +package com.cym.utils.cert; + +import lombok.Data; + +import java.util.List; + +/** + * @author ZhangSan_Plus + * @version 1.0 + * @className CertExportEmailVO + * @description + * @date 2022/8/29 15:17 + **/ +@Data +public class CertExportEmailVO { + + /** + * 证书响应状态 + */ + private String success; + private String ctUrl; + private String commonUrl; + /** + * 信任状态 + */ + private String trustStatus; + /** + * 通用名称 + */ + private String commonName; + /** + * 加密算法 + */ + private String encryptionAlgorithm; + /** + * 签名算法 + */ + private String signatureAlgorithm; + /** + * 证书透明(CT) + */ + private String certificateTransparency; + /** + * 吊销状态 + */ + private String revocationStatus; + private String ocspBindState; + private String ocspMustBind; + private String isSNI; + private String weakKey; + //主题信息 + private String subjectCN; + private String subjectO; + private String subjectOU; + private String subjectL; + private String subjectST; + private String subjectC; + //签发者信息 + private String issueCN; + private String issueO; + private String issueC; + private String issueOU; + //证书信息 + private String serialNumber; + private String rootCert; + private String algorithm; + private String certificateType; + private String certificateBrand; + private String privateKeyLen; + private String SHA1Fingerprint; + private String SHA256Fingerprint; + private String startTime; + private String endTime; + private String validityPeriod; + private String extKeyUsage; + private List sans; + private String ocspUrl; + private String crlUrl; + private String caUrl; + private String publicKey; + private String openSSL; + private List certificateChains; + public String getSuccess() { + return success; + } + public void setSuccess(String success) { + this.success = success; + } + public String getCtUrl() { + return ctUrl; + } + public void setCtUrl(String ctUrl) { + this.ctUrl = ctUrl; + } + public String getCommonUrl() { + return commonUrl; + } + public void setCommonUrl(String commonUrl) { + this.commonUrl = commonUrl; + } + public String getTrustStatus() { + return trustStatus; + } + public void setTrustStatus(String trustStatus) { + this.trustStatus = trustStatus; + } + public String getCommonName() { + return commonName; + } + public void setCommonName(String commonName) { + this.commonName = commonName; + } + public String getEncryptionAlgorithm() { + return encryptionAlgorithm; + } + public void setEncryptionAlgorithm(String encryptionAlgorithm) { + this.encryptionAlgorithm = encryptionAlgorithm; + } + public String getSignatureAlgorithm() { + return signatureAlgorithm; + } + public void setSignatureAlgorithm(String signatureAlgorithm) { + this.signatureAlgorithm = signatureAlgorithm; + } + public String getCertificateTransparency() { + return certificateTransparency; + } + public void setCertificateTransparency(String certificateTransparency) { + this.certificateTransparency = certificateTransparency; + } + public String getRevocationStatus() { + return revocationStatus; + } + public void setRevocationStatus(String revocationStatus) { + this.revocationStatus = revocationStatus; + } + public String getOcspBindState() { + return ocspBindState; + } + public void setOcspBindState(String ocspBindState) { + this.ocspBindState = ocspBindState; + } + public String getOcspMustBind() { + return ocspMustBind; + } + public void setOcspMustBind(String ocspMustBind) { + this.ocspMustBind = ocspMustBind; + } + public String getIsSNI() { + return isSNI; + } + public void setIsSNI(String isSNI) { + this.isSNI = isSNI; + } + public String getWeakKey() { + return weakKey; + } + public void setWeakKey(String weakKey) { + this.weakKey = weakKey; + } + public String getSubjectCN() { + return subjectCN; + } + public void setSubjectCN(String subjectCN) { + this.subjectCN = subjectCN; + } + public String getSubjectO() { + return subjectO; + } + public void setSubjectO(String subjectO) { + this.subjectO = subjectO; + } + public String getSubjectOU() { + return subjectOU; + } + public void setSubjectOU(String subjectOU) { + this.subjectOU = subjectOU; + } + public String getSubjectL() { + return subjectL; + } + public void setSubjectL(String subjectL) { + this.subjectL = subjectL; + } + public String getSubjectST() { + return subjectST; + } + public void setSubjectST(String subjectST) { + this.subjectST = subjectST; + } + public String getSubjectC() { + return subjectC; + } + public void setSubjectC(String subjectC) { + this.subjectC = subjectC; + } + public String getIssueCN() { + return issueCN; + } + public void setIssueCN(String issueCN) { + this.issueCN = issueCN; + } + public String getIssueO() { + return issueO; + } + public void setIssueO(String issueO) { + this.issueO = issueO; + } + public String getIssueC() { + return issueC; + } + public void setIssueC(String issueC) { + this.issueC = issueC; + } + public String getIssueOU() { + return issueOU; + } + public void setIssueOU(String issueOU) { + this.issueOU = issueOU; + } + public String getSerialNumber() { + return serialNumber; + } + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber; + } + public String getRootCert() { + return rootCert; + } + public void setRootCert(String rootCert) { + this.rootCert = rootCert; + } + public String getAlgorithm() { + return algorithm; + } + public void setAlgorithm(String algorithm) { + this.algorithm = algorithm; + } + public String getCertificateType() { + return certificateType; + } + public void setCertificateType(String certificateType) { + this.certificateType = certificateType; + } + public String getCertificateBrand() { + return certificateBrand; + } + public void setCertificateBrand(String certificateBrand) { + this.certificateBrand = certificateBrand; + } + public String getPrivateKeyLen() { + return privateKeyLen; + } + public void setPrivateKeyLen(String privateKeyLen) { + this.privateKeyLen = privateKeyLen; + } + public String getSHA1Fingerprint() { + return SHA1Fingerprint; + } + public void setSHA1Fingerprint(String sHA1Fingerprint) { + SHA1Fingerprint = sHA1Fingerprint; + } + public String getSHA256Fingerprint() { + return SHA256Fingerprint; + } + public void setSHA256Fingerprint(String sHA256Fingerprint) { + SHA256Fingerprint = sHA256Fingerprint; + } + public String getStartTime() { + return startTime; + } + public void setStartTime(String startTime) { + this.startTime = startTime; + } + public String getEndTime() { + return endTime; + } + public void setEndTime(String endTime) { + this.endTime = endTime; + } + public String getValidityPeriod() { + return validityPeriod; + } + public void setValidityPeriod(String validityPeriod) { + this.validityPeriod = validityPeriod; + } + public String getExtKeyUsage() { + return extKeyUsage; + } + public void setExtKeyUsage(String extKeyUsage) { + this.extKeyUsage = extKeyUsage; + } + public List getSans() { + return sans; + } + public void setSans(List sans) { + this.sans = sans; + } + public String getOcspUrl() { + return ocspUrl; + } + public void setOcspUrl(String ocspUrl) { + this.ocspUrl = ocspUrl; + } + public String getCrlUrl() { + return crlUrl; + } + public void setCrlUrl(String crlUrl) { + this.crlUrl = crlUrl; + } + public String getCaUrl() { + return caUrl; + } + public void setCaUrl(String caUrl) { + this.caUrl = caUrl; + } + public String getPublicKey() { + return publicKey; + } + public void setPublicKey(String publicKey) { + this.publicKey = publicKey; + } + public String getOpenSSL() { + return openSSL; + } + public void setOpenSSL(String openSSL) { + this.openSSL = openSSL; + } + public List getCertificateChains() { + return certificateChains; + } + public void setCertificateChains(List certificateChains) { + this.certificateChains = certificateChains; + } + + +} diff --git a/src/main/java/com/cym/utils/cert/CertInfoDTO.java b/src/main/java/com/cym/utils/cert/CertInfoDTO.java new file mode 100644 index 0000000..0c77da8 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/CertInfoDTO.java @@ -0,0 +1,110 @@ +package com.cym.utils.cert; + +import java.util.List; +import java.util.Map; + +public class CertInfoDTO { + + List> pactMap; + + String webTitle; + String webServer; + String ipAddr; + String icon; + List certExportEmailVOS; + String rating; + String ats; + String pciDss; + String detectionTime; + + Boolean pass; + + public Boolean getPass() { + return pass; + } + + public void setPass(Boolean pass) { + this.pass = pass; + } + + public List> getPactMap() { + return pactMap; + } + + public void setPactMap(List> pactMap) { + this.pactMap = pactMap; + } + + public String getWebTitle() { + return webTitle; + } + + public void setWebTitle(String webTitle) { + this.webTitle = webTitle; + } + + public String getWebServer() { + return webServer; + } + + public void setWebServer(String webServer) { + this.webServer = webServer; + } + + public String getIpAddr() { + return ipAddr; + } + + public void setIpAddr(String ipAddr) { + this.ipAddr = ipAddr; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public List getCertExportEmailVOS() { + return certExportEmailVOS; + } + + public void setCertExportEmailVOS(List certExportEmailVOS) { + this.certExportEmailVOS = certExportEmailVOS; + } + + public String getRating() { + return rating; + } + + public void setRating(String rating) { + this.rating = rating; + } + + public String getAts() { + return ats; + } + + public void setAts(String ats) { + this.ats = ats; + } + + public String getPciDss() { + return pciDss; + } + + public void setPciDss(String pciDss) { + this.pciDss = pciDss; + } + + public String getDetectionTime() { + return detectionTime; + } + + public void setDetectionTime(String detectionTime) { + this.detectionTime = detectionTime; + } + +} diff --git a/src/main/java/com/cym/utils/cert/CertificateChain.java b/src/main/java/com/cym/utils/cert/CertificateChain.java new file mode 100644 index 0000000..6d0f517 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/CertificateChain.java @@ -0,0 +1,65 @@ +package com.cym.utils.cert; + +import lombok.Data; + +/** + * @author ZhangSan_Plus + * @version 1.0 + * @className CertificateChain + * @description + * @date 2022/9/1 13:59 + **/ +@Data +public class CertificateChain { + private String issuedTo; + private String issuer; + private String encryptionAlgorithm; + private String signAlgorithm; + private String certFingerprint; + private String publicKeyPINValue; + private String validityPeriod; + public String getIssuedTo() { + return issuedTo; + } + public void setIssuedTo(String issuedTo) { + this.issuedTo = issuedTo; + } + public String getIssuer() { + return issuer; + } + public void setIssuer(String issuer) { + this.issuer = issuer; + } + public String getEncryptionAlgorithm() { + return encryptionAlgorithm; + } + public void setEncryptionAlgorithm(String encryptionAlgorithm) { + this.encryptionAlgorithm = encryptionAlgorithm; + } + public String getSignAlgorithm() { + return signAlgorithm; + } + public void setSignAlgorithm(String signAlgorithm) { + this.signAlgorithm = signAlgorithm; + } + public String getCertFingerprint() { + return certFingerprint; + } + public void setCertFingerprint(String certFingerprint) { + this.certFingerprint = certFingerprint; + } + public String getPublicKeyPINValue() { + return publicKeyPINValue; + } + public void setPublicKeyPINValue(String publicKeyPINValue) { + this.publicKeyPINValue = publicKeyPINValue; + } + public String getValidityPeriod() { + return validityPeriod; + } + public void setValidityPeriod(String validityPeriod) { + this.validityPeriod = validityPeriod; + } + + +} diff --git a/src/main/java/com/cym/utils/cert/CertificateDetectionUtils.java b/src/main/java/com/cym/utils/cert/CertificateDetectionUtils.java new file mode 100644 index 0000000..45f4f9e --- /dev/null +++ b/src/main/java/com/cym/utils/cert/CertificateDetectionUtils.java @@ -0,0 +1,839 @@ +package com.cym.utils.cert; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.ConnectException; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.URL; +import java.net.URLConnection; +import java.security.MessageDigest; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLSession; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import com.cym.utils.cert.ssl.Root; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; + +/** + * @author ZhangSan_Plus + * @version 1.0 + * @className CertificateDetectionUtils + * @description + * @date 2022/8/27 16:36 + **/ +@Component +public class CertificateDetectionUtils { + private static final Pattern CN_PATTERN = Pattern.compile("[\u4e00-\u9fa5]"); + private static final String HTTPS_STR = "https://"; + private static final String HTTP_STR = "http://"; + private static final String DOMAIN_NOT_MATCH_STR = "域名不匹配"; + private static final String DV_SSL_STR = "DV SSL"; + private static final String OV_SSL_STR = "OV SSL"; + private static final String EV_SSL_STR = "EV SSL"; + private static final String SERIALNUMBER_STR = "SERIALNUMBER"; + private static final String O_STR = "O"; + private static final String ST_STR = "ST"; + private static final String OU_STR = "OU"; + private static final String L_STR = "L"; + private static final String C_STR = "C"; + private static final String CN_STR = "CN"; + private static final String SHA1_AUTH_STR = "SHA-1"; + private static final String SHA256_AUTH_STR = "SHA-256"; + private static final String NORMAL_STR = "正常"; + private static final String YES_STR = "是"; + private static final String NO_STR = "否"; + private static final String SUPPORT_STR = "支持"; + private static final String NO_SUPPORT_STR = "不支持"; + + /** + * 根据网址获取证书详细信息(包含当前网址受信任,不受信任的证书) + * + * @param hpUrl + * @return com.cym.utils.cert.CertInfoDTO + * @throws Exception + * @author ZhangSan_Plus + * @date 19:35 2022/9/5 + **/ + public static CertInfoDTO getCert(String hpUrl) throws Exception { + hpUrl = hpUrl.contains(HTTP_STR) || hpUrl.contains(HTTPS_STR) ? hpUrl.replaceAll(HTTP_STR, "").replaceAll(HTTPS_STR, "").trim() : hpUrl.trim(); + hpUrl = CNRulesMate(hpUrl) ? chineseDomainNameDecoding(hpUrl) : hpUrl; + long start = System.currentTimeMillis(); + CertInfoDTO certInfoDTO = new CertInfoDTO(); + List> pactMap = Lists.newLinkedList(); + List certExportEmailVOS = Lists.newArrayList(); + // 获取受信任证书 + CertExportEmailVO certExportEmailVO = defaultDetection(hpUrl.toLowerCase()); + // 获取不受信任的证书 + // CertExportEmailVO certExportEmailVO1 = trustDetection(hpUrl.toLowerCase()); + if (StringUtils.isNotBlank(certExportEmailVO.getIssueC())) { + pactMap.add(certCompatible(certExportEmailVO.getSuccess())); + certExportEmailVOS.add(certExportEmailVO); + } +// if (StringUtils.isNotBlank(certExportEmailVO1.getCertificateType()) +// && !(StringUtils.isNotBlank(certExportEmailVO.getCommonName()) ? certExportEmailVO.getCommonUrl() : "").equals(certExportEmailVO1.getCommonUrl())) { +// pactMap.add(certCompatible(certExportEmailVO1.getSuccess())); +// certExportEmailVOS.add(certExportEmailVO1); +// } + certInfoDTO.setPactMap(pactMap); + // 获取当前网址的title,icon,ip等信息 + Map webInfo = getWebInfo(StringUtils.isNotBlank(certExportEmailVO.getCommonName()) ? HTTPS_STR : HTTP_STR, hpUrl); + certInfoDTO.setWebTitle(webInfo.get("title")); + certInfoDTO.setWebServer("-"); + certInfoDTO.setIpAddr(webInfo.get("ip")); + certInfoDTO.setIcon(webInfo.get("favicon")); + certInfoDTO.setCertExportEmailVOS(certExportEmailVOS); + if (certExportEmailVOS.size() != 0) { + String rating = getRating(certExportEmailVOS.get(0)); + String status = rating.equals("B") || rating.equals("T") ? "不合规" : "合规"; + certInfoDTO.setRating(rating); + certInfoDTO.setAts(status); + certInfoDTO.setPciDss(status); + certInfoDTO.setPass(true); + } else { + certInfoDTO.setPass(false); + } + long end = System.currentTimeMillis(); + certInfoDTO.setDetectionTime(DateUtils.formatDate(new Date(), DateUtils.DATE_DEFAULT) + " ( 耗时:" + (end - start) / 1000 + "秒 )"); + return certInfoDTO; + } + + /** + * 获取HTTPS请求连接 + * + * @param url + * @return javax.net.ssl.HttpsURLConnection + * @throws + * @author ZhangSan_Plus + * @date 14:31 2022/9/2 + **/ + public static HttpsURLConnection getConn(URL url) { + HttpsURLConnection conn = null; + try { + conn = (HttpsURLConnection) url.openConnection(); + } catch (IOException e) { + e.printStackTrace(); + } + conn.addRequestProperty("Accept", "*/*"); + conn.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch"); + conn.addRequestProperty("Accept-Language", "zh-CN,zh;q=0.8"); + conn.addRequestProperty("Cache-Control", "max-age=0"); + conn.addRequestProperty("Connection", "keep-alive"); + conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"); + conn.setDoOutput(true); + conn.setUseCaches(false); + conn.setConnectTimeout(10000); + conn.setReadTimeout(10000); + return conn; + } + + /*** + * 默认证书匹配(只匹配SSL证书安全的证书信息) --若证书抛出没有证书的错误会进行信任全部证书进行检测 + * --会将所有证书进行匹配包括已经过期或者证书和主域名不匹配的都会进行处理 + * + * + * -SSL证书会进行两次匹配规则如下 若两次证书查询的结果相同则代表该网站仅有一个RSA,若两次查询结果不相同会将证书分为 RSA1 RSA2 + * + * @author ZhangSan_Plus + * @date 10:04 2022/8/31 + * @param hpUrl + * @return com.cym.utils.cert.CertExportEmailVO + * @throws + **/ + public static CertExportEmailVO defaultDetection(String hpUrl) throws Exception { + URL url = new URL(HTTPS_STR + hpUrl); + // 发起HTTPS请求 + trustAllHttpsCertificates(1); + HttpsURLConnection conn = getConn(url); + CertExportEmailVO certExportEmailVO = new CertExportEmailVO(); + try { + conn.connect(); + if (Objects.nonNull(conn.getServerCertificates())) { + Certificate[] serverCertificates = conn.getServerCertificates(); + X509Certificate certs = (X509Certificate) serverCertificates[0]; + certExportEmailVO = deal(certs, certExportEmailVO); + String parentCert = (serverCertificates.length > 1) ? NO_STR : YES_STR; + certExportEmailVO.setRootCert(parentCert); + certExportEmailVO.setOcspBindState(parentCert.equals(YES_STR) ? SUPPORT_STR : NO_SUPPORT_STR); + certExportEmailVO.setOcspMustBind(parentCert.equals(YES_STR) ? YES_STR : NO_STR); + certExportEmailVO.setIsSNI(parentCert.equals(YES_STR) ? YES_STR : NO_STR); + certExportEmailVO.setWeakKey(parentCert.equals(YES_STR) ? NO_STR : YES_STR); + List certChain = getCertChain(serverCertificates, getThumbPrint(certs, SHA1_AUTH_STR).toUpperCase()); + certExportEmailVO.setCertificateChains(certChain); + conn.disconnect(); + if (!certExportEmailVO.getCommonName().contains(hpUrl.substring(hpUrl.indexOf(".") + 1))) { + if (!certExportEmailVO.getSans().contains(hpUrl.replaceAll("www\\.", ""))) { + certExportEmailVO.setCommonUrl(certExportEmailVO.getCommonName()); + certExportEmailVO.setCommonName(certExportEmailVO.getCommonName() + " (不匹配)"); + certExportEmailVO.setSuccess(DOMAIN_NOT_MATCH_STR); + certExportEmailVO.setTrustStatus(DOMAIN_NOT_MATCH_STR); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + conn.disconnect(); + } + return certExportEmailVO; + } + + /** + * 中文正则表达式 + * + * @param countName 域名 + * @return boolean + * @throws + * @author ZhangSan_Plus + * @date 10:11 2022/8/31 + **/ + public static boolean CNRulesMate(String countName) { + Matcher m = CN_PATTERN.matcher(countName); + if (m.find()) { + return true; + } + return false; + } + + /** + * 对包含中文的域名进行中文域名解析 + * + * @param doMain + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 10:11 2022/8/31 + **/ + public static String chineseDomainNameDecoding(String doMain) throws Exception { + String[] doMainPunyList = doMain.split("\\."); + String doMainPunyCode = ""; + // 中文域名的解析 + for (int i = 0; i < doMainPunyList.length; i++) { + if (i == doMainPunyList.length - 1) { + if (CNRulesMate(doMainPunyList[i])) { + doMainPunyCode += "xn--" + PunyUtils.encode(doMainPunyList[i]); + } else { + doMainPunyCode += doMainPunyList[i]; + } + } else { + if (CNRulesMate(doMainPunyList[i])) { + doMainPunyCode += "xn--" + PunyUtils.encode(doMainPunyList[i]) + "."; + } else { + doMainPunyCode += doMainPunyList[i] + "."; + } + } + } + return doMainPunyCode; + } + + static class Verifier implements HostnameVerifier { + + @Override + public boolean verify(String arg0, SSLSession arg1) { + return true; // mark everything as verified + } + } + + /** + * 信任所有证书实现类 + */ + static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { + return; + } + + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { + return; + } + } + + /** + * 信任网站所有SSL证书 + * + * @param status + * @return void + * @throws + * @author ZhangSan_Plus + * @date 10:11 2022/8/31 + **/ + private static void trustAllHttpsCertificates(Integer status) throws Exception { + javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; + javax.net.ssl.TrustManager tm = new miTM(); + trustAllCerts[0] = tm; + // 实例化SSL协议 + javax.net.ssl.SSLContext sc = (status == 1) ? javax.net.ssl.SSLContext.getInstance("TLSv1.2") : javax.net.ssl.SSLContext.getInstance("SSL"); + + // 实例化SSl协议 信任所有证书 + sc.init(null, trustAllCerts, null); + javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } + + /** + * 证书后续处理具体规则匹配 + * + * @param cert + * @param xccSSLInfo + * @return com.cym.utils.cert.CertExportEmailVO + * @throws + * @author ZhangSan_Plus + * @date 19:40 2022/9/5 + **/ + public static CertExportEmailVO deal(X509Certificate cert, CertExportEmailVO xccSSLInfo) throws Exception { + Map certInfo = getCertInfo(cert.toString()); + List sansList = new ArrayList<>(); + if (Objects.nonNull(cert.getSubjectAlternativeNames())) { + Collection> subjectAlternativeNames = cert.getSubjectAlternativeNames(); + subjectAlternativeNames.forEach(c -> sansList.add(c.get(1).toString())); + } + // Root root = JSON.parseObject(JSON.toJSONString(cert), Root.class); +// xccSSLInfo.setCommonUrl(root.getSubjectDN().getCommonName()); + xccSSLInfo.setCommonUrl(cert.getSubjectX500Principal().getName()); +// xccSSLInfo.setCommonName(root.getSubjectDN().getCommonName()); + xccSSLInfo.setCommonName(cert.getSubjectX500Principal().getName()); + xccSSLInfo.setSignatureAlgorithm(cert.getSigAlgName()); + xccSSLInfo.setEncryptionAlgorithm(cert.toString().contains("SHA256withECDSA") ? "ECDSA 256 bits" : "RSA 2048 bits"); + xccSSLInfo.setCertificateTransparency("是 (Google: (来自证书,有效); Apple: (来自证书,有效))Firefox: (来自证书,有效))"); + xccSSLInfo.setRevocationStatus(NORMAL_STR); + /** + * 主题信息 + */ + xccSSLInfo.setSubjectCN(sslSp(cert.getSubjectDN().toString(), CN_STR)); + xccSSLInfo.setSubjectO(sslSp(cert.getSubjectDN().toString(), O_STR)); + xccSSLInfo.setSubjectST(sslSp(cert.getSubjectDN().toString(), ST_STR)); + xccSSLInfo.setSubjectOU(sslSp(cert.getSubjectDN().toString(), OU_STR)); + xccSSLInfo.setSubjectL(sslSp(cert.getSubjectDN().toString(), L_STR)); + xccSSLInfo.setSubjectC(sslSp(cert.getSubjectDN().toString(), C_STR)); + + /** + * 签发者信息 + */ + xccSSLInfo.setIssueCN(sslSp(cert.getIssuerDN().toString(), CN_STR)); + xccSSLInfo.setIssueO(sslSp(cert.getIssuerDN().toString(), O_STR)); + xccSSLInfo.setIssueOU(sslSp(cert.getIssuerDN().toString(), OU_STR)); + xccSSLInfo.setIssueC(sslSp(cert.getIssuerDN().toString(), C_STR)); + + /** + * 证书信息 + */ + xccSSLInfo.setSerialNumber(certInfo.get("serialNumber")); + xccSSLInfo.setAlgorithm(cert.getSigAlgName()); + xccSSLInfo.setCertificateType(getSSLType(cert)); + xccSSLInfo.setCertificateBrand(sslSp(cert.getIssuerDN().toString(), CN_STR).split(" ")[0]); + xccSSLInfo.setPrivateKeyLen("2048 Bits"); + xccSSLInfo.setSHA1Fingerprint(getThumbPrint(cert, SHA1_AUTH_STR).toUpperCase()); + xccSSLInfo.setSHA256Fingerprint(getThumbPrint(cert, SHA256_AUTH_STR).toUpperCase()); + xccSSLInfo.setStartTime(DateUtils.formatDate(cert.getNotBefore(), DateUtils.DATETIME_DEFAULT)); + xccSSLInfo.setEndTime(DateUtils.formatDate(cert.getNotAfter(), DateUtils.DATETIME_DEFAULT)); + xccSSLInfo.setSuccess(DateUtils.daysBetween(new Date(), cert.getNotAfter()) > 0 && StringUtils.isBlank(xccSSLInfo.getSuccess()) ? NORMAL_STR : "已过期"); + xccSSLInfo.setTrustStatus(DateUtils.daysBetween(new Date(), cert.getNotAfter()) > 0 && StringUtils.isBlank(xccSSLInfo.getTrustStatus()) ? "可信" : "已过期"); + xccSSLInfo.setValidityPeriod(DateUtils.daysBetween(new Date(), cert.getNotAfter()) + "天"); + xccSSLInfo.setExtKeyUsage("extKeyUsage:Server authentication,Client authentication"); + xccSSLInfo.setSans(sansList); +// xccSSLInfo.setOcspUrl((Objects.nonNull(root.getAuthorityInfoAccessExtension())) ? root.getAuthorityInfoAccessExtension().getAccessDescriptions().get(0).getAccessLocation().getName().getName() : ""); +// xccSSLInfo.setCaUrl((Objects.nonNull(root.getAuthorityInfoAccessExtension())) ? root.getAuthorityInfoAccessExtension().getAccessDescriptions().get(0).getAccessLocation().getName().getName() : ""); + xccSSLInfo.setCrlUrl(certInfo.get("crlUrl")); + xccSSLInfo.setPublicKey(cert.getPublicKey().getFormat()); + xccSSLInfo.setOpenSSL("OpenSSL:" + "\n" + "Certificate:" + "\n" + cert); + return xccSSLInfo; + + } + + /** + * 获取证书链 + * + * @param certificates + * @return java.util.List + * @throws + * @author ZhangSan_Plus + * @date 15:40 2022/9/1 + **/ + public static List getCertChain(Certificate[] certificates, String thumbPrint) throws Exception { + List certificateChains = Lists.newArrayList(); + List x509Certificates = Arrays.asList(certificates); + List certificateList = Lists.newLinkedList(); + int thumb = 0; + for (int i = 0; i < x509Certificates.size(); i++) { + X509Certificate cert = (X509Certificate) certificates[i]; + certificateList.add(cert); + if (thumbPrint.equals(getThumbPrint(cert, SHA1_AUTH_STR).toUpperCase())) { + thumb = i; + } + } + List certificates1 = certificateList.subList(thumb, x509Certificates.size()); + certificates1.forEach(c -> { + CertificateChain certificateChain = certChainDeal(c); + certificateChains.add(certificateChain); + }); + return certificateChains; + } + + public static List getCertChain1(Certificate[] certificates) throws Exception { + List certificateChains = Lists.newArrayList(); + for (int i = 0; i < certificates.length; i++) { + X509Certificate cert = (X509Certificate) certificates[i]; + CertificateChain certificateChain = certChainDeal(cert); + certificateChains.add(certificateChain); + } + return certificateChains; + } + + public static CertificateChain certChainDeal(X509Certificate cert) { + CertificateChain certificateChain = new CertificateChain(); + certificateChain.setValidityPeriod(DateUtils.formatDate(cert.getNotBefore(), DateUtils.DATETIME_YYYY_MM_DD_HH_MM_SS).concat("~") + .concat(DateUtils.formatDate(cert.getNotAfter(), DateUtils.DATETIME_YYYY_MM_DD_HH_MM_SS)).concat("(剩余 " + DateUtils.daysBetween(new Date(), cert.getNotAfter()) + "天)")); + try { + certificateChain.setCertFingerprint(getThumbPrint(cert, SHA1_AUTH_STR).toUpperCase()); + } catch (Exception e) { + e.printStackTrace(); + } + certificateChain.setEncryptionAlgorithm(cert.toString().contains("SHA256withECDSA") ? "ECDSA 256 bits" : "RSA 2048 bits"); + certificateChain.setSignAlgorithm(cert.getSigAlgName()); + certificateChain.setIssuedTo(sslSp(cert.getSubjectDN().toString(), CN_STR)); + certificateChain.setIssuer(sslSp(cert.getIssuerDN().toString(), CN_STR)); + return certificateChain; + } + + /** + * 信任所有证书 + * + * @param hpUrl + * @return com.cym.utils.cert.CertExportEmailVO + * @throws + * @author ZhangSan_Plus + * @date 14:32 2022/9/2 + **/ + public static CertExportEmailVO trustDetection(String hpUrl) throws Exception { + CertExportEmailVO xccSSLInfo = new CertExportEmailVO(); + URL url = new URL(HTTPS_STR + hpUrl); + // 发起HTTPS请求 + trustAllHttpsCertificates(2); + HttpsURLConnection conn = getConn(url); + conn.setHostnameVerifier(new Verifier()); + try { + conn.connect(); + Certificate[] serverCertificates = conn.getServerCertificates(); + X509Certificate certs = (X509Certificate) serverCertificates[0]; + xccSSLInfo = deal(certs, xccSSLInfo); + List certChain = getCertChain(serverCertificates, getThumbPrint(certs, SHA1_AUTH_STR).toUpperCase()); + xccSSLInfo.setCertificateChains(certChain); + String parentCert = (serverCertificates.length > 1) ? NO_STR : YES_STR; + xccSSLInfo.setOcspBindState(parentCert.equals(YES_STR) ? SUPPORT_STR : NO_SUPPORT_STR); + xccSSLInfo.setOcspMustBind(parentCert.equals(YES_STR) ? YES_STR : NO_STR); + xccSSLInfo.setIsSNI(parentCert.equals(YES_STR) ? YES_STR : NO_STR); + xccSSLInfo.setWeakKey(parentCert.equals(YES_STR) ? NO_STR : YES_STR); + conn.disconnect(); + if (!xccSSLInfo.getCommonName().contains(hpUrl.substring(hpUrl.indexOf(".") + 1))) { + if (xccSSLInfo.getSans().size() == 0 || !xccSSLInfo.getSans().contains(hpUrl)) { + xccSSLInfo.setCommonName(xccSSLInfo.getCommonName() + " (不匹配)"); + xccSSLInfo.setSuccess(DOMAIN_NOT_MATCH_STR); + xccSSLInfo.setTrustStatus("域名不匹配 (主流浏览器访问不受影响,影响少数不支持SNI的旧浏览器)"); + } + } + } catch (ConnectException e) { + return xccSSLInfo; + } catch (Exception cer) { + return xccSSLInfo; + } finally { + conn.disconnect(); + } + return xccSSLInfo; + } + + /** + * 证书类型规则匹配 -- DV 证书信息中仅包含COMMON_NAME 信息 -- OV 证书信息中包含企业的一些基本信息 -- EV + * 证书中包含企业的工商注册号 SERIALNUMBER + * + * @param cert X.509证书链 + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 10:12 2022/8/31 + **/ + public static String getSSLType(X509Certificate cert) { + if (StringUtils.isBlank(sslSp(cert.getSubjectDN().toString(), O_STR)) && StringUtils.isBlank(sslSp(cert.getSubjectDN().toString(), ST_STR))) { + return DV_SSL_STR; + } + if (StringUtils.isBlank(sslSp(cert.getSubjectDN().toString(), SERIALNUMBER_STR))) { + return OV_SSL_STR; + } else { + return EV_SSL_STR; + } + } + + /** + * 获取证书序列号及CRURL(证书列表吊销信息) domain:https://sina.com.cn eg: + * http://crl3.digicert.com/GeoTrustCNRSACAG1.crl,http://crl4.digicert.com/GeoTrustCNRSACAG1.crl + * + * @param cert + * @return java.util.Map + * @throws + * @author ZhangSan_Plus + * @date 10:14 2022/8/31 + **/ + public static Map getCertInfo(String cert) { + Map certMap = Maps.newHashMap(); + if (cert.contains("SerialNumber: [") && cert.contains("]\n" + "\n" + "Certificate")) { + try { + String serialNumber = cert.substring(cert.indexOf("SerialNumber: ["), cert.indexOf("]\n" + "\n" + "Certificate")).replace(" ", "").replace("SerialNumber:[", "").replace("]", "") + .toUpperCase(); + certMap.put("serialNumber", serialNumber); + } catch (Exception e) { + e.printStackTrace(); + } + + } else { + String serialNumber = cert.substring(cert.indexOf("SerialNumber: ["), cert.indexOf("]\n" + " Algorithm: [")).replaceAll(" ", "").replaceAll("SerialNumber:\\[", "").replaceAll("]", "") + .toUpperCase(); + certMap.put("serialNumber", serialNumber); + } + if (cert.contains("[URIName:")) { + String crlUrl = cert.substring(cert.indexOf("[URIName:"), cert.indexOf("[6]")).replaceAll("\\[URIName:", "").replaceAll("]", "").replaceAll("DistributionPoint:", "").replaceAll("\n", "") + .replaceAll(" ", ""); + certMap.put("crlUrl", crlUrl); + } + return certMap; + } + + /** + * 根据规则匹配颁发者和使用者的信息 + * + * @param str + * @param key + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 10:17 2022/8/31 + **/ + public static String sslSp(String str, String key) { + if (str.contains(".,")) { + str = str.replace(".,", "&"); + } + Map maps = Maps.newHashMap(); + String[] split = str.split(","); + for (String s : split) { + if (s.contains("=")) { + String[] split1 = s.split("="); + if (split1.length == 2) { + maps.put(split1[0].trim(), split1[1].replace("\"", "")); + } + } + } + return maps.containsKey(key) ? maps.get(key) : ""; + } + + /** + * @param cert + * @param algorithm 算法(支持SHA-1 和 SHA-256) + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 10:17 2022/8/31 + **/ + private static String getThumbPrint(X509Certificate cert, String algorithm) throws Exception { + MessageDigest md = MessageDigest.getInstance(algorithm); + byte[] der = cert.getEncoded(); + md.update(der); + byte[] digest = md.digest(); + return bytesToHexString(digest); + } + + /** + * byte[]转String + * + * @param src + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 10:21 2022/8/31 + **/ + private static String bytesToHexString(byte[] src) { + StringBuilder stringBuilder = new StringBuilder(); + if (src == null || src.length <= 0) { + return null; + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + } + return stringBuilder.toString(); + } + + /** + * 获取网站信息 + * + * @param web + * @return java.util.Map + * @throws + * @author ZhangSan_Plus + * @date 13:40 2022/9/1 + **/ + public static Map getWebInfo(String vls, String web) { + Map webMap = Maps.newHashMap(); + try { + trustAllHttpsCertificates(2); + URL url = new URL(vls + web); + String ipAddress = InetAddress.getByName(web).getHostAddress(); + URLConnection URLconnection = url.openConnection(); + HttpURLConnection httpConnection = (HttpURLConnection) URLconnection; + int responseCode = httpConnection.getResponseCode(); + webMap.put("ip", StringUtils.isBlank(ipAddress) ? "-" : ipAddress); + webMap.put("favicon", findIco(vls + web)); + if (!getResponseStatus().contains(responseCode)) { + InputStream in = httpConnection.getInputStream(); + InputStreamReader isr = new InputStreamReader(in); + BufferedReader bufferedReader = new BufferedReader(isr); + String str; + while ((str = bufferedReader.readLine()) != null) { + String trim = str.trim(); + if (trim.contains("")) { + String titleStr = trim.substring(trim.indexOf("<title>"), trim.indexOf("")).replace("", ""); + webMap.put("title", responseCode == 301 ? "redirect to https://" + web : titleStr); + } + } + bufferedReader.close(); + } else { + webMap.put("title", "redirect to https://" + web); + webMap.put("ip", "-"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return webMap; + } + + /** + * 获取网站favicon + * + * @param navUrl + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 13:36 2022/9/1 + **/ + private static String findIco(String navUrl) { + String body = HttpUtil.get(navUrl); + String str = body.split("/favicon.ico")[0]; + int http = str.indexOf(HTTPS_STR, str.length() - 100); + if (http == -1) { + http = str.indexOf(HTTPS_STR, str.length() - 100); + } + if (http == -1) { + // 说明没有指定 走拼接逻辑 + int i = navUrl.indexOf("/", 8); + if (i > 0) { + navUrl = navUrl.substring(0, i); + } + } else { + navUrl = str.substring(http); + } + return navUrl + "/favicon.ico"; + } + + /** + * 获取证书兼容性测试 + * + * @param success + * @return java.util.Map<java.lang.String, java.lang.String> + * @throws + * @author ZhangSan_Plus + * @date 17:20 2022/9/1 + **/ + public static Map<String, String> certCompatible(String success) { + Map<String, String> maps = Maps.newLinkedHashMap(); + String status = success.equals(NORMAL_STR) ? YES_STR : NO_STR; + if (success.equals("网址无法访问") || success.equals("没有证书")) { + return maps; + } else { + maps.put("Android 2.3 (Gingerbread)", status); + maps.put("Android 4.0 (Ice Cream Sandwich)", status); + maps.put("Android 4.1 (Jelly Bean)", status); + maps.put("Android 4.2 (Jelly Bean)", status); + maps.put("Android 4.3 (Jelly Bean)", status); + maps.put("Android 4.4 (KitKat)", status); + maps.put("Android 5.0 (Lollipop)", status); + maps.put("Android 5.1 (Lollipop)", status); + maps.put("Android 6.0 (Marshmallow)", status); + maps.put("Android 7.0 (Android Nougat)", status); + maps.put("Android 7.1 (Android Nougat)", status); + maps.put("Android 8.0 (Android Oreo)", status); + maps.put("Android 9.0 (Android Pie)", status); + maps.put("Android 10.0 (Android Q)", status); + maps.put("Android 11.0 (Android R)", status); + maps.put("iOS 5-6", status); + maps.put("iOS 7", status); + maps.put("iOS 8", status); + maps.put("iOS 9", status); + maps.put("iOS 10", status); + maps.put("iOS 11", status); + maps.put("iOS 12", status); + maps.put("iOS 13", status); + maps.put("iOS 14", status); + maps.put("OS X 10.9 (Mavericks)", status); + maps.put("OS X 10.10 (Yosemite)", status); + maps.put("OS X 10.11 (Eicapitan)", status); + maps.put("OS X 10.12 (Sierra)", status); + maps.put("OS X 10.13 (High Sierra)", status); + maps.put("OS X 10.14 (Mojave)", status); + maps.put("java 7u181", status); + maps.put("java 8u161", status); + maps.put("java_8u181", status); + maps.put("java_8u202", status); + maps.put("java 9", status); + maps.put("java 10", status); + maps.put("java 11", status); + maps.put("java 12", status); + maps.put("java 13", status); + maps.put("java 17", status); + maps.put("Firefox 3.0", status); + maps.put("Firefox 3.5", status); + maps.put("Firefox 3.6", status); + maps.put("Firefox 6.0", status); + maps.put("Firefox 16", status); + maps.put("Firefox 23", status); + maps.put("Firefox 32", status); + maps.put("Firefox 42", status); + maps.put("Firefox 50", status); + maps.put("Firefox 51", status); + maps.put("Firefox 54", status); + maps.put("Firefox 58", status); + maps.put("Firefox 63", status); + maps.put("Firefox 65", status); + maps.put("Windows XP", status); + maps.put("Windows 7", status); + maps.put("Windows 8", status); + maps.put("Windows 10", status); + maps.put("Windows 11", status); + } + return maps; + } + + public static String getRating(CertExportEmailVO certExportEmailVO) { + if (certExportEmailVO.getSuccess().equals(NORMAL_STR) && certExportEmailVO.getCertificateType().equals(EV_SSL_STR)) { + return "A+"; + } + if (certExportEmailVO.getSuccess().equals(NORMAL_STR) && certExportEmailVO.getCertificateType().equals(OV_SSL_STR)) { + return "A"; + } + if (certExportEmailVO.getSuccess().equals(NORMAL_STR) && certExportEmailVO.getCertificateType().equals(DV_SSL_STR)) { + return "A-"; + } + if (certExportEmailVO.getSuccess().equals(DOMAIN_NOT_MATCH_STR)) { + return "T"; + } + return "B"; + } + + /** + * 获取证书响应错误状态码 + * + * @param + * @return java.util.List<java.lang.Integer> + * @throws + * @author ZhangSan_Plus + * @date 11:26 2022/9/2 + **/ + public static List<Integer> getResponseStatus() { + String code = "[\n" + " 404,\n" + " 400,\n" + " 500,\n" + " 502,\n" + " 503,\n" + " 504,\n" + " 505,\n" + " 506,\n" + " 507,\n" + " 508,\n" + " 509,\n" + " 511,\n" + " 512,\n" + + " 513,\n" + " 521,\n" + " 530,\n" + " 600,\n" + " 651\n" + "]"; + List<Integer> codeList = JSON.parseObject(code, List.class); + return codeList; + } + + public CertExportEmailVO getCertChain(String fingerprint, String hpUrl) throws Exception { + hpUrl = hpUrl.contains(HTTP_STR) || hpUrl.contains(HTTPS_STR) ? hpUrl.replaceAll(HTTP_STR, "").replaceAll(HTTPS_STR, "").trim() : hpUrl.trim(); + hpUrl = CNRulesMate(hpUrl) ? chineseDomainNameDecoding(hpUrl) : hpUrl; + CertExportEmailVO certExportEmailVO1 = distrustCert(fingerprint, hpUrl); + CertExportEmailVO certExportEmailVO = noDistrustCert(fingerprint, hpUrl); + return StringUtils.isNotBlank(certExportEmailVO1.getSerialNumber()) ? certExportEmailVO1 : certExportEmailVO; + } + + public static CertExportEmailVO distrustCert(String fingerprint, String hpUrl) throws Exception { + URL url = new URL(HTTPS_STR + hpUrl); + // 发起HTTPS请求 + trustAllHttpsCertificates(1); + HttpsURLConnection conn = getConn(url); + CertExportEmailVO certExportEmailVO = new CertExportEmailVO(); + try { + conn.connect(); + Certificate[] serverCertificates = conn.getServerCertificates(); + for (int i = 0; i < serverCertificates.length; i++) { + X509Certificate certs = (X509Certificate) serverCertificates[i]; + if (getThumbPrint(certs, SHA1_AUTH_STR).toUpperCase().equals(fingerprint)) { + certExportEmailVO = deal(certs, certExportEmailVO); + certExportEmailVO.setCertificateChains(getCertChain(serverCertificates, getThumbPrint(certs, SHA1_AUTH_STR).toUpperCase())); + continue; + } + } + } catch (Exception e) { + } finally { + conn.disconnect(); + } + return certExportEmailVO; + } + + public static CertExportEmailVO noDistrustCert(String fingerprint, String hpUrl) throws Exception { + CertExportEmailVO certExportEmailVO = new CertExportEmailVO(); + URL url = new URL(HTTPS_STR + hpUrl); + trustAllHttpsCertificates(2); + HttpsURLConnection conn = getConn(url); + conn.setHostnameVerifier(new Verifier()); + try { + conn.connect(); + Certificate[] serverCertificates = conn.getServerCertificates(); + for (int i = 0; i < serverCertificates.length; i++) { + X509Certificate certs = (X509Certificate) serverCertificates[i]; + if (getThumbPrint(certs, SHA1_AUTH_STR).toUpperCase().equals(fingerprint)) { + certExportEmailVO = deal(certs, certExportEmailVO); + certExportEmailVO.setCertificateChains(getCertChain(serverCertificates, getThumbPrint(certs, SHA1_AUTH_STR).toUpperCase())); + continue; + } + } + } catch (Exception e) { + } finally { + conn.disconnect(); + } + return certExportEmailVO; + } +} diff --git a/src/main/java/com/cym/utils/cert/DateUtils.java b/src/main/java/com/cym/utils/cert/DateUtils.java new file mode 100644 index 0000000..60815bc --- /dev/null +++ b/src/main/java/com/cym/utils/cert/DateUtils.java @@ -0,0 +1,928 @@ +package com.cym.utils.cert; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateFormatUtils; + +import com.google.common.collect.Maps; + +/** + * @ClassName DateUtils + * @Description 日期工具类 + * @Author ZhangSan_Plus + * @Date 2020/5/11 9:53 + * @Version 1.0 + **/ +public class DateUtils { + public final static int FORMAT_DEFAULT = 0; + + /** + * 日时字符串格式:长格式(如:年份用4位表示) + */ + public final static int FORMAT_LONG = 1; + + /** + * 日时字符串格式:短格式(如:年份用2位表示) + */ + public final static int FORMAT_SHORT = 2; + + /** + * 默认日期字符串格式 "yyyy-MM-dd" + */ + public final static String DATE_DEFAULT = "yyyy-MM-dd"; + /** + * 日期字符串格式 "yyyy" + */ + private final static String DATE_YYYY = "yyyy"; + /** + * 日期字符串格式 "mm" + */ + private final static String DATE_MM = "mm"; + /** + * 日期字符串格式 "dd" + */ + private final static String DATE_DD = "dd"; + /** + * 日期字符串格式 "yyyyMM" + */ + public final static String DATE_YYYYMM = "yyyyMM"; + + /** + * 日期字符串格式 "yyyyMMdd" + */ + public final static String DATE_YYYYMMDD = "yyyyMMdd"; + + /** + * 日期字符串格式 "yyyy-MM" + */ + public final static String DATE_YYYY_MM = "yyyy-MM"; + + /** + * 日期字符串格式 "yyyy-MM-dd" + */ + public final static String DATE_YYYY_MM_DD = "yyyy-MM-dd"; + + /** + * 默认日时字符串格式 "yyyy-MM-dd HH:mm:ss" + */ + public final static String DATETIME_DEFAULT = "yyyy-MM-dd HH:mm:ss"; + + /** + * 日时字符串格式 "yyyy-MM-dd HH:mm" + */ + public final static String DATETIME_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm"; + + /** + * 日时字符串格式 "yyyy-MM-dd HH:mm:ss" + */ + public final static String DATETIME_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + /** + * 日时字符串格式 "yyyy-MM-dd HH:mm:ss.SSS" + */ + public final static String DATETIME_YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS"; + + /** + * 默认时间字符串格式 "HH:mm:ss" + */ + public final static String TIME_DEFAULT = "HH:mm:ss"; + + /** + * 默认时间字符串格式 "HH:mm" + */ + public final static String TIME_HH_MM = "HH:mm"; + + /** + * 默认时间字符串格式 "HH:mm:ss" + */ + public final static String TIME_HH_MM_SS = "HH:mm:ss"; + /** + * 年 + */ + public static final long YEAR_NUMBER = 365; + /** + * 分 + */ + public static final long MINUTE_TTL = 60 * 1000L; + /** + * 时 + */ + public static final long HOURS_TTL = 60 * 60 * 1000L; + /** + * 半天 + */ + public static final long HALF_DAY_TTL = 12 * 60 * 60 * 1000L; + /** + * 天 + */ + public static final long DAY_TTL = 24 * 60 * 60L * 1000L; + /** + * 月 + */ + public static final long MONTH_TTL = 30 * 24 * 60 * 60 * 1000L; + public static final String DAY_BEFORE_STR = "天前"; + public static final String HOUR_BEFORE_STR = "小时前"; + public static final String MINUTE_BEFORE_STR = "分钟前"; + public static final String SECONDS_BEFORE_STR = "秒前"; + public static final String TIME_OPERATION_SRT = "TIME_OPERATION"; + public static final String TIME_STRAP_STR = "TIME_STRAP"; + + public static Integer getMonth(Integer month) { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + c.add(Calendar.MONTH, month); + return c.get(Calendar.YEAR); + } + + /** + * 将字符串转换成日期 + * + * @param str + * @return java.util.Date + * @author ZhangSan_Plus + * @description // + * @date 18:46 2022/2/28 + **/ + public static Date getDateToStr(String str) { + SimpleDateFormat format = new SimpleDateFormat(DATE_YYYY_MM_DD); + Date r = null; + try { + r = format.parse(str); + } catch (ParseException e) { + e.printStackTrace(); + } + return r; + } + + /** + * 时间计算 + * + * @param day + * @return + */ + public static String countData(String day) { + SimpleDateFormat format = new SimpleDateFormat(DATE_YYYY_MM_DD); + Calendar c = Calendar.getInstance(); + c.add(Calendar.YEAR, -Integer.parseInt(day)); + Date start = c.getTime(); + String startDay = format.format(start); + return startDay; + } + + /** + * 获取指定日期前一天日期 + * + * @param specifiedDay + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 17:04 2021/4/30 + **/ + public static String getSpecifiedDayBefore(String specifiedDay) { + Calendar c = Calendar.getInstance(); + Date date = null; + try { + date = new SimpleDateFormat(DATE_YYYY_MM_DD).parse(specifiedDay); + } catch (ParseException e) { + e.printStackTrace(); + } + c.setTime(date); + int day = c.get(Calendar.DATE); + c.set(Calendar.DATE, day - 1); + + String dayBefore = new SimpleDateFormat(DATE_YYYY_MM_DD).format(c.getTime()); + return dayBefore; + } + + public static String ToSevenDate(String specifiedDay) { + Calendar c = Calendar.getInstance(); + Date date = null; + try { + date = new SimpleDateFormat(DATE_YYYY_MM_DD).parse(specifiedDay); + } catch (ParseException e) { + e.printStackTrace(); + } + c.setTime(date); + int day = c.get(Calendar.DATE); + c.set(Calendar.DATE, day - 7); + + String dayBefore = new SimpleDateFormat(DATE_YYYY_MM_DD).format(c.getTime()); + return dayBefore; + } + + public static String ToThirtyDate(String specifiedDay) { + Calendar c = Calendar.getInstance(); + Date date = null; + try { + date = new SimpleDateFormat(DATE_YYYY_MM_DD).parse(specifiedDay); + } catch (ParseException e) { + e.printStackTrace(); + } + c.setTime(date); + int day = c.get(Calendar.DATE); + c.set(Calendar.DATE, day - 30); + + String dayBefore = new SimpleDateFormat(DATE_YYYY_MM_DD).format(c.getTime()); + return dayBefore; + } + + /** + * 获取指定日期后一天的数据 + * + * @param + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 17:35 2021/4/30 + **/ + public static String getSpecifiedDayAfter(String specifiedDay) { + Calendar c = Calendar.getInstance(); + Date date = null; + try { + date = new SimpleDateFormat(DATE_YYYY_MM_DD).parse(specifiedDay); + } catch (ParseException e) { + e.printStackTrace(); + } + c.setTime(date); + int day = c.get(Calendar.DATE); + c.set(Calendar.DATE, day + 1); + + String dayAfter = new SimpleDateFormat(DATE_YYYY_MM_DD).format(c.getTime()); + return dayAfter; + } + + /** + * Calculate the difference between two time + * + * @param startDate + * @param endDate + * @return int(两个时间相差的天数) + * @throws + * @Author ZhangSan_Plus + */ + public static int daysBetween(Date startDate, Date endDate) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + long sTime = calendar.getTimeInMillis(); + calendar.setTime(endDate); + long endTime = calendar.getTimeInMillis(); + long between_days = (endTime - sTime) / DAY_TTL; + return Integer.parseInt(String.valueOf(between_days)); + } + + /** + * 计算时间差距年月,并计算信用分 + * + * @param fromDate + * @param toDate + * @return java.util.Map<java.lang.String, java.lang.Object> + * @author ZhangSan_Plus + * @description // + * @date 9:34 2021/12/17 + **/ + public static Map<String, Object> dayCompare(Date fromDate, Date toDate, Integer type) { + Map<String, Object> maps = Maps.newHashMap(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(fromDate); + int startY = calendar.get(Calendar.YEAR); + int startM = calendar.get(Calendar.MONTH); + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(toDate); + int endY = calendar1.get(Calendar.YEAR); + int endM = calendar1.get(Calendar.MONTH); + int mos = (endY - startY) * 12 + (endM - startM); + int lyear = mos / 12; + int lmonth = mos % 12; + maps.put("year", lyear); + maps.put("month", lmonth); + if (type == 1) { + if (lyear != 0) { + if (lmonth == 0) { + maps.put("cred", lyear + "年"); + maps.put("sources", (lyear * 12 * 10 + lmonth * 10)); + } else { + maps.put("cred", lyear + "年" + lmonth + "个月"); + maps.put("sources", (lyear * 12 * 10 + lmonth * 10)); + } + } else { + if (lmonth == 0) { + lmonth = lmonth + 1; + } + maps.put("cred", lmonth + "个月"); + maps.put("sources", (lmonth * 10)); + } + } else { + maps.put("cred", lyear + 1 + "年"); + } + return maps; + } + + /** + * 时间戳差值计算 + * + * @param + * @return java.lang.String + * @throws + * @author liyangshuai + * @date 15:40 2021/6/9 + **/ + public static String getDistanceTime(long time1, long time2) { + long diff; + if (time1 < time2) { + diff = time2 - time1; + } else { + diff = time1 - time2; + } + long day = diff / (DAY_TTL); + long hour = (diff / (60 * 60 * 1000) - day * 24); + long min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); + long sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); + if (day != 0) { + if (day > 10) { + return sdf.format(new Date(time2)); + } + return day + "天前"; + } + if (hour != 0) { + return hour + HOUR_BEFORE_STR; + } + if (min != 0) { + return min + MINUTE_BEFORE_STR; + } + if (sec != 0) { + return sec + SECONDS_BEFORE_STR; + } + return ""; + } + + private static SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD); + private static SimpleDateFormat HMSSdf = new SimpleDateFormat(DATETIME_YYYY_MM_DD_HH_MM_SS); + + public static Map<String, Object> getDateUnixStr(String dateStr) throws ParseException { + Map<String, Object> map = Maps.newHashMap(); + long diff; + long time1 = System.currentTimeMillis(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(HMSSdf.parse(dateStr)); + calendar.add(Calendar.DAY_OF_MONTH, 0); + long time2 = calendar.getTime().getTime(); + map.put(TIME_STRAP_STR, time2); + if (time1 < time2) { + diff = time2 - time1; + } else { + diff = time1 - time2; + } + long day = diff / (DAY_TTL); + long hour = (diff / (60 * 60 * 1000) - day * 24); + long min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); + long sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); + if (day != 0) { + map.put(TIME_OPERATION_SRT, String.valueOf(sdf.format(new Date(time2)))); + return map; + } + if (hour != 0) { + map.put(TIME_OPERATION_SRT, hour + HOUR_BEFORE_STR); + return map; + } + if (min != 0) { + map.put(TIME_OPERATION_SRT, min + MINUTE_BEFORE_STR); + return map; + } + if (sec != 0) { + map.put(TIME_OPERATION_SRT, sec + SECONDS_BEFORE_STR); + return map; + } + return null; + } + + /** + * Gets the current system time + * + * @param + * @return java.util.Date + * @throws + * @author ZhangSan_Plus + * @date 17:36 2021/4/30 + **/ + public static Date getNewDate() { + SimpleDateFormat df = new SimpleDateFormat(DATETIME_YYYY_MM_DD_HH_MM_SS); + Date newDate = null; + try { + newDate = df.parse(df.format(new Date())); + } catch (ParseException e) { + e.printStackTrace(); + } + return newDate; + } + + /** + * Get the date string format by default(yyyy-MM-dd) pattern can "yyyy-MM-dd" + * "HH:mm:ss" "E" + * + * @param date + * @param pattern + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 17:37 2021/4/30 + **/ + public static String formatDate(Date date, Object... pattern) { + String formatDate = null; + if (pattern != null && pattern.length > 0) { + formatDate = DateFormatUtils.format(date, pattern[0].toString()); + } else { + formatDate = DateFormatUtils.format(date, DATE_YYYY_MM_DD); + } + return formatDate; + } + + /** + * 根据指定的时间催获取时间 + * + * @param dateUnix + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 11:00 2021/7/5 + **/ + public static String getDateByDateUnix(Long dateUnix) { + return sdf.format(new Date(dateUnix * 1000)); + } + + /** + * 获取指定日期 指定天数的字符串值 + * + * @param date + * @param days + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 14:39 2021/5/6 + **/ + public static String getDisposeDate(Date date, Integer days) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH, days); + return DateFormatUtils.format(calendar.getTime(), DATE_YYYY_MM_DD); + } + + public static Date getDisposeToDate(Date date, Integer days) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH, days); + return calendar.getTime(); + } + + public static Date getDisposeToYear(Date date, Integer year) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.YEAR, year); + return calendar.getTime(); + } + + /** + * 获取指定时间的时间戳 + * <p> + * (int) (System.currentTimeMillis() / 1000) https://tool.lu/timestamp/ + * + * </p> + * + * @param + * @return long + * @throws + * @author liyangshuai + * @date 15:28 2021/6/9 + **/ + public static long getUnixNum(Date date, Integer days) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH, days); + long time = calendar.getTime().getTime() / 1000; + return time; + } + + /** + * get the current year str format(yyyy) + * + * @param + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 17:49 2021/4/30 + **/ + public static String getYear() { + return formatDate(new Date(), DATE_YYYY); + } + + /** + * get the current month format(MM) + * + * @param + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 17:52 2021/4/30 + **/ + public static String getMonth() { + return formatDate(new Date(), DATE_MM); + } + + /** + * get the current day format(dd) + * + * @param + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 17:52 2021/4/30 + **/ + public static String getDay() { + return formatDate(new Date(), DATE_DD); + } + + /** + * 获取当前时间的字符串形式(例如;"201806291135") + * + * @return 年月日时分 + */ + public static String getDateToString() { + Calendar c = Calendar.getInstance(); + return getYear() + getMonth() + getDay() + c.get(Calendar.HOUR_OF_DAY) + c.get(Calendar.MINUTE); + } + + /** + * Get the number of years in the past + * + * @param date + * @return java.lang.Long + * @throws + * @author ZhangSan_Plus + * @date 17:37 2021/4/30 + **/ + public static Long pastYear(Date date) { + return date == null ? null : pastDays(date) / YEAR_NUMBER; + } + + /** + * Get the number of days in the past + * + * @param date + * @return long + * @throws + * @author ZhangSan_Plus + * @date 17:38 2021/4/30 + **/ + public static long pastDays(Date date) { + long t = System.currentTimeMillis() - date.getTime(); + return t / DAY_TTL; + } + + /** + * 获取过去的小时 + * + * @param date + * @return long + * @throws + * @author ZhangSan_Plus + * @date 17:38 2021/4/30 + **/ + public static long pastHour(Date date) { + long t = System.currentTimeMillis() - date.getTime(); + return t / HOURS_TTL; + } + + /** + * return To date the number of days in the past + * + * @param date + * @return long + * @throws + * @author ZhangSan_Plus + * @date 17:39 2021/4/30 + **/ + public static long pastMinutes(Date date) { + long t = System.currentTimeMillis() - date.getTime(); + return t / MINUTE_TTL; + } + + /** + * Get the number of days between two dates + * + * @param before + * @param after + * @return double + * @throws + * @author ZhangSan_Plus + * @date 17:39 2021/4/30 + **/ + public static double getDistanceOfTwoDate(Date before, Date after) { + long beforeTime = before.getTime(); + long afterTime = after.getTime(); + return (afterTime - beforeTime) / DAY_TTL; + } + + /** + * 通过身份证号码获取出生日期、性别、年齡 + * + * @param certificateNo + * @return 返回的出生日期格式:1990-01-01 性别格式:2-女,1-男 + */ + public static Map<String, String> getBirAgeSex(String certificateNo) { + String birthday = ""; + String age = ""; + String sexCode = ""; + int year = Calendar.getInstance().get(Calendar.YEAR); + char[] number = certificateNo.toCharArray(); + boolean flag = true; + if (number.length == 15) { + for (int x = 0; x < number.length; x++) { + if (!flag) { + return new HashMap<>(10); + } + flag = Character.isDigit(number[x]); + } + } else if (number.length == 18) { + for (int x = 0; x < number.length - 1; x++) { + if (!flag) { + return new HashMap<>(10); + } + flag = Character.isDigit(number[x]); + + } + } + if (flag && certificateNo.length() == 15) { + birthday = "19" + certificateNo.substring(6, 8) + "-" + certificateNo.substring(8, 10) + "-" + certificateNo.substring(10, 12); + sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 3, certificateNo.length())) % 2 == 0 ? "2" : "1"; + age = (year - Integer.parseInt("19" + certificateNo.substring(6, 8))) + ""; + } else { + birthday = certificateNo.substring(6, 10) + "-" + certificateNo.substring(10, 12) + "-" + certificateNo.substring(12, 14); + sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 4, certificateNo.length() - 1)) % 2 == 0 ? "2" : "1"; + age = (year - Integer.parseInt(certificateNo.substring(6, 10))) + ""; + } + Map<String, String> map = new HashMap<>(); + map.put("birthday", birthday); + map.put("age", age); + map.put("sexCode", sexCode); + return map; + } + + /** + * 根据身份证的号码算出当前身份证持有者的年龄 18位身份证 + * + * @return + * @throws Exception + * @author ZhangSan_Plus + */ + public static int getCarAge(String birthday) { + // 得到年份 + String year = birthday.substring(0, 4); + // 得到月份 + String yue = birthday.substring(4, 6); + // 得到当前的系统时间 + Date date = new Date(); + SimpleDateFormat format = new SimpleDateFormat(DATE_YYYY_MM_DD); + // 当前年份 + String fYear = format.format(date).substring(0, 4); + // 月份 + String fYue = format.format(date).substring(5, 7); + int age = 0; + // 当前月份大于用户出身的月份表示已过生 + if (Integer.parseInt(yue) <= Integer.parseInt(fYue)) { + age = Integer.parseInt(fYear) - Integer.parseInt(year) + 1; + } else {// 当前用户还没过生 + age = Integer.parseInt(fYear) - Integer.parseInt(year); + } + return age; + } + + /** + * 根据身份证获取性别 + */ + public static String getCarSex(String CardCode) { + String sex; + if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) { + // 判断性别 + sex = "2"; + } else { + sex = "1"; + } + return sex; + } + + /** + * 根据传入的日历型日期,计算出执行的时间值(精确版) + * + * @param beginTime + * @param endTime + * @return + */ + public static String countExecTimeToString_exact(Calendar beginTime, Calendar endTime) {// 计算两个日期类型之间的差值(单位:毫秒) + Long timeDispersion = endTime.getTimeInMillis() - beginTime.getTimeInMillis(); + String tmpMsg = "耗时: "; + // 记录时间的数值(几小时、几分、几秒) + int timeNum = 0; + // 判断是否足够一小时 + if (timeDispersion >= (HOURS_TTL)) { // 若足够则计算有几小时 + timeNum = (int) (timeDispersion / HOURS_TTL); + tmpMsg += timeNum + "时"; + timeDispersion = timeDispersion - (timeNum * HOURS_TTL); + } + // 判断是否足够一分钟 + if (timeDispersion >= (MINUTE_TTL)) {// 若足够则计算有几分钟 + timeNum = (int) (timeDispersion / MINUTE_TTL); + tmpMsg += timeNum + "分"; + timeDispersion = timeDispersion - (timeNum * MINUTE_TTL); + } + // 判断是否足够一秒 + if (timeDispersion >= 1000) { + timeNum = (int) (timeDispersion / 1000); + tmpMsg += timeNum + "秒"; + timeDispersion = timeDispersion - timeNum * 1000; + } + tmpMsg += timeDispersion + "毫秒"; + return tmpMsg; + } + + /** + * 直接返回毫秒数 + * + * @param beginTime + * @param endTime + * @return java.lang.Long + * @throws + * @author ZhangSan_Plus + * @date 14:43 2021/5/6 + **/ + public static Long countMsDataTime(Calendar beginTime, Calendar endTime) { + return (endTime.getTimeInMillis() - beginTime.getTimeInMillis()); + } + + /** + * 根据传入的long类型日期,计算出执行的时间值(精确版) + * + * @param beginTime + * @param endTime + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 14:44 2021/5/6 + **/ + public static String countMsDataTimeToString(Long beginTime, Long endTime) { + Long timeDispersion = endTime - beginTime; + String tmpMsg = "耗时: "; + int timeNum = 0; + if (timeDispersion >= (HOURS_TTL)) { + timeNum = (int) (timeDispersion / (HOURS_TTL)); + tmpMsg += timeNum + "时"; + timeDispersion = timeDispersion - (timeNum * HOURS_TTL); + } + if (timeDispersion >= (MINUTE_TTL)) { + timeNum = (int) (timeDispersion / (MINUTE_TTL)); + tmpMsg += timeNum + "分"; + timeDispersion = timeDispersion - (timeNum * MINUTE_TTL); + } + if (timeDispersion >= 1000) { + timeNum = (int) (timeDispersion / 1000); + tmpMsg += timeNum + "秒"; + timeDispersion = timeDispersion - timeNum * 1000; + } + tmpMsg += timeDispersion + "毫秒"; + return tmpMsg; + + } + + /** + * 获取指定年度全部月份集合 + * + * @param year + * @return java.util.List<java.lang.String> + * @throws + * @author ZhangSan_Plus + * @date 14:45 2021/5/6 + **/ + public static List<String> getYearMonthByYear(String year) { + List<String> monthList = new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + monthList.add(year + "-" + (i < 10 ? "0" : "") + i); + } + return monthList; + } + + /** + * 获取下个月 + * + * @param dateStr + * @param format + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 14:45 2021/5/6 + **/ + public static String getPreMonth(String dateStr, String format) { + String preMonth = ""; + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date date; + try { + date = sdf.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.MONTH, 1); + sdf.format(calendar.getTime()); + + } catch (ParseException e) { + // Auto-generated catch block + e.printStackTrace(); + } + return preMonth; + } + + /** + * 获取下个月str + * + * @param dateStr + * @param format + * @return java.lang.String + * @throws + * @author ZhangSan_Plus + * @date 14:46 2021/5/6 + **/ + public static String getPreMonthFormat(String dateStr, String format) { + String preMonth = ""; + SimpleDateFormat sdf = new SimpleDateFormat(format); + Date date; + try { + date = sdf.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.MONTH, 1); + preMonth = sdf.format(calendar.getTime()); + + } catch (ParseException e) { + e.printStackTrace(); + } + return preMonth; + } + + /** + * 日期比较 + * + * @param + * @return boolean + * @throws + * @author ZhangSan_Plus + * @date 14:47 2021/5/6 + **/ + public static boolean dateSize(String aDate, String bDate, SimpleDateFormat format) { + boolean str = false; + try { + if (StringUtils.isBlank(aDate) && StringUtils.isBlank(bDate)) { + Date date1 = format.parse(aDate); + Date date2 = format.parse(bDate); + str = date1.after(date2); + } + } catch (ParseException e) { + // Auto-generated catch block + e.printStackTrace(); + } + return str; + } + + public static Map<Integer, Long> timestamp() { + Map<Integer, Long> timeMap = Maps.newHashMap(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + int[] yearArr = new int[] { 1, 1, 1, 2, 5, 1 }; + int[] arr = new int[] { 1, 2, 3, 5, 10, 11 }; + for (int i = 0; i < yearArr.length; i++) { + calendar.add(Calendar.YEAR, -yearArr[i]); + timeMap.put(arr[i], calendar.getTimeInMillis()); + } + return timeMap; + } + + public static Date getDateToOne() { + Date date = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.MONTH, 1); + /** + * 1. getActualMinimum(Calendar.DAY_OF_MONTH)是拿到当月最小天数作为第一天 + * + * 2. calendar.set(Calendar.DAY_OF_MONTH, 1)也能获取当月第一天 + */ + calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); + System.out.println(calendar.getTime()); + String s = DateUtils.formatDate(calendar.getTime(), DateUtils.DATE_YYYY_MM_DD); + System.out.println(s); + return calendar.getTime(); + } + +} diff --git a/src/main/java/com/cym/utils/cert/PunyUtils.java b/src/main/java/com/cym/utils/cert/PunyUtils.java new file mode 100644 index 0000000..a017626 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/PunyUtils.java @@ -0,0 +1,194 @@ +package com.cym.utils.cert; + +/** + * + * + * @author czh + * @data 2020/10/20 10:47 + */ +public class PunyUtils { + static int TMIN = 1; + static int TMAX = 26; + static int BASE = 36; + static int INITIAL_N = 128; + static int INITIAL_BIAS = 72; + static int DAMP = 700; + static int SKEW = 38; + static char DELIMITER = '-'; + + + public static String encode(String input) throws Exception { + int n = INITIAL_N; + int delta = 0; + int bias = INITIAL_BIAS; + StringBuilder output = new StringBuilder(); + // Copy all basic code points to the output + int b = 0; + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + if (isBasic(c)) { + output.append(c); + b++; + } + } + // Append delimiter + if (b > 0) { + output.append(DELIMITER); + } + int h = b; + while (h < input.length()) { + int m = Integer.MAX_VALUE; + // Find the minimum code point >= n + for (int i = 0; i < input.length(); i++) { + int c = input.charAt(i); + if (c >= n && c < m) { + m = c; + } + } + if (m - n > (Integer.MAX_VALUE - delta) / (h + 1)) { + throw new Exception("OVERFLOW"); + } + delta = delta + (m - n) * (h + 1); + n = m; + for (int j = 0; j < input.length(); j++) { + int c = input.charAt(j); + if (c < n) { + delta++; + if (0 == delta) { + throw new Exception("OVERFLOW"); + } + } + if (c == n) { + int q = delta; + for (int k = BASE;; k += BASE) { + int t; + if (k <= bias) { + t = TMIN; + } else if (k >= bias + TMAX) { + t = TMAX; + } else { + t = k - bias; + } + if (q < t) { + break; + } + output.append((char) digit2codepoint(t + (q - t) % (BASE - t))); + q = (q - t) / (BASE - t); + } + output.append((char) digit2codepoint(q)); + bias = adapt(delta, h + 1, h == b); + delta = 0; + h++; + } + } + delta++; + n++; + } + return output.toString(); + } + /** + * Decode a punycoded string. + * + * @param input + * Punycode string + * + * @return Unicode string. + */ + public static String decode(String input) throws Exception { + int n = INITIAL_N; + int i = 0; + int bias = INITIAL_BIAS; + StringBuilder output = new StringBuilder(); + int d = input.lastIndexOf(DELIMITER); + if (d > 0) { + for (int j = 0; j < d; j++) { + char c = input.charAt(j); + if (!isBasic(c)) { + throw new Exception("BAD_INPUT"); + } + output.append(c); + } + d++; + } else { + d = 0; + } + while (d < input.length()) { + int oldi = i; + int w = 1; + for (int k = BASE;; k += BASE) { + if (d == input.length()) { + throw new Exception("BAD_INPUT"); + } + int c = input.charAt(d++); + int digit = codepoint2digit(c); + if (digit > (Integer.MAX_VALUE - i) / w) { + throw new Exception("OVERFLOW"); + } + i = i + digit * w; + int t; + if (k <= bias) { + t = TMIN; + } else if (k >= bias + TMAX) { + t = TMAX; + } else { + t = k - bias; + } + if (digit < t) { + break; + } + w = w * (BASE - t); + } + bias = adapt(i - oldi, output.length() + 1, oldi == 0); + if (i / (output.length() + 1) > Integer.MAX_VALUE - n) { + throw new Exception("OVERFLOW"); + } + n = n + i / (output.length() + 1); + i = i % (output.length() + 1); + output.insert(i, (char) n); + i++; + } + return output.toString(); + } + + public static int adapt(int delta, int numpoints, boolean first) { + if (first) { + delta = delta / DAMP; + } else { + delta = delta / 2; + } + delta = delta + (delta / numpoints); + int k = 0; + while (delta > ((BASE - TMIN) * TMAX) / 2) { + delta = delta / (BASE - TMIN); + k = k + BASE; + } + return k + ((BASE - TMIN + 1) * delta) / (delta + SKEW); + } + + public static boolean isBasic(char c) { + return c < 0x80; + } + public static int digit2codepoint(int d) throws Exception { + if (d < 26) { + // 0..25 : 'a'..'z' + return d + 'a'; + } else if (d < 36) { + // 26..35 : '0'..'9'; + return d - 26 + '0'; + } else { + throw new Exception("BAD_INPUT"); + } + } + public static int codepoint2digit(int c) throws Exception { + if (c - '0' < 10) { + // '0'..'9' : 26..35 + return c - '0' + 26; + } else if (c - 'a' < 26) { + // 'a'..'z' : 0..25 + return c - 'a'; + } else { + throw new Exception("BAD_INPUT"); + } + } + +} diff --git a/src/main/java/com/cym/utils/cert/ssl/AccessDescriptions.java b/src/main/java/com/cym/utils/cert/ssl/AccessDescriptions.java new file mode 100644 index 0000000..94b40a1 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AccessDescriptions.java @@ -0,0 +1,21 @@ + +package com.cym.utils.cert.ssl; +public class AccessDescriptions +{ + private AccessLocation accessLocation; + + private AccessMethod accessMethod; + + public void setAccessLocation(AccessLocation accessLocation){ + this.accessLocation = accessLocation; + } + public AccessLocation getAccessLocation(){ + return this.accessLocation; + } + public void setAccessMethod(AccessMethod accessMethod){ + this.accessMethod = accessMethod; + } + public AccessMethod getAccessMethod(){ + return this.accessMethod; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/AccessLocation.java b/src/main/java/com/cym/utils/cert/ssl/AccessLocation.java new file mode 100644 index 0000000..4fc42b3 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AccessLocation.java @@ -0,0 +1,20 @@ +package com.cym.utils.cert.ssl; +public class AccessLocation +{ + private Name name; + + private int type; + + public void setName(Name name){ + this.name = name; + } + public Name getName(){ + return this.name; + } + public void setType(int type){ + this.type = type; + } + public int getType(){ + return this.type; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/AccessMethod.java b/src/main/java/com/cym/utils/cert/ssl/AccessMethod.java new file mode 100644 index 0000000..aaac5a5 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AccessMethod.java @@ -0,0 +1,4 @@ +package com.cym.utils.cert.ssl; +public class AccessMethod +{ +} diff --git a/src/main/java/com/cym/utils/cert/ssl/AlgorithmId.java b/src/main/java/com/cym/utils/cert/ssl/AlgorithmId.java new file mode 100644 index 0000000..1d4474e --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AlgorithmId.java @@ -0,0 +1,26 @@ +package com.cym.utils.cert.ssl; + +import lombok.Data; + +@Data +public class AlgorithmId { + private String name; + + private OID oID; + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + public void setOID(OID oID) { + this.oID = oID; + } + + public OID getOID() { + return this.oID; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/AuthKeyId.java b/src/main/java/com/cym/utils/cert/ssl/AuthKeyId.java new file mode 100644 index 0000000..8c978dd --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AuthKeyId.java @@ -0,0 +1,12 @@ +package com.cym.utils.cert.ssl; +public class AuthKeyId +{ + private String identifier; + + public void setIdentifier(String identifier){ + this.identifier = identifier; + } + public String getIdentifier(){ + return this.identifier; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/AuthorityInfoAccessExtension.java b/src/main/java/com/cym/utils/cert/ssl/AuthorityInfoAccessExtension.java new file mode 100644 index 0000000..4bb0514 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AuthorityInfoAccessExtension.java @@ -0,0 +1,70 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class AuthorityInfoAccessExtension +{ + private List<AccessDescriptions> accessDescriptions; + + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setAccessDescriptions(List<AccessDescriptions> accessDescriptions){ + this.accessDescriptions = accessDescriptions; + } + public List<AccessDescriptions> getAccessDescriptions(){ + return this.accessDescriptions; + } + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/AuthorityKeyIdentifierExtension.java b/src/main/java/com/cym/utils/cert/ssl/AuthorityKeyIdentifierExtension.java new file mode 100644 index 0000000..a9184c0 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/AuthorityKeyIdentifierExtension.java @@ -0,0 +1,62 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class AuthorityKeyIdentifierExtension +{ + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/BasicConstraintsExtension.java b/src/main/java/com/cym/utils/cert/ssl/BasicConstraintsExtension.java new file mode 100644 index 0000000..0940e25 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/BasicConstraintsExtension.java @@ -0,0 +1,62 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class BasicConstraintsExtension +{ + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/CRLDistributionPointsExtension.java b/src/main/java/com/cym/utils/cert/ssl/CRLDistributionPointsExtension.java new file mode 100644 index 0000000..b3da3f6 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/CRLDistributionPointsExtension.java @@ -0,0 +1,62 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class CRLDistributionPointsExtension +{ + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/CertificatePoliciesExtension.java b/src/main/java/com/cym/utils/cert/ssl/CertificatePoliciesExtension.java new file mode 100644 index 0000000..3e0b739 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/CertificatePoliciesExtension.java @@ -0,0 +1,62 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class CertificatePoliciesExtension +{ + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/ExtendedKeyUsageExtension.java b/src/main/java/com/cym/utils/cert/ssl/ExtendedKeyUsageExtension.java new file mode 100644 index 0000000..8ed7911 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/ExtendedKeyUsageExtension.java @@ -0,0 +1,70 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class ExtendedKeyUsageExtension +{ + private boolean critical; + + private List<String> elements; + + private List<String> extendedKeyUsage; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtendedKeyUsage(List<String> extendedKeyUsage){ + this.extendedKeyUsage = extendedKeyUsage; + } + public List<String> getExtendedKeyUsage(){ + return this.extendedKeyUsage; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/ExtensionId.java b/src/main/java/com/cym/utils/cert/ssl/ExtensionId.java new file mode 100644 index 0000000..cee5e14 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/ExtensionId.java @@ -0,0 +1,4 @@ +package com.cym.utils.cert.ssl; +public class ExtensionId +{ +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/HostObject.java b/src/main/java/com/cym/utils/cert/ssl/HostObject.java new file mode 100644 index 0000000..bc0f3c7 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/HostObject.java @@ -0,0 +1,21 @@ +package com.cym.utils.cert.ssl; + +public class HostObject +{ + private String name; + + private int type; + + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setType(int type){ + this.type = type; + } + public int getType(){ + return this.type; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/IssuerDN.java b/src/main/java/com/cym/utils/cert/ssl/IssuerDN.java new file mode 100644 index 0000000..d345441 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/IssuerDN.java @@ -0,0 +1,100 @@ +package com.cym.utils.cert.ssl; +public class IssuerDN +{ + private String commonName; + + private String country; + + private boolean empty; + + private String encoded; + + private String encodedInternal; + + private String name; + + private String organization; + + private String organizationalUnit; + + private String rFC1779Name; + + private String rFC2253CanonicalName; + + private String rFC2253Name; + + private int type; + + public void setCommonName(String commonName){ + this.commonName = commonName; + } + public String getCommonName(){ + return this.commonName; + } + public void setCountry(String country){ + this.country = country; + } + public String getCountry(){ + return this.country; + } + public void setEmpty(boolean empty){ + this.empty = empty; + } + public boolean getEmpty(){ + return this.empty; + } + public void setEncoded(String encoded){ + this.encoded = encoded; + } + public String getEncoded(){ + return this.encoded; + } + public void setEncodedInternal(String encodedInternal){ + this.encodedInternal = encodedInternal; + } + public String getEncodedInternal(){ + return this.encodedInternal; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setOrganization(String organization){ + this.organization = organization; + } + public String getOrganization(){ + return this.organization; + } + public void setOrganizationalUnit(String organizationalUnit){ + this.organizationalUnit = organizationalUnit; + } + public String getOrganizationalUnit(){ + return this.organizationalUnit; + } + public void setRFC1779Name(String rFC1779Name){ + this.rFC1779Name = rFC1779Name; + } + public String getRFC1779Name(){ + return this.rFC1779Name; + } + public void setRFC2253CanonicalName(String rFC2253CanonicalName){ + this.rFC2253CanonicalName = rFC2253CanonicalName; + } + public String getRFC2253CanonicalName(){ + return this.rFC2253CanonicalName; + } + public void setRFC2253Name(String rFC2253Name){ + this.rFC2253Name = rFC2253Name; + } + public String getRFC2253Name(){ + return this.rFC2253Name; + } + public void setType(int type){ + this.type = type; + } + public int getType(){ + return this.type; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/Name.java b/src/main/java/com/cym/utils/cert/ssl/Name.java new file mode 100644 index 0000000..c717e31 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/Name.java @@ -0,0 +1,52 @@ +package com.cym.utils.cert.ssl; +public class Name +{ + private String host; + + private HostObject hostObject; + + private String name; + + private String scheme; + + private int type; + + private String uRI; + + public void setHost(String host){ + this.host = host; + } + public String getHost(){ + return this.host; + } + public void setHostObject(HostObject hostObject){ + this.hostObject = hostObject; + } + public HostObject getHostObject(){ + return this.hostObject; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setScheme(String scheme){ + this.scheme = scheme; + } + public String getScheme(){ + return this.scheme; + } + public void setType(int type){ + this.type = type; + } + public int getType(){ + return this.type; + } + public void setURI(String uRI){ + this.uRI = uRI; + } + public String getURI(){ + return this.uRI; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/OID.java b/src/main/java/com/cym/utils/cert/ssl/OID.java new file mode 100644 index 0000000..2ed3b15 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/OID.java @@ -0,0 +1,4 @@ +package com.cym.utils.cert.ssl; +public class OID +{ +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/PublicKey.java b/src/main/java/com/cym/utils/cert/ssl/PublicKey.java new file mode 100644 index 0000000..e4c7674 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/PublicKey.java @@ -0,0 +1,21 @@ +package com.cym.utils.cert.ssl; + +import lombok.Data; + +@Data +public class PublicKey { + private String algorithm; + + private AlgorithmId algorithmId; + + private String encoded; + + private String encodedInternal; + + private String format; + + private String modulus; + + private int publicExponent; + +} diff --git a/src/main/java/com/cym/utils/cert/ssl/Root.java b/src/main/java/com/cym/utils/cert/ssl/Root.java new file mode 100644 index 0000000..1a4b932 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/Root.java @@ -0,0 +1,77 @@ +package com.cym.utils.cert.ssl; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class Root { + private AuthKeyId authKeyId; + + private AuthorityInfoAccessExtension authorityInfoAccessExtension; + + private AuthorityKeyIdentifierExtension authorityKeyIdentifierExtension; + + private int basicConstraints; + + private BasicConstraintsExtension basicConstraintsExtension; + + private CRLDistributionPointsExtension cRLDistributionPointsExtension; + + private CertificatePoliciesExtension certificatePoliciesExtension; + + private List<String> criticalExtensionOIDs; + + private List<String> elements; + + private String encoded; + + private String encodedInternal; + + private List<String> extendedKeyUsage; + + private ExtendedKeyUsageExtension extendedKeyUsageExtension; + + private IssuerDN issuerDN; + + private List<Boolean> keyUsage; + + private String name; + + private List<String> nonCriticalExtensionOIDs; + + private Date notAfter; + + private Date notBefore; + + private PublicKey publicKey; + + private double serialNumber; + + private SerialNumberObject serialNumberObject; + + private String sigAlgName; + + private String sigAlgOID; + + private String signature; + + private SubjectAlternativeNameExtension subjectAlternativeNameExtension; + + private List<List<String>> subjectAlternativeNames; + + private SubjectDN subjectDN; + + private SubjectKeyId subjectKeyId; + + private SubjectKeyIdentifierExtension subjectKeyIdentifierExtension; + + private String tBSCertificate; + + private String type; + + private int version; + + +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/SSLBasicInfo.java b/src/main/java/com/cym/utils/cert/ssl/SSLBasicInfo.java new file mode 100644 index 0000000..5f4089d --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SSLBasicInfo.java @@ -0,0 +1,72 @@ +package com.cym.utils.cert.ssl; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.util.Date; + +/** + * + * + * @author czh + * @data 2020/10/10 9:26 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Table(name = "tb_ssl_basic_info") +public class SSLBasicInfo { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + private String domain; + + //序列号 + private String serialNum; + //版本 + private String version; + //加密算法 + private String encryptionAlgorithm; + //签名算法 + private String signatureAlgorithm; + + //证书类型 + private String certificateType; + //证书品牌 + private String certificateBrand; + //sha256指纹 + private String sha256Fingerprint; + //签发时间 + private Date issueDate; + //到期时间 + private Date deadlineDate; + + + + private String themeAll; + + private String themeCn; + private String themeO; + private String themeOu; + private String themeL; + private String themeSt; + private String themeC; + + + private String issueAll; + + private String issueCn; + private String issueO; + private String issueC; + + private Date createTime; + private Date updateTime; +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SSLDetailsInfo.java b/src/main/java/com/cym/utils/cert/ssl/SSLDetailsInfo.java new file mode 100644 index 0000000..c9671ad --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SSLDetailsInfo.java @@ -0,0 +1,47 @@ +package com.cym.utils.cert.ssl; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; + +/** + * + * + * @author czh + * @data 2020/8/11 11:44 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class SSLDetailsInfo { + + //序列号 + private String serialNum; + //版本 + private String version; + //加密算法 + private String encryptionAlgorithm; + //签名算法 + private String signatureAlgorithm; + + //证书类型 + private String certificateType; + //证书品牌 + private String certificateBrand; + //sha256指纹 + private String sha256Fingerprint; + //签发时间 + private Date issueDate; + //到期时间 + private Date deadlineDate; + //有效期 + private String validPeriod; + //sans + private List<String> sansList; + +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SSLInfo.java b/src/main/java/com/cym/utils/cert/ssl/SSLInfo.java new file mode 100644 index 0000000..ae5d78f --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SSLInfo.java @@ -0,0 +1,26 @@ +package com.cym.utils.cert.ssl; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * + * + * @author czh + * @data 2020/8/11 11:44 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class SSLInfo { + private SSLSubjectInfo sslSubjectInfo; + private SSLIssuerInfo sslIssuerInfo; + private SSLDetailsInfo sslDetailsInfo; + private String subDN; + private String issDN; + private String webUrl; + +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SSLIssuerInfo.java b/src/main/java/com/cym/utils/cert/ssl/SSLIssuerInfo.java new file mode 100644 index 0000000..d7765f4 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SSLIssuerInfo.java @@ -0,0 +1,22 @@ +package com.cym.utils.cert.ssl; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * + * + * @author czh + * @data 2020/8/11 11:44 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class SSLIssuerInfo { + private String cn; + private String o; + private String c; +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SSLSubjectInfo.java b/src/main/java/com/cym/utils/cert/ssl/SSLSubjectInfo.java new file mode 100644 index 0000000..07faf50 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SSLSubjectInfo.java @@ -0,0 +1,25 @@ +package com.cym.utils.cert.ssl; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * + * + * @author czh + * @data 2020/8/11 11:44 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class SSLSubjectInfo { + private String cn; + private String o; + private String ou; + private String l; + private String st; + private String c; +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SerialNumberObject.java b/src/main/java/com/cym/utils/cert/ssl/SerialNumberObject.java new file mode 100644 index 0000000..3f9d675 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SerialNumberObject.java @@ -0,0 +1,12 @@ +package com.cym.utils.cert.ssl; +public class SerialNumberObject +{ + private double number; + + public void setNumber(double number){ + this.number = number; + } + public double getNumber(){ + return this.number; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/SubjectAlternativeNameExtension.java b/src/main/java/com/cym/utils/cert/ssl/SubjectAlternativeNameExtension.java new file mode 100644 index 0000000..f8bf3fe --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SubjectAlternativeNameExtension.java @@ -0,0 +1,62 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class SubjectAlternativeNameExtension +{ + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/SubjectDN.java b/src/main/java/com/cym/utils/cert/ssl/SubjectDN.java new file mode 100644 index 0000000..cedaaf2 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SubjectDN.java @@ -0,0 +1,100 @@ +package com.cym.utils.cert.ssl; +public class SubjectDN +{ + private String commonName; + + private String country; + + private boolean empty; + + private String encoded; + + private String encodedInternal; + + private String name; + + private String organization; + + private String rFC1779Name; + + private String rFC2253CanonicalName; + + private String rFC2253Name; + + private String state; + + private int type; + + public void setCommonName(String commonName){ + this.commonName = commonName; + } + public String getCommonName(){ + return this.commonName; + } + public void setCountry(String country){ + this.country = country; + } + public String getCountry(){ + return this.country; + } + public void setEmpty(boolean empty){ + this.empty = empty; + } + public boolean getEmpty(){ + return this.empty; + } + public void setEncoded(String encoded){ + this.encoded = encoded; + } + public String getEncoded(){ + return this.encoded; + } + public void setEncodedInternal(String encodedInternal){ + this.encodedInternal = encodedInternal; + } + public String getEncodedInternal(){ + return this.encodedInternal; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setOrganization(String organization){ + this.organization = organization; + } + public String getOrganization(){ + return this.organization; + } + public void setRFC1779Name(String rFC1779Name){ + this.rFC1779Name = rFC1779Name; + } + public String getRFC1779Name(){ + return this.rFC1779Name; + } + public void setRFC2253CanonicalName(String rFC2253CanonicalName){ + this.rFC2253CanonicalName = rFC2253CanonicalName; + } + public String getRFC2253CanonicalName(){ + return this.rFC2253CanonicalName; + } + public void setRFC2253Name(String rFC2253Name){ + this.rFC2253Name = rFC2253Name; + } + public String getRFC2253Name(){ + return this.rFC2253Name; + } + public void setState(String state){ + this.state = state; + } + public String getState(){ + return this.state; + } + public void setType(int type){ + this.type = type; + } + public int getType(){ + return this.type; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SubjectKeyId.java b/src/main/java/com/cym/utils/cert/ssl/SubjectKeyId.java new file mode 100644 index 0000000..9cc9029 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SubjectKeyId.java @@ -0,0 +1,12 @@ +package com.cym.utils.cert.ssl; +public class SubjectKeyId +{ + private String identifier; + + public void setIdentifier(String identifier){ + this.identifier = identifier; + } + public String getIdentifier(){ + return this.identifier; + } +} diff --git a/src/main/java/com/cym/utils/cert/ssl/SubjectKeyIdentifierExtension.java b/src/main/java/com/cym/utils/cert/ssl/SubjectKeyIdentifierExtension.java new file mode 100644 index 0000000..2524f2e --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/SubjectKeyIdentifierExtension.java @@ -0,0 +1,62 @@ +package com.cym.utils.cert.ssl; +import java.util.List; + +public class SubjectKeyIdentifierExtension +{ + private boolean critical; + + private List<String> elements; + + private ExtensionId extensionId; + + private String extensionValue; + + private String id; + + private String name; + + private String value; + + public void setCritical(boolean critical){ + this.critical = critical; + } + public boolean getCritical(){ + return this.critical; + } + public void setElements(List<String> elements){ + this.elements = elements; + } + public List<String> getElements(){ + return this.elements; + } + public void setExtensionId(ExtensionId extensionId){ + this.extensionId = extensionId; + } + public ExtensionId getExtensionId(){ + return this.extensionId; + } + public void setExtensionValue(String extensionValue){ + this.extensionValue = extensionValue; + } + public String getExtensionValue(){ + return this.extensionValue; + } + public void setId(String id){ + this.id = id; + } + public String getId(){ + return this.id; + } + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + public void setValue(String value){ + this.value = value; + } + public String getValue(){ + return this.value; + } +} \ No newline at end of file diff --git a/src/main/java/com/cym/utils/cert/ssl/XccSSLInfo.java b/src/main/java/com/cym/utils/cert/ssl/XccSSLInfo.java new file mode 100644 index 0000000..5940341 --- /dev/null +++ b/src/main/java/com/cym/utils/cert/ssl/XccSSLInfo.java @@ -0,0 +1,79 @@ +package com.cym.utils.cert.ssl; + +import lombok.Data; + +import java.util.List; + +/** + * @author ZhangSan_Plus + * @version 1.0 + * @className XccSSLInfo + * @description + * @date 2022/8/27 16:17 + **/ +@Data +public class XccSSLInfo { + private String success; + private String detectUrl; + /** + * 信任状态 + */ + private String trustStatus; + /** + * 通用名称 + */ + private String commonName; + /** + * 颁发者 + */ + private String issuer; + /** + * 加密算法 + */ + private String encryptionAlgorithm; + /** + * 签名算法 + */ + private String signatureAlgorithm; + /** + * 证书透明(CT) + */ + private String certificateTransparency; + /** + * 吊销状态 + */ + private String revocationStatus; + + + //主题信息 + private String subjectCN; + private String subjectO; + private String subjectOU; + private String subjectL; + private String subjectST; + private String subjectC; + //签发者信息 + private String issueCN; + private String issueO; + private String issueC; + private String issueOU; + //证书信息 + private String serialNumber; + private String rootCert; + private String algorithm; + private String certificateType; + private String certificateBrand; + private String privateKeyLen; + private String SHA1Fingerprint; + private String SHA256Fingerprint; + private String startTime; + private String endTime; + private String validityPeriod; + private String extKeyUsage; + private List<List<String>> sans; + private String ocspUrl; + private String crlUrl; + private String caUrl; + private String publicKey; + private String openSSL; +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..176c78a --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,6 @@ +spring: + datasource: + printsql: true + url: jdbc:mysql://127.0.0.1:3306/cdnWebUI + username: root + password: root diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..f9a6e28 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,109 @@ +server: + port: 8000 + sysLogPort: 63701 + servlet: + session: + timeout: 7200 + tomcat: + max-http-form-post-size: 100MB + compression: + enabled: true + min-response-size: 2048 + mim-types: text/html,text/xml,text/plain,text/css,text/javascript,application/json,application/xml + error: + include-stacktrace: always + +spring: + profiles: + active: dev + application: + name: cdnWebUI + session: + store-type: jdbc + jdbc: + initialize-schema: always + jackson: + default-property-inclusion: NON_NULL + jmx: + enabled: true + mvc: + pathmatch: + matching-strategy: ant_path_matcher + static-path-pattern: /** + web: + resources: + static-locations[0]: file:/home/file/ + static-locations[1]: classpath:/static/ + jpa: + properties: + hibernate.globally_quoted_identifiers: true #对jpa sql关键字进行转义 + hibernate.globally_quoted_identifiers_skip_column_definitions: true #不要对字段类型进行转义 + hibernate: + ddl-auto: update #自动更新数据库表,如不需要自动更新数据库,则取消此参数 + datasource: + hikari: + #连接池名 + pool-name: DateHikariCP + #最小空闲连接数 + minimum-idle: 10 + # 连接池最大连接数,默认是10 + maximum-pool-size: 100 + #使用虚拟线程 + threads: + virtual: + enabled: true + quartz: + #quartz定时任务,采用数据库方式 + job-store-type: jdbc + # 配置文件中的 initialize-schema: always 配置的 always 属性意思是,每次初始化都会重新生成表(执行一次删除,执行一次创建),生成后,可以修改为 never + jdbc: + initialize-schema: never + properties: + org: + quartz: + scheduler: + instanceName: cdnServer + instanceId: AUTO + threadPool: #线程池 + class: org.quartz.simpl.SimpleThreadPool + threadCount: 50 + +# springdoc-openapi项目配置 +springdoc: + group-configs: + - group: '管理员端' + packages-to-scan: com.cym.controller.webapi.admin + - group: '用户端' + packages-to-scan: com.cym.controller.webapi.user + +knife4j: + enable: true + + +project: + clientHome: /home/cdnClient/ + home: /home/cdnWebUI/ + +logging: + file: + name: ${project.home}log/cdnWebUI.log + max-size: 1024MB + level: + com.binance.connector.client.utils.RequestHandler: OFF + +ali: + host: https://my.freecdn.pw/ + appId: 2017021705714497 + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCGfBMOwx2blHjBWbEgg/68GAfRFRGgoY8GAn1tOWWNfCYD7zCfBFIZDNc6ptOPEc2q2JH8YB5wgBDU4i/Usi7zkeYIcuhgTF8MK7+6GJkyvFuQk7SNcEhdy0xDD3QgygM752EDp57i3jISkYWEK2swbSjAjrj4FurLbXcCsKhiKVkGGslEPtBRetIMDk+ZnXfC5iMVa0OHIsVfw7xzLBKadA7+5ZPiQ+jpw9CNkXuQOD1cwh57u2Qm0e3q/QFCDnKCeiJ5TIspgbtweK4uxz5vBzvaFnYdup0reA9P2fBhEZkuQjAFAGGJuVl66OzBWEGmA0PvTx71Sl18PtLhF2KJAgMBAAECggEAOD6R9d2Sd2vr6OlrE+9ATUg7lK0cFzMaTughrtmPaFHg0Epr6kVzVHizVxtIZZCLlIVI4OUONfzJjU8fs/PlgQamzyfHmea25a8yW1FIWRi/rsKng3PPQDLzLSS8a64xFg+Z2l5zK+zDwlJMJc/G35T3szi9kTx8bCHW4TAi7BJEa/jNa2CIDKdT43gBmU5r9u8sQ0eLlNk72xvlSVFWIVRjffODhWOz5a2oK8IsJVV+fbBH2v+lY728l8fTT4V2MY2Inj2uzRfylq8aoWB7xjQkibBiLqIhjRODK2aVWiwCCnvq/zidqssOJ6CzcWpIxzDOrgIuj2bh44URs3afVQKBgQDSvBuK5v5Chdgf2S5nGo3tQBDXD+IX8o53HhFuDU2gbse8b95ZYWuFgXPGDx+NLrvlnJd+imaIk2lbUL5abxbJSEVXh+vSnh3U73OGqQ/a9lzJtWsLnl4dzUb47hpn0H5q88LgezcypNLXRrdHmmVBe7zKz4opvBr/QKOHmRgVHwKBgQCjXx89ITStw7iVf7J1iWZfW2E3tlWdYA/uwuPCAaUagizjpJ9MRzmH7F2fbPd5sQTnjpBcPATNDGqT4JSRxyBeDxYEDx92QFO3l7W5XwnSbJI/k/wDFbt7zFGuhZju/Uxo0E+uel6AtW2EzakouT6A3anEkwa3LB0+6+F7aiQrVwKBgH8N7Ok1Vg0Tl3e0QLbnGrT1UHHp4J4hnuWQml+o46mbwQ8Kv5tSEjqfDwdV7Ob5S04nuGsR1Ln5bqcgqnPp0GoxCaW5jGQi8seESzngSm/w44a1u8F4jTQYpPbGz+LRoLapG1Cu2VvOZlRnDW+9VdlCWlRJBvscr4ZAGZhSpGNvAoGAVBFSxeYccX5RsbxwXMNDhrZDJKQTElSoXjizctXd2/I4nzvLLTlJhYQ/+RXdkyVgXLej2ZKY9dr5zPa3/Pv2z+/7aENP8U3QxpyuyqD5MOrlpwnDmOLKAz50mdXtiK2XcCghmKsnjhvOK5SZA3evjiiCf8EYp5Fvyz0eXp+T1SkCgYEAxP6+Ud5WFXsqnWtsJ0MVzL1KLb4pngcYxi04USXtwHnfWlpXwj3QRkwYiAHkh4S4hh+MYq89j2mH7rNjt2VKD6vwM5R6nN7bbg3kbOtXti4J2R6mOtdUY+i4qH9hmMtUmAsRPOv9E2+R866RJ+OJ7elN/F5uzWob2Y5382wW5R4= + alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4W97QFrpiRVraGqEx+izzW68YaYnbq3dLYJ4ZlUeZ+5yl0y3jIb5ZNqOoddAkahwht5HT95fvQ7ISDENEpwx79Nt3DtsFeEoJoLtMRKIQAEjE+kK25xBP2e6KDxJE7MCBFWBduVv+DQAjPQU+nqOxZKeVJaiTKdxxKNH/k6WT3D3b8zvF9nIQ/rDWGqwg0Jc0J5ko2+X087m3C0EPqGlXDUC0pLvKbJII8SWPxLuLwxIhSfU/3G6CWVAWj8RZ1++NFrIg1weqlImp8JTXfUy36DPm1CMus4Hm0tew5uiIqAvZz7AYFoOsx7T5rzSZGXgrZ4PRJuo0GTOAZZ93ZpltwIDAQAB + +bian: + apiKey: Lh44H4Z5nBHObDkL8wHg4mvN5RDt0vhA076b4WnBNaA5k4TAe6lN23dVB8GVK6Ec + secretKey: lyIDhTkJO1tJz9bLO0wI7zyv9HsrQGdU1LAJQQ8t5xyC1Ca9waQRp0Ocy7he2PWX + +telegramToken: 6960437020:AAE-BbpzfyKz5KVKqBkK6tcDymECWF8UGNo + +#proxy: +# ips: 27.124.8.250:12302,154.84.17.66:12302,156.234.95.92:12302 + +acmeDnsAuth: http://127.0.0.1:7890 diff --git a/src/main/resources/static/css/base.css b/src/main/resources/static/css/base.css new file mode 100644 index 0000000..c79d222 --- /dev/null +++ b/src/main/resources/static/css/base.css @@ -0,0 +1,68 @@ +.red { + color: red; +} + +.green { + color: green; +} + +.gray { + color: gray; +} + +.blue { + color: blue; +} + +.layui-layout-admin .layui-body { + bottom: 0px; +} + +.root { + height: 38px; + width: 50px; +} + +.layui-icon-export { + font-size: 30px; + color: gray; + cursor: pointer; +} + +.layui-icon-set-fill { + font-size: 30px; + color: gray; + cursor: pointer; +} + +textarea { + resize: none !important; +} + +::-webkit-input-placeholder { + color: #bbbbbb; +} + +:-moz-placeholder { + color: #bbbbbb; +} + +.ellipsis { + width: 300px; + white-space: nowrap; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + overflow: hidden; +} + +.center { + text-align: center; +} + +.select_menu{ + font-weight: bolder; +} + +.layui-input-wrap .layui-input-suffix.layui-input-split { + display: none; +} \ No newline at end of file diff --git a/src/main/resources/static/favicon.ico b/src/main/resources/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c509adfeacf0a61787540cee6f2c158b5112a0d2 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/js/base.js b/src/main/resources/static/js/base.js new file mode 100644 index 0000000..da3dcfc --- /dev/null +++ b/src/main/resources/static/js/base.js @@ -0,0 +1,333 @@ +var layer; +var element; +var form; +var laypage; +var laydate; +var xmSelect; + +// 使用layui内部jQuery +var $ = layui.$; +var jQuery = layui.$; + +$(function() { + + // layer变量 + layer = layui.layer; + element = layui.element; + form = layui.form; + laypage = layui.laypage; + + // 执行一个laypage实例 + laypage.render({ + elem: 'pageInfo', // 渲染节点 + count: page.total, // 总记录数 + curr: page.pageNum, // 起始页 + limit: page.pageSize, // 每页记录数 + limits: [10, 20, 50, 100, 200], // 显示分页数 + layout: ['count', 'prev', 'page', 'next', 'skip', 'limit'], + jump: function(obj, first) { + // 首次不执行 + if (!first) { + // do something + $("input[name='pageNum']").val(obj.curr); + $("input[name='pageSize']").val(obj.limit); + $("#searchForm").submit(); + } + } + }); + + + // 多选组件 + layui.config({ + base: ctx + 'lib/layui/exts/xmSelect/' + }).extend({ + xmSelect: 'xm-select' + }).use(['xmSelect'], function() { + xmSelect = layui.xmSelect; + + if (typeof initXmSelect != "undefined") { + initXmSelect(); + } + }) + + + // 日期控件 + layui.use('laydate', function() { + laydate = layui.laydate; + + // 执行laydate实例 + $(".laydate").each(function() { + $(this).attr("id", "date_" + guid()); + $(this).attr("readonly", true); + + laydate.render({ + elem: "#" + $(this).attr("id"), // 指定元素 + type: 'date', + trigger: 'click', + format: 'yyyy-MM-dd' // 可任意组合 + }); + }) + + $(".laytime").each(function() { + $(this).attr("id", "time_" + guid()); + $(this).attr("readonly", true); + + laydate.render({ + elem: "#" + $(this).attr("id"), // 指定元素 + type: 'datetime', + trigger: 'click', + format: 'yyyy-MM-dd HH:mm:ss' // 可任意组合 + }); + }) + }); + + // 设置input[type='number']为正整数 + $("input[type='number']").attr("lay-affix", "number"); + $("input[type='number']").attr("lay-precision", 0); // 取整 + $("input[type='number']").attr("min", 0); + $("input[type='number']").attr("max", 1000000); + $("input[type='number']").attr("step", 1); // 步进为1 + + $("input.money").attr("lay-precision", 2); //小数进度为2 + $("input.money").attr("step", 0.01); // 步进为0.01 + + form.render(); + + // 关闭input自动填充 + $("input").attr("autocomplete", "off"); + + // 菜单选中 + var url = location.pathname.replace(/\//g, "/") + "?"; + $("a[href*='" + url + "']:first").parent().addClass("layui-this"); + + // 只显示当前大类菜单 + $("a[href*='" + url + "']").parent().parent().parent().addClass("layui-nav-itemed"); + + // 翻译按钮隐藏 + $("#translate").hide(); +}) + +// 关闭AJAX相应的缓存 +$.ajaxSetup({ + cache: false +}); + + +// 退出登录 +function loginOut() { + if (confirm("是否退出登录?")) { + location.href = ctx + "loginOut"; + } +} + +// 日期格式化 +Date.prototype.format = function(format) { + var date = { + "M+": this.getMonth() + 1, + "d+": this.getDate(), + "H+": this.getHours(), + "m+": this.getMinutes(), + "s+": this.getSeconds(), + "q+": Math.floor((this.getMonth() + 3) / 3), + "S+": this.getMilliseconds() + }; + if (/(y+)/i.test(format)) { + format = format.replace(RegExp.$1, (this.getFullYear() + '') + .substr(4 - RegExp.$1.length)); + } + for (var k in date) { + if (new RegExp("(" + k + ")").test(format)) { + format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] + : ("00" + date[k]).substr(("" + date[k]).length)); + } + } + return format; +} + +function formatDate(now) { + if (now == null || now == '') { + return ""; + } + + return new Date(now).format("yyyy-MM-dd HH:mm:ss"); +} + +// 查看图片 +function seePic(url) { + window.open(url); +} + +// 生成uuid +function S4() { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); +} +function guid() { + return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + + S4() + S4()); +} + +// 时间字符串转时间戳 +function strToTime(str) { + var str = str.replace(/-/g, '/'); + var timestamp = new Date(str).getTime(); + + return timestamp +} + +// 获取url参数 +function getQueryString(name) { + /* + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = window.location.search.substr(1).match(reg); + if (r != null) + return unescape(r[2]); + return null; + */ + const paramsStr = window.location.search; + const params = new URLSearchParams(paramsStr); + return params.get(name); // list +} + +// 下载文件 +function downloadFile(url, name) { + window.open(ctx + "downloadFile?url=" + encodeURIComponent(url) + "&name=" + + encodeURIComponent(name)); +} + +// form转json +function form2JsonString(formId) { + var paramArray = $('#' + formId).serializeArray(); + /* 请求参数转json对象 */ + var jsonObj = {}; + $(paramArray).each(function() { + jsonObj[this.name] = this.value; + }); + return JSON.stringify(jsonObj); + +} + +function changeLang() { + $.ajax({ + type: 'POST', + url: ctx + 'main/changeLang', + data: $("#adminForm").serialize(), + dataType: 'json', + success: function(data) { + if (data.success) { + location.reload(); + } else { + layer.msg(data.msg); + } + }, + error: function() { + layer.alert("请求失败,请刷新重试"); + } + }); +} + + +function setParamOrder(id, seq) { + if (seq == -1) { + // 前移 + var prev = $("#" + id).prev(); + $("#" + id).after(prev); + } else { + // 后移 + var next = $("#" + id).next(); + $("#" + id).before(next); + } +} + +// 显示载入框 +var loadIndex; +function showLoad() { + loadIndex = layer.load(); +} +function closeLoad() { + layer.close(loadIndex); +} + + +function userCenter() { + location.href = ctx + "userPage/userCenter"; +} + +function adminCenter(group) { + location.href = ctx + "adminPage/adminCenter?group=" + group; +} + + +function showTgBind() { + layer.alert("在任意聊天窗口发送“@freecdnBot”然后点击这条消息即可打开与freecdnBot的聊天,发送任意消息给freecdnBot它会返回你的信息,其中包含一个ID,这就是我们需要的chat_id"); +} + +function goUser(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/user?pageSize=20&id=" + id; + } +} + +function goOrder(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/orderAdmin?pageSize=20&id=" + id; + } else { + location.href = ctx + "userPage/order?pageSize=20&id=" + id; + } +} + +function goMachineOrder(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/machineOrderAdmin?pageSize=20&id=" + id; + } else { + location.href = ctx + "userPage/machineOrder?pageSize=20&id=" + id; + } +} + +function goMachine(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/machine?pageSize=20&id=" + id; + } +} +function goMachineVps(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/machineVps?pageSize=20&id=" + id; + } +} + +function goDomain(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/domainAdmin?pageSize=20&id=" + id; + } else { + location.href = ctx + "userPage/domain?pageSize=20&id=" + id; + } +} + +function goDomainOrder(orderId) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/domainAdmin?pageSize=20&orderId=" + orderId; + } else { + location.href = ctx + "userPage/domain?pageSize=20&orderId=" + orderId; + } +} + +function goUpstreamOrder(orderId) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/upstreamAdmin?pageSize=20&orderId=" + orderId; + } else { + location.href = ctx + "userPage/upstream?pageSize=20&orderId=" + orderId; + } +} + +function goCertOrder(orderId) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/certAdmin?pageSize=20&orderId=" + orderId; + } else { + location.href = ctx + "userPage/cert?pageSize=20&orderId=" + orderId; + } +} + +function goProduct(id) { + if (location.href.indexOf("adminPage") > -1) { + location.href = ctx + "adminPage/product?pageSize=20&id=" + id; + } +} \ No newline at end of file diff --git a/src/main/resources/static/js/example/index.js b/src/main/resources/static/js/example/index.js new file mode 100644 index 0000000..6b8b374 --- /dev/null +++ b/src/main/resources/static/js/example/index.js @@ -0,0 +1,109 @@ +var menuUrl; + +$(function() { + +}) + + + +function search() { + $("input[name='pageNum']").val(1); + $("#searchForm").submit(); +} + +function add() { + $("#id").val(""); + $("#name").val(""); + $("#descr").val(""); + $("#adminId option:first").prop("selected", true); + + form.render(); + showWindow("添加"); +} + + +function showWindow(title) { + layer.open({ + type: 1, + title: title, + area: ['400px', '400px'], // 宽高 + content: $('#windowDiv') + }); +} + +function addOver() { + if ($("#name").val().trim() == '') { + layer.msg("未填写名称"); + return; + } + + $.ajax({ + type: 'POST', + url: ctx + 'adminPage/example/addOver', + data: $('#addForm').serialize(), + dataType: 'json', + success: function(data) { + if (data.success) { + location.reload(); + } else { + layer.msg(data.msg); + } + }, + error: function() { + layer.alert("请求失败,请刷新重试"); + } + }); +} + +function edit(id) { + $("#id").val(id); + + $.ajax({ + type: 'GET', + url: ctx + 'adminPage/example/detail', + dataType: 'json', + data: { + id: id + }, + success: function(data) { + if (data.success) { + var example = data.obj; + $("#id").val(example.id); + $("#name").val(example.name); + $("#descr").val(example.descr); + $("#adminId").val(example.adminId); + + form.render(); + showWindow("编辑"); + } else { + layer.msg(data.msg); + } + }, + error: function() { + layer.alert("请求失败,请刷新重试"); + } + }); +} + +function del(id) { + if (confirm("确认删除?")) { + $.ajax({ + type: 'POST', + url: ctx + 'adminPage/example/del', + data: { + id: id + }, + dataType: 'json', + success: function(data) { + if (data.success) { + location.reload(); + } else { + layer.msg(data.msg) + } + }, + error: function() { + layer.alert("请求失败,请刷新重试"); + } + }); + } +} \ No newline at end of file diff --git a/src/main/resources/static/lib/base64/base64.js b/src/main/resources/static/lib/base64/base64.js new file mode 100644 index 0000000..a02e9d9 --- /dev/null +++ b/src/main/resources/static/lib/base64/base64.js @@ -0,0 +1,303 @@ + +// +// THIS FILE IS AUTOMATICALLY GENERATED! DO NOT EDIT BY HAND! +// +;(function(global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + ? module.exports = factory() + : typeof define === 'function' && define.amd + ? define(factory) : + // cf. https://github.com/dankogai/js-base64/issues/119 + (function() { + // existing version for noConflict() + const _Base64 = global.Base64; + const gBase64 = factory(); + gBase64.noConflict = () => { + global.Base64 = _Base64; + return gBase64; + }; + if (global.Meteor) { // Meteor.js + Base64 = gBase64; + } + global.Base64 = gBase64; + })(); +}((typeof self !== 'undefined' ? self + : typeof window !== 'undefined' ? window + : typeof global !== 'undefined' ? global + : this +), function() { + 'use strict'; + +/** + * base64.ts + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + * + * @author Dan Kogai (https://github.com/dankogai) + */ +const version = '3.5.2'; +/** + * @deprecated use lowercase `version`. + */ +const VERSION = version; +const _hasatob = typeof atob === 'function'; +const _hasbtoa = typeof btoa === 'function'; +const _hasBuffer = typeof Buffer === 'function'; +const _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined; +const _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined; +const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; +const b64chs = [...b64ch]; +const b64tab = ((a) => { + let tab = {}; + a.forEach((c, i) => tab[c] = i); + return tab; +})(b64chs); +const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; +const _fromCC = String.fromCharCode.bind(String); +const _U8Afrom = typeof Uint8Array.from === 'function' + ? Uint8Array.from.bind(Uint8Array) + : (it, fn = (x) => x) => new Uint8Array(Array.prototype.slice.call(it, 0).map(fn)); +const _mkUriSafe = (src) => src + .replace(/[+\/]/g, (m0) => m0 == '+' ? '-' : '_') + .replace(/=+$/m, ''); +const _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\+\/]/g, ''); +/** + * polyfill version of `btoa` + */ +const btoaPolyfill = (bin) => { + // console.log('polyfilled'); + let u32, c0, c1, c2, asc = ''; + const pad = bin.length % 3; + for (let i = 0; i < bin.length;) { + if ((c0 = bin.charCodeAt(i++)) > 255 || + (c1 = bin.charCodeAt(i++)) > 255 || + (c2 = bin.charCodeAt(i++)) > 255) + throw new TypeError('invalid character found'); + u32 = (c0 << 16) | (c1 << 8) | c2; + asc += b64chs[u32 >> 18 & 63] + + b64chs[u32 >> 12 & 63] + + b64chs[u32 >> 6 & 63] + + b64chs[u32 & 63]; + } + return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc; +}; +/** + * does what `window.btoa` of web browsers do. + * @param {String} bin binary string + * @returns {string} Base64-encoded string + */ +const _btoa = _hasbtoa ? (bin) => btoa(bin) + : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64') + : btoaPolyfill; +const _fromUint8Array = _hasBuffer + ? (u8a) => Buffer.from(u8a).toString('base64') + : (u8a) => { + // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326 + const maxargs = 0x1000; + let strs = []; + for (let i = 0, l = u8a.length; i < l; i += maxargs) { + strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs))); + } + return _btoa(strs.join('')); + }; +/** + * converts a Uint8Array to a Base64 string. + * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 + * @returns {string} Base64 string + */ +const fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a); +// This trick is found broken https://github.com/dankogai/js-base64/issues/130 +// const utob = (src: string) => unescape(encodeURIComponent(src)); +// reverting good old fationed regexp +const cb_utob = (c) => { + if (c.length < 2) { + var cc = c.charCodeAt(0); + return cc < 0x80 ? c + : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6)) + + _fromCC(0x80 | (cc & 0x3f))) + : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } + else { + var cc = 0x10000 + + (c.charCodeAt(0) - 0xD800) * 0x400 + + (c.charCodeAt(1) - 0xDC00); + return (_fromCC(0xf0 | ((cc >>> 18) & 0x07)) + + _fromCC(0x80 | ((cc >>> 12) & 0x3f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } +}; +const re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-8 string + * @returns {string} UTF-16 string + */ +const utob = (u) => u.replace(re_utob, cb_utob); +// +const _encode = _hasBuffer + ? (s) => Buffer.from(s, 'utf8').toString('base64') + : _TE + ? (s) => _fromUint8Array(_TE.encode(s)) + : (s) => _btoa(utob(s)); +/** + * converts a UTF-8-encoded string to a Base64 string. + * @param {boolean} [urlsafe] if `true` make the result URL-safe + * @returns {string} Base64 string + */ +const encode = (src, urlsafe = false) => urlsafe + ? _mkUriSafe(_encode(src)) + : _encode(src); +/** + * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. + * @returns {string} Base64 string + */ +const encodeURI = (src) => encode(src, true); +// This trick is found broken https://github.com/dankogai/js-base64/issues/130 +// const btou = (src: string) => decodeURIComponent(escape(src)); +// reverting good old fationed regexp +const re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g; +const cb_btou = (cccc) => { + switch (cccc.length) { + case 4: + var cp = ((0x07 & cccc.charCodeAt(0)) << 18) + | ((0x3f & cccc.charCodeAt(1)) << 12) + | ((0x3f & cccc.charCodeAt(2)) << 6) + | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; + return (_fromCC((offset >>> 10) + 0xD800) + + _fromCC((offset & 0x3FF) + 0xDC00)); + case 3: + return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12) + | ((0x3f & cccc.charCodeAt(1)) << 6) + | (0x3f & cccc.charCodeAt(2))); + default: + return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6) + | (0x3f & cccc.charCodeAt(1))); + } +}; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-16 string + * @returns {string} UTF-8 string + */ +const btou = (b) => b.replace(re_btou, cb_btou); +/** + * polyfill version of `atob` + */ +const atobPolyfill = (asc) => { + // console.log('polyfilled'); + asc = asc.replace(/\s+/g, ''); + if (!b64re.test(asc)) + throw new TypeError('malformed base64.'); + asc += '=='.slice(2 - (asc.length & 3)); + let u24, bin = '', r1, r2; + for (let i = 0; i < asc.length;) { + u24 = b64tab[asc.charAt(i++)] << 18 + | b64tab[asc.charAt(i++)] << 12 + | (r1 = b64tab[asc.charAt(i++)]) << 6 + | (r2 = b64tab[asc.charAt(i++)]); + bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) + : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) + : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); + } + return bin; +}; +/** + * does what `window.atob` of web browsers do. + * @param {String} asc Base64-encoded string + * @returns {string} binary string + */ +const _atob = _hasatob ? (asc) => atob(_tidyB64(asc)) + : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary') + : atobPolyfill; +// +const _toUint8Array = _hasBuffer + ? (a) => _U8Afrom(Buffer.from(a, 'base64')) + : (a) => _U8Afrom(_atob(a), c => c.charCodeAt(0)); +/** + * converts a Base64 string to a Uint8Array. + */ +const toUint8Array = (a) => _toUint8Array(_unURI(a)); +// +const _decode = _hasBuffer + ? (a) => Buffer.from(a, 'base64').toString('utf8') + : _TD + ? (a) => _TD.decode(_toUint8Array(a)) + : (a) => btou(_atob(a)); +const _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/')); +/** + * converts a Base64 string to a UTF-8 string. + * @param {String} src Base64 string. Both normal and URL-safe are supported + * @returns {string} UTF-8 string + */ +const decode = (src) => _decode(_unURI(src)); +// +const _noEnum = (v) => { + return { + value: v, enumerable: false, writable: true, configurable: true + }; +}; +/** + * extend String.prototype with relevant methods + */ +const extendString = function () { + const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body)); + _add('fromBase64', function () { return decode(this); }); + _add('toBase64', function (urlsafe) { return encode(this, urlsafe); }); + _add('toBase64URI', function () { return encode(this, true); }); + _add('toBase64URL', function () { return encode(this, true); }); + _add('toUint8Array', function () { return toUint8Array(this); }); +}; +/** + * extend Uint8Array.prototype with relevant methods + */ +const extendUint8Array = function () { + const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body)); + _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); }); + _add('toBase64URI', function () { return fromUint8Array(this, true); }); + _add('toBase64URL', function () { return fromUint8Array(this, true); }); +}; +/** + * extend Builtin prototypes with relevant methods + */ +const extendBuiltins = () => { + extendString(); + extendUint8Array(); +}; +const gBase64 = { + version: version, + VERSION: VERSION, + atob: _atob, + atobPolyfill: atobPolyfill, + btoa: _btoa, + btoaPolyfill: btoaPolyfill, + fromBase64: decode, + toBase64: encode, + encode: encode, + encodeURI: encodeURI, + encodeURL: encodeURI, + utob: utob, + btou: btou, + decode: decode, + fromUint8Array: fromUint8Array, + toUint8Array: toUint8Array, + extendString: extendString, + extendUint8Array: extendUint8Array, + extendBuiltins: extendBuiltins, +}; + + // + // export Base64 to the namespace + // + // ES5 is yet to have Object.assign() that may make transpilers unhappy. + // gBase64.Base64 = Object.assign({}, gBase64); + gBase64.Base64 = {}; + Object.keys(gBase64).forEach(k => gBase64.Base64[k] = gBase64[k]); + return gBase64; +})); diff --git a/src/main/resources/static/lib/echarts/echarts.min.js b/src/main/resources/static/lib/echarts/echarts.min.js new file mode 100644 index 0000000..dc6be7e --- /dev/null +++ b/src/main/resources/static/lib/echarts/echarts.min.js @@ -0,0 +1,12 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";function e(t){var e={},n={},i=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),a=t.match(/Edge\/([\d.]+)/),o=/micromessenger/i.test(t);return i&&(n.firefox=!0,n.version=i[1]),r&&(n.ie=!0,n.version=r[1]),a&&(n.edge=!0,n.version=a[1]),o&&(n.weChat=!0),{browser:n,os:e,node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!n.ie&&!n.edge,pointerEventsSupported:"onpointerdown"in window&&(n.edge||n.ie&&n.version>=11),domSupported:"undefined"!=typeof document}}function n(t,e){"createCanvas"===t&&(Jf=null),$f[t]=e}function i(t){if(null==t||"object"!=typeof t)return t;var e=t,n=Xf.call(t);if("[object Array]"===n){if(!z(t)){e=[];for(var r=0,a=t.length;a>r;r++)e[r]=i(t[r])}}else if(Wf[n]){if(!z(t)){var o=t.constructor;if(t.constructor.from)e=o.from(t);else{e=new o(t.length);for(var r=0,a=t.length;a>r;r++)e[r]=i(t[r])}}}else if(!Gf[n]&&!z(t)&&!T(t)){e={};for(var s in t)t.hasOwnProperty(s)&&(e[s]=i(t[s]))}return e}function r(t,e,n){if(!S(e)||!S(t))return n?i(e):t;for(var a in e)if(e.hasOwnProperty(a)){var o=t[a],s=e[a];!S(s)||!S(o)||x(s)||x(o)||T(s)||T(o)||M(s)||M(o)||z(s)||z(o)?!n&&a in t||(t[a]=i(e[a],!0)):r(o,s,n)}return t}function a(t,e){for(var n=t[0],i=1,a=t.length;a>i;i++)n=r(n,t[i],e);return n}function o(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function s(t,e,n){for(var i in e)e.hasOwnProperty(i)&&(n?null!=e[i]:null==t[i])&&(t[i]=e[i]);return t}function l(){return Jf||(Jf=Qf().getContext("2d")),Jf}function u(t,e){if(t){if(t.indexOf)return t.indexOf(e);for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n}return-1}function h(t,e){function n(){}var i=t.prototype;n.prototype=e.prototype,t.prototype=new n;for(var r in i)i.hasOwnProperty(r)&&(t.prototype[r]=i[r]);t.prototype.constructor=t,t.superClass=e}function c(t,e,n){t="prototype"in t?t.prototype:t,e="prototype"in e?e.prototype:e,s(t,e,n)}function d(t){return t?"string"==typeof t?!1:"number"==typeof t.length:void 0}function f(t,e,n){if(t&&e)if(t.forEach&&t.forEach===Uf)t.forEach(e,n);else if(t.length===+t.length)for(var i=0,r=t.length;r>i;i++)e.call(n,t[i],i,t);else for(var a in t)t.hasOwnProperty(a)&&e.call(n,t[a],a,t)}function p(t,e,n){if(t&&e){if(t.map&&t.map===Zf)return t.map(e,n);for(var i=[],r=0,a=t.length;a>r;r++)i.push(e.call(n,t[r],r,t));return i}}function g(t,e,n,i){if(t&&e){if(t.reduce&&t.reduce===Kf)return t.reduce(e,n,i);for(var r=0,a=t.length;a>r;r++)n=e.call(i,n,t[r],r,t);return n}}function v(t,e,n){if(t&&e){if(t.filter&&t.filter===qf)return t.filter(e,n);for(var i=[],r=0,a=t.length;a>r;r++)e.call(n,t[r],r,t)&&i.push(t[r]);return i}}function m(t,e,n){if(t&&e)for(var i=0,r=t.length;r>i;i++)if(e.call(n,t[i],i,t))return t[i]}function y(t,e){var n=jf.call(arguments,2);return function(){return t.apply(e,n.concat(jf.call(arguments)))}}function _(t){var e=jf.call(arguments,1);return function(){return t.apply(this,e.concat(jf.call(arguments)))}}function x(t){return"[object Array]"===Xf.call(t)}function w(t){return"function"==typeof t}function b(t){return"[object String]"===Xf.call(t)}function S(t){var e=typeof t;return"function"===e||!!t&&"object"===e}function M(t){return!!Gf[Xf.call(t)]}function I(t){return!!Wf[Xf.call(t)]}function T(t){return"object"==typeof t&&"number"==typeof t.nodeType&&"object"==typeof t.ownerDocument}function C(t){return t!==t}function D(){for(var t=0,e=arguments.length;e>t;t++)if(null!=arguments[t])return arguments[t]}function A(t,e){return null!=t?t:e}function k(t,e,n){return null!=t?t:null!=e?e:n}function P(){return Function.call.apply(jf,arguments)}function L(t){if("number"==typeof t)return[t,t,t,t];var e=t.length;return 2===e?[t[0],t[1],t[0],t[1]]:3===e?[t[0],t[1],t[2],t[1]]:t}function O(t,e){if(!t)throw new Error(e)}function B(t){return null==t?null:"function"==typeof t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}function E(t){t[tp]=!0}function z(t){return t[tp]}function R(t){function e(t,e){n?i.set(t,e):i.set(e,t)}var n=x(t);this.data={};var i=this;t instanceof R?t.each(e):t&&f(t,e)}function N(t){return new R(t)}function F(t,e){for(var n=new t.constructor(t.length+e.length),i=0;i<t.length;i++)n[i]=t[i];var r=t.length;for(i=0;i<e.length;i++)n[i+r]=e[i];return n}function V(){}function H(t,e){var n=new np(2);return null==t&&(t=0),null==e&&(e=0),n[0]=t,n[1]=e,n}function G(t,e){return t[0]=e[0],t[1]=e[1],t}function W(t){var e=new np(2);return e[0]=t[0],e[1]=t[1],e}function X(t,e,n){return t[0]=e,t[1]=n,t}function Y(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t}function U(t,e,n,i){return t[0]=e[0]+n[0]*i,t[1]=e[1]+n[1]*i,t}function q(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t}function j(t){return Math.sqrt(Z(t))}function Z(t){return t[0]*t[0]+t[1]*t[1]}function K(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t}function $(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t}function Q(t,e){return t[0]*e[0]+t[1]*e[1]}function J(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t}function te(t,e){var n=j(e);return 0===n?(t[0]=0,t[1]=0):(t[0]=e[0]/n,t[1]=e[1]/n),t}function ee(t,e){return Math.sqrt((t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1]))}function ne(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])}function ie(t,e){return t[0]=-e[0],t[1]=-e[1],t}function re(t,e,n,i){return t[0]=e[0]+i*(n[0]-e[0]),t[1]=e[1]+i*(n[1]-e[1]),t}function ae(t,e,n){var i=e[0],r=e[1];return t[0]=n[0]*i+n[2]*r+n[4],t[1]=n[1]*i+n[3]*r+n[5],t}function oe(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t}function se(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t}function le(){this.on("mousedown",this._dragStart,this),this.on("mousemove",this._drag,this),this.on("mouseup",this._dragEnd,this)}function ue(t,e){return{target:t,topTarget:e&&e.topTarget}}function he(t,e){var n=t._$eventProcessor;return null!=e&&n&&n.normalizeQuery&&(e=n.normalizeQuery(e)),e}function ce(t,e,n,i,r,a){var o=t._$handlers;if("function"==typeof n&&(r=i,i=n,n=null),!i||!e)return t;n=he(t,n),o[e]||(o[e]=[]);for(var s=0;s<o[e].length;s++)if(o[e][s].h===i)return t;var l={h:i,one:a,query:n,ctx:r||t,callAtLast:i.zrEventfulCallAtLast},u=o[e].length-1,h=o[e][u];return h&&h.callAtLast?o[e].splice(u,0,l):o[e].push(l),t}function de(t,e,n,i,r,a){var o=i+"-"+r,s=t.length;if(a.hasOwnProperty(o))return a[o];if(1===e){var l=Math.round(Math.log((1<<s)-1&~r)/hp);return t[n][l]}for(var u=i|1<<n,h=n+1;i&1<<h;)h++;for(var c=0,d=0,f=0;s>d;d++){var p=1<<d;p&r||(c+=(f%2?-1:1)*t[n][d]*de(t,e-1,h,u,r|p,a),f++)}return a[o]=c,c}function fe(t,e){var n=[[t[0],t[1],1,0,0,0,-e[0]*t[0],-e[0]*t[1]],[0,0,0,t[0],t[1],1,-e[1]*t[0],-e[1]*t[1]],[t[2],t[3],1,0,0,0,-e[2]*t[2],-e[2]*t[3]],[0,0,0,t[2],t[3],1,-e[3]*t[2],-e[3]*t[3]],[t[4],t[5],1,0,0,0,-e[4]*t[4],-e[4]*t[5]],[0,0,0,t[4],t[5],1,-e[5]*t[4],-e[5]*t[5]],[t[6],t[7],1,0,0,0,-e[6]*t[6],-e[6]*t[7]],[0,0,0,t[6],t[7],1,-e[7]*t[6],-e[7]*t[7]]],i={},r=de(n,8,0,0,0,i);if(0!==r){for(var a=[],o=0;8>o;o++)for(var s=0;8>s;s++)null==a[s]&&(a[s]=0),a[s]+=((o+s)%2?-1:1)*de(n,7,0===o?1:0,1<<o,1<<s,i)/r*e[o];return function(t,e,n){var i=e*a[6]+n*a[7]+1;t[0]=(e*a[0]+n*a[1]+a[2])/i,t[1]=(e*a[3]+n*a[4]+a[5])/i}}}function pe(t,e,n,i){return n=n||{},i||!Hf.canvasSupported?ge(t,e,n):Hf.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):ge(t,e,n),n}function ge(t,e,n){if(t.getBoundingClientRect&&Hf.domSupported){var i=e.clientX,r=e.clientY;if("CANVAS"===t.nodeName.toUpperCase()){var a=t.getBoundingClientRect();return n.zrX=i-a.left,void(n.zrY=r-a.top)}var o=t[fp]||(t[fp]={}),s=me(ve(t,o),o);if(s)return s(pp,i,r),n.zrX=pp[0],void(n.zrY=pp[1])}n.zrX=n.zrY=0}function ve(t,e){var n=e.markers;if(n)return n;n=e.markers=[];for(var i=["left","right"],r=["top","bottom"],a=0;4>a;a++){var o=document.createElement("div"),s=o.style,l=a%2,u=(a>>1)%2;s.cssText=["position:absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","width:0","height:0",i[l]+":0",r[u]+":0",i[1-l]+":auto",r[1-u]+":auto",""].join("!important;"),t.appendChild(o),n.push(o)}return n}function me(t,e){for(var n=e.transformer,i=e.srcCoords,r=!0,a=[],o=[],s=0;4>s;s++){var l=t[s].getBoundingClientRect(),u=2*s,h=l.left,c=l.top;a.push(h,c),r&=i&&h===i[u]&&c===i[u+1],o.push(t[s].offsetLeft,t[s].offsetTop)}return r?n:(e.srcCoords=a,e.transformer=fe(a,o))}function ye(t){return t||window.event}function _e(t,e,n){if(e=ye(e),null!=e.zrX)return e;var i=e.type,r=i&&i.indexOf("touch")>=0;if(r){var a="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];a&&pe(t,a,e,n)}else pe(t,e,e,n),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var o=e.button;return null==e.which&&void 0!==o&&dp.test(e.type)&&(e.which=1&o?1:2&o?3:4&o?2:0),e}function xe(t,e,n,i){cp?t.addEventListener(e,n,i):t.attachEvent("on"+e,n)}function we(t,e,n,i){cp?t.removeEventListener(e,n,i):t.detachEvent("on"+e,n)}function be(t){var e=t[1][0]-t[0][0],n=t[1][1]-t[0][1];return Math.sqrt(e*e+n*n)}function Se(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function Me(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:Ie}}function Ie(){gp(this.event)}function Te(){}function Ce(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){for(var i,r=t;r;){if(r.clipPath&&!r.clipPath.contain(e,n))return!1;r.silent&&(i=!0),r=r.parent}return i?yp:!0}return!1}function De(t,e,n){var i=t.painter;return 0>e||e>i.getWidth()||0>n||n>i.getHeight()}function Ae(){var t=new wp(6);return ke(t),t}function ke(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function Pe(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function Le(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],a=e[0]*n[2]+e[2]*n[3],o=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t}function Oe(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function Be(t,e,n){var i=e[0],r=e[2],a=e[4],o=e[1],s=e[3],l=e[5],u=Math.sin(n),h=Math.cos(n);return t[0]=i*h+o*u,t[1]=-i*u+o*h,t[2]=r*h+s*u,t[3]=-r*u+h*s,t[4]=h*a+u*l,t[5]=h*l-u*a,t}function Ee(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function ze(t,e){var n=e[0],i=e[2],r=e[4],a=e[1],o=e[3],s=e[5],l=n*o-a*i;return l?(l=1/l,t[0]=o*l,t[1]=-a*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-o*r)*l,t[5]=(a*r-n*s)*l,t):null}function Re(t){var e=Ae();return Pe(e,t),e}function Ne(t){return t>Mp||-Mp>t}function Fe(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null==t.loop?!1:t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function Ve(t){return t=Math.round(t),0>t?0:t>255?255:t}function He(t){return t=Math.round(t),0>t?0:t>360?360:t}function Ge(t){return 0>t?0:t>1?1:t}function We(t){return Ve(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function Xe(t){return Ge(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function Ye(t,e,n){return 0>n?n+=1:n>1&&(n-=1),1>6*n?t+(e-t)*n*6:1>2*n?e:2>3*n?t+(e-t)*(2/3-n)*6:t}function Ue(t,e,n){return t+(e-t)*n}function qe(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function je(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ze(t,e){Np&&je(Np,e),Np=Rp.put(t,Np||e.slice())}function Ke(t,e){if(t){e=e||[];var n=Rp.get(t);if(n)return je(e,n);t+="";var i=t.replace(/ /g,"").toLowerCase();if(i in zp)return je(e,zp[i]),Ze(t,e),e;if("#"!==i.charAt(0)){var r=i.indexOf("("),a=i.indexOf(")");if(-1!==r&&a+1===i.length){var o=i.substr(0,r),s=i.substr(r+1,a-(r+1)).split(","),l=1;switch(o){case"rgba":if(4!==s.length)return void qe(e,0,0,0,1);l=Xe(s.pop());case"rgb":return 3!==s.length?void qe(e,0,0,0,1):(qe(e,We(s[0]),We(s[1]),We(s[2]),l),Ze(t,e),e);case"hsla":return 4!==s.length?void qe(e,0,0,0,1):(s[3]=Xe(s[3]),$e(s,e),Ze(t,e),e);case"hsl":return 3!==s.length?void qe(e,0,0,0,1):($e(s,e),Ze(t,e),e);default:return}}qe(e,0,0,0,1)}else{if(4===i.length){var u=parseInt(i.substr(1),16);return u>=0&&4095>=u?(qe(e,(3840&u)>>4|(3840&u)>>8,240&u|(240&u)>>4,15&u|(15&u)<<4,1),Ze(t,e),e):void qe(e,0,0,0,1)}if(7===i.length){var u=parseInt(i.substr(1),16);return u>=0&&16777215>=u?(qe(e,(16711680&u)>>16,(65280&u)>>8,255&u,1),Ze(t,e),e):void qe(e,0,0,0,1)}}}}function $e(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Xe(t[1]),r=Xe(t[2]),a=.5>=r?r*(i+1):r+i-r*i,o=2*r-a;return e=e||[],qe(e,Ve(255*Ye(o,a,n+1/3)),Ve(255*Ye(o,a,n)),Ve(255*Ye(o,a,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Qe(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,a=t[2]/255,o=Math.min(i,r,a),s=Math.max(i,r,a),l=s-o,u=(s+o)/2;if(0===l)e=0,n=0;else{n=.5>u?l/(s+o):l/(2-s-o);var h=((s-i)/6+l/2)/l,c=((s-r)/6+l/2)/l,d=((s-a)/6+l/2)/l;i===s?e=d-c:r===s?e=1/3+h-d:a===s&&(e=2/3+c-h),0>e&&(e+=1),e>1&&(e-=1)}var f=[360*e,n,u];return null!=t[3]&&f.push(t[3]),f}}function Je(t,e){var n=Ke(t);if(n){for(var i=0;3>i;i++)n[i]=0>e?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:t[i]<0&&(n[i]=0);return on(n,4===n.length?"rgba":"rgb")}}function tn(t){var e=Ke(t);return e?((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1):void 0}function en(t,e,n){if(e&&e.length&&t>=0&&1>=t){n=n||[];var i=t*(e.length-1),r=Math.floor(i),a=Math.ceil(i),o=e[r],s=e[a],l=i-r;return n[0]=Ve(Ue(o[0],s[0],l)),n[1]=Ve(Ue(o[1],s[1],l)),n[2]=Ve(Ue(o[2],s[2],l)),n[3]=Ge(Ue(o[3],s[3],l)),n}}function nn(t,e,n){if(e&&e.length&&t>=0&&1>=t){var i=t*(e.length-1),r=Math.floor(i),a=Math.ceil(i),o=Ke(e[r]),s=Ke(e[a]),l=i-r,u=on([Ve(Ue(o[0],s[0],l)),Ve(Ue(o[1],s[1],l)),Ve(Ue(o[2],s[2],l)),Ge(Ue(o[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:a,value:i}:u}}function rn(t,e,n,i){return t=Ke(t),t?(t=Qe(t),null!=e&&(t[0]=He(e)),null!=n&&(t[1]=Xe(n)),null!=i&&(t[2]=Xe(i)),on($e(t),"rgba")):void 0}function an(t,e){return t=Ke(t),t&&null!=e?(t[3]=Ge(e),on(t,"rgba")):void 0}function on(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return("rgba"===e||"hsva"===e||"hsla"===e)&&(n+=","+t[3]),e+"("+n+")"}}function sn(t,e){return t[e]}function ln(t,e,n){t[e]=n}function un(t,e,n){return(e-t)*n+t}function hn(t,e,n){return n>.5?e:t}function cn(t,e,n,i,r){var a=t.length;if(1===r)for(var o=0;a>o;o++)i[o]=un(t[o],e[o],n);else for(var s=a&&t[0].length,o=0;a>o;o++)for(var l=0;s>l;l++)i[o][l]=un(t[o][l],e[o][l],n)}function dn(t,e,n){var i=t.length,r=e.length;if(i!==r){var a=i>r;if(a)t.length=r;else for(var o=i;r>o;o++)t.push(1===n?e[o]:Gp.call(e[o]))}for(var s=t[0]&&t[0].length,o=0;o<t.length;o++)if(1===n)isNaN(t[o])&&(t[o]=e[o]);else for(var l=0;s>l;l++)isNaN(t[o][l])&&(t[o][l]=e[o][l])}function fn(t,e,n){if(t===e)return!0;var i=t.length;if(i!==e.length)return!1;if(1===n){for(var r=0;i>r;r++)if(t[r]!==e[r])return!1}else for(var a=t[0].length,r=0;i>r;r++)for(var o=0;a>o;o++)if(t[r][o]!==e[r][o])return!1;return!0}function pn(t,e,n,i,r,a,o,s,l){var u=t.length;if(1===l)for(var h=0;u>h;h++)s[h]=gn(t[h],e[h],n[h],i[h],r,a,o);else for(var c=t[0].length,h=0;u>h;h++)for(var d=0;c>d;d++)s[h][d]=gn(t[h][d],e[h][d],n[h][d],i[h][d],r,a,o)}function gn(t,e,n,i,r,a,o){var s=.5*(n-t),l=.5*(i-e);return(2*(e-n)+s+l)*o+(-3*(e-n)-2*s-l)*a+s*r+e}function vn(t){if(d(t)){var e=t.length;if(d(t[0])){for(var n=[],i=0;e>i;i++)n.push(Gp.call(t[i]));return n}return Gp.call(t)}return t}function mn(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),"rgba("+t.join(",")+")"}function yn(t){var e=t[t.length-1].value;return d(e&&e[0])?2:1}function _n(t,e,n,i,r,a){var o=t._getter,s=t._setter,l="spline"===e,u=i.length;if(u){var h,c=i[0].value,f=d(c),p=!1,g=!1,v=f?yn(i):0;i.sort(function(t,e){return t.time-e.time}),h=i[u-1].time;for(var m=[],y=[],_=i[0].value,x=!0,w=0;u>w;w++){m.push(i[w].time/h);var b=i[w].value;if(f&&fn(b,_,v)||!f&&b===_||(x=!1),_=b,"string"==typeof b){var S=Ke(b);S?(b=S,p=!0):g=!0}y.push(b)}if(a||!x){for(var M=y[u-1],w=0;u-1>w;w++)f?dn(y[w],M,v):!isNaN(y[w])||isNaN(M)||g||p||(y[w]=M);f&&dn(o(t._target,r),M,v);var I,T,C,D,A,k,P=0,L=0;if(p)var O=[0,0,0,0];var B=function(t,e){var n;if(0>e)n=0;else if(L>e){for(I=Math.min(P+1,u-1),n=I;n>=0&&!(m[n]<=e);n--);n=Math.min(n,u-2)}else{for(n=P;u>n&&!(m[n]>e);n++);n=Math.min(n-1,u-2)}P=n,L=e;var i=m[n+1]-m[n];if(0!==i)if(T=(e-m[n])/i,l)if(D=y[n],C=y[0===n?n:n-1],A=y[n>u-2?u-1:n+1],k=y[n>u-3?u-1:n+2],f)pn(C,D,A,k,T,T*T,T*T*T,o(t,r),v);else{var a;if(p)a=pn(C,D,A,k,T,T*T,T*T*T,O,1),a=mn(O);else{if(g)return hn(D,A,T);a=gn(C,D,A,k,T,T*T,T*T*T)}s(t,r,a)}else if(f)cn(y[n],y[n+1],T,o(t,r),v);else{var a;if(p)cn(y[n],y[n+1],T,O,1),a=mn(O);else{if(g)return hn(y[n],y[n+1],T);a=un(y[n],y[n+1],T)}s(t,r,a)}},E=new Fe({target:t._target,life:h,loop:t._loop,delay:t._delay,onframe:B,ondestroy:n});return e&&"spline"!==e&&(E.easing=e),E}}}function xn(t,e,n,i,r,a,o,s){function l(){h--,h||a&&a()}b(i)?(a=r,r=i,i=0):w(r)?(a=r,r="linear",i=0):w(i)?(a=i,i=0):w(n)?(a=n,n=500):n||(n=500),t.stopAnimation(),wn(t,"",t,e,n,i,s);var u=t.animators.slice(),h=u.length;h||a&&a();for(var c=0;c<u.length;c++)u[c].done(l).start(r,o)}function wn(t,e,n,i,r,a,o){var s={},l=0;for(var u in i)i.hasOwnProperty(u)&&(null!=n[u]?S(i[u])&&!d(i[u])?wn(t,e?e+"."+u:u,n[u],i[u],r,a,o):(o?(s[u]=n[u],bn(t,e,u,i[u])):s[u]=i[u],l++):null==i[u]||o||bn(t,e,u,i[u]));l>0&&t.animate(e,!1).when(null==r?500:r,s).delay(a||0)}function bn(t,e,n,i){if(e){var r={};r[e]={},r[e][n]=i,t.attr(r)}else t.attr(n,i)}function Sn(t,e,n,i){0>n&&(t+=n,n=-n),0>i&&(e+=i,i=-i),this.x=t,this.y=e,this.width=n,this.height=i}function Mn(t){for(var e=0;t>=eg;)e|=1&t,t>>=1;return t+e}function In(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;n>r&&i(t[r],t[r-1])<0;)r++;Tn(t,e,r)}else for(;n>r&&i(t[r],t[r-1])>=0;)r++;return r-e}function Tn(t,e,n){for(n--;n>e;){var i=t[e];t[e++]=t[n],t[n--]=i}}function Cn(t,e,n,i,r){for(i===e&&i++;n>i;i++){for(var a,o=t[i],s=e,l=i;l>s;)a=s+l>>>1,r(o,t[a])<0?l=a:s=a+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=o}}function Dn(t,e,n,i,r,a){var o=0,s=0,l=1;if(a(t,e[n+r])>0){for(s=i-r;s>l&&a(t,e[n+r+l])>0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s),o+=r,l+=r}else{for(s=r+1;s>l&&a(t,e[n+r-l])<=0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s);var u=o;o=r-l,l=r-u}for(o++;l>o;){var h=o+(l-o>>>1);a(t,e[n+h])>0?o=h+1:l=h}return l}function An(t,e,n,i,r,a){var o=0,s=0,l=1;if(a(t,e[n+r])<0){for(s=r+1;s>l&&a(t,e[n+r-l])<0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s);var u=o;o=r-l,l=r-u}else{for(s=i-r;s>l&&a(t,e[n+r+l])>=0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s),o+=r,l+=r}for(o++;l>o;){var h=o+(l-o>>>1);a(t,e[n+h])<0?l=h:o=h+1}return l}function kn(t,e){function n(t,e){l[c]=t,u[c]=e,c+=1}function i(){for(;c>1;){var t=c-2;if(t>=1&&u[t-1]<=u[t]+u[t+1]||t>=2&&u[t-2]<=u[t]+u[t-1])u[t-1]<u[t+1]&&t--;else if(u[t]>u[t+1])break;a(t)}}function r(){for(;c>1;){var t=c-2;t>0&&u[t-1]<u[t+1]&&t--,a(t)}}function a(n){var i=l[n],r=u[n],a=l[n+1],h=u[n+1];u[n]=r+h,n===c-3&&(l[n+1]=l[n+2],u[n+1]=u[n+2]),c--;var d=An(t[a],t,i,r,0,e);i+=d,r-=d,0!==r&&(h=Dn(t[i+r-1],t,a,h,h-1,e),0!==h&&(h>=r?o(i,r,a,h):s(i,r,a,h)))}function o(n,i,r,a){var o=0;for(o=0;i>o;o++)d[o]=t[n+o];var s=0,l=r,u=n;if(t[u++]=t[l++],0!==--a){if(1===i){for(o=0;a>o;o++)t[u+o]=t[l+o];return void(t[u+a]=d[s])}for(var c,f,p,g=h;;){c=0,f=0,p=!1;do if(e(t[l],d[s])<0){if(t[u++]=t[l++],f++,c=0,0===--a){p=!0;break}}else if(t[u++]=d[s++],c++,f=0,1===--i){p=!0;break}while(g>(c|f));if(p)break;do{if(c=An(t[l],d,s,i,0,e),0!==c){for(o=0;c>o;o++)t[u+o]=d[s+o];if(u+=c,s+=c,i-=c,1>=i){p=!0;break}}if(t[u++]=t[l++],0===--a){p=!0;break}if(f=Dn(d[s],t,l,a,0,e),0!==f){for(o=0;f>o;o++)t[u+o]=t[l+o];if(u+=f,l+=f,a-=f,0===a){p=!0;break}}if(t[u++]=d[s++],1===--i){p=!0;break}g--}while(c>=ng||f>=ng);if(p)break;0>g&&(g=0),g+=2}if(h=g,1>h&&(h=1),1===i){for(o=0;a>o;o++)t[u+o]=t[l+o];t[u+a]=d[s]}else{if(0===i)throw new Error;for(o=0;i>o;o++)t[u+o]=d[s+o]}}else for(o=0;i>o;o++)t[u+o]=d[s+o]}function s(n,i,r,a){var o=0;for(o=0;a>o;o++)d[o]=t[r+o];var s=n+i-1,l=a-1,u=r+a-1,c=0,f=0;if(t[u--]=t[s--],0!==--i){if(1===a){for(u-=i,s-=i,f=u+1,c=s+1,o=i-1;o>=0;o--)t[f+o]=t[c+o];return void(t[u]=d[l])}for(var p=h;;){var g=0,v=0,m=!1;do if(e(d[l],t[s])<0){if(t[u--]=t[s--],g++,v=0,0===--i){m=!0;break}}else if(t[u--]=d[l--],v++,g=0,1===--a){m=!0;break}while(p>(g|v));if(m)break;do{if(g=i-An(d[l],t,n,i,i-1,e),0!==g){for(u-=g,s-=g,i-=g,f=u+1,c=s+1,o=g-1;o>=0;o--)t[f+o]=t[c+o];if(0===i){m=!0;break}}if(t[u--]=d[l--],1===--a){m=!0;break}if(v=a-Dn(t[s],d,0,a,a-1,e),0!==v){for(u-=v,l-=v,a-=v,f=u+1,c=l+1,o=0;v>o;o++)t[f+o]=d[c+o];if(1>=a){m=!0;break}}if(t[u--]=t[s--],0===--i){m=!0;break}p--}while(g>=ng||v>=ng);if(m)break;0>p&&(p=0),p+=2}if(h=p,1>h&&(h=1),1===a){for(u-=i,s-=i,f=u+1,c=s+1,o=i-1;o>=0;o--)t[f+o]=t[c+o];t[u]=d[l]}else{if(0===a)throw new Error;for(c=u-(a-1),o=0;a>o;o++)t[c+o]=d[o]}}else for(c=u-(a-1),o=0;a>o;o++)t[c+o]=d[o]}var l,u,h=ng,c=0,d=[];l=[],u=[],this.mergeRuns=i,this.forceMergeRuns=r,this.pushRun=n}function Pn(t,e,n,i){n||(n=0),i||(i=t.length);var r=i-n;if(!(2>r)){var a=0;if(eg>r)return a=In(t,n,i,e),void Cn(t,n,i,n+a,e);var o=new kn(t,e),s=Mn(r);do{if(a=In(t,n,i,e),s>a){var l=r;l>s&&(l=s),Cn(t,n,n+l,n+a,e),a=l}o.pushRun(n,a),o.mergeRuns(),r-=a,n+=a}while(0!==r);o.forceMergeRuns()}}function Ln(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function On(t,e,n){var i=null==e.x?0:e.x,r=null==e.x2?1:e.x2,a=null==e.y?0:e.y,o=null==e.y2?0:e.y2;e.global||(i=i*n.width+n.x,r=r*n.width+n.x,a=a*n.height+n.y,o=o*n.height+n.y),i=isNaN(i)?0:i,r=isNaN(r)?1:r,a=isNaN(a)?0:a,o=isNaN(o)?0:o;var s=t.createLinearGradient(i,a,r,o);return s}function Bn(t,e,n){var i=n.width,r=n.height,a=Math.min(i,r),o=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;e.global||(o=o*i+n.x,s=s*r+n.y,l*=a);var u=t.createRadialGradient(o,s,0,o,s,l);return u}function En(){return!1}function zn(t,e,n){var i=Qf(),r=e.getWidth(),a=e.getHeight(),o=i.style;return o&&(o.position="absolute",o.left=0,o.top=0,o.width=r+"px",o.height=a+"px",i.setAttribute("data-zr-dom-id",t)),i.width=r*n,i.height=a*n,i}function Rn(t){if("string"==typeof t){var e=vg.get(t);return e&&e.image}return t}function Nn(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var a=vg.get(t),o={hostEl:n,cb:i,cbPayload:r};return a?(e=a.image,!Vn(e)&&a.pending.push(o)):(e=new Image,e.onload=e.onerror=Fn,vg.put(t,e.__cachedImgObj={image:e,pending:[o]}),e.src=e.__zrImageSrc=t),e}return t}return e}function Fn(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e<t.pending.length;e++){var n=t.pending[e],i=n.cb;i&&i(this,n.cbPayload),n.hostEl.dirty()}t.pending.length=0}function Vn(t){return t&&t.width&&t.height}function Hn(t,e){e=e||wg;var n=t+":"+e;if(mg[n])return mg[n];for(var i=(t+"").split("\n"),r=0,a=0,o=i.length;o>a;a++)r=Math.max(Jn(i[a],e).width,r);return yg>_g&&(yg=0,mg={}),yg++,mg[n]=r,r}function Gn(t,e,n,i,r,a,o,s){return o?Xn(t,e,n,i,r,a,o,s):Wn(t,e,n,i,r,a,s)}function Wn(t,e,n,i,r,a,o){var s=ti(t,e,r,a,o),l=Hn(t,e);r&&(l+=r[1]+r[3]);var u=s.outerHeight,h=Yn(0,l,n),c=Un(0,u,i),d=new Sn(h,c,l,u);return d.lineHeight=s.lineHeight,d}function Xn(t,e,n,i,r,a,o,s){var l=ei(t,{rich:o,truncate:s,font:e,textAlign:n,textPadding:r,textLineHeight:a}),u=l.outerWidth,h=l.outerHeight,c=Yn(0,u,n),d=Un(0,h,i);return new Sn(c,d,u,h)}function Yn(t,e,n){return"right"===n?t-=e:"center"===n&&(t-=e/2),t}function Un(t,e,n){return"middle"===n?t-=e/2:"bottom"===n&&(t-=e),t}function qn(t,e,n){var i=e.textPosition,r=e.textDistance,a=n.x,o=n.y;r=r||0;var s=n.height,l=n.width,u=s/2,h="left",c="top";switch(i){case"left":a-=r,o+=u,h="right",c="middle";break;case"right":a+=r+l,o+=u,c="middle";break;case"top":a+=l/2,o-=r,h="center",c="bottom";break;case"bottom":a+=l/2,o+=s+r,h="center";break;case"inside":a+=l/2,o+=u,h="center",c="middle";break;case"insideLeft":a+=r,o+=u,c="middle";break;case"insideRight":a+=l-r,o+=u,h="right",c="middle";break;case"insideTop":a+=l/2,o+=r,h="center";break;case"insideBottom":a+=l/2,o+=s-r,h="center",c="bottom";break;case"insideTopLeft":a+=r,o+=r;break;case"insideTopRight":a+=l-r,o+=r,h="right";break;case"insideBottomLeft":a+=r,o+=s-r,c="bottom";break;case"insideBottomRight":a+=l-r,o+=s-r,h="right",c="bottom"}return t=t||{},t.x=a,t.y=o,t.textAlign=h,t.textVerticalAlign=c,t}function jn(t,e,n,i,r){if(!e)return"";var a=(t+"").split("\n");r=Zn(e,n,i,r);for(var o=0,s=a.length;s>o;o++)a[o]=Kn(a[o],r);return a.join("\n")}function Zn(t,e,n,i){i=o({},i),i.font=e;var n=A(n,"...");i.maxIterations=A(i.maxIterations,2);var r=i.minChar=A(i.minChar,0);i.cnCharWidth=Hn("国",e);var a=i.ascCharWidth=Hn("a",e);i.placeholder=A(i.placeholder,"");for(var s=t=Math.max(0,t-1),l=0;r>l&&s>=a;l++)s-=a;var u=Hn(n,e);return u>s&&(n="",u=0),s=t-u,i.ellipsis=n,i.ellipsisWidth=u,i.contentWidth=s,i.containerWidth=t,i}function Kn(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var a=Hn(t,i);if(n>=a)return t;for(var o=0;;o++){if(r>=a||o>=e.maxIterations){t+=e.ellipsis;break}var s=0===o?$n(t,r,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*r/a):0;t=t.substr(0,s),a=Hn(t,i)}return""===t&&(t=e.placeholder),t}function $n(t,e,n,i){for(var r=0,a=0,o=t.length;o>a&&e>r;a++){var s=t.charCodeAt(a);r+=s>=0&&127>=s?n:i}return a}function Qn(t){return Hn("国",t)}function Jn(t,e){return bg.measureText(t,e)}function ti(t,e,n,i,r){null!=t&&(t+="");var a=A(i,Qn(e)),o=t?t.split("\n"):[],s=o.length*a,l=s,u=!0;if(n&&(l+=n[0]+n[2]),t&&r){u=!1;var h=r.outerHeight,c=r.outerWidth;if(null!=h&&l>h)t="",o=[];else if(null!=c)for(var d=Zn(c-(n?n[1]+n[3]:0),e,r.ellipsis,{minChar:r.minChar,placeholder:r.placeholder}),f=0,p=o.length;p>f;f++)o[f]=Kn(o[f],d)}return{lines:o,height:s,outerHeight:l,lineHeight:a,canCacheByTextString:u}}function ei(t,e){var n={lines:[],width:0,height:0};if(null!=t&&(t+=""),!t)return n;for(var i,r=xg.lastIndex=0;null!=(i=xg.exec(t));){var a=i.index;a>r&&ni(n,t.substring(r,a)),ni(n,i[2],i[1]),r=xg.lastIndex}r<t.length&&ni(n,t.substring(r,t.length));var o=n.lines,s=0,l=0,u=[],h=e.textPadding,c=e.truncate,d=c&&c.outerWidth,f=c&&c.outerHeight;h&&(null!=d&&(d-=h[1]+h[3]),null!=f&&(f-=h[0]+h[2]));for(var p=0;p<o.length;p++){for(var g=o[p],v=0,m=0,y=0;y<g.tokens.length;y++){var _=g.tokens[y],x=_.styleName&&e.rich[_.styleName]||{},w=_.textPadding=x.textPadding,b=_.font=x.font||e.font,S=_.textHeight=A(x.textHeight,Qn(b));if(w&&(S+=w[0]+w[2]),_.height=S,_.lineHeight=k(x.textLineHeight,e.textLineHeight,S),_.textAlign=x&&x.textAlign||e.textAlign,_.textVerticalAlign=x&&x.textVerticalAlign||"middle",null!=f&&s+_.lineHeight>f)return{lines:[],width:0,height:0};_.textWidth=Hn(_.text,b);var M=x.textWidth,I=null==M||"auto"===M;if("string"==typeof M&&"%"===M.charAt(M.length-1))_.percentWidth=M,u.push(_),M=0;else{if(I){M=_.textWidth;var T=x.textBackgroundColor,C=T&&T.image;C&&(C=Rn(C),Vn(C)&&(M=Math.max(M,C.width*S/C.height)))}var D=w?w[1]+w[3]:0;M+=D;var P=null!=d?d-m:null;null!=P&&M>P&&(!I||D>P?(_.text="",_.textWidth=M=0):(_.text=jn(_.text,P-D,b,c.ellipsis,{minChar:c.minChar}),_.textWidth=Hn(_.text,b),M=_.textWidth+D))}m+=_.width=M,x&&(v=Math.max(v,_.lineHeight))}g.width=m,g.lineHeight=v,s+=v,l=Math.max(l,m)}n.outerWidth=n.width=A(e.textWidth,l),n.outerHeight=n.height=A(e.textHeight,s),h&&(n.outerWidth+=h[1]+h[3],n.outerHeight+=h[0]+h[2]);for(var p=0;p<u.length;p++){var _=u[p],L=_.percentWidth;_.width=parseInt(L,10)/100*l}return n}function ni(t,e,n){for(var i=""===e,r=e.split("\n"),a=t.lines,o=0;o<r.length;o++){var s=r[o],l={styleName:n,text:s,isLineHolder:!s&&!i};if(o)a.push({tokens:[l]});else{var u=(a[a.length-1]||(a[0]={tokens:[]})).tokens,h=u.length;1===h&&u[0].isLineHolder?u[0]=l:(s||!h||i)&&u.push(l)}}}function ii(t){var e=(t.fontSize||t.fontFamily)&&[t.fontStyle,t.fontWeight,(t.fontSize||12)+"px",t.fontFamily||"sans-serif"].join(" ");return e&&B(e)||t.textFont||t.font}function ri(t,e){var n,i,r,a,o=e.x,s=e.y,l=e.width,u=e.height,h=e.r;0>l&&(o+=l,l=-l),0>u&&(s+=u,u=-u),"number"==typeof h?n=i=r=a=h:h instanceof Array?1===h.length?n=i=r=a=h[0]:2===h.length?(n=r=h[0],i=a=h[1]):3===h.length?(n=h[0],i=a=h[1],r=h[2]):(n=h[0],i=h[1],r=h[2],a=h[3]):n=i=r=a=0;var c;n+i>l&&(c=n+i,n*=l/c,i*=l/c),r+a>l&&(c=r+a,r*=l/c,a*=l/c),i+r>u&&(c=i+r,i*=u/c,r*=u/c),n+a>u&&(c=n+a,n*=u/c,a*=u/c),t.moveTo(o+n,s),t.lineTo(o+l-i,s),0!==i&&t.arc(o+l-i,s+i,i,-Math.PI/2,0),t.lineTo(o+l,s+u-r),0!==r&&t.arc(o+l-r,s+u-r,r,0,Math.PI/2),t.lineTo(o+a,s+u),0!==a&&t.arc(o+a,s+u-a,a,Math.PI/2,Math.PI),t.lineTo(o,s+n),0!==n&&t.arc(o+n,s+n,n,Math.PI,1.5*Math.PI)}function ai(t){return oi(t),f(t.rich,oi),t}function oi(t){if(t){t.font=ii(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||Mg[e]?e:"left";var n=t.textVerticalAlign||t.textBaseline;"center"===n&&(n="middle"),t.textVerticalAlign=null==n||Ig[n]?n:"top";var i=t.textPadding;i&&(t.textPadding=L(t.textPadding))}}function si(t,e,n,i,r,a){i.rich?ui(t,e,n,i,r,a):li(t,e,n,i,r,a)}function li(t,e,n,i,r,a){var o,s=fi(i),l=!1,u=e.__attrCachedBy===og.PLAIN_TEXT;a!==sg?(a&&(o=a.style,l=!s&&u&&o),e.__attrCachedBy=s?og.NONE:og.PLAIN_TEXT):u&&(e.__attrCachedBy=og.NONE);var h=i.font||Sg;l&&h===(o.font||Sg)||(e.font=h);var c=t.__computedFont;t.__styleFont!==h&&(t.__styleFont=h,c=t.__computedFont=e.font);var d=i.textPadding,f=i.textLineHeight,p=t.__textCotentBlock;(!p||t.__dirtyText)&&(p=t.__textCotentBlock=ti(n,c,d,f,i.truncate));var g=p.outerHeight,v=p.lines,m=p.lineHeight,y=vi(Dg,t,i,r),_=y.baseX,x=y.baseY,w=y.textAlign||"left",b=y.textVerticalAlign;ci(e,i,r,_,x);var S=Un(x,g,b),M=_,I=S;if(s||d){var T=Hn(n,c),C=T;d&&(C+=d[1]+d[3]);var D=Yn(_,C,w);s&&pi(t,e,i,D,S,C,g),d&&(M=wi(_,w,d),I+=d[0])}e.textAlign=w,e.textBaseline="middle",e.globalAlpha=i.opacity||1;for(var A=0;A<Tg.length;A++){var k=Tg[A],P=k[0],L=k[1],O=i[P];l&&O===o[P]||(e[L]=ag(e,L,O||k[2]))}I+=m/2;var B=i.textStrokeWidth,E=l?o.textStrokeWidth:null,z=!l||B!==E,R=!l||z||i.textStroke!==o.textStroke,N=yi(i.textStroke,B),F=_i(i.textFill);if(N&&(z&&(e.lineWidth=B),R&&(e.strokeStyle=N)),F&&(l&&i.textFill===o.textFill||(e.fillStyle=F)),1===v.length)N&&e.strokeText(v[0],M,I),F&&e.fillText(v[0],M,I);else for(var A=0;A<v.length;A++)N&&e.strokeText(v[A],M,I),F&&e.fillText(v[A],M,I),I+=m}function ui(t,e,n,i,r,a){a!==sg&&(e.__attrCachedBy=og.NONE);var o=t.__textCotentBlock;(!o||t.__dirtyText)&&(o=t.__textCotentBlock=ei(n,i)),hi(t,e,o,i,r)}function hi(t,e,n,i,r){var a=n.width,o=n.outerWidth,s=n.outerHeight,l=i.textPadding,u=vi(Dg,t,i,r),h=u.baseX,c=u.baseY,d=u.textAlign,f=u.textVerticalAlign;ci(e,i,r,h,c);var p=Yn(h,o,d),g=Un(c,s,f),v=p,m=g;l&&(v+=l[3],m+=l[0]);var y=v+a;fi(i)&&pi(t,e,i,p,g,o,s);for(var _=0;_<n.lines.length;_++){for(var x,w=n.lines[_],b=w.tokens,S=b.length,M=w.lineHeight,I=w.width,T=0,C=v,D=y,A=S-1;S>T&&(x=b[T],!x.textAlign||"left"===x.textAlign);)di(t,e,x,i,M,m,C,"left"),I-=x.width,C+=x.width,T++;for(;A>=0&&(x=b[A],"right"===x.textAlign);)di(t,e,x,i,M,m,D,"right"),I-=x.width,D-=x.width,A--;for(C+=(a-(C-v)-(y-D)-I)/2;A>=T;)x=b[T],di(t,e,x,i,M,m,C+x.width/2,"center"),C+=x.width,T++;m+=M}}function ci(t,e,n,i,r){if(n&&e.textRotation){var a=e.textOrigin;"center"===a?(i=n.width/2+n.x,r=n.height/2+n.y):a&&(i=a[0]+n.x,r=a[1]+n.y),t.translate(i,r),t.rotate(-e.textRotation),t.translate(-i,-r)}}function di(t,e,n,i,r,a,o,s){var l=i.rich[n.styleName]||{};l.text=n.text;var u=n.textVerticalAlign,h=a+r/2;"top"===u?h=a+n.height/2:"bottom"===u&&(h=a+r-n.height/2),!n.isLineHolder&&fi(l)&&pi(t,e,l,"right"===s?o-n.width:"center"===s?o-n.width/2:o,h-n.height/2,n.width,n.height);var c=n.textPadding;c&&(o=wi(o,s,c),h-=n.height/2-c[2]-n.textHeight/2),mi(e,"shadowBlur",k(l.textShadowBlur,i.textShadowBlur,0)),mi(e,"shadowColor",l.textShadowColor||i.textShadowColor||"transparent"),mi(e,"shadowOffsetX",k(l.textShadowOffsetX,i.textShadowOffsetX,0)),mi(e,"shadowOffsetY",k(l.textShadowOffsetY,i.textShadowOffsetY,0)),mi(e,"textAlign",s),mi(e,"textBaseline","middle"),mi(e,"font",n.font||Sg); +var d=yi(l.textStroke||i.textStroke,p),f=_i(l.textFill||i.textFill),p=A(l.textStrokeWidth,i.textStrokeWidth);d&&(mi(e,"lineWidth",p),mi(e,"strokeStyle",d),e.strokeText(n.text,o,h)),f&&(mi(e,"fillStyle",f),e.fillText(n.text,o,h))}function fi(t){return!!(t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor)}function pi(t,e,n,i,r,a,o){var s=n.textBackgroundColor,l=n.textBorderWidth,u=n.textBorderColor,h=b(s);if(mi(e,"shadowBlur",n.textBoxShadowBlur||0),mi(e,"shadowColor",n.textBoxShadowColor||"transparent"),mi(e,"shadowOffsetX",n.textBoxShadowOffsetX||0),mi(e,"shadowOffsetY",n.textBoxShadowOffsetY||0),h||l&&u){e.beginPath();var c=n.textBorderRadius;c?ri(e,{x:i,y:r,width:a,height:o,r:c}):e.rect(i,r,a,o),e.closePath()}if(h)if(mi(e,"fillStyle",s),null!=n.fillOpacity){var d=e.globalAlpha;e.globalAlpha=n.fillOpacity*n.opacity,e.fill(),e.globalAlpha=d}else e.fill();else if(S(s)){var f=s.image;f=Nn(f,null,t,gi,s),f&&Vn(f)&&e.drawImage(f,i,r,a,o)}if(l&&u)if(mi(e,"lineWidth",l),mi(e,"strokeStyle",u),null!=n.strokeOpacity){var d=e.globalAlpha;e.globalAlpha=n.strokeOpacity*n.opacity,e.stroke(),e.globalAlpha=d}else e.stroke()}function gi(t,e){e.image=t}function vi(t,e,n,i){var r=n.x||0,a=n.y||0,o=n.textAlign,s=n.textVerticalAlign;if(i){var l=n.textPosition;if(l instanceof Array)r=i.x+xi(l[0],i.width),a=i.y+xi(l[1],i.height);else{var u=e&&e.calculateTextPosition?e.calculateTextPosition(Cg,n,i):qn(Cg,n,i);r=u.x,a=u.y,o=o||u.textAlign,s=s||u.textVerticalAlign}var h=n.textOffset;h&&(r+=h[0],a+=h[1])}return t=t||{},t.baseX=r,t.baseY=a,t.textAlign=o,t.textVerticalAlign=s,t}function mi(t,e,n){return t[e]=ag(t,e,n),t[e]}function yi(t,e){return null==t||0>=e||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function _i(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function xi(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function wi(t,e,n){return"right"===e?t-n[1]:"center"===e?t+n[3]/2-n[1]/2:t+n[3]}function bi(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function Si(t){t=t||{},Kp.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new ug(t.style,this),this._rect=null,this.__clipPaths=null}function Mi(t){Si.call(this,t)}function Ii(t){return parseInt(t,10)}function Ti(t){return t?t.__builtin__?!0:"function"!=typeof t.resize||"function"!=typeof t.refresh?!1:!0:!1}function Ci(t,e,n){return Eg.copy(t.getBoundingRect()),t.transform&&Eg.applyTransform(t.transform),zg.width=e,zg.height=n,!Eg.intersect(zg)}function Di(t,e){if(t===e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var n=0;n<t.length;n++)if(t[n]!==e[n])return!0;return!1}function Ai(t,e){for(var n=0;n<t.length;n++){var i=t[n];i.setTransform(e),e.beginPath(),i.buildPath(e,i.shape),e.clip(),i.restoreTransform(e)}}function ki(t,e){var n=document.createElement("div");return n.style.cssText=["position:relative","width:"+t+"px","height:"+e+"px","padding:0","margin:0","border-width:0"].join(";")+";",n}function Pi(t){return"mousewheel"===t&&Hf.browser.firefox?"DOMMouseScroll":t}function Li(t){var e=t.pointerType;return"pen"===e||"touch"===e}function Oi(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout(function(){t.touching=!1,t.touchTimer=null},700)}function Bi(t){t&&(t.zrByTouch=!0)}function Ei(t,e){return _e(t.dom,new Ri(t,e),!0)}function zi(t,e){var n=!1;do e=e&&e.parentNode;while(e&&9!==e.nodeType&&!(n=e===t.painterRoot));return n}function Ri(t,e){this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY}function Ni(t,e){var n=e.domHandlers;Hf.pointerEventsSupported?f(Hg.pointer,function(i){Vi(e,i,function(e){n[i].call(t,e)})}):(Hf.touchEventsSupported&&f(Hg.touch,function(i){Vi(e,i,function(r){n[i].call(t,r),Oi(e)})}),f(Hg.mouse,function(i){Vi(e,i,function(r){r=ye(r),e.touching||n[i].call(t,r)})}))}function Fi(t,e){function n(n){function i(i){i=ye(i),zi(t,i.target)||(i=Ei(t,i),e.domHandlers[n].call(t,i))}Vi(e,n,i,{capture:!0})}Hf.pointerEventsSupported?f(Gg.pointer,n):Hf.touchEventsSupported||f(Gg.mouse,n)}function Vi(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,xe(t.domTarget,Pi(e),n,i)}function Hi(t){var e=t.mounted;for(var n in e)e.hasOwnProperty(n)&&we(t.domTarget,Pi(n),e[n],t.listenerOpts[n]);t.mounted={}}function Gi(t,e){if(t._mayPointerCapture=null,Vg&&t._pointerCapturing^e){t._pointerCapturing=e;var n=t._globalHandlerScope;e?Fi(t,n):Hi(n)}}function Wi(t,e){this.domTarget=t,this.domHandlers=e,this.mounted={},this.listenerOpts={},this.touchTimer=null,this.touching=!1}function Xi(t,e){up.call(this),this.dom=t,this.painterRoot=e,this._localHandlerScope=new Wi(t,Xg),Vg&&(this._globalHandlerScope=new Wi(document,Yg)),this._pointerCapturing=!1,this._mayPointerCapture=null,Ni(this,this._localHandlerScope)}function Yi(t,e){var n=new $g(Ff(),t,e);return Zg[n.id]=n,n}function Ui(t){if(t)t.dispose();else{for(var e in Zg)Zg.hasOwnProperty(e)&&Zg[e].dispose();Zg={}}return this}function qi(t){return Zg[t]}function ji(t,e){jg[t]=e}function Zi(t){delete Zg[t]}function Ki(t){return t instanceof Array?t:null==t?[]:[t]}function $i(t,e,n){if(t){t[e]=t[e]||{},t.emphasis=t.emphasis||{},t.emphasis[e]=t.emphasis[e]||{};for(var i=0,r=n.length;r>i;i++){var a=n[i];!t.emphasis[e].hasOwnProperty(a)&&t[e].hasOwnProperty(a)&&(t.emphasis[e][a]=t[e][a])}}}function Qi(t){return!tv(t)||ev(t)||t instanceof Date?t:t.value}function Ji(t){return tv(t)&&!(t instanceof Array)}function tr(t,e){e=(e||[]).slice();var n=p(t||[],function(t){return{exist:t}});return Jg(e,function(t,i){if(tv(t)){for(var r=0;r<n.length;r++)if(!n[r].option&&null!=t.id&&n[r].exist.id===t.id+"")return n[r].option=t,void(e[i]=null);for(var r=0;r<n.length;r++){var a=n[r].exist;if(!(n[r].option||null!=a.id&&null!=t.id||null==t.name||ir(t)||ir(a)||a.name!==t.name+""))return n[r].option=t,void(e[i]=null)}}}),Jg(e,function(t){if(tv(t)){for(var e=0;e<n.length;e++){var i=n[e].exist;if(!n[e].option&&!ir(i)&&null==t.id){n[e].option=t;break}}e>=n.length&&n.push({option:t})}}),n}function er(t){var e=N();Jg(t,function(t){var n=t.exist;n&&e.set(n.id,t)}),Jg(t,function(t){var n=t.option;O(!n||null==n.id||!e.get(n.id)||e.get(n.id)===t,"id duplicates: "+(n&&n.id)),n&&null!=n.id&&e.set(n.id,t),!t.keyInfo&&(t.keyInfo={})}),Jg(t,function(t,n){var i=t.exist,r=t.option,a=t.keyInfo;if(tv(r)){if(a.name=null!=r.name?r.name+"":i?i.name:nv+n,i)a.id=i.id;else if(null!=r.id)a.id=r.id+"";else{var o=0;do a.id="\x00"+a.name+"\x00"+o++;while(e.get(a.id))}e.set(a.id,t)}})}function nr(t){var e=t.name;return!(!e||!e.indexOf(nv))}function ir(t){return tv(t)&&t.id&&0===(t.id+"").indexOf("\x00_ec_\x00")}function rr(t,e){return null!=e.dataIndexInside?e.dataIndexInside:null!=e.dataIndex?x(e.dataIndex)?p(e.dataIndex,function(e){return t.indexOfRawIndex(e)}):t.indexOfRawIndex(e.dataIndex):null!=e.name?x(e.name)?p(e.name,function(e){return t.indexOfName(e)}):t.indexOfName(e.name):void 0}function ar(){var t="__\x00ec_inner_"+rv++ +"_"+Math.random().toFixed(5);return function(e){return e[t]||(e[t]={})}}function or(t,e,n){if(b(e)){var i={};i[e+"Index"]=0,e=i}var r=n&&n.defaultMainType;!r||sr(e,r+"Index")||sr(e,r+"Id")||sr(e,r+"Name")||(e[r+"Index"]=0);var a={};return Jg(e,function(i,r){var i=e[r];if("dataIndex"===r||"dataIndexInside"===r)return void(a[r]=i);var o=r.match(/^(\w+)(Index|Id|Name)$/)||[],s=o[1],l=(o[2]||"").toLowerCase();if(!(!s||!l||null==i||"index"===l&&"none"===i||n&&n.includeMainTypes&&u(n.includeMainTypes,s)<0)){var h={mainType:s};("index"!==l||"all"!==i)&&(h[l]=i);var c=t.queryComponents(h);a[s+"Models"]=c,a[s+"Model"]=c[0]}}),a}function sr(t,e){return t&&t.hasOwnProperty(e)}function lr(t,e,n){t.setAttribute?t.setAttribute(e,n):t[e]=n}function ur(t,e){return t.getAttribute?t.getAttribute(e):t[e]}function hr(t){return"auto"===t?Hf.domSupported?"html":"richText":t||"html"}function cr(t){var e={main:"",sub:""};return t&&(t=t.split(av),e.main=t[0]||"",e.sub=t[1]||""),e}function dr(t){O(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}function fr(t){t.$constructor=t,t.extend=function(t){var e=this,n=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return o(n.prototype,t),n.extend=this.extend,n.superCall=gr,n.superApply=vr,h(n,this),n.superClass=e,n}}function pr(t){var e=["__\x00is_clz",sv++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function gr(t,e){var n=P(arguments,2);return this.superClass.prototype[e].apply(t,n)}function vr(t,e,n){return this.superClass.prototype[e].apply(t,n)}function mr(t,e){function n(t){var e=i[t.main];return e&&e[ov]||(e=i[t.main]={},e[ov]=!0),e}e=e||{};var i={};if(t.registerClass=function(t,e){if(e)if(dr(e),e=cr(e),e.sub){if(e.sub!==ov){var r=n(e);r[e.sub]=t}}else i[e.main]=t;return t},t.getClass=function(t,e,n){var r=i[t];if(r&&r[ov]&&(r=e?r[e]:null),n&&!r)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return r},t.getClassesByMainType=function(t){t=cr(t);var e=[],n=i[t.main];return n&&n[ov]?f(n,function(t,n){n!==ov&&e.push(t)}):e.push(n),e},t.hasClass=function(t){return t=cr(t),!!i[t.main]},t.getAllClassMainTypes=function(){var t=[];return f(i,function(e,n){t.push(n)}),t},t.hasSubTypes=function(t){t=cr(t);var e=i[t.main];return e&&e[ov]},t.parseClassType=cr,e.registerWhenExtend){var r=t.extend;r&&(t.extend=function(e){var n=r.call(this,e);return t.registerClass(n,e.type)})}return t}function yr(t){return t>-gv&&gv>t}function _r(t){return t>gv||-gv>t}function xr(t,e,n,i,r){var a=1-r;return a*a*(a*t+3*r*e)+r*r*(r*i+3*a*n)}function wr(t,e,n,i,r){var a=1-r;return 3*(((e-t)*a+2*(n-e)*r)*a+(i-n)*r*r)}function br(t,e,n,i,r,a){var o=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,h=s*s-3*o*l,c=s*l-9*o*u,d=l*l-3*s*u,f=0;if(yr(h)&&yr(c))if(yr(s))a[0]=0;else{var p=-l/s;p>=0&&1>=p&&(a[f++]=p)}else{var g=c*c-4*h*d;if(yr(g)){var v=c/h,p=-s/o+v,m=-v/2;p>=0&&1>=p&&(a[f++]=p),m>=0&&1>=m&&(a[f++]=m)}else if(g>0){var y=pv(g),_=h*s+1.5*o*(-c+y),x=h*s+1.5*o*(-c-y);_=0>_?-fv(-_,yv):fv(_,yv),x=0>x?-fv(-x,yv):fv(x,yv);var p=(-s-(_+x))/(3*o);p>=0&&1>=p&&(a[f++]=p)}else{var w=(2*h*s-3*o*c)/(2*pv(h*h*h)),b=Math.acos(w)/3,S=pv(h),M=Math.cos(b),p=(-s-2*S*M)/(3*o),m=(-s+S*(M+mv*Math.sin(b)))/(3*o),I=(-s+S*(M-mv*Math.sin(b)))/(3*o);p>=0&&1>=p&&(a[f++]=p),m>=0&&1>=m&&(a[f++]=m),I>=0&&1>=I&&(a[f++]=I)}}return f}function Sr(t,e,n,i,r){var a=6*n-12*e+6*t,o=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(yr(o)){if(_r(a)){var u=-s/a;u>=0&&1>=u&&(r[l++]=u)}}else{var h=a*a-4*o*s;if(yr(h))r[0]=-a/(2*o);else if(h>0){var c=pv(h),u=(-a+c)/(2*o),d=(-a-c)/(2*o);u>=0&&1>=u&&(r[l++]=u),d>=0&&1>=d&&(r[l++]=d)}}return l}function Mr(t,e,n,i,r,a){var o=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-o)*r+o,h=(l-s)*r+s,c=(h-u)*r+u;a[0]=t,a[1]=o,a[2]=u,a[3]=c,a[4]=c,a[5]=h,a[6]=l,a[7]=i}function Ir(t,e,n,i,r,a,o,s,l,u,h){var c,d,f,p,g,v=.005,m=1/0;_v[0]=l,_v[1]=u;for(var y=0;1>y;y+=.05)xv[0]=xr(t,n,r,o,y),xv[1]=xr(e,i,a,s,y),p=op(_v,xv),m>p&&(c=y,m=p);m=1/0;for(var _=0;32>_&&!(vv>v);_++)d=c-v,f=c+v,xv[0]=xr(t,n,r,o,d),xv[1]=xr(e,i,a,s,d),p=op(xv,_v),d>=0&&m>p?(c=d,m=p):(wv[0]=xr(t,n,r,o,f),wv[1]=xr(e,i,a,s,f),g=op(wv,_v),1>=f&&m>g?(c=f,m=g):v*=.5);return h&&(h[0]=xr(t,n,r,o,c),h[1]=xr(e,i,a,s,c)),pv(m)}function Tr(t,e,n,i){var r=1-i;return r*(r*t+2*i*e)+i*i*n}function Cr(t,e,n,i){return 2*((1-i)*(e-t)+i*(n-e))}function Dr(t,e,n,i,r){var a=t-2*e+n,o=2*(e-t),s=t-i,l=0;if(yr(a)){if(_r(o)){var u=-s/o;u>=0&&1>=u&&(r[l++]=u)}}else{var h=o*o-4*a*s;if(yr(h)){var u=-o/(2*a);u>=0&&1>=u&&(r[l++]=u)}else if(h>0){var c=pv(h),u=(-o+c)/(2*a),d=(-o-c)/(2*a);u>=0&&1>=u&&(r[l++]=u),d>=0&&1>=d&&(r[l++]=d)}}return l}function Ar(t,e,n){var i=t+n-2*e;return 0===i?.5:(t-e)/i}function kr(t,e,n,i,r){var a=(e-t)*i+t,o=(n-e)*i+e,s=(o-a)*i+a;r[0]=t,r[1]=a,r[2]=s,r[3]=s,r[4]=o,r[5]=n}function Pr(t,e,n,i,r,a,o,s,l){var u,h=.005,c=1/0;_v[0]=o,_v[1]=s;for(var d=0;1>d;d+=.05){xv[0]=Tr(t,n,r,d),xv[1]=Tr(e,i,a,d);var f=op(_v,xv);c>f&&(u=d,c=f)}c=1/0;for(var p=0;32>p&&!(vv>h);p++){var g=u-h,v=u+h;xv[0]=Tr(t,n,r,g),xv[1]=Tr(e,i,a,g);var f=op(xv,_v);if(g>=0&&c>f)u=g,c=f;else{wv[0]=Tr(t,n,r,v),wv[1]=Tr(e,i,a,v);var m=op(wv,_v);1>=v&&c>m?(u=v,c=m):h*=.5}}return l&&(l[0]=Tr(t,n,r,u),l[1]=Tr(e,i,a,u)),pv(c)}function Lr(t,e,n){if(0!==t.length){var i,r=t[0],a=r[0],o=r[0],s=r[1],l=r[1];for(i=1;i<t.length;i++)r=t[i],a=bv(a,r[0]),o=Sv(o,r[0]),s=bv(s,r[1]),l=Sv(l,r[1]);e[0]=a,e[1]=s,n[0]=o,n[1]=l}}function Or(t,e,n,i,r,a){r[0]=bv(t,n),r[1]=bv(e,i),a[0]=Sv(t,n),a[1]=Sv(e,i)}function Br(t,e,n,i,r,a,o,s,l,u){var h,c=Sr,d=xr,f=c(t,n,r,o,kv);for(l[0]=1/0,l[1]=1/0,u[0]=-1/0,u[1]=-1/0,h=0;f>h;h++){var p=d(t,n,r,o,kv[h]);l[0]=bv(p,l[0]),u[0]=Sv(p,u[0])}for(f=c(e,i,a,s,Pv),h=0;f>h;h++){var g=d(e,i,a,s,Pv[h]);l[1]=bv(g,l[1]),u[1]=Sv(g,u[1])}l[0]=bv(t,l[0]),u[0]=Sv(t,u[0]),l[0]=bv(o,l[0]),u[0]=Sv(o,u[0]),l[1]=bv(e,l[1]),u[1]=Sv(e,u[1]),l[1]=bv(s,l[1]),u[1]=Sv(s,u[1])}function Er(t,e,n,i,r,a,o,s){var l=Ar,u=Tr,h=Sv(bv(l(t,n,r),1),0),c=Sv(bv(l(e,i,a),1),0),d=u(t,n,r,h),f=u(e,i,a,c);o[0]=bv(t,r,d),o[1]=bv(e,a,f),s[0]=Sv(t,r,d),s[1]=Sv(e,a,f)}function zr(t,e,n,i,r,a,o,s,l){var u=oe,h=se,c=Math.abs(r-a);if(1e-4>c%Tv&&c>1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(Cv[0]=Iv(r)*n+t,Cv[1]=Mv(r)*i+e,Dv[0]=Iv(a)*n+t,Dv[1]=Mv(a)*i+e,u(s,Cv,Dv),h(l,Cv,Dv),r%=Tv,0>r&&(r+=Tv),a%=Tv,0>a&&(a+=Tv),r>a&&!o?a+=Tv:a>r&&o&&(r+=Tv),o){var d=a;a=r,r=d}for(var f=0;a>f;f+=Math.PI/2)f>r&&(Av[0]=Iv(f)*n+t,Av[1]=Mv(f)*i+e,u(s,Av,s),h(l,Av,l))}function Rr(t,e,n,i,r,a,o){if(0===r)return!1;var s=r,l=0,u=t;if(o>e+s&&o>i+s||e-s>o&&i-s>o||a>t+s&&a>n+s||t-s>a&&n-s>a)return!1;if(t===n)return Math.abs(a-t)<=s/2;l=(e-i)/(t-n),u=(t*i-n*e)/(t-n);var h=l*a-o+u,c=h*h/(l*l+1);return s/2*s/2>=c}function Nr(t,e,n,i,r,a,o,s,l,u,h){if(0===l)return!1;var c=l;if(h>e+c&&h>i+c&&h>a+c&&h>s+c||e-c>h&&i-c>h&&a-c>h&&s-c>h||u>t+c&&u>n+c&&u>r+c&&u>o+c||t-c>u&&n-c>u&&r-c>u&&o-c>u)return!1;var d=Ir(t,e,n,i,r,a,o,s,u,h,null);return c/2>=d}function Fr(t,e,n,i,r,a,o,s,l){if(0===o)return!1;var u=o;if(l>e+u&&l>i+u&&l>a+u||e-u>l&&i-u>l&&a-u>l||s>t+u&&s>n+u&&s>r+u||t-u>s&&n-u>s&&r-u>s)return!1;var h=Pr(t,e,n,i,r,a,s,l,null);return u/2>=h}function Vr(t){return t%=Yv,0>t&&(t+=Yv),t}function Hr(t,e,n,i,r,a,o,s,l){if(0===o)return!1;var u=o;s-=t,l-=e;var h=Math.sqrt(s*s+l*l);if(h-u>n||n>h+u)return!1;if(Math.abs(i-r)%Uv<1e-4)return!0;if(a){var c=i;i=Vr(r),r=Vr(c)}else i=Vr(i),r=Vr(r);i>r&&(r+=Uv);var d=Math.atan2(l,s);return 0>d&&(d+=Uv),d>=i&&r>=d||d+Uv>=i&&r>=d+Uv}function Gr(t,e,n,i,r,a){if(a>e&&a>i||e>a&&i>a)return 0;if(i===e)return 0;var o=e>i?1:-1,s=(a-e)/(i-e);(1===s||0===s)&&(o=e>i?.5:-.5);var l=s*(n-t)+t;return l===r?1/0:l>r?o:0}function Wr(t,e){return Math.abs(t-e)<Zv}function Xr(){var t=$v[0];$v[0]=$v[1],$v[1]=t}function Yr(t,e,n,i,r,a,o,s,l,u){if(u>e&&u>i&&u>a&&u>s||e>u&&i>u&&a>u&&s>u)return 0;var h=br(e,i,a,s,u,Kv);if(0===h)return 0;for(var c,d,f=0,p=-1,g=0;h>g;g++){var v=Kv[g],m=0===v||1===v?.5:1,y=xr(t,n,r,o,v);l>y||(0>p&&(p=Sr(e,i,a,s,$v),$v[1]<$v[0]&&p>1&&Xr(),c=xr(e,i,a,s,$v[0]),p>1&&(d=xr(e,i,a,s,$v[1]))),f+=2===p?v<$v[0]?e>c?m:-m:v<$v[1]?c>d?m:-m:d>s?m:-m:v<$v[0]?e>c?m:-m:c>s?m:-m)}return f}function Ur(t,e,n,i,r,a,o,s){if(s>e&&s>i&&s>a||e>s&&i>s&&a>s)return 0;var l=Dr(e,i,a,s,Kv);if(0===l)return 0;var u=Ar(e,i,a);if(u>=0&&1>=u){for(var h=0,c=Tr(e,i,a,u),d=0;l>d;d++){var f=0===Kv[d]||1===Kv[d]?.5:1,p=Tr(t,n,r,Kv[d]);o>p||(h+=Kv[d]<u?e>c?f:-f:c>a?f:-f)}return h}var f=0===Kv[0]||1===Kv[0]?.5:1,p=Tr(t,n,r,Kv[0]);return o>p?0:e>a?f:-f}function qr(t,e,n,i,r,a,o,s){if(s-=e,s>n||-n>s)return 0;var l=Math.sqrt(n*n-s*s);Kv[0]=-l,Kv[1]=l;var u=Math.abs(i-r);if(1e-4>u)return 0;if(1e-4>u%jv){i=0,r=jv;var h=a?1:-1;return o>=Kv[0]+t&&o<=Kv[1]+t?h:0}if(a){var l=i;i=Vr(r),r=Vr(l)}else i=Vr(i),r=Vr(r);i>r&&(r+=jv);for(var c=0,d=0;2>d;d++){var f=Kv[d];if(f+t>o){var p=Math.atan2(s,f),h=a?1:-1;0>p&&(p=jv+p),(p>=i&&r>=p||p+jv>=i&&r>=p+jv)&&(p>Math.PI/2&&p<1.5*Math.PI&&(h=-h),c+=h)}}return c}function jr(t,e,n,i,r){for(var a=0,o=0,s=0,l=0,u=0,h=0;h<t.length;){var c=t[h++];switch(c===qv.M&&h>1&&(n||(a+=Gr(o,s,l,u,i,r))),1===h&&(o=t[h],s=t[h+1],l=o,u=s),c){case qv.M:l=t[h++],u=t[h++],o=l,s=u;break;case qv.L:if(n){if(Rr(o,s,t[h],t[h+1],e,i,r))return!0}else a+=Gr(o,s,t[h],t[h+1],i,r)||0;o=t[h++],s=t[h++];break;case qv.C:if(n){if(Nr(o,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],e,i,r))return!0}else a+=Yr(o,s,t[h++],t[h++],t[h++],t[h++],t[h],t[h+1],i,r)||0;o=t[h++],s=t[h++];break;case qv.Q:if(n){if(Fr(o,s,t[h++],t[h++],t[h],t[h+1],e,i,r))return!0}else a+=Ur(o,s,t[h++],t[h++],t[h],t[h+1],i,r)||0;o=t[h++],s=t[h++];break;case qv.A:var d=t[h++],f=t[h++],p=t[h++],g=t[h++],v=t[h++],m=t[h++];h+=1;var y=1-t[h++],_=Math.cos(v)*p+d,x=Math.sin(v)*g+f;h>1?a+=Gr(o,s,_,x,i,r):(l=_,u=x);var w=(i-d)*g/p+d;if(n){if(Hr(d,f,g,v,v+m,y,e,w,r))return!0}else a+=qr(d,f,g,v,v+m,y,w,r);o=Math.cos(v+m)*p+d,s=Math.sin(v+m)*g+f;break;case qv.R:l=o=t[h++],u=s=t[h++];var b=t[h++],S=t[h++],_=l+b,x=u+S;if(n){if(Rr(l,u,_,u,e,i,r)||Rr(_,u,_,x,e,i,r)||Rr(_,x,l,x,e,i,r)||Rr(l,x,l,u,e,i,r))return!0}else a+=Gr(_,u,_,x,i,r),a+=Gr(l,x,l,u,i,r);break;case qv.Z:if(n){if(Rr(o,s,l,u,e,i,r))return!0}else a+=Gr(o,s,l,u,i,r);o=l,s=u}}return n||Wr(s,u)||(a+=Gr(o,s,l,u,i,r)||0),0!==a}function Zr(t,e,n){return jr(t,0,!1,e,n)}function Kr(t,e,n,i){return jr(t,e,!0,n,i)}function $r(t){Si.call(this,t),this.path=null}function Qr(t,e,n,i,r,a,o,s,l,u,h){var c=l*(um/180),d=lm(c)*(t-n)/2+sm(c)*(e-i)/2,f=-1*sm(c)*(t-n)/2+lm(c)*(e-i)/2,p=d*d/(o*o)+f*f/(s*s);p>1&&(o*=om(p),s*=om(p));var g=(r===a?-1:1)*om((o*o*s*s-o*o*f*f-s*s*d*d)/(o*o*f*f+s*s*d*d))||0,v=g*o*f/s,m=g*-s*d/o,y=(t+n)/2+lm(c)*v-sm(c)*m,_=(e+i)/2+sm(c)*v+lm(c)*m,x=dm([1,0],[(d-v)/o,(f-m)/s]),w=[(d-v)/o,(f-m)/s],b=[(-1*d-v)/o,(-1*f-m)/s],S=dm(w,b);cm(w,b)<=-1&&(S=um),cm(w,b)>=1&&(S=0),0===a&&S>0&&(S-=2*um),1===a&&0>S&&(S+=2*um),h.addData(u,y,_,o,s,x,S,c,a)}function Jr(t){if(!t)return new Xv;for(var e,n=0,i=0,r=n,a=i,o=new Xv,s=Xv.CMD,l=t.match(fm),u=0;u<l.length;u++){for(var h,c=l[u],d=c.charAt(0),f=c.match(pm)||[],p=f.length,g=0;p>g;g++)f[g]=parseFloat(f[g]);for(var v=0;p>v;){var m,y,_,x,w,b,S,M=n,I=i;switch(d){case"l":n+=f[v++],i+=f[v++],h=s.L,o.addData(h,n,i);break;case"L":n=f[v++],i=f[v++],h=s.L,o.addData(h,n,i);break;case"m":n+=f[v++],i+=f[v++],h=s.M,o.addData(h,n,i),r=n,a=i,d="l";break;case"M":n=f[v++],i=f[v++],h=s.M,o.addData(h,n,i),r=n,a=i,d="L";break;case"h":n+=f[v++],h=s.L,o.addData(h,n,i);break;case"H":n=f[v++],h=s.L,o.addData(h,n,i);break;case"v":i+=f[v++],h=s.L,o.addData(h,n,i);break;case"V":i=f[v++],h=s.L,o.addData(h,n,i);break;case"C":h=s.C,o.addData(h,f[v++],f[v++],f[v++],f[v++],f[v++],f[v++]),n=f[v-2],i=f[v-1];break;case"c":h=s.C,o.addData(h,f[v++]+n,f[v++]+i,f[v++]+n,f[v++]+i,f[v++]+n,f[v++]+i),n+=f[v-2],i+=f[v-1];break;case"S":m=n,y=i;var T=o.len(),C=o.data;e===s.C&&(m+=n-C[T-4],y+=i-C[T-3]),h=s.C,M=f[v++],I=f[v++],n=f[v++],i=f[v++],o.addData(h,m,y,M,I,n,i);break;case"s":m=n,y=i;var T=o.len(),C=o.data;e===s.C&&(m+=n-C[T-4],y+=i-C[T-3]),h=s.C,M=n+f[v++],I=i+f[v++],n+=f[v++],i+=f[v++],o.addData(h,m,y,M,I,n,i);break;case"Q":M=f[v++],I=f[v++],n=f[v++],i=f[v++],h=s.Q,o.addData(h,M,I,n,i);break;case"q":M=f[v++]+n,I=f[v++]+i,n+=f[v++],i+=f[v++],h=s.Q,o.addData(h,M,I,n,i);break;case"T":m=n,y=i;var T=o.len(),C=o.data;e===s.Q&&(m+=n-C[T-4],y+=i-C[T-3]),n=f[v++],i=f[v++],h=s.Q,o.addData(h,m,y,n,i);break;case"t":m=n,y=i;var T=o.len(),C=o.data;e===s.Q&&(m+=n-C[T-4],y+=i-C[T-3]),n+=f[v++],i+=f[v++],h=s.Q,o.addData(h,m,y,n,i);break;case"A":_=f[v++],x=f[v++],w=f[v++],b=f[v++],S=f[v++],M=n,I=i,n=f[v++],i=f[v++],h=s.A,Qr(M,I,n,i,b,S,_,x,w,h,o);break;case"a":_=f[v++],x=f[v++],w=f[v++],b=f[v++],S=f[v++],M=n,I=i,n+=f[v++],i+=f[v++],h=s.A,Qr(M,I,n,i,b,S,_,x,w,h,o)}}("z"===d||"Z"===d)&&(h=s.Z,o.addData(h),n=r,i=a),e=h}return o.toStatic(),o}function ta(t,e){var n=Jr(t);return e=e||{},e.buildPath=function(t){if(t.setData){t.setData(n.data);var e=t.getContext();e&&t.rebuildPath(e)}else{var e=t;n.rebuildPath(e)}},e.applyTransform=function(t){am(n,t),this.dirty(!0)},e}function ea(t,e){return new $r(ta(t,e))}function na(t,e){return $r.extend(ta(t,e))}function ia(t,e){for(var n=[],i=t.length,r=0;i>r;r++){var a=t[r];a.path||a.createPathProxy(),a.__dirtyPath&&a.buildPath(a.path,a.shape,!0),n.push(a.path)}var o=new $r(e);return o.createPathProxy(),o.buildPath=function(t){t.appendPath(n);var e=t.getContext();e&&t.rebuildPath(e)},o}function ra(t,e,n,i,r,a,o){var s=.5*(n-t),l=.5*(i-e);return(2*(e-n)+s+l)*o+(-3*(e-n)-2*s-l)*a+s*r+e}function aa(t,e,n){var i=e.points,r=e.smooth;if(i&&i.length>=2){if(r&&"spline"!==r){var a=bm(i,r,n,e.smoothConstraint);t.moveTo(i[0][0],i[0][1]);for(var o=i.length,s=0;(n?o:o-1)>s;s++){var l=a[2*s],u=a[2*s+1],h=i[(s+1)%o];t.bezierCurveTo(l[0],l[1],u[0],u[1],h[0],h[1])}}else{"spline"===r&&(i=wm(i,n)),t.moveTo(i[0][0],i[0][1]);for(var s=1,c=i.length;c>s;s++)t.lineTo(i[s][0],i[s][1])}n&&t.closePath()}}function oa(t,e,n){var i=n&&n.lineWidth;if(e&&i){var r=e.x1,a=e.x2,o=e.y1,s=e.y2;Im(2*r)===Im(2*a)?t.x1=t.x2=la(r,i,!0):(t.x1=r,t.x2=a),Im(2*o)===Im(2*s)?t.y1=t.y2=la(o,i,!0):(t.y1=o,t.y2=s)}}function sa(t,e,n){var i=n&&n.lineWidth;if(e&&i){var r=e.x,a=e.y,o=e.width,s=e.height;t.x=la(r,i,!0),t.y=la(a,i,!0),t.width=Math.max(la(r+o,i,!1)-t.x,0===o?0:1),t.height=Math.max(la(a+s,i,!1)-t.y,0===s?0:1)}}function la(t,e,n){var i=Im(2*t);return(i+Im(e))%2===0?i/2:(i+(n?1:-1))/2}function ua(t,e,n){var i=t.cpx2,r=t.cpy2;return null===i||null===r?[(n?wr:xr)(t.x1,t.cpx1,t.cpx2,t.x2,e),(n?wr:xr)(t.y1,t.cpy1,t.cpy2,t.y2,e)]:[(n?Cr:Tr)(t.x1,t.cpx1,t.x2,e),(n?Cr:Tr)(t.y1,t.cpy1,t.y2,e)]}function ha(t){Si.call(this,t),this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.notClear=!0}function ca(t){return $r.extend(t)}function da(t,e){return na(t,e)}function fa(t,e){qm[t]=e}function pa(t){return qm.hasOwnProperty(t)?qm[t]:void 0}function ga(t,e,n,i){var r=ea(t,e);return n&&("center"===i&&(n=ma(n,r.getBoundingRect())),ya(r,n)),r}function va(t,e,n){var i=new Mi({style:{image:t,x:e.x,y:e.y,width:e.width,height:e.height},onload:function(t){if("center"===n){var r={width:t.width,height:t.height};i.setStyle(ma(e,r))}}});return i}function ma(t,e){var n,i=e.width/e.height,r=t.height*i;r<=t.width?n=t.height:(r=t.width,n=r/i);var a=t.x+t.width/2,o=t.y+t.height/2;return{x:a-r/2,y:o-n/2,width:r,height:n}}function ya(t,e){if(t.applyTransform){var n=t.getBoundingRect(),i=n.calculateTransform(e);t.applyTransform(i)}}function _a(t){return oa(t.shape,t.shape,t.style),t}function xa(t){return sa(t.shape,t.shape,t.style),t}function wa(t){return null!=t&&"none"!==t}function ba(t){if("string"!=typeof t)return t;var e=Km.get(t);return e||(e=Je(t,-.1),1e4>$m&&(Km.set(t,e),$m++)),e}function Sa(t){if(t.__hoverStlDirty){t.__hoverStlDirty=!1;var e=t.__hoverStl;if(!e)return void(t.__cachedNormalStl=t.__cachedNormalZ2=null);var n=t.__cachedNormalStl={};t.__cachedNormalZ2=t.z2;var i=t.style;for(var r in e)null!=e[r]&&(n[r]=i[r]);n.fill=i.fill,n.stroke=i.stroke}}function Ma(t){var e=t.__hoverStl;if(e&&!t.__highlighted){var n=t.__zr,i=t.useHoverLayer&&n&&"canvas"===n.painter.type;if(t.__highlighted=i?"layer":"plain",!(t.isGroup||!n&&t.useHoverLayer)){var r=t,a=t.style;i&&(r=n.addHover(t),a=r.style),qa(a),i||Sa(r),a.extendFrom(e),Ia(a,e,"fill"),Ia(a,e,"stroke"),Ua(a),i||(t.dirty(!1),t.z2+=Hm)}}}function Ia(t,e,n){!wa(e[n])&&wa(t[n])&&(t[n]=ba(t[n]))}function Ta(t){var e=t.__highlighted;if(e&&(t.__highlighted=!1,!t.isGroup))if("layer"===e)t.__zr&&t.__zr.removeHover(t);else{var n=t.style,i=t.__cachedNormalStl;i&&(qa(n),t.setStyle(i),Ua(n));var r=t.__cachedNormalZ2;null!=r&&t.z2-r===Hm&&(t.z2=r)}}function Ca(t,e,n){var i,r=Xm,a=Xm;t.__highlighted&&(r=Wm,i=!0),e(t,n),t.__highlighted&&(a=Wm,i=!0),t.isGroup&&t.traverse(function(t){!t.isGroup&&e(t,n)}),i&&t.__highDownOnUpdate&&t.__highDownOnUpdate(r,a)}function Da(t,e){e=t.__hoverStl=e!==!1&&(t.hoverStyle||e||{}),t.__hoverStlDirty=!0,t.__highlighted&&(t.__cachedNormalStl=null,Ta(t),Ma(t))}function Aa(t){!Oa(this,t)&&!this.__highByOuter&&Ca(this,Ma)}function ka(t){!Oa(this,t)&&!this.__highByOuter&&Ca(this,Ta)}function Pa(t){this.__highByOuter|=1<<(t||0),Ca(this,Ma)}function La(t){!(this.__highByOuter&=~(1<<(t||0)))&&Ca(this,Ta)}function Oa(t,e){return t.__highDownSilentOnTouch&&e.zrByTouch}function Ba(t,e){Ea(t,!0),Ca(t,Da,e)}function Ea(t,e){var n=e===!1;if(t.__highDownSilentOnTouch=t.highDownSilentOnTouch,t.__highDownOnUpdate=t.highDownOnUpdate,!n||t.__highDownDispatcher){var i=n?"off":"on";t[i]("mouseover",Aa)[i]("mouseout",ka),t[i]("emphasis",Pa)[i]("normal",La),t.__highByOuter=t.__highByOuter||0,t.__highDownDispatcher=!n}}function za(t){return!(!t||!t.__highDownDispatcher)}function Ra(t){var e=Um[t];return null==e&&32>=Ym&&(e=Um[t]=Ym++),e}function Na(t,e,n,i,r,a,o){r=r||Vm;var s,l=r.labelFetcher,u=r.labelDataIndex,h=r.labelDimIndex,c=n.getShallow("show"),d=i.getShallow("show");(c||d)&&(l&&(s=l.getFormattedLabel(u,"normal",null,h)),null==s&&(s=w(r.defaultText)?r.defaultText(u,r):r.defaultText));var f=c?s:null,p=d?A(l?l.getFormattedLabel(u,"emphasis",null,h):null,s):null;(null!=f||null!=p)&&(Va(t,n,a,r),Va(e,i,o,r,!0)),t.text=f,e.text=p}function Fa(t,e,n){var i=t.style;e&&(qa(i),t.setStyle(e),Ua(i)),i=t.__hoverStl,n&&i&&(qa(i),o(i,n),Ua(i))}function Va(t,e,n,i,r){return Ga(t,e,i,r),n&&o(t,n),t}function Ha(t,e,n){var i,r={isRectText:!0};n===!1?i=!0:r.autoColor=n,Ga(t,e,r,i)}function Ga(t,e,n,i){if(n=n||Vm,n.isRectText){var r;n.getTextPosition?r=n.getTextPosition(e,i):(r=e.getShallow("position")||(i?null:"inside"),"outside"===r&&(r="top")),t.textPosition=r,t.textOffset=e.getShallow("offset");var a=e.getShallow("rotate");null!=a&&(a*=Math.PI/180),t.textRotation=a,t.textDistance=A(e.getShallow("distance"),i?null:5)}var o,s=e.ecModel,l=s&&s.option.textStyle,u=Wa(e);if(u){o={};for(var h in u)if(u.hasOwnProperty(h)){var c=e.getModel(["rich",h]);Xa(o[h]={},c,l,n,i)}}return t.rich=o,Xa(t,e,l,n,i,!0),n.forceRich&&!n.textStyle&&(n.textStyle={}),t}function Wa(t){for(var e;t&&t!==t.ecModel;){var n=(t.option||Vm).rich;if(n){e=e||{};for(var i in n)n.hasOwnProperty(i)&&(e[i]=1)}t=t.parentModel}return e}function Xa(t,e,n,i,r,a){n=!r&&n||Vm,t.textFill=Ya(e.getShallow("color"),i)||n.color,t.textStroke=Ya(e.getShallow("textBorderColor"),i)||n.textBorderColor,t.textStrokeWidth=A(e.getShallow("textBorderWidth"),n.textBorderWidth),r||(a&&(t.insideRollbackOpt=i,Ua(t)),null==t.textFill&&(t.textFill=i.autoColor)),t.fontStyle=e.getShallow("fontStyle")||n.fontStyle,t.fontWeight=e.getShallow("fontWeight")||n.fontWeight,t.fontSize=e.getShallow("fontSize")||n.fontSize,t.fontFamily=e.getShallow("fontFamily")||n.fontFamily,t.textAlign=e.getShallow("align"),t.textVerticalAlign=e.getShallow("verticalAlign")||e.getShallow("baseline"),t.textLineHeight=e.getShallow("lineHeight"),t.textWidth=e.getShallow("width"),t.textHeight=e.getShallow("height"),t.textTag=e.getShallow("tag"),a&&i.disableBox||(t.textBackgroundColor=Ya(e.getShallow("backgroundColor"),i),t.textPadding=e.getShallow("padding"),t.textBorderColor=Ya(e.getShallow("borderColor"),i),t.textBorderWidth=e.getShallow("borderWidth"),t.textBorderRadius=e.getShallow("borderRadius"),t.textBoxShadowColor=e.getShallow("shadowColor"),t.textBoxShadowBlur=e.getShallow("shadowBlur"),t.textBoxShadowOffsetX=e.getShallow("shadowOffsetX"),t.textBoxShadowOffsetY=e.getShallow("shadowOffsetY")),t.textShadowColor=e.getShallow("textShadowColor")||n.textShadowColor,t.textShadowBlur=e.getShallow("textShadowBlur")||n.textShadowBlur,t.textShadowOffsetX=e.getShallow("textShadowOffsetX")||n.textShadowOffsetX,t.textShadowOffsetY=e.getShallow("textShadowOffsetY")||n.textShadowOffsetY}function Ya(t,e){return"auto"!==t?t:e&&e.autoColor?e.autoColor:null}function Ua(t){var e,n=t.textPosition,i=t.insideRollbackOpt;if(i&&null==t.textFill){var r=i.autoColor,a=i.isRectText,o=i.useInsideStyle,s=o!==!1&&(o===!0||a&&n&&"string"==typeof n&&n.indexOf("inside")>=0),l=!s&&null!=r;(s||l)&&(e={textFill:t.textFill,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth}),s&&(t.textFill="#fff",null==t.textStroke&&(t.textStroke=r,null==t.textStrokeWidth&&(t.textStrokeWidth=2))),l&&(t.textFill=r)}t.insideRollback=e}function qa(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth,t.insideRollback=null)}function ja(t,e){var n=e&&e.getModel("textStyle");return B([t.fontStyle||n&&n.getShallow("fontStyle")||"",t.fontWeight||n&&n.getShallow("fontWeight")||"",(t.fontSize||n&&n.getShallow("fontSize")||12)+"px",t.fontFamily||n&&n.getShallow("fontFamily")||"sans-serif"].join(" "))}function Za(t,e,n,i,r,a){"function"==typeof r&&(a=r,r=null);var o=i&&i.isAnimationEnabled();if(o){var s=t?"Update":"",l=i.getShallow("animationDuration"+s),u=i.getShallow("animationEasing"+s),h=i.getShallow("animationDelay"+s);"function"==typeof h&&(h=h(r,i.getAnimationDelayParams?i.getAnimationDelayParams(e,r):null)),"function"==typeof l&&(l=l(r)),l>0?e.animateTo(n,l,h||0,u,a,!!a):(e.stopAnimation(),e.attr(n),a&&a())}else e.stopAnimation(),e.attr(n),a&&a()}function Ka(t,e,n,i,r){Za(!0,t,e,n,i,r)}function $a(t,e,n,i,r){Za(!1,t,e,n,i,r)}function Qa(t,e){for(var n=ke([]);t&&t!==e;)Le(n,t.getLocalTransform(),n),t=t.parent;return n}function Ja(t,e,n){return e&&!d(e)&&(e=Ip.getLocalTransform(e)),n&&(e=ze([],e)),ae([],t,e)}function to(t,e,n){var i=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),r=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=["left"===t?-i:"right"===t?i:0,"top"===t?-r:"bottom"===t?r:0];return a=Ja(a,e,n),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function eo(t,e,n){function i(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}function r(t){var e={position:W(t.position),rotation:t.rotation};return t.shape&&(e.shape=o({},t.shape)),e}if(t&&e){var a=i(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=a[t.anid];if(e){var i=r(t);t.attr(r(e)),Ka(t,i,n,t.dataIndex)}}})}}function no(t,e){return p(t,function(t){var n=t[0];n=Nm(n,e.x),n=Fm(n,e.x+e.width);var i=t[1];return i=Nm(i,e.y),i=Fm(i,e.y+e.height),[n,i]})}function io(t,e){var n=Nm(t.x,e.x),i=Fm(t.x+t.width,e.x+e.width),r=Nm(t.y,e.y),a=Fm(t.y+t.height,e.y+e.height);return i>=n&&a>=r?{x:n,y:r,width:i-n,height:a-r}:void 0}function ro(t,e,n){e=o({rectHover:!0},e);var i=e.style={strokeNoScale:!0};return n=n||{x:-1,y:-1,width:2,height:2},t?0===t.indexOf("image://")?(i.image=t.slice(8),s(i,n),new Mi(e)):ga(t.replace("path://",""),e,n,"center"):void 0}function ao(t,e,n,i,r){for(var a=0,o=r[r.length-1];a<r.length;a++){var s=r[a];if(oo(t,e,n,i,s[0],s[1],o[0],o[1]))return!0;o=s}}function oo(t,e,n,i,r,a,o,s){var l=n-t,u=i-e,h=o-r,c=s-a,d=so(h,c,l,u);if(lo(d))return!1;var f=t-r,p=e-a,g=so(f,p,l,u)/d;if(0>g||g>1)return!1;var v=so(f,p,h,c)/d;return 0>v||v>1?!1:!0}function so(t,e,n,i){return t*i-n*e}function lo(t){return 1e-6>=t&&t>=-1e-6}function uo(t,e,n){this.parentModel=e,this.ecModel=n,this.option=t}function ho(t,e,n){for(var i=0;i<e.length&&(!e[i]||(t=t&&"object"==typeof t?t[e[i]]:null,null!=t));i++);return null==t&&n&&(t=n.get(e)),t}function co(t,e){var n=ry(t).getParent;return n?n.call(t,e):t.parentModel}function fo(t){return[t||"",ay++,Math.random().toFixed(5)].join("_")}function po(t){var e={};return t.registerSubTypeDefaulter=function(t,n){t=cr(t),e[t.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var a=cr(n).main;t.hasSubTypes(n)&&e[a]&&(r=e[a](i))}return r},t}function go(t,e){function n(t){var n={},a=[];return f(t,function(o){var s=i(n,o),l=s.originalDeps=e(o),h=r(l,t);s.entryCount=h.length,0===s.entryCount&&a.push(o),f(h,function(t){u(s.predecessor,t)<0&&s.predecessor.push(t);var e=i(n,t);u(e.successor,t)<0&&e.successor.push(o)})}),{graph:n,noEntryList:a}}function i(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function r(t,e){var n=[];return f(t,function(t){u(e,t)>=0&&n.push(t)}),n}t.topologicalTravel=function(t,e,i,r){function a(t){l[t].entryCount--,0===l[t].entryCount&&u.push(t) +}function o(t){h[t]=!0,a(t)}if(t.length){var s=n(e),l=s.graph,u=s.noEntryList,h={};for(f(t,function(t){h[t]=!0});u.length;){var c=u.pop(),d=l[c],p=!!h[c];p&&(i.call(r,c,d.originalDeps.slice()),delete h[c]),f(d.successor,p?o:a)}f(h,function(){throw new Error("Circle dependency may exists")})}}}function vo(t){return t.replace(/^\s+|\s+$/g,"")}function mo(t,e,n,i){var r=e[1]-e[0],a=n[1]-n[0];if(0===r)return 0===a?n[0]:(n[0]+n[1])/2;if(i)if(r>0){if(t<=e[0])return n[0];if(t>=e[1])return n[1]}else{if(t>=e[0])return n[0];if(t<=e[1])return n[1]}else{if(t===e[0])return n[0];if(t===e[1])return n[1]}return(t-e[0])/r*a+n[0]}function yo(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?vo(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?0/0:+t}function _o(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function xo(t){return t.sort(function(t,e){return t-e}),t}function wo(t){if(t=+t,isNaN(t))return 0;for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}function bo(t){var e=t.toString(),n=e.indexOf("e");if(n>0){var i=+e.slice(n+1);return 0>i?-i:0}var r=e.indexOf(".");return 0>r?0:e.length-1-r}function So(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),a=Math.round(n(Math.abs(e[1]-e[0]))/i),o=Math.min(Math.max(-r+a,0),20);return isFinite(o)?o:20}function Mo(t,e,n){if(!t[e])return 0;var i=g(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===i)return 0;for(var r=Math.pow(10,n),a=p(t,function(t){return(isNaN(t)?0:t)/i*r*100}),o=100*r,s=p(a,function(t){return Math.floor(t)}),l=g(s,function(t,e){return t+e},0),u=p(a,function(t,e){return t-s[e]});o>l;){for(var h=Number.NEGATIVE_INFINITY,c=null,d=0,f=u.length;f>d;++d)u[d]>h&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/r}function Io(t){var e=2*Math.PI;return(t%e+e)%e}function To(t){return t>-oy&&oy>t}function Co(t){if(t instanceof Date)return t;if("string"==typeof t){var e=ly.exec(t);if(!e)return new Date(0/0);if(e[8]){var n=+e[4]||0;return"Z"!==e[8].toUpperCase()&&(n-=e[8].slice(0,3)),new Date(Date.UTC(+e[1],+(e[2]||1)-1,+e[3]||1,n,+(e[5]||0),+e[6]||0,+e[7]||0))}return new Date(+e[1],+(e[2]||1)-1,+e[3]||1,+e[4]||0,+(e[5]||0),+e[6]||0,+e[7]||0)}return new Date(null==t?0/0:Math.round(t))}function Do(t){return Math.pow(10,Ao(t))}function Ao(t){if(0===t)return 0;var e=Math.floor(Math.log(t)/Math.LN10);return t/Math.pow(10,e)>=10&&e++,e}function ko(t,e){var n,i=Ao(t),r=Math.pow(10,i),a=t/r;return n=e?1.5>a?1:2.5>a?2:4>a?3:7>a?5:10:1>a?1:2>a?2:3>a?3:5>a?5:10,t=n*r,i>=-20?+t.toFixed(0>i?-i:0):t}function Po(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],a=n-i;return a?r+a*(t[i]-r):r}function Lo(t){function e(t,n,i){return t.interval[i]<n.interval[i]||t.interval[i]===n.interval[i]&&(t.close[i]-n.close[i]===(i?-1:1)||!i&&e(t,n,1))}t.sort(function(t,n){return e(t,n,0)?-1:1});for(var n=-1/0,i=1,r=0;r<t.length;){for(var a=t[r].interval,o=t[r].close,s=0;2>s;s++)a[s]<=n&&(a[s]=n,o[s]=s?1:1-i),n=a[s],i=o[s];a[0]===a[1]&&o[0]*o[1]!==1?t.splice(r,1):r++}return t}function Oo(t){return t-parseFloat(t)>=0}function Bo(t){return isNaN(t)?"-":(t=(t+"").split("."),t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:""))}function Eo(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function zo(t){return null==t?"":(t+"").replace(cy,function(t,e){return dy[e]})}function Ro(t,e,n){x(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],a=0;a<r.length;a++){var o=fy[a];t=t.replace(py(o),py(o,0))}for(var s=0;i>s;s++)for(var l=0;l<r.length;l++){var u=e[s][r[l]];t=t.replace(py(fy[l],s),n?zo(u):u)}return t}function No(t,e,n){return f(e,function(e,i){t=t.replace("{"+i+"}",n?zo(e):e)}),t}function Fo(t,e){t=b(t)?{color:t,extraCssText:e}:t||{};var n=t.color,i=t.type,e=t.extraCssText,r=t.renderMode||"html",a=t.markerId||"X";return n?"html"===r?"subItem"===i?'<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;border-radius:4px;width:4px;height:4px;background-color:'+zo(n)+";"+(e||"")+'"></span>':'<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:'+zo(n)+";"+(e||"")+'"></span>':{renderMode:r,content:"{marker"+a+"|} ",style:{color:n}}:""}function Vo(t,e){return t+="","0000".substr(0,e-t.length)+t}function Ho(t,e,n){("week"===t||"month"===t||"quarter"===t||"half-year"===t||"year"===t)&&(t="MM-dd\nyyyy");var i=Co(e),r=n?"UTC":"",a=i["get"+r+"FullYear"](),o=i["get"+r+"Month"]()+1,s=i["get"+r+"Date"](),l=i["get"+r+"Hours"](),u=i["get"+r+"Minutes"](),h=i["get"+r+"Seconds"](),c=i["get"+r+"Milliseconds"]();return t=t.replace("MM",Vo(o,2)).replace("M",o).replace("yyyy",a).replace("yy",a%100).replace("dd",Vo(s,2)).replace("d",s).replace("hh",Vo(l,2)).replace("h",l).replace("mm",Vo(u,2)).replace("m",u).replace("ss",Vo(h,2)).replace("s",h).replace("SSS",Vo(c,3))}function Go(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function Wo(t){return Gn(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)}function Xo(t,e,n,i,r,a,o,s){return Gn(t,e,n,i,r,s,a,o)}function Yo(t,e,n,i,r){var a=0,o=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;e.eachChild(function(l,u){var h,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===t){var v=f.width+(g?-g.x+f.x:0);h=a+v,h>i||l.newline?(a=0,h=v,o+=s+n,s=f.height):s=Math.max(s,f.height)}else{var m=f.height+(g?-g.y+f.y:0);c=o+m,c>r||l.newline?(a+=s+n,o=0,c=m,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=o,"horizontal"===t?a=h+n:o=c+n)})}function Uo(t,e,n){n=hy(n||0);var i=e.width,r=e.height,a=yo(t.left,i),o=yo(t.top,r),s=yo(t.right,i),l=yo(t.bottom,r),u=yo(t.width,i),h=yo(t.height,r),c=n[2]+n[0],d=n[1]+n[3],f=t.aspect;switch(isNaN(u)&&(u=i-s-d-a),isNaN(h)&&(h=r-l-c-o),null!=f&&(isNaN(u)&&isNaN(h)&&(f>i/r?u=.8*i:h=.8*r),isNaN(u)&&(u=f*h),isNaN(h)&&(h=u/f)),isNaN(a)&&(a=i-s-u-d),isNaN(o)&&(o=r-l-h-c),t.left||t.right){case"center":a=i/2-u/2-n[3];break;case"right":a=i-u-d}switch(t.top||t.bottom){case"middle":case"center":o=r/2-h/2-n[0];break;case"bottom":o=r-h-c}a=a||0,o=o||0,isNaN(u)&&(u=i-d-a-(s||0)),isNaN(h)&&(h=r-c-o-(l||0));var p=new Sn(a+n[3],o+n[0],u,h);return p.margin=n,p}function qo(t,e,n){function i(n,i){var o={},l=0,u={},h=0,c=2;if(my(n,function(e){u[e]=t[e]}),my(n,function(t){r(e,t)&&(o[t]=u[t]=e[t]),a(o,t)&&l++,a(u,t)&&h++}),s[i])return a(e,n[1])?u[n[2]]=null:a(e,n[2])&&(u[n[1]]=null),u;if(h!==c&&l){if(l>=c)return o;for(var d=0;d<n.length;d++){var f=n[d];if(!r(o,f)&&r(t,f)){o[f]=t[f];break}}return o}return u}function r(t,e){return t.hasOwnProperty(e)}function a(t,e){return null!=t[e]&&"auto"!==t[e]}function o(t,e,n){my(t,function(t){e[t]=n[t]})}!S(n)&&(n={});var s=n.ignoreSize;!x(s)&&(s=[s,s]);var l=i(_y[0],0),u=i(_y[1],1);o(_y[0],t,l),o(_y[1],t,u)}function jo(t){return Zo({},t)}function Zo(t,e){return e&&t&&my(yy,function(n){e.hasOwnProperty(n)&&(t[n]=e[n])}),t}function Ko(t){var e=[];return f(Sy.getClassesByMainType(t),function(t){e=e.concat(t.prototype.dependencies||[])}),e=p(e,function(t){return cr(t).main}),"dataset"!==t&&u(e,"dataset")<=0&&e.unshift("dataset"),e}function $o(t,e){for(var n=t.length,i=0;n>i;i++)if(t[i].length>e)return t[i];return t[n-1]}function Qo(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===Py?{}:[]),this.sourceFormat=t.sourceFormat||Ly,this.seriesLayoutBy=t.seriesLayoutBy||By,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&N(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}function Jo(t){var e=t.option.source,n=Ly;if(I(e))n=Oy;else if(x(e)){0===e.length&&(n=Ay);for(var i=0,r=e.length;r>i;i++){var a=e[i];if(null!=a){if(x(a)){n=Ay;break}if(S(a)){n=ky;break}}}}else if(S(e)){for(var o in e)if(e.hasOwnProperty(o)&&d(e[o])){n=Py;break}}else if(null!=e)throw new Error("Invalid data");Ry(t).sourceFormat=n}function ts(t){return Ry(t).source}function es(t){Ry(t).datasetMap=N()}function ns(t){var e=t.option,n=e.data,i=I(n)?Oy:Dy,r=!1,a=e.seriesLayoutBy,o=e.sourceHeader,s=e.dimensions,l=us(t);if(l){var u=l.option;n=u.source,i=Ry(l).sourceFormat,r=!0,a=a||u.seriesLayoutBy,null==o&&(o=u.sourceHeader),s=s||u.dimensions}var h=is(n,i,a,o,s);Ry(t).source=new Qo({data:n,fromDataset:r,seriesLayoutBy:a,sourceFormat:i,dimensionsDefine:h.dimensionsDefine,startIndex:h.startIndex,dimensionsDetectCount:h.dimensionsDetectCount,encodeDefine:e.encode})}function is(t,e,n,i,r){if(!t)return{dimensionsDefine:rs(r)};var a,o;if(e===Ay)"auto"===i||null==i?as(function(t){null!=t&&"-"!==t&&(b(t)?null==o&&(o=1):o=0)},n,t,10):o=i?1:0,r||1!==o||(r=[],as(function(t,e){r[e]=null!=t?t:""},n,t)),a=r?r.length:n===Ey?t.length:t[0]?t[0].length:null;else if(e===ky)r||(r=os(t));else if(e===Py)r||(r=[],f(t,function(t,e){r.push(e)}));else if(e===Dy){var s=Qi(t[0]);a=x(s)&&s.length||1}return{startIndex:o,dimensionsDefine:rs(r),dimensionsDetectCount:a}}function rs(t){if(t){var e=N();return p(t,function(t){if(t=o({},S(t)?t:{name:t}),null==t.name)return t;t.name+="",null==t.displayName&&(t.displayName=t.name);var n=e.get(t.name);return n?t.name+="-"+n.count++:e.set(t.name,{count:1}),t})}}function as(t,e,n,i){if(null==i&&(i=1/0),e===Ey)for(var r=0;r<n.length&&i>r;r++)t(n[r]?n[r][0]:null,r);else for(var a=n[0]||[],r=0;r<a.length&&i>r;r++)t(a[r],r)}function os(t){for(var e,n=0;n<t.length&&!(e=t[n++]););if(e){var i=[];return f(e,function(t,e){i.push(e)}),i}}function ss(t,e,n){function i(t,e,n){for(var i=0;n>i;i++)t.push(e+i)}function r(t){var e=t.dimsDef;return e?e.length:1}var a={},o=us(e);if(!o||!t)return a;var s,l,u=[],h=[],c=e.ecModel,d=Ry(c).datasetMap,p=o.uid+"_"+n.seriesLayoutBy;t=t.slice(),f(t,function(e,n){!S(e)&&(t[n]={name:e}),"ordinal"===e.type&&null==s&&(s=n,l=r(t[n])),a[e.name]=[]});var g=d.get(p)||d.set(p,{categoryWayDim:l,valueWayDim:0});return f(t,function(t,e){var n=t.name,o=r(t);if(null==s){var l=g.valueWayDim;i(a[n],l,o),i(h,l,o),g.valueWayDim+=o}else if(s===e)i(a[n],0,o),i(u,0,o);else{var l=g.categoryWayDim;i(a[n],l,o),i(h,l,o),g.categoryWayDim+=o}}),u.length&&(a.itemName=u),h.length&&(a.seriesName=h),a}function ls(t,e,n){var i={},r=us(t);if(!r)return i;var a,o=e.sourceFormat,s=e.dimensionsDefine;(o===ky||o===Py)&&f(s,function(t,e){"name"===(S(t)?t.name:t)&&(a=e)});var l=function(){function t(t){return null!=t.v&&null!=t.n}for(var i={},r={},l=[],u=0,h=Math.min(5,n);h>u;u++){var c=cs(e.data,o,e.seriesLayoutBy,s,e.startIndex,u);l.push(c);var d=c===zy.Not;if(d&&null==i.v&&u!==a&&(i.v=u),(null==i.n||i.n===i.v||!d&&l[i.n]===zy.Not)&&(i.n=u),t(i)&&l[i.n]!==zy.Not)return i;d||(c===zy.Might&&null==r.v&&u!==a&&(r.v=u),(null==r.n||r.n===r.v)&&(r.n=u))}return t(i)?i:t(r)?r:null}();if(l){i.value=l.v;var u=null!=a?a:l.n;i.itemName=[u],i.seriesName=[u]}return i}function us(t){var e=t.option,n=e.data;return n?void 0:t.ecModel.getComponent("dataset",e.datasetIndex||0)}function hs(t,e){return cs(t.data,t.sourceFormat,t.seriesLayoutBy,t.dimensionsDefine,t.startIndex,e)}function cs(t,e,n,i,r,a){function o(t){var e=b(t);return null!=t&&isFinite(t)&&""!==t?e?zy.Might:zy.Not:e&&"-"!==t?zy.Must:void 0}var s,l=5;if(I(t))return zy.Not;var u,h;if(i){var c=i[a];S(c)?(u=c.name,h=c.type):b(c)&&(u=c)}if(null!=h)return"ordinal"===h?zy.Must:zy.Not;if(e===Ay)if(n===Ey){for(var d=t[a],f=0;f<(d||[]).length&&l>f;f++)if(null!=(s=o(d[r+f])))return s}else for(var f=0;f<t.length&&l>f;f++){var p=t[r+f];if(p&&null!=(s=o(p[a])))return s}else if(e===ky){if(!u)return zy.Not;for(var f=0;f<t.length&&l>f;f++){var g=t[f];if(g&&null!=(s=o(g[u])))return s}}else if(e===Py){if(!u)return zy.Not;var d=t[u];if(!d||I(d))return zy.Not;for(var f=0;f<d.length&&l>f;f++)if(null!=(s=o(d[f])))return s}else if(e===Dy)for(var f=0;f<t.length&&l>f;f++){var g=t[f],v=Qi(g);if(!x(v))return zy.Not;if(null!=(s=o(v[a])))return s}return zy.Not}function ds(t,e){if(e){var n=e.seiresIndex,i=e.seriesId,r=e.seriesName;return null!=n&&t.componentIndex!==n||null!=i&&t.id!==i||null!=r&&t.name!==r}}function fs(t,e){var n=t.color&&!t.colorLayer;f(e,function(e,a){"colorLayer"===a&&n||Sy.hasClass(a)||("object"==typeof e?t[a]=t[a]?r(t[a],e,!1):i(e):null==t[a]&&(t[a]=e))})}function ps(t){t=t,this.option={},this.option[Ny]=1,this._componentsMap=N({series:[]}),this._seriesIndices,this._seriesIndicesMap,fs(t,this._theme.option),r(t,Iy,!1),this.mergeOption(t)}function gs(t,e){x(e)||(e=e?[e]:[]);var n={};return f(e,function(e){n[e]=(t.get(e)||[]).slice()}),n}function vs(t,e,n){var i=e.type?e.type:n?n.subType:Sy.determineSubType(t,e);return i}function ms(t,e){t._seriesIndicesMap=N(t._seriesIndices=p(e,function(t){return t.componentIndex})||[])}function ys(t,e){return e.hasOwnProperty("subType")?v(t,function(t){return t.subType===e.subType}):t}function _s(t){f(Vy,function(e){this[e]=y(t[e],t)},this)}function xs(){this._coordinateSystems=[]}function ws(t){this._api=t,this._timelineOptions=[],this._mediaList=[],this._mediaDefault,this._currentMediaIndices=[],this._optionBackup,this._newBaseOption}function bs(t,e,n){var i,r,a=[],o=[],s=t.timeline;if(t.baseOption&&(r=t.baseOption),(s||t.options)&&(r=r||{},a=(t.options||[]).slice()),t.media){r=r||{};var l=t.media;Gy(l,function(t){t&&t.option&&(t.query?o.push(t):i||(i=t))})}return r||(r=t),r.timeline||(r.timeline=s),Gy([r].concat(a).concat(p(o,function(t){return t.option})),function(t){Gy(e,function(e){e(t,n)})}),{baseOption:r,timelineOptions:a,mediaDefault:i,mediaList:o}}function Ss(t,e,n){var i={width:e,height:n,aspectratio:e/n},r=!0;return f(t,function(t,e){var n=e.match(Uy);if(n&&n[1]&&n[2]){var a=n[1],o=n[2].toLowerCase();Ms(i[o],t,a)||(r=!1)}}),r}function Ms(t,e,n){return"min"===n?t>=e:"max"===n?e>=t:t===e}function Is(t,e){return t.join(",")===e.join(",")}function Ts(t,e){e=e||{},Gy(e,function(e,n){if(null!=e){var i=t[n];if(Sy.hasClass(n)){e=Ki(e),i=Ki(i);var r=tr(i,e);t[n]=Xy(r,function(t){return t.option&&t.exist?Yy(t.exist,t.option,!0):t.exist||t.option})}else t[n]=Yy(i,e,!0)}})}function Cs(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=Zy.length;i>n;n++){var a=Zy[n],o=e.normal,s=e.emphasis;o&&o[a]&&(t[a]=t[a]||{},t[a].normal?r(t[a].normal,o[a]):t[a].normal=o[a],o[a]=null),s&&s[a]&&(t[a]=t[a]||{},t[a].emphasis?r(t[a].emphasis,s[a]):t[a].emphasis=s[a],s[a]=null)}}function Ds(t,e,n){if(t&&t[e]&&(t[e].normal||t[e].emphasis)){var i=t[e].normal,r=t[e].emphasis;i&&(n?(t[e].normal=t[e].emphasis=null,s(t[e],i)):t[e]=i),r&&(t.emphasis=t.emphasis||{},t.emphasis[e]=r)}}function As(t){Ds(t,"itemStyle"),Ds(t,"lineStyle"),Ds(t,"areaStyle"),Ds(t,"label"),Ds(t,"labelLine"),Ds(t,"upperLabel"),Ds(t,"edgeLabel")}function ks(t,e){var n=jy(t)&&t[e],i=jy(n)&&n.textStyle;if(i)for(var r=0,a=iv.length;a>r;r++){var e=iv[r];i.hasOwnProperty(e)&&(n[e]=i[e])}}function Ps(t){t&&(As(t),ks(t,"label"),t.emphasis&&ks(t.emphasis,"label"))}function Ls(t){if(jy(t)){Cs(t),As(t),ks(t,"label"),ks(t,"upperLabel"),ks(t,"edgeLabel"),t.emphasis&&(ks(t.emphasis,"label"),ks(t.emphasis,"upperLabel"),ks(t.emphasis,"edgeLabel"));var e=t.markPoint;e&&(Cs(e),Ps(e));var n=t.markLine;n&&(Cs(n),Ps(n));var i=t.markArea;i&&Ps(i);var r=t.data;if("graph"===t.type){r=r||t.nodes;var a=t.links||t.edges;if(a&&!I(a))for(var o=0;o<a.length;o++)Ps(a[o]);f(t.categories,function(t){As(t)})}if(r&&!I(r))for(var o=0;o<r.length;o++)Ps(r[o]);var e=t.markPoint;if(e&&e.data)for(var s=e.data,o=0;o<s.length;o++)Ps(s[o]);var n=t.markLine;if(n&&n.data)for(var l=n.data,o=0;o<l.length;o++)x(l[o])?(Ps(l[o][0]),Ps(l[o][1])):Ps(l[o]);"gauge"===t.type?(ks(t,"axisLabel"),ks(t,"title"),ks(t,"detail")):"treemap"===t.type?(Ds(t.breadcrumb,"itemStyle"),f(t.levels,function(t){As(t)})):"tree"===t.type&&As(t.leaves)}}function Os(t){return x(t)?t:t?[t]:[]}function Bs(t){return(x(t)?t[0]:t)||{}}function Es(t,e){e=e.split(",");for(var n=t,i=0;i<e.length&&(n=n&&n[e[i]],null!=n);i++);return n}function zs(t,e,n,i){e=e.split(",");for(var r,a=t,o=0;o<e.length-1;o++)r=e[o],null==a[r]&&(a[r]={}),a=a[r];(i||null==a[e[o]])&&(a[e[o]]=n)}function Rs(t){f($y,function(e){e[0]in t&&!(e[1]in t)&&(t[e[1]]=t[e[0]])})}function Ns(t){f(t,function(e,n){var i=[],r=[0/0,0/0],a=[e.stackResultDimension,e.stackedOverDimension],o=e.data,s=e.isStackedByIndex,l=o.map(a,function(a,l,u){var h=o.get(e.stackedDimension,u);if(isNaN(h))return r;var c,d;s?d=o.getRawIndex(u):c=o.get(e.stackedByDimension,u);for(var f=0/0,p=n-1;p>=0;p--){var g=t[p];if(s||(d=g.data.rawIndexOf(g.stackedByDimension,c)),d>=0){var v=g.data.getByRawIndex(g.stackResultDimension,d);if(h>=0&&v>0||0>=h&&0>v){h+=v,f=v;break}}}return i[0]=h,i[1]=f,i});o.hostModel.setData(l),e.data=l})}function Fs(t,e){Qo.isInstance(t)||(t=Qo.seriesDataToSource(t)),this._source=t;var n=this._data=t.data,i=t.sourceFormat;i===Oy&&(this._offset=0,this._dimSize=e,this._data=n);var r=n_[i===Ay?i+"_"+t.seriesLayoutBy:i];o(this,r)}function Vs(){return this._data.length}function Hs(t){return this._data[t]}function Gs(t){for(var e=0;e<t.length;e++)this._data.push(t[e])}function Ws(t,e,n){return null!=n?t[n]:t}function Xs(t,e,n,i){return Ys(t[i],this._dimensionInfos[e])}function Ys(t,e){var n=e&&e.type;if("ordinal"===n){var i=e&&e.ordinalMeta;return i?i.parseAndCollect(t):t}return"time"===n&&"number"!=typeof t&&null!=t&&"-"!==t&&(t=+Co(t)),null==t||""===t?0/0:+t}function Us(t,e,n){if(t){var i=t.getRawDataItem(e);if(null!=i){var r,a,o=t.getProvider().getSource().sourceFormat,s=t.getDimensionInfo(n);return s&&(r=s.name,a=s.index),i_[o](i,e,a,r)}}}function qs(t,e,n){if(t){var i=t.getProvider().getSource().sourceFormat;if(i===Dy||i===ky){var r=t.getRawDataItem(e);return i!==Dy||S(r)||(r=null),r?r[n]:void 0}}}function js(t){return new Zs(t)}function Zs(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0,this.context}function Ks(t,e,n,i,r,a){l_.reset(n,i,r,a),t._callingProgress=e,t._callingProgress({start:n,end:i,count:i-n,next:l_.next},t.context)}function $s(t,e){t._dueIndex=t._outputDueEnd=t._dueEnd=0,t._settedOutputEnd=null;var n,i;!e&&t._reset&&(n=t._reset(t.context),n&&n.progress&&(i=n.forceFirstProgress,n=n.progress),x(n)&&!n.length&&(n=null)),t._progress=n,t._modBy=t._modDataCount=null;var r=t._downstream;return r&&r.dirty(),i}function Qs(t){var e=t.name;nr(t)||(t.name=Js(t)||e)}function Js(t){var e=t.getRawData(),n=e.mapDimension("seriesName",!0),i=[];return f(n,function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)}),i.join(" ")}function tl(t){return t.model.getRawData().count()}function el(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),nl}function nl(t,e){t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function il(t,e){f(t.CHANGABLE_METHODS,function(n){t.wrapMethod(n,_(rl,e))})}function rl(t){var e=al(t);e&&e.setOutputEnd(this.count())}function al(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}function ol(){this.group=new tg,this.uid=fo("viewChart"),this.renderTask=js({plan:ul,reset:hl}),this.renderTask.context={view:this}}function sl(t,e,n){if(t&&(t.trigger(e,n),t.isGroup&&!za(t)))for(var i=0,r=t.childCount();r>i;i++)sl(t.childAt(i),e,n)}function ll(t,e,n){var i=rr(t,e),r=e&&null!=e.highlightKey?Ra(e.highlightKey):null;null!=i?f(Ki(i),function(e){sl(t.getItemGraphicEl(e),n,r)}):t.eachItemGraphicEl(function(t){sl(t,n,r)})}function ul(t){return g_(t.model)}function hl(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,a=e.pipelineContext.progressiveRender,o=t.view,s=r&&p_(r).updateMethod,l=a?"incrementalPrepareRender":s&&o[s]?s:"render";return"render"!==l&&o[l](e,n,i,r),m_[l]}function cl(t,e,n){function i(){h=(new Date).getTime(),c=null,t.apply(o,s||[])}var r,a,o,s,l,u=0,h=0,c=null;e=e||0;var d=function(){r=(new Date).getTime(),o=this,s=arguments;var t=l||e,d=l||n;l=null,a=r-(d?u:h)-t,clearTimeout(c),d?c=setTimeout(i,t):a>=0?i():c=setTimeout(i,-a),u=r};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function dl(t,e,n,i){var r=t[e];if(r){var a=r[y_]||r,o=r[x_],s=r[__];if(s!==n||o!==i){if(null==n||!i)return t[e]=a;r=t[e]=cl(a,n,"debounce"===i),r[y_]=a,r[x_]=i,r[__]=n}return r}}function fl(t,e,n,i){this.ecInstance=t,this.api=e,this.unfinished;var n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice();this._allHandlers=n.concat(i),this._stageTaskMap=N()}function pl(t,e,n,i,r){function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}r=r||{};var o;f(e,function(e){if(!r.visualType||r.visualType===e.visualType){var s=t._stageTaskMap.get(e.uid),l=s.seriesTaskMap,u=s.overallTask;if(u){var h,c=u.agentStubMap;c.each(function(t){a(r,t)&&(t.dirty(),h=!0)}),h&&u.dirty(),C_(u,i);var d=t.getPerformArgs(u,r.block);c.each(function(t){t.perform(d)}),o|=u.perform(d)}else l&&l.each(function(s){a(r,s)&&s.dirty();var l=t.getPerformArgs(s,r.block);l.skip=!e.performRawSeries&&n.isSeriesFiltered(s.context.model),C_(s,i),o|=s.perform(l)})}}),t.unfinished|=o}function gl(t,e,n,i,r){function a(n){var a=n.uid,s=o.get(a)||o.set(a,js({plan:wl,reset:bl,count:Ml}));s.context={model:n,ecModel:i,api:r,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:t},Il(t,n,s)}var o=n.seriesTaskMap||(n.seriesTaskMap=N()),s=e.seriesType,l=e.getTargetSeries;e.createOnAllSeries?i.eachRawSeries(a):s?i.eachRawSeriesByType(s,a):l&&l(i,r).each(a);var u=t._pipelineMap;o.each(function(t,e){u.get(e)||(t.dispose(),o.removeKey(e))})}function vl(t,e,n,i,r){function a(e){var n=e.uid,i=s.get(n);i||(i=s.set(n,js({reset:yl,onDirty:xl})),o.dirty()),i.context={model:e,overallProgress:h,modifyOutputEnd:c},i.agent=o,i.__block=h,Il(t,e,i)}var o=n.overallTask=n.overallTask||js({reset:ml});o.context={ecModel:i,api:r,overallReset:e.overallReset,scheduler:t};var s=o.agentStubMap=o.agentStubMap||N(),l=e.seriesType,u=e.getTargetSeries,h=!0,c=e.modifyOutputEnd;l?i.eachRawSeriesByType(l,a):u?u(i,r).each(a):(h=!1,f(i.getSeries(),a));var d=t._pipelineMap;s.each(function(t,e){d.get(e)||(t.dispose(),o.dirty(),s.removeKey(e))})}function ml(t){t.overallReset(t.ecModel,t.api,t.payload)}function yl(t){return t.overallProgress&&_l}function _l(){this.agent.dirty(),this.getDownstream().dirty()}function xl(){this.agent&&this.agent.dirty()}function wl(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function bl(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Ki(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?p(e,function(t,e){return Sl(e)}):D_}function Sl(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var a=e.start;a<e.end;a++)r.dataEach(i,a);else r&&r.progress&&r.progress(e,i)}}function Ml(t){return t.data.count()}function Il(t,e,n){var i=e.uid,r=t._pipelineMap.get(i);!r.head&&(r.head=n),r.tail&&r.tail.pipe(n),r.tail=n,n.__idxInPipeline=r.count++,n.__pipeline=r}function Tl(t){A_=null;try{t(k_,P_)}catch(e){}return A_}function Cl(t,e){for(var n in e.prototype)t[n]=V}function Dl(t){if(b(t)){var e=new DOMParser;t=e.parseFromString(t,"text/xml")}for(9===t.nodeType&&(t=t.firstChild);"svg"!==t.nodeName.toLowerCase()||1!==t.nodeType;)t=t.nextSibling;return t}function Al(){this._defs={},this._root=null,this._isDefine=!1,this._isText=!1}function kl(t,e){for(var n=t.firstChild;n;){if(1===n.nodeType){var i=n.getAttribute("offset");i=i.indexOf("%")>0?parseInt(i,10)/100:i?parseFloat(i):0;var r=n.getAttribute("stop-color")||"#000000";e.addColorStop(i,r)}n=n.nextSibling}}function Pl(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),s(e.__inheritedStyle,t.__inheritedStyle))}function Ll(t){for(var e=B(t).split(F_),n=[],i=0;i<e.length;i+=2){var r=parseFloat(e[i]),a=parseFloat(e[i+1]);n.push([r,a])}return n}function Ol(t,e,n,i){var r=e.__inheritedStyle||{},a="text"===e.type;if(1===t.nodeType&&(El(t,e),o(r,zl(t)),!i))for(var s in G_)if(G_.hasOwnProperty(s)){var l=t.getAttribute(s);null!=l&&(r[G_[s]]=l)}var u=a?"textFill":"fill",h=a?"textStroke":"stroke";e.style=e.style||new ug;var c=e.style;null!=r.fill&&c.set(u,Bl(r.fill,n)),null!=r.stroke&&c.set(h,Bl(r.stroke,n)),f(["lineWidth","opacity","fillOpacity","strokeOpacity","miterLimit","fontSize"],function(t){var e="lineWidth"===t&&a?"textStrokeWidth":t;null!=r[t]&&c.set(e,parseFloat(r[t]))}),r.textBaseline&&"auto"!==r.textBaseline||(r.textBaseline="alphabetic"),"alphabetic"===r.textBaseline&&(r.textBaseline="bottom"),"start"===r.textAlign&&(r.textAlign="left"),"end"===r.textAlign&&(r.textAlign="right"),f(["lineDashOffset","lineCap","lineJoin","fontWeight","fontFamily","fontStyle","textAlign","textBaseline"],function(t){null!=r[t]&&c.set(t,r[t])}),r.lineDash&&(e.style.lineDash=B(r.lineDash).split(F_)),c[h]&&"none"!==c[h]&&(e[h]=!0),e.__inheritedStyle=r}function Bl(t,e){var n=e&&t&&t.match(W_);if(n){var i=B(n[1]),r=e[i];return r}return t}function El(t,e){var n=t.getAttribute("transform");if(n){n=n.replace(/,/g," ");var i=null,r=[];n.replace(X_,function(t,e,n){r.push(e,n)});for(var a=r.length-1;a>0;a-=2){var o=r[a],s=r[a-1];switch(i=i||Ae(),s){case"translate":o=B(o).split(F_),Oe(i,i,[parseFloat(o[0]),parseFloat(o[1]||0)]);break;case"scale":o=B(o).split(F_),Ee(i,i,[parseFloat(o[0]),parseFloat(o[1]||o[0])]);break;case"rotate":o=B(o).split(F_),Be(i,i,parseFloat(o[0]));break;case"skew":o=B(o).split(F_),console.warn("Skew transform is not supported yet");break;case"matrix":var o=B(o).split(F_);i[0]=parseFloat(o[0]),i[1]=parseFloat(o[1]),i[2]=parseFloat(o[2]),i[3]=parseFloat(o[3]),i[4]=parseFloat(o[4]),i[5]=parseFloat(o[5])}}e.setLocalTransform(i)}}function zl(t){var e=t.getAttribute("style"),n={};if(!e)return n;var i={};Y_.lastIndex=0;for(var r;null!=(r=Y_.exec(e));)i[r[1]]=r[2];for(var a in G_)G_.hasOwnProperty(a)&&null!=i[a]&&(n[G_[a]]=i[a]);return n}function Rl(t,e,n){var i=e/t.width,r=n/t.height,a=Math.min(i,r),o=[a,a],s=[-(t.x+t.width/2)*a+e/2,-(t.y+t.height/2)*a+n/2];return{scale:o,position:s}}function Nl(t,e){return function(n,i,r){(e||!this._disposed)&&(n=n&&n.toLowerCase(),up.prototype[t].call(this,n,i,r))}}function Fl(){up.call(this)}function Vl(t,e,n){function r(t,e){return t.__prio-e.__prio}n=n||{},"string"==typeof e&&(e=Dx[e]),this.id,this.group,this._dom=t;var a="canvas",o=this._zr=Yi(t,{renderer:n.renderer||a,devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=cl(y(o.flush,o),17);var e=i(e);e&&Jy(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new xs;var s=this._api=ru(this);Pn(Cx,r),Pn(Mx,r),this._scheduler=new fl(this,s,Mx,Cx),up.call(this,this._ecEventProcessor=new au),this._messageCenter=new Fl,this._initEvents(),this.resize=y(this.resize,this),this._pendingActions=[],o.animation.on("frame",this._onframe,this),jl(o,this),E(this)}function Hl(t,e,n){if(!this._disposed){var i,r=this._model,a=this._coordSysMgr.getCoordinateSystems();e=or(r,e);for(var o=0;o<a.length;o++){var s=a[o];if(s[t]&&null!=(i=s[t](r,e,n)))return i}}}function Gl(t){var e=t._model,n=t._scheduler;n.restorePipelines(e),n.prepareStageTasks(),Zl(t,"component",e,n),Zl(t,"chart",e,n),n.plan()}function Wl(t,e,n,i,r){function a(i){i&&i.__alive&&i[e]&&i[e](i.__model,o,t._api,n)}var o=t._model;if(!i)return void K_(t._componentsViews.concat(t._chartsViews),a);var s={};s[i+"Id"]=n[i+"Id"],s[i+"Index"]=n[i+"Index"],s[i+"Name"]=n[i+"Name"];var l={mainType:i,query:s};r&&(l.subType=r);var u=n.excludeSeriesId;null!=u&&(u=N(Ki(u))),o&&o.eachComponent(l,function(e){u&&null!=u.get(e.id)||a(t["series"===i?"_chartsMap":"_componentsMap"][e.__viewId])},t)}function Xl(t,e){var n=t._chartsMap,i=t._scheduler;e.eachSeries(function(t){i.updateStreamModes(t,n[t.__viewId])})}function Yl(t,e){var n=t.type,i=t.escapeConnect,r=bx[n],a=r.actionInfo,l=(a.update||"update").split(":"),u=l.pop();l=null!=l[0]&&J_(l[0]),this[gx]=!0;var h=[t],c=!1;t.batch&&(c=!0,h=p(t.batch,function(e){return e=s(o({},e),t),e.batch=null,e}));var d,f=[],g="highlight"===n||"downplay"===n;K_(h,function(t){d=r.action(t,this._model,this._api),d=d||o({},t),d.type=a.event||d.type,f.push(d),g?Wl(this,u,t,"series"):l&&Wl(this,u,t,l.main,l.sub)},this),"none"===u||g||l||(this[vx]?(Gl(this),_x.update.call(this,t),this[vx]=!1):_x[u].call(this,t)),d=c?{type:a.event||n,escapeConnect:i,batch:f}:f[0],this[gx]=!1,!e&&this._messageCenter.trigger(d.type,d)}function Ul(t){for(var e=this._pendingActions;e.length;){var n=e.shift();Yl.call(this,n,t)}}function ql(t){!t&&this.trigger("updated")}function jl(t,e){t.on("rendered",function(){e.trigger("rendered"),!t.animation.isFinished()||e[vx]||e._scheduler.unfinished||e._pendingActions.length||e.trigger("finished")})}function Zl(t,e,n,i){function r(t){var e="_ec_"+t.id+"_"+t.type,r=s[e];if(!r){var h=J_(t.type),c=a?c_.getClass(h.main,h.sub):ol.getClass(h.sub);r=new c,r.init(n,u),s[e]=r,o.push(r),l.add(r.group)}t.__viewId=r.__id=e,r.__alive=!0,r.__model=t,r.group.__ecComponentInfo={mainType:t.mainType,index:t.componentIndex},!a&&i.prepareView(r,t,n,u)}for(var a="component"===e,o=a?t._componentsViews:t._chartsViews,s=a?t._componentsMap:t._chartsMap,l=t._zr,u=t._api,h=0;h<o.length;h++)o[h].__alive=!1;a?n.eachComponent(function(t,e){"series"!==t&&r(e)}):n.eachSeries(r);for(var h=0;h<o.length;){var c=o[h];c.__alive?h++:(!a&&c.renderTask.dispose(),l.remove(c.group),c.dispose(n,u),o.splice(h,1),delete s[c.__id],c.__id=c.group.__ecComponentInfo=null)}}function Kl(t){t.clearColorPalette(),t.eachSeries(function(t){t.clearColorPalette()})}function $l(t,e,n,i){Ql(t,e,n,i),K_(t._chartsViews,function(t){t.__alive=!1}),Jl(t,e,n,i),K_(t._chartsViews,function(t){t.__alive||t.remove(e,n)})}function Ql(t,e,n,i,r){K_(r||t._componentsViews,function(t){var r=t.__model;t.render(r,e,n,i),iu(r,t)})}function Jl(t,e,n,i,r){var a,o=t._scheduler;e.eachSeries(function(e){var n=t._chartsMap[e.__viewId];n.__alive=!0;var s=n.renderTask;o.updatePayload(s,i),r&&r.get(e.uid)&&s.dirty(),a|=s.perform(o.getPerformArgs(s)),n.group.silent=!!e.get("silent"),iu(e,n),nu(e,n)}),o.unfinished|=a,eu(t,e),S_(t._zr.dom,e)}function tu(t,e){K_(Tx,function(n){n(t,e)})}function eu(t,e){var n=t._zr,i=n.storage,r=0;i.traverse(function(){r++}),r>e.get("hoverLayerThreshold")&&!Hf.node&&e.eachSeries(function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.group.traverse(function(t){t.useHoverLayer=!0})}})}function nu(t,e){var n=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.style.blend!==n&&t.setStyle("blend",n),t.eachPendingDisplayable&&t.eachPendingDisplayable(function(t){t.setStyle("blend",n)})})}function iu(t,e){var n=t.get("z"),i=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=i&&(t.zlevel=i))})}function ru(t){var e=t._coordSysMgr;return o(new _s(t),{getCoordinateSystems:y(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}}})}function au(){this.eventInfo}function ou(t){function e(t,e){for(var n=0;n<t.length;n++){var i=t[n];i[a]=e}}var n=0,i=1,r=2,a="__connectUpdateStatus";K_(Sx,function(o,s){t._messageCenter.on(s,function(o){if(Px[t.group]&&t[a]!==n){if(o&&o.escapeConnect)return;var s=t.makeActionFromEvent(o),l=[];K_(kx,function(e){e!==t&&e.group===t.group&&l.push(e)}),e(l,n),K_(l,function(t){t[a]!==i&&t.dispatchAction(s)}),e(l,r)}})})}function su(t,e,n){var i=cu(t);if(i)return i;var r=new Vl(t,e,n);return r.id="ec_"+Lx++,kx[r.id]=r,lr(t,Bx,r.id),ou(r),r}function lu(t){if(x(t)){var e=t;t=null,K_(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+Ox++,K_(e,function(e){e.group=t})}return Px[t]=!0,t}function uu(t){Px[t]=!1}function hu(t){"string"==typeof t?t=kx[t]:t instanceof Vl||(t=cu(t)),t instanceof Vl&&!t.isDisposed()&&t.dispose()}function cu(t){return kx[ur(t,Bx)]}function du(t){return kx[t]}function fu(t,e){Dx[t]=e}function pu(t){Ix.push(t)}function gu(t,e){bu(Mx,t,e,ix) +}function vu(t){Tx.push(t)}function mu(t,e,n){"function"==typeof e&&(n=e,e="");var i=Q_(t)?t.type:[t,t={event:e}][0];t.event=(t.event||i).toLowerCase(),e=t.event,Z_(mx.test(i)&&mx.test(e)),bx[i]||(bx[i]={action:n,actionInfo:t}),Sx[e]=i}function yu(t,e){xs.register(t,e)}function _u(t){var e=xs.get(t);return e?e.getDimensionsInfo?e.getDimensionsInfo():e.dimensions.slice():void 0}function xu(t,e){bu(Cx,t,e,sx,"layout")}function wu(t,e){bu(Cx,t,e,hx,"visual")}function bu(t,e,n,i,r){($_(e)||Q_(e))&&(n=e,e=i);var a=fl.wrapStageHandler(n,r);return a.__prio=e,a.__raw=n,t.push(a),a}function Su(t,e){Ax[t]=e}function Mu(t){return Sy.extend(t)}function Iu(t){return c_.extend(t)}function Tu(t){return h_.extend(t)}function Cu(t){return ol.extend(t)}function Du(t){n("createCanvas",t)}function Au(t,e,n){q_.registerMap(t,e,n)}function ku(t){var e=q_.retrieveMap(t);return e&&e[0]&&{geoJson:e[0].geoJSON,specialAreas:e[0].specialAreas}}function Pu(t){return t}function Lu(t,e,n,i,r){this._old=t,this._new=e,this._oldKeyGetter=n||Pu,this._newKeyGetter=i||Pu,this.context=r}function Ou(t,e,n,i,r){for(var a=0;a<t.length;a++){var o="_ec_"+r[i](t[a],a),s=e[o];null==s?(n.push(o),e[o]=a):(s.length||(e[o]=s=[s]),s.push(a))}}function Bu(t){var e={},n=e.encode={},i=N(),r=[],a=[],o=e.userOutput={dimensionNames:t.dimensions.slice(),encode:{}};f(t.dimensions,function(e){var s=t.getDimensionInfo(e),l=s.coordDim;if(l){var u=s.coordDimIndex;Eu(n,l)[u]=e,s.isExtraCoord||(i.set(l,1),Ru(s.type)&&(r[0]=e),Eu(o.encode,l)[u]=s.index),s.defaultTooltip&&a.push(e)}Rx.each(function(t,e){var i=Eu(n,e),r=s.otherDims[e];null!=r&&r!==!1&&(i[r]=s.name)})});var s=[],l={};i.each(function(t,e){var i=n[e];l[e]=i[0],s=s.concat(i)}),e.dataDimsOnCoord=s,e.encodeFirstDimNotExtra=l;var u=n.label;u&&u.length&&(r=u.slice());var h=n.tooltip;return h&&h.length?a=h.slice():a.length||(a=r.slice()),n.defaultedLabel=r,n.defaultedTooltip=a,e}function Eu(t,e){return t.hasOwnProperty(e)||(t[e]=[]),t[e]}function zu(t){return"category"===t?"ordinal":"time"===t?"time":"float"}function Ru(t){return!("ordinal"===t||"time"===t)}function Nu(t){null!=t&&o(this,t),this.otherDims={}}function Fu(t){return t._rawCount>65535?Wx:Yx}function Vu(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function Hu(t,e){f(Ux.concat(e.__wrappedMethods||[]),function(n){e.hasOwnProperty(n)&&(t[n]=e[n])}),t.__wrappedMethods=e.__wrappedMethods,f(qx,function(n){t[n]=i(e[n])}),t._calculationInfo=o(e._calculationInfo)}function Gu(t,e,n,i,r){var a=Gx[e.type],o=i-1,s=e.name,l=t[s][o];if(l&&l.length<n){for(var u=new a(Math.min(r-o*n,n)),h=0;h<l.length;h++)u[h]=l[h];t[s][o]=u}for(var c=i*n;r>c;c+=n)t[s].push(new a(Math.min(r-c,n)))}function Wu(t){var e=t._invertedIndicesMap;f(e,function(n,i){var r=t._dimensionInfos[i],a=r.ordinalMeta;if(a){n=e[i]=new Xx(a.categories.length);for(var o=0;o<n.length;o++)n[o]=Vx;for(var o=0;o<t._count;o++)n[t.get(i,o)]=o}})}function Xu(t,e,n){var i;if(null!=e){var r=t._chunkSize,a=Math.floor(n/r),o=n%r,s=t.dimensions[e],l=t._storage[s][a];if(l){i=l[o];var u=t._dimensionInfos[s].ordinalMeta;u&&u.categories.length&&(i=u.categories[i])}}return i}function Yu(t){return t}function Uu(t){return t<this._count&&t>=0?this._indices[t]:-1}function qu(t,e){var n=t._idList[e];return null==n&&(n=Xu(t,t._idDimIdx,e)),null==n&&(n=Hx+e),n}function ju(t){return x(t)||(t=[t]),t}function Zu(t,e){var n=t.dimensions,i=new jx(p(n,t.getDimensionInfo,t),t.hostModel);Hu(i,t);for(var r=i._storage={},a=t._storage,o=0;o<n.length;o++){var s=n[o];a[s]&&(u(e,s)>=0?(r[s]=Ku(a[s]),i._rawExtent[s]=$u(),i._extent[s]=null):r[s]=a[s])}return i}function Ku(t){for(var e=new Array(t.length),n=0;n<t.length;n++)e[n]=Vu(t[n]);return e}function $u(){return[1/0,-1/0]}function Qu(t,e,n){function r(t,e,n){null!=Rx.get(e)?t.otherDims[e]=n:(t.coordDim=e,t.coordDimIndex=n,u.set(e,!0))}Qo.isInstance(e)||(e=Qo.seriesDataToSource(e)),n=n||{},t=(t||[]).slice();for(var a=(n.dimsDef||[]).slice(),l=N(),u=N(),h=[],c=Ju(e,t,a,n.dimCount),d=0;c>d;d++){var p=a[d]=o({},S(a[d])?a[d]:{name:a[d]}),g=p.name,v=h[d]=new Nu;null!=g&&null==l.get(g)&&(v.name=v.displayName=g,l.set(g,d)),null!=p.type&&(v.type=p.type),null!=p.displayName&&(v.displayName=p.displayName)}var m=n.encodeDef;!m&&n.encodeDefaulter&&(m=n.encodeDefaulter(e,c)),m=N(m),m.each(function(t,e){if(t=Ki(t).slice(),1===t.length&&!b(t[0])&&t[0]<0)return void m.set(e,!1);var n=m.set(e,[]);f(t,function(t,i){b(t)&&(t=l.get(t)),null!=t&&c>t&&(n[i]=t,r(h[t],e,i))})});var y=0;f(t,function(t){var e,t,n,a;if(b(t))e=t,t={};else{e=t.name;var o=t.ordinalMeta;t.ordinalMeta=null,t=i(t),t.ordinalMeta=o,n=t.dimsDef,a=t.otherDims,t.name=t.coordDim=t.coordDimIndex=t.dimsDef=t.otherDims=null}var l=m.get(e);if(l!==!1){var l=Ki(l);if(!l.length)for(var u=0;u<(n&&n.length||1);u++){for(;y<h.length&&null!=h[y].coordDim;)y++;y<h.length&&l.push(y++)}f(l,function(i,o){var l=h[i];if(r(s(l,t),e,o),null==l.name&&n){var u=n[o];!S(u)&&(u={name:u}),l.name=l.displayName=u.name,l.defaultTooltip=u.defaultTooltip}a&&s(l.otherDims,a)})}});var _=n.generateCoord,x=n.generateCoordCount,w=null!=x;x=_?x||1:0;for(var M=_||"value",I=0;c>I;I++){var v=h[I]=h[I]||new Nu,T=v.coordDim;null==T&&(v.coordDim=th(M,u,w),v.coordDimIndex=0,(!_||0>=x)&&(v.isExtraCoord=!0),x--),null==v.name&&(v.name=th(v.coordDim,l)),null!=v.type||hs(e,I,v.name)!==zy.Must&&(!v.isExtraCoord||null==v.otherDims.itemName&&null==v.otherDims.seriesName)||(v.type="ordinal")}return h}function Ju(t,e,n,i){var r=Math.max(t.dimensionsDetectCount||1,e.length,n.length,i||0);return f(e,function(t){var e=t.dimsDef;e&&(r=Math.max(r,e.length))}),r}function th(t,e,n){if(n||null!=e.get(t)){for(var i=0;null!=e.get(t+i);)i++;t+=i}return e.set(t,!0),t}function eh(t){this.coordSysName=t,this.coordSysDims=[],this.axisMap=N(),this.categoryAxisMap=N(),this.firstCategoryDimIndex=null}function nh(t){var e=t.get("coordinateSystem"),n=new eh(e),i=Qx[e];return i?(i(t,n,n.axisMap,n.categoryAxisMap),n):void 0}function ih(t){return"category"===t.get("type")}function rh(t,e,n){n=n||{};var i,r,a,o,s=n.byIndex,l=n.stackedCoordDimension,u=!(!t||!t.get("stack"));if(f(e,function(t,n){b(t)&&(e[n]=t={name:t}),u&&!t.isExtraCoord&&(s||i||!t.ordinalMeta||(i=t),r||"ordinal"===t.type||"time"===t.type||l&&l!==t.coordDim||(r=t))}),!r||s||i||(s=!0),r){a="__\x00ecstackresult",o="__\x00ecstackedover",i&&(i.createInvertedIndices=!0);var h=r.coordDim,c=r.type,d=0;f(e,function(t){t.coordDim===h&&d++}),e.push({name:a,coordDim:h,coordDimIndex:d,type:c,isExtraCoord:!0,isCalculationCoord:!0}),d++,e.push({name:o,coordDim:o,coordDimIndex:d,type:c,isExtraCoord:!0,isCalculationCoord:!0})}return{stackedDimension:r&&r.name,stackedByDimension:i&&i.name,isStackedByIndex:s,stackedOverDimension:o,stackResultDimension:a}}function ah(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function oh(t,e){return ah(t,e)?t.getCalculationInfo("stackResultDimension"):e}function sh(t,e,n){n=n||{},Qo.isInstance(t)||(t=Qo.seriesDataToSource(t));var i,r=e.get("coordinateSystem"),a=xs.get(r),o=nh(e);o&&(i=p(o.coordSysDims,function(t){var e={name:t},n=o.axisMap.get(t);if(n){var i=n.get("type");e.type=zu(i)}return e})),i||(i=a&&(a.getDimensionsInfo?a.getDimensionsInfo():a.dimensions.slice())||["x","y"]);var s,l,u=$x(t,{coordDimensions:i,generateCoord:n.generateCoord,encodeDefaulter:n.useEncodeDefaulter?_(ss,i,e):null});o&&f(u,function(t,e){var n=t.coordDim,i=o.categoryAxisMap.get(n);i&&(null==s&&(s=e),t.ordinalMeta=i.getOrdinalMeta()),null!=t.otherDims.itemName&&(l=!0)}),l||null==s||(u[s].otherDims.itemName=0);var h=rh(e,u),c=new jx(u,e);c.setCalculationInfo(h);var d=null!=s&&lh(t)?function(t,e,n,i){return i===s?n:this.defaultDimValueGetter(t,e,n,i)}:null;return c.hasItemOption=!1,c.initData(t,null,d),c}function lh(t){if(t.sourceFormat===Dy){var e=uh(t.data||[]);return null!=e&&!x(Qi(e))}}function uh(t){for(var e=0;e<t.length&&null==t[e];)e++;return t[e]}function hh(t){this._setting=t||{},this._extent=[1/0,-1/0],this._interval=0,this.init&&this.init.apply(this,arguments)}function ch(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this._map}function dh(t){return t._map||(t._map=N(t.categories))}function fh(t){return S(t)&&null!=t.value?t.value:t+""}function ph(t,e,n,i){var r={},a=t[1]-t[0],o=r.interval=ko(a/e,!0);null!=n&&n>o&&(o=r.interval=n),null!=i&&o>i&&(o=r.interval=i);var s=r.intervalPrecision=gh(o),l=r.niceTickExtent=[nw(Math.ceil(t[0]/o)*o,s),nw(Math.floor(t[1]/o)*o,s)];return mh(l,t),r}function gh(t){return bo(t)+2}function vh(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function mh(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),vh(t,0,e),vh(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function yh(t){return t.get("stack")||aw+t.seriesIndex}function _h(t){return t.dim+t.index}function xh(t,e){var n=[];return e.eachSeriesByType(t,function(t){Th(t)&&!Ch(t)&&n.push(t)}),n}function wh(t){var e={};f(t,function(t){var n=t.coordinateSystem,i=n.getBaseAxis();if("time"===i.type||"value"===i.type)for(var r=t.getData(),a=i.dim+"_"+i.index,o=r.mapDimension(i.dim),s=0,l=r.count();l>s;++s){var u=r.get(o,s);e[a]?e[a].push(u):e[a]=[u]}});var n=[];for(var i in e)if(e.hasOwnProperty(i)){var r=e[i];if(r){r.sort(function(t,e){return t-e});for(var a=null,o=1;o<r.length;++o){var s=r[o]-r[o-1];s>0&&(a=null===a?s:Math.min(a,s))}n[i]=a}}return n}function bh(t){var e=wh(t),n=[];return f(t,function(t){var i,r=t.coordinateSystem,a=r.getBaseAxis(),o=a.getExtent();if("category"===a.type)i=a.getBandWidth();else if("value"===a.type||"time"===a.type){var s=a.dim+"_"+a.index,l=e[s],u=Math.abs(o[1]-o[0]),h=a.scale.getExtent(),c=Math.abs(h[1]-h[0]);i=l?u/c*l:u}else{var d=t.getData();i=Math.abs(o[1]-o[0])/d.count()}var f=yo(t.get("barWidth"),i),p=yo(t.get("barMaxWidth"),i),g=yo(t.get("barMinWidth")||1,i),v=t.get("barGap"),m=t.get("barCategoryGap");n.push({bandWidth:i,barWidth:f,barMaxWidth:p,barMinWidth:g,barGap:v,barCategoryGap:m,axisKey:_h(a),stackId:yh(t)})}),Sh(n)}function Sh(t){var e={};f(t,function(t){var n=t.axisKey,i=t.bandWidth,r=e[n]||{bandWidth:i,remainedWidth:i,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},a=r.stacks;e[n]=r;var o=t.stackId;a[o]||r.autoWidthCount++,a[o]=a[o]||{width:0,maxWidth:0};var s=t.barWidth;s&&!a[o].width&&(a[o].width=s,s=Math.min(r.remainedWidth,s),r.remainedWidth-=s);var l=t.barMaxWidth;l&&(a[o].maxWidth=l);var u=t.barMinWidth;u&&(a[o].minWidth=u);var h=t.barGap;null!=h&&(r.gap=h);var c=t.barCategoryGap;null!=c&&(r.categoryGap=c)});var n={};return f(e,function(t,e){n[e]={};var i=t.stacks,r=t.bandWidth,a=yo(t.categoryGap,r),o=yo(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,u=(s-a)/(l+(l-1)*o);u=Math.max(u,0),f(i,function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){var i=t.width;e&&(i=Math.min(i,e)),n&&(i=Math.max(i,n)),t.width=i,s-=i+o*i,l--}else{var i=u;e&&i>e&&(i=Math.min(e,s)),n&&n>i&&(i=n),i!==u&&(t.width=i,s-=i+o*i,l--)}}),u=(s-a)/(l+(l-1)*o),u=Math.max(u,0);var h,c=0;f(i,function(t){t.width||(t.width=u),h=t,c+=t.width*(1+o)}),h&&(c-=h.width*o);var d=-c/2;f(i,function(t,i){n[e][i]=n[e][i]||{bandWidth:r,offset:d,width:t.width},d+=t.width*(1+o)})}),n}function Mh(t,e,n){if(t&&e){var i=t[_h(e)];return null!=i&&null!=n&&(i=i[yh(n)]),i}}function Ih(t,e){var n=xh(t,e),i=bh(n),r={};f(n,function(t){var e=t.getData(),n=t.coordinateSystem,a=n.getBaseAxis(),o=yh(t),s=i[_h(a)][o],l=s.offset,u=s.width,h=n.getOtherAxis(a),c=t.get("barMinHeight")||0;r[o]=r[o]||[],e.setLayout({bandWidth:s.bandWidth,offset:l,size:u});for(var d=e.mapDimension(h.dim),f=e.mapDimension(a.dim),p=ah(e,d),g=h.isHorizontal(),v=Dh(a,h,p),m=0,y=e.count();y>m;m++){var _=e.get(d,m),x=e.get(f,m);if(!isNaN(_)&&!isNaN(x)){var w=_>=0?"p":"n",b=v;p&&(r[o][x]||(r[o][x]={p:v,n:v}),b=r[o][x][w]);var S,M,I,T;if(g){var C=n.dataToPoint([_,x]);S=b,M=C[1]+l,I=C[0]-v,T=u,Math.abs(I)<c&&(I=(0>I?-1:1)*c),p&&(r[o][x][w]+=I)}else{var C=n.dataToPoint([x,_]);S=C[0]+l,M=b,I=u,T=C[1]-v,Math.abs(T)<c&&(T=(0>=T?-1:1)*c),p&&(r[o][x][w]+=T)}e.setItemLayout(m,{x:S,y:M,width:I,height:T})}}},this)}function Th(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}function Ch(t){return t.pipelineContext&&t.pipelineContext.large}function Dh(t,e){return e.toGlobalCoord(e.dataToCoord("log"===e.type?1:0))}function Ah(t,e){return bw(t,ww(e))}function kh(t,e){var n,i,r,a=t.type,o=e.getMin(),s=e.getMax(),l=null!=o,u=null!=s,h=t.getExtent();"ordinal"===a?n=e.getCategories().length:(i=e.get("boundaryGap"),x(i)||(i=[i||0,i||0]),"boolean"==typeof i[0]&&(i=[0,0]),i[0]=yo(i[0],1),i[1]=yo(i[1],1),r=h[1]-h[0]||Math.abs(h[0])),null==o&&(o="ordinal"===a?n?0:0/0:h[0]-i[0]*r),null==s&&(s="ordinal"===a?n?n-1:0/0:h[1]+i[1]*r),"dataMin"===o?o=h[0]:"function"==typeof o&&(o=o({min:h[0],max:h[1]})),"dataMax"===s?s=h[1]:"function"==typeof s&&(s=s({min:h[0],max:h[1]})),(null==o||!isFinite(o))&&(o=0/0),(null==s||!isFinite(s))&&(s=0/0),t.setBlank(C(o)||C(s)||"ordinal"===a&&!t.getOrdinalMeta().categories.length),e.getNeedCrossZero()&&(o>0&&s>0&&!l&&(o=0),0>o&&0>s&&!u&&(s=0));var c=e.ecModel;if(c&&"time"===a){var d,p=xh("bar",c);if(f(p,function(t){d|=t.getBaseAxis()===e.axis}),d){var g=bh(p),v=Ph(o,s,e,g);o=v.min,s=v.max}}return[o,s]}function Ph(t,e,n,i){var r=n.axis.getExtent(),a=r[1]-r[0],o=Mh(i,n.axis);if(void 0===o)return{min:t,max:e};var s=1/0;f(o,function(t){s=Math.min(t.offset,s)});var l=-1/0;f(o,function(t){l=Math.max(t.offset+t.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=1-(s+l)/a,d=h/c-h;return e+=d*(l/u),t-=d*(s/u),{min:t,max:e}}function Lh(t,e){var n=kh(t,e),i=null!=e.getMin(),r=null!=e.getMax(),a=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var o=t.type;t.setExtent(n[0],n[1]),t.niceExtent({splitNumber:a,fixMin:i,fixMax:r,minInterval:"interval"===o||"time"===o?e.get("minInterval"):null,maxInterval:"interval"===o||"time"===o?e.get("maxInterval"):null});var s=e.get("interval");null!=s&&t.setInterval&&t.setInterval(s)}function Oh(t,e){if(e=e||t.get("type"))switch(e){case"category":return new ew(t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),[1/0,-1/0]);case"value":return new rw;default:return(hh.getClass(e)||rw).create(t)}}function Bh(t){var e=t.scale.getExtent(),n=e[0],i=e[1];return!(n>0&&i>0||0>n&&0>i)}function Eh(t){var e=t.getLabelModel().get("formatter"),n="category"===t.type?t.scale.getExtent()[0]:null;return"string"==typeof e?e=function(e){return function(n){return n=t.scale.getLabel(n),e.replace("{value}",null!=n?n:"")}}(e):"function"==typeof e?function(i,r){return null!=n&&(r=i-n),e(zh(t,i),r)}:function(e){return t.scale.getLabel(e)}}function zh(t,e){return"category"===t.type?t.scale.getLabel(e):e}function Rh(t){var e=t.model,n=t.scale;if(e.get("axisLabel.show")&&!n.isBlank()){var i,r,a="category"===t.type,o=n.getExtent();a?r=n.count():(i=n.getTicks(),r=i.length);var s,l=t.getLabelModel(),u=Eh(t),h=1;r>40&&(h=Math.ceil(r/40));for(var c=0;r>c;c+=h){var d=i?i[c]:o[0]+c,f=u(d),p=l.getTextRect(f),g=Nh(p,l.get("rotate")||0);s?s.union(g):s=g}return s}}function Nh(t,e){var n=e*Math.PI/180,i=t.plain(),r=i.width,a=i.height,o=r*Math.cos(n)+a*Math.sin(n),s=r*Math.sin(n)+a*Math.cos(n),l=new Sn(i.x,i.y,o,s);return l}function Fh(t){var e=t.get("interval");return null==e?"auto":e}function Vh(t){return"category"===t.type&&0===Fh(t.getLabelModel())}function Hh(t,e){if("image"!==this.type){var n=this.style,i=this.shape;i&&"line"===i.symbolType?n.stroke=t:this.__isEmptyBrush?(n.stroke=t,n.fill=e||"#fff"):(n.fill&&(n.fill=t),n.stroke&&(n.stroke=t)),this.dirty(!1)}}function Gh(t,e,n,i,r,a,o){var s=0===t.indexOf("empty");s&&(t=t.substr(5,1).toLowerCase()+t.substr(6));var l;return l=0===t.indexOf("image://")?va(t.slice(8),new Sn(e,n,i,r),o?"center":"cover"):0===t.indexOf("path://")?ga(t.slice(7),{},new Sn(e,n,i,r),o?"center":"cover"):new zw({shape:{symbolType:t,x:e,y:n,width:i,height:r}}),l.__isEmptyBrush=s,l.setColor=Hh,l.setColor(a),l}function Wh(t){return sh(t.getSource(),t)}function Xh(t,e){var n=e;uo.isInstance(e)||(n=new uo(e),c(n,Dw));var i=Oh(n);return i.setExtent(t[0],t[1]),Lh(i,n),i}function Yh(t){c(t,Dw)}function Uh(t,e){return Math.abs(t-e)<Fw}function qh(t,e,n){var i=0,r=t[0];if(!r)return!1;for(var a=1;a<t.length;a++){var o=t[a];i+=Gr(r[0],r[1],o[0],o[1],e,n),r=o}var s=t[0];return Uh(r[0],s[0])&&Uh(r[1],s[1])||(i+=Gr(r[0],r[1],s[0],s[1],e,n)),0!==i}function jh(t,e,n){if(this.name=t,this.geometries=e,n)n=[n[0],n[1]];else{var i=this.getBoundingRect();n=[i.x+i.width/2,i.y+i.height/2]}this.center=n}function Zh(t){if(!t.UTF8Encoding)return t;var e=t.UTF8Scale;null==e&&(e=1024);for(var n=t.features,i=0;i<n.length;i++)for(var r=n[i],a=r.geometry,o=a.coordinates,s=a.encodeOffsets,l=0;l<o.length;l++){var u=o[l];if("Polygon"===a.type)o[l]=Kh(u,s[l],e);else if("MultiPolygon"===a.type)for(var h=0;h<u.length;h++){var c=u[h];u[h]=Kh(c,s[l][h],e)}}return t.UTF8Encoding=!1,t}function Kh(t,e,n){for(var i=[],r=e[0],a=e[1],o=0;o<t.length;o+=2){var s=t.charCodeAt(o)-64,l=t.charCodeAt(o+1)-64;s=s>>1^-(1&s),l=l>>1^-(1&l),s+=r,l+=a,r=s,a=l,i.push([s/n,l/n])}return i}function $h(t){return"category"===t.type?Jh(t):nc(t)}function Qh(t,e){return"category"===t.type?ec(t,e):{ticks:t.scale.getTicks()}}function Jh(t){var e=t.getLabelModel(),n=tc(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:n.labelCategoryInterval}:n}function tc(t,e){var n=ic(t,"labels"),i=Fh(e),r=rc(n,i);if(r)return r;var a,o;return w(i)?a=hc(t,i):(o="auto"===i?oc(t):i,a=uc(t,o)),ac(n,i,{labels:a,labelCategoryInterval:o})}function ec(t,e){var n=ic(t,"ticks"),i=Fh(e),r=rc(n,i);if(r)return r;var a,o;if((!e.get("show")||t.scale.isBlank())&&(a=[]),w(i))a=hc(t,i,!0);else if("auto"===i){var s=tc(t,t.getLabelModel());o=s.labelCategoryInterval,a=p(s.labels,function(t){return t.tickValue})}else o=i,a=uc(t,o,!0);return ac(n,i,{ticks:a,tickCategoryInterval:o})}function nc(t){var e=t.scale.getTicks(),n=Eh(t);return{labels:p(e,function(e,i){return{formattedLabel:n(e,i),rawLabel:t.scale.getLabel(e),tickValue:e}})}}function ic(t,e){return Hw(t)[e]||(Hw(t)[e]=[])}function rc(t,e){for(var n=0;n<t.length;n++)if(t[n].key===e)return t[n].value}function ac(t,e,n){return t.push({key:e,value:n}),n}function oc(t){var e=Hw(t).autoInterval;return null!=e?e:Hw(t).autoInterval=t.calculateCategoryInterval()}function sc(t){var e=lc(t),n=Eh(t),i=(e.axisRotate-e.labelRotate)/180*Math.PI,r=t.scale,a=r.getExtent(),o=r.count();if(a[1]-a[0]<1)return 0;var s=1;o>40&&(s=Math.max(1,Math.floor(o/40)));for(var l=a[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(i)),c=Math.abs(u*Math.sin(i)),d=0,f=0;l<=a[1];l+=s){var p=0,g=0,v=Gn(n(l),e.font,"center","top");p=1.3*v.width,g=1.3*v.height,d=Math.max(d,p,7),f=Math.max(f,g,7)}var m=d/h,y=f/c;isNaN(m)&&(m=1/0),isNaN(y)&&(y=1/0);var _=Math.max(0,Math.floor(Math.min(m,y))),x=Hw(t.model),w=t.getExtent(),b=x.lastAutoInterval,S=x.lastTickCount;return null!=b&&null!=S&&Math.abs(b-_)<=1&&Math.abs(S-o)<=1&&b>_&&x.axisExtend0===w[0]&&x.axisExtend1===w[1]?_=b:(x.lastTickCount=o,x.lastAutoInterval=_,x.axisExtend0=w[0],x.axisExtend1=w[1]),_}function lc(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function uc(t,e,n){function i(t){l.push(n?t:{formattedLabel:r(t),rawLabel:a.getLabel(t),tickValue:t})}var r=Eh(t),a=t.scale,o=a.getExtent(),s=t.getLabelModel(),l=[],u=Math.max((e||0)+1,1),h=o[0],c=a.count();0!==h&&u>1&&c/u>2&&(h=Math.round(Math.ceil(h/u)*u));var d=Vh(t),f=s.get("showMinLabel")||d,p=s.get("showMaxLabel")||d;f&&h!==o[0]&&i(o[0]);for(var g=h;g<=o[1];g+=u)i(g);return p&&g-u!==o[1]&&i(o[1]),l}function hc(t,e,n){var i=t.scale,r=Eh(t),a=[];return f(i.getTicks(),function(t){var o=i.getLabel(t);e(t,o)&&a.push(n?t:{formattedLabel:r(t),rawLabel:o,tickValue:t})}),a}function cc(t,e){var n=t[1]-t[0],i=e,r=n/i/2;t[0]+=r,t[1]-=r}function dc(t,e,n,i){function r(t,e){return t=_o(t),e=_o(e),d?t>e:e>t}var a=e.length;if(t.onBand&&!n&&a){var o,s,l=t.getExtent();if(1===a)e[0].coord=l[0],o=e[1]={coord:l[0]};else{var u=e[a-1].tickValue-e[0].tickValue,h=(e[a-1].coord-e[0].coord)/u;f(e,function(t){t.coord-=h/2});var c=t.scale.getExtent();s=1+c[1]-e[a-1].tickValue,o={coord:e[a-1].coord+h*s},e.push(o)}var d=l[0]>l[1];r(e[0].coord,l[0])&&(i?e[0].coord=l[0]:e.shift()),i&&r(l[0],e[0].coord)&&e.unshift({coord:l[0]}),r(l[1],o.coord)&&(i?o.coord=l[1]:e.pop()),i&&r(o.coord,l[1])&&e.push({coord:l[1]})}}function fc(t){return this._axes[t]}function pc(t){qw.call(this,t)}function gc(t,e){return e.type||(e.data?"category":"value")}function vc(t,e){return t.getCoordSysModel()===e}function mc(t,e,n){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,n),this.model=t}function yc(t,e,n,i){function r(t){return t.dim+"_"+t.index}n.getAxesOnZeroOf=function(){return a?[a]:[]};var a,o=t[e],s=n.model,l=s.get("axisLine.onZero"),u=s.get("axisLine.onZeroAxisIndex");if(l){if(null!=u)_c(o[u])&&(a=o[u]);else for(var h in o)if(o.hasOwnProperty(h)&&_c(o[h])&&!i[r(o[h])]){a=o[h];break}a&&(i[r(a)]=!0)}}function _c(t){return t&&"category"!==t.type&&"time"!==t.type&&Bh(t)}function xc(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}function wc(t){return p(nb,function(e){var n=t.getReferringComponents(e)[0];return n})}function bc(t){return"cartesian2d"===t.get("coordinateSystem")}function Sc(t,e){var n=t.mapDimension("defaultedLabel",!0),i=n.length;if(1===i)return Us(t,e,n[0]);if(i){for(var r=[],a=0;a<n.length;a++){var o=Us(t,e,n[a]);r.push(o)}return r.join(" ")}}function Mc(t,e,n,i,r,a){var o=n.getModel("label"),s=n.getModel("emphasis.label");Na(t,e,o,s,{labelFetcher:r,labelDataIndex:a,defaultText:Sc(r.getData(),a),isRectText:!0,autoColor:i}),Ic(t),Ic(e)}function Ic(t,e){"outside"===t.textPosition&&(t.textPosition=e)}function Tc(t,e,n){var i=t.getArea(),r=t.getBaseAxis().isHorizontal(),a=i.x,o=i.y,s=i.width,l=i.height,u=n.get("lineStyle.width")||2;a-=u/2,o-=u/2,s+=u,l+=u;var h=new Cm({shape:{x:a,y:o,width:s,height:l}});return e&&(h.shape[r?"width":"height"]=0,$a(h,{shape:{width:s,height:l}},n)),h}function Cc(t,e,n){var i=t.getArea(),r=new _m({shape:{cx:_o(t.cx,1),cy:_o(t.cy,1),r0:_o(i.r0,1),r:_o(i.r,1),startAngle:i.startAngle,endAngle:i.endAngle,clockwise:i.clockwise}});return e&&(r.shape.endAngle=i.startAngle,$a(r,{shape:{endAngle:i.endAngle}},n)),r}function Dc(t,e,n){return t?"polar"===t.type?Cc(t,e,n):"cartesian2d"===t.type?Tc(t,e,n):null:null}function Ac(t,e){var n=t.getArea&&t.getArea();if("cartesian2d"===t.type){var i=t.getBaseAxis();if("category"!==i.type||!i.onBand){var r=e.getLayout("bandWidth");i.isHorizontal()?(n.x-=r,n.width+=2*r):(n.y-=r,n.height+=2*r)}}return n}function kc(t,e,n){n.style.text=null,Ka(n,{shape:{width:0}},e,t,function(){n.parent&&n.parent.remove(n)})}function Pc(t,e,n){n.style.text=null,Ka(n,{shape:{r:n.shape.r0}},e,t,function(){n.parent&&n.parent.remove(n)})}function Lc(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}function Oc(t,e,n,i,r,a,o,l){var u=e.getItemVisual(n,"color"),h=e.getItemVisual(n,"opacity"),c=e.getVisual("borderColor"),d=i.getModel("itemStyle"),f=i.getModel("emphasis.itemStyle").getBarItemStyle();l||t.setShape("r",d.get("barBorderRadius")||0),t.useStyle(s({stroke:Lc(r)?"none":c,fill:Lc(r)?"none":u,opacity:h},d.getBarItemStyle()));var p=i.getShallow("cursor");p&&t.attr("cursor",p);var g=o?r.height>0?"bottom":"top":r.width>0?"left":"right";l||Mc(t.style,f,i,u,a,n,g),Lc(r)&&(f.fill=f.stroke="none"),Ba(t,f)}function Bc(t,e){var n=t.get(sb)||0;return Math.min(n,Math.abs(e.width),Math.abs(e.height))}function Ec(t,e,n){var i=t.getData(),r=[],a=i.getLayout("valueAxisHorizontal")?1:0;r[1-a]=i.getLayout("valueAxisStart");var o=new pb({shape:{points:i.getLayout("largePoints")},incremental:!!n,__startPoint:r,__baseDimIdx:a,__largeDataIndices:i.getLayout("largeDataIndices"),__barWidth:i.getLayout("barWidth")});e.add(o),Rc(o,t,i),o.seriesIndex=t.seriesIndex,t.get("silent")||(o.on("mousedown",gb),o.on("mousemove",gb))}function zc(t,e,n){var i=t.__baseDimIdx,r=1-i,a=t.shape.points,o=t.__largeDataIndices,s=Math.abs(t.__barWidth/2),l=t.__startPoint[r];lb[0]=e,lb[1]=n;for(var u=lb[i],h=lb[1-i],c=u-s,d=u+s,f=0,p=a.length/2;p>f;f++){var g=2*f,v=a[g+i],m=a[g+r];if(v>=c&&d>=v&&(m>=l?h>=l&&m>=h:h>=m&&l>=h))return o[f]}return-1}function Rc(t,e,n){var i=n.getVisual("borderColor")||n.getVisual("color"),r=e.getModel("itemStyle").getItemStyle(["color","borderColor"]);t.useStyle(r),t.style.fill=null,t.style.stroke=i,t.style.lineWidth=n.getLayout("barWidth")}function Nc(t,e,n,i){var r,a,o=Io(n-t.rotation),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;return To(o-vb/2)?(a=l?"bottom":"top",r="center"):To(o-1.5*vb)?(a=l?"top":"bottom",r="center"):(a="middle",r=1.5*vb>o&&o>vb/2?l?"left":"right":l?"right":"left"),{rotation:o,textAlign:r,textVerticalAlign:a}}function Fc(t,e,n){if(!Vh(t.axis)){var i=t.get("axisLabel.showMinLabel"),r=t.get("axisLabel.showMaxLabel");e=e||[],n=n||[];var a=e[0],o=e[1],s=e[e.length-1],l=e[e.length-2],u=n[0],h=n[1],c=n[n.length-1],d=n[n.length-2];i===!1?(Vc(a),Vc(u)):Hc(a,o)&&(i?(Vc(o),Vc(h)):(Vc(a),Vc(u))),r===!1?(Vc(s),Vc(c)):Hc(l,s)&&(r?(Vc(l),Vc(d)):(Vc(s),Vc(c)))}}function Vc(t){t&&(t.ignore=!0)}function Hc(t,e){var n=t&&t.getBoundingRect().clone(),i=e&&e.getBoundingRect().clone();if(n&&i){var r=ke([]);return Be(r,r,-t.rotation),n.applyTransform(Le([],r,t.getLocalTransform())),i.applyTransform(Le([],r,e.getLocalTransform())),n.intersect(i)}}function Gc(t){return"middle"===t||"center"===t}function Wc(t,e,n,i,r){for(var a=[],o=[],s=[],l=0;l<t.length;l++){var u=t[l].coord;o[0]=u,o[1]=0,s[0]=u,s[1]=n,e&&(ae(o,o,e),ae(s,s,e));var h=new Am({anid:r+"_"+t[l].tickValue,subPixelOptimize:!0,shape:{x1:o[0],y1:o[1],x2:s[0],y2:s[1]},style:i,z2:2,silent:!0});a.push(h)}return a}function Xc(t,e,n){var i=e.axis,r=e.getModel("axisTick");if(r.get("show")&&!i.scale.isBlank()){for(var a=r.getModel("lineStyle"),o=n.tickDirection*r.get("length"),l=i.getTicksCoords(),u=Wc(l,t._transform,o,s(a.getLineStyle(),{stroke:e.get("axisLine.lineStyle.color")}),"ticks"),h=0;h<u.length;h++)t.group.add(u[h]);return u}}function Yc(t,e,n){var i=e.axis,r=e.getModel("minorTick");if(r.get("show")&&!i.scale.isBlank()){var a=i.getMinorTicksCoords();if(a.length)for(var o=r.getModel("lineStyle"),l=n.tickDirection*r.get("length"),u=s(o.getLineStyle(),s(e.getModel("axisTick").getLineStyle(),{stroke:e.get("axisLine.lineStyle.color")})),h=0;h<a.length;h++)for(var c=Wc(a[h],t._transform,l,u,"minorticks_"+h),d=0;d<c.length;d++)t.group.add(c[d])}}function Uc(t,e,n){var i=e.axis,r=D(n.axisLabelShow,e.get("axisLabel.show"));if(r&&!i.scale.isBlank()){var a=e.getModel("axisLabel"),o=a.get("margin"),s=i.getViewLabels(),l=(D(n.labelRotate,a.get("rotate"))||0)*vb/180,u=xb(n.rotation,l,n.labelDirection),h=e.getCategories&&e.getCategories(!0),c=[],d=wb(e),p=e.get("triggerEvent");return f(s,function(r,s){var l=r.tickValue,f=r.formattedLabel,g=r.rawLabel,v=a;h&&h[l]&&h[l].textStyle&&(v=new uo(h[l].textStyle,a,e.ecModel));var m=v.getTextColor()||e.get("axisLine.lineStyle.color"),y=i.dataToCoord(l),_=[y,n.labelOffset+n.labelDirection*o],x=new gm({anid:"label_"+l,position:_,rotation:u.rotation,silent:d,z2:10});Va(x.style,v,{text:f,textAlign:v.getShallow("align",!0)||u.textAlign,textVerticalAlign:v.getShallow("verticalAlign",!0)||v.getShallow("baseline",!0)||u.textVerticalAlign,textFill:"function"==typeof m?m("category"===i.type?g:"value"===i.type?l+"":l,s):m}),p&&(x.eventData=_b(e),x.eventData.targetType="axisLabel",x.eventData.value=g),t._dumbGroup.add(x),x.updateTransform(),c.push(x),t.group.add(x),x.decomposeTransform()}),c}}function qc(t,e){var n={axesInfo:{},seriesInvolved:!1,coordSysAxesInfo:{},coordSysMap:{}};return jc(n,t,e),n.seriesInvolved&&Kc(n,t),n}function jc(t,e,n){var i=e.getComponent("tooltip"),r=e.getComponent("axisPointer"),a=r.get("link",!0)||[],o=[];bb(n.getCoordinateSystems(),function(n){function s(i,s,l){var h=l.model.getModel("axisPointer",r),d=h.get("show");if(d&&("auto"!==d||i||nd(h))){null==s&&(s=h.get("triggerTooltip")),h=i?Zc(l,c,r,e,i,s):h;var f=h.get("snap"),p=id(l.model),g=s||f||"category"===l.type,v=t.axesInfo[p]={key:p,axis:l,coordSys:n,axisPointerModel:h,triggerTooltip:s,involveSeries:g,snap:f,useHandle:nd(h),seriesModels:[]};u[p]=v,t.seriesInvolved|=g;var m=$c(a,l);if(null!=m){var y=o[m]||(o[m]={axesInfo:{}});y.axesInfo[p]=v,y.mapper=a[m].mapper,v.linkGroup=y}}}if(n.axisPointerEnabled){var l=id(n.model),u=t.coordSysAxesInfo[l]={};t.coordSysMap[l]=n;var h=n.model,c=h.getModel("tooltip",i);if(bb(n.getAxes(),Sb(s,!1,null)),n.getTooltipAxes&&i&&c.get("show")){var d="axis"===c.get("trigger"),f="cross"===c.get("axisPointer.type"),p=n.getTooltipAxes(c.get("axisPointer.axis"));(d||f)&&bb(p.baseAxes,Sb(s,f?"cross":!0,d)),f&&bb(p.otherAxes,Sb(s,"cross",!1))}}})}function Zc(t,e,n,r,a,o){var l=e.getModel("axisPointer"),u={};bb(["type","snap","lineStyle","shadowStyle","label","animation","animationDurationUpdate","animationEasingUpdate","z"],function(t){u[t]=i(l.get(t))}),u.snap="category"!==t.type&&!!o,"cross"===l.get("type")&&(u.type="line");var h=u.label||(u.label={});if(null==h.show&&(h.show=!1),"cross"===a){var c=l.get("label.show");if(h.show=null!=c?c:!0,!o){var d=u.lineStyle=l.get("crossStyle");d&&s(h,d.textStyle)}}return t.model.getModel("axisPointer",new uo(u,n,r))}function Kc(t,e){e.eachSeries(function(e){var n=e.coordinateSystem,i=e.get("tooltip.trigger",!0),r=e.get("tooltip.show",!0);n&&"none"!==i&&i!==!1&&"item"!==i&&r!==!1&&e.get("axisPointer.show",!0)!==!1&&bb(t.coordSysAxesInfo[id(n.model)],function(t){var i=t.axis;n.getAxis(i.dim)===i&&(t.seriesModels.push(e),null==t.seriesDataCount&&(t.seriesDataCount=0),t.seriesDataCount+=e.getData().count())})},this)}function $c(t,e){for(var n=e.model,i=e.dim,r=0;r<t.length;r++){var a=t[r]||{};if(Qc(a[i+"AxisId"],n.id)||Qc(a[i+"AxisIndex"],n.componentIndex)||Qc(a[i+"AxisName"],n.name))return r}}function Qc(t,e){return"all"===t||x(t)&&u(t,e)>=0||t===e}function Jc(t){var e=td(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,a=n.get("status"),o=n.get("value");null!=o&&(o=i.parse(o));var s=nd(n);null==a&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==o||o>l[1])&&(o=l[1]),o<l[0]&&(o=l[0]),r.value=o,s&&(r.status=e.axis.scale.isBlank()?"hide":"show")}}function td(t){var e=(t.ecModel.getComponent("axisPointer")||{}).coordSysAxesInfo;return e&&e.axesInfo[id(t)]}function ed(t){var e=td(t);return e&&e.axisPointerModel}function nd(t){return!!t.get("handle.show")}function id(t){return t.type+"||"+t.id}function rd(t,e,n,i,r,a){var o=Mb.getAxisPointerClass(t.axisPointerClass);if(o){var s=ed(e);s?(t._axisPointer||(t._axisPointer=new o)).render(e,s,i,a):ad(t,i)}}function ad(t,e,n){var i=t._axisPointer;i&&i.dispose(e,n),t._axisPointer=null}function od(t,e,n){n=n||{};var i=t.coordinateSystem,r=e.axis,a={},o=r.getAxesOnZeroOf()[0],s=r.position,l=o?"onZero":s,u=r.dim,h=i.getRect(),c=[h.x,h.x+h.width,h.y,h.y+h.height],d={left:0,right:1,top:0,bottom:1,onZero:2},f=e.get("offset")||0,p="x"===u?[c[2]-f,c[3]+f]:[c[0]-f,c[1]+f];if(o){var g=o.toGlobalCoord(o.dataToCoord(0));p[d.onZero]=Math.max(Math.min(g,p[1]),p[0])}a.position=["y"===u?p[d[l]]:c[0],"x"===u?p[d[l]]:c[3]],a.rotation=Math.PI/2*("x"===u?0:1);var v={top:-1,bottom:1,left:-1,right:1};a.labelDirection=a.tickDirection=a.nameDirection=v[s],a.labelOffset=o?p[d[s]]-p[d.onZero]:0,e.get("axisTick.inside")&&(a.tickDirection=-a.tickDirection),D(n.labelInside,e.get("axisLabel.inside"))&&(a.labelDirection=-a.labelDirection);var m=e.get("axisLabel.rotate");return a.labelRotate="top"===l?-m:m,a.z2=1,a}function sd(t,e,n){tg.call(this),this.updateData(t,e,n)}function ld(t){return[t[0]/2,t[1]/2]}function ud(t,e){this.parent.drift(t,e)}function hd(t,e){if(!this.incremental&&!this.useHoverLayer)if("emphasis"===e){var n=this.__symbolOriginalScale,i=n[1]/n[0],r={scale:[Math.max(1.1*n[0],n[0]+3),Math.max(1.1*n[1],n[1]+3*i)]}; +this.animateTo(r,400,"elasticOut")}else"normal"===e&&this.animateTo({scale:this.__symbolOriginalScale},400,"elasticOut")}function cd(t){this.group=new tg,this._symbolCtor=t||sd}function dd(t,e,n,i){return!(!e||isNaN(e[0])||isNaN(e[1])||i.isIgnore&&i.isIgnore(n)||i.clipShape&&!i.clipShape.contain(e[0],e[1])||"none"===t.getItemVisual(n,"symbol"))}function fd(t){return null==t||S(t)||(t={isIgnore:t}),t||{}}function pd(t){var e=t.hostModel;return{itemStyle:e.getModel("itemStyle").getItemStyle(["color"]),hoverItemStyle:e.getModel("emphasis.itemStyle").getItemStyle(),symbolRotate:e.get("symbolRotate"),symbolOffset:e.get("symbolOffset"),hoverAnimation:e.get("hoverAnimation"),labelModel:e.getModel("label"),hoverLabelModel:e.getModel("emphasis.label"),cursorStyle:e.get("cursor")}}function gd(t,e,n){var i,r=t.getBaseAxis(),a=t.getOtherAxis(r),o=vd(a,n),s=r.dim,l=a.dim,u=e.mapDimension(l),h=e.mapDimension(s),c="x"===l||"radius"===l?1:0,d=p(t.dimensions,function(t){return e.mapDimension(t)}),f=e.getCalculationInfo("stackResultDimension");return(i|=ah(e,d[0]))&&(d[0]=f),(i|=ah(e,d[1]))&&(d[1]=f),{dataDimsForPoint:d,valueStart:o,valueAxisDim:l,baseAxisDim:s,stacked:!!i,valueDim:u,baseDim:h,baseDataOffset:c,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function vd(t,e){var n=0,i=t.scale.getExtent();return"start"===e?n=i[0]:"end"===e?n=i[1]:i[0]>0?n=i[0]:i[1]<0&&(n=i[1]),n}function md(t,e,n,i){var r=0/0;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var a=t.baseDataOffset,o=[];return o[a]=n.get(t.baseDim,i),o[1-a]=r,e.dataToPoint(o)}function yd(t,e){var n=[];return e.diff(t).add(function(t){n.push({cmd:"+",idx:t})}).update(function(t,e){n.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){n.push({cmd:"-",idx:t})}).execute(),n}function _d(t){return isNaN(t[0])||isNaN(t[1])}function xd(t,e,n,i,r,a,o,s,l,u){return"none"!==u&&u?wd.apply(this,arguments):bd.apply(this,arguments)}function wd(t,e,n,i,r,a,o,s,l,u,h){for(var c=0,d=n,f=0;i>f;f++){var p=e[d];if(d>=r||0>d)break;if(_d(p)){if(h){d+=a;continue}break}if(d===n)t[a>0?"moveTo":"lineTo"](p[0],p[1]);else if(l>0){var g=e[c],v="y"===u?1:0,m=(p[v]-g[v])*l;Vb(Gb,g),Gb[v]=g[v]+m,Vb(Wb,p),Wb[v]=p[v]-m,t.bezierCurveTo(Gb[0],Gb[1],Wb[0],Wb[1],p[0],p[1])}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function bd(t,e,n,i,r,a,o,s,l,u,h){for(var c=0,d=n,f=0;i>f;f++){var p=e[d];if(d>=r||0>d)break;if(_d(p)){if(h){d+=a;continue}break}if(d===n)t[a>0?"moveTo":"lineTo"](p[0],p[1]),Vb(Gb,p);else if(l>0){var g=d+a,v=e[g];if(h)for(;v&&_d(e[g]);)g+=a,v=e[g];var m=.5,y=e[c],v=e[g];if(!v||_d(v))Vb(Wb,p);else{_d(v)&&!h&&(v=p),q(Hb,v,y);var _,x;if("x"===u||"y"===u){var w="x"===u?0:1;_=Math.abs(p[w]-y[w]),x=Math.abs(p[w]-v[w])}else _=ap(p,y),x=ap(p,v);m=x/(x+_),Fb(Wb,p,Hb,-l*(1-m))}Rb(Gb,Gb,s),Nb(Gb,Gb,o),Rb(Wb,Wb,s),Nb(Wb,Wb,o),t.bezierCurveTo(Gb[0],Gb[1],Wb[0],Wb[1],p[0],p[1]),Fb(Gb,p,Hb,l*m)}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Sd(t,e){var n=[1/0,1/0],i=[-1/0,-1/0];if(e)for(var r=0;r<t.length;r++){var a=t[r];a[0]<n[0]&&(n[0]=a[0]),a[1]<n[1]&&(n[1]=a[1]),a[0]>i[0]&&(i[0]=a[0]),a[1]>i[1]&&(i[1]=a[1])}return{min:e?n:i,max:e?i:n}}function Md(t,e){if(t.length===e.length){for(var n=0;n<t.length;n++){var i=t[n],r=e[n];if(i[0]!==r[0]||i[1]!==r[1])return}return!0}}function Id(t){return"number"==typeof t?t:t?.5:0}function Td(t,e,n){if(!n.valueDim)return[];for(var i=[],r=0,a=e.count();a>r;r++)i.push(md(n,t,e,r));return i}function Cd(t,e,n){for(var i=e.getBaseAxis(),r="x"===i.dim||"radius"===i.dim?0:1,a=[],o=0;o<t.length-1;o++){var s=t[o+1],l=t[o];a.push(l);var u=[];switch(n){case"end":u[r]=s[r],u[1-r]=l[1-r],a.push(u);break;case"middle":var h=(l[r]+s[r])/2,c=[];u[r]=c[r]=h,u[1-r]=l[1-r],c[1-r]=s[1-r],a.push(u),a.push(c);break;default:u[r]=l[r],u[1-r]=s[1-r],a.push(u)}}return t[o]&&a.push(t[o]),a}function Dd(t,e){var n=t.getVisual("visualMeta");if(n&&n.length&&t.count()&&"cartesian2d"===e.type){for(var i,r,a=n.length-1;a>=0;a--){var o=n[a].dimension,s=t.dimensions[o],l=t.getDimensionInfo(s);if(i=l&&l.coordDim,"x"===i||"y"===i){r=n[a];break}}if(r){var u=e.getAxis(i),h=p(r.stops,function(t){return{coord:u.toGlobalCoord(u.dataToCoord(t.value)),color:t.color}}),c=h.length,d=r.outerColors.slice();c&&h[0].coord>h[c-1].coord&&(h.reverse(),d.reverse());var g=10,v=h[0].coord-g,m=h[c-1].coord+g,y=m-v;if(.001>y)return"transparent";f(h,function(t){t.offset=(t.coord-v)/y}),h.push({offset:c?h[c-1].offset:.5,color:d[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:d[0]||"transparent"});var _=new Em(0,0,0,0,h,!0);return _[i]=v,_[i+"2"]=m,_}}}function Ad(t,e,n){var i=t.get("showAllSymbol"),r="auto"===i;if(!i||r){var a=n.getAxesByScale("ordinal")[0];if(a&&(!r||!kd(a,e))){var o=e.mapDimension(a.dim),s={};return f(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(o,t))}}}}function kd(t,e){var n=t.getExtent(),i=Math.abs(n[1]-n[0])/t.scale.count();isNaN(i)&&(i=0);for(var r=e.count(),a=Math.max(1,Math.round(r/5)),o=0;r>o;o+=a)if(1.5*sd.getSymbolSize(e,o)[t.isHorizontal()?1:0]>i)return!1;return!0}function Pd(t,e,n){if("cartesian2d"===t.type){var i=t.getBaseAxis().isHorizontal(),r=Tc(t,e,n);if(!n.get("clip",!0)){var a=r.shape,o=Math.max(a.width,a.height);i?(a.y-=o,a.height+=2*o):(a.x-=o,a.width+=2*o)}return r}return Cc(t,e,n)}function Ld(t,e){this.getAllNames=function(){var t=e();return t.mapArray(t.getName)},this.containName=function(t){var n=e();return n.indexOfName(t)>=0},this.indexOfName=function(e){var n=t();return n.indexOfName(e)},this.getItemVisual=function(e,n){var i=t();return i.getItemVisual(e,n)}}function Od(t,e,n,i){var r=e.getData(),a=this.dataIndex,o=r.getName(a),s=e.get("selectedOffset");i.dispatchAction({type:"pieToggleSelect",from:t,name:o,seriesId:e.id}),r.each(function(t){Bd(r.getItemGraphicEl(t),r.getItemLayout(t),e.isSelected(r.getName(t)),s,n)})}function Bd(t,e,n,i,r){var a=(e.startAngle+e.endAngle)/2,o=Math.cos(a),s=Math.sin(a),l=n?i:0,u=[o*l,s*l];r?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function Ed(t,e){tg.call(this);var n=new _m({z2:2}),i=new Mm,r=new gm;this.add(n),this.add(i),this.add(r),this.updateData(t,e,!0)}function zd(t,e,n,i,r,a,o,s,l,u){function h(e,n,i){for(var r=e;n>r&&!(t[r].y+i>l+o);r++)if(t[r].y+=i,r>e&&n>r+1&&t[r+1].y>t[r].y+t[r].height)return void c(r,i/2);c(n-1,i/2)}function c(e,n){for(var i=e;i>=0&&!(t[i].y-n<l)&&(t[i].y-=n,!(i>0&&t[i].y>t[i-1].y+t[i-1].height));i--);}function d(t,e,n,i,r,a){for(var o=a>0?e?Number.MAX_VALUE:0:e?Number.MAX_VALUE:0,s=0,l=t.length;l>s;s++)if("none"===t[s].labelAlignTo){var u=Math.abs(t[s].y-i),h=t[s].len,c=t[s].len2,d=r+h>u?Math.sqrt((r+h+c)*(r+h+c)-u*u):Math.abs(t[s].x-n);e&&d>=o&&(d=o-10),!e&&o>=d&&(d=o+10),t[s].x=n+d*a,o=d}}t.sort(function(t,e){return t.y-e.y});for(var f,p=0,g=t.length,v=[],m=[],y=0;g>y;y++){if("outer"===t[y].position&&"labelLine"===t[y].labelAlignTo){var _=t[y].x-u;t[y].linePoints[1][0]+=_,t[y].x=u}f=t[y].y-p,0>f&&h(y,g,-f,r),p=t[y].y+t[y].height}0>o-p&&c(g-1,p-o);for(var y=0;g>y;y++)t[y].y>=n?m.push(t[y]):v.push(t[y]);d(v,!1,e,n,i,r),d(m,!0,e,n,i,r)}function Rd(t,e,n,i,r,a,o,s){for(var l=[],u=[],h=Number.MAX_VALUE,c=-Number.MAX_VALUE,d=0;d<t.length;d++)Nd(t[d])||(t[d].x<e?(h=Math.min(h,t[d].x),l.push(t[d])):(c=Math.max(c,t[d].x),u.push(t[d])));zd(u,e,n,i,1,r,a,o,s,c),zd(l,e,n,i,-1,r,a,o,s,h);for(var d=0;d<t.length;d++){var f=t[d];if(!Nd(f)){var p=f.linePoints;if(p){var g,v="edge"===f.labelAlignTo,m=f.textRect.width;g=v?f.x<e?p[2][0]-f.labelDistance-o-f.labelMargin:o+r-f.labelMargin-p[2][0]-f.labelDistance:f.x<e?f.x-o-f.bleedMargin:o+r-f.x-f.bleedMargin,g<f.textRect.width&&(f.text=jn(f.text,g,f.font),"edge"===f.labelAlignTo&&(m=Hn(f.text,f.font)));var y=p[1][0]-p[2][0];v?p[2][0]=f.x<e?o+f.labelMargin+m+f.labelDistance:o+r-f.labelMargin-m-f.labelDistance:(p[2][0]=f.x<e?f.x+f.labelDistance:f.x-f.labelDistance,p[1][0]=p[2][0]+y),p[1][1]=p[2][1]=f.y}}}}function Nd(t){return"center"===t.position}function Fd(t,e){return Uo(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function Vd(t,e,n){var i,r={},a="toggleSelected"===t;return n.eachComponent("legend",function(n){a&&null!=i?n[i?"select":"unSelect"](e.name):"allSelect"===t||"inverseSelect"===t?n[t]():(n[t](e.name),i=n.isSelected(e.name));var o=n.getData();f(o,function(t){var e=t.get("name");if("\n"!==e&&""!==e){var i=n.isSelected(e);r[e]=r.hasOwnProperty(e)?r[e]&&i:i}})}),"allSelect"===t||"inverseSelect"===t?{selected:r}:{name:e.name,selected:r}}function Hd(t,e){var n=hy(e.get("padding")),i=e.getItemStyle(["color","opacity"]);i.fill=e.get("backgroundColor");var t=new Cm({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:i,silent:!0,z2:-1});return t}function Gd(t,e,n,i,r,a){var o;return"line"!==e&&e.indexOf("empty")<0?(o=n.getItemStyle(),t.style.stroke=i,a||(o.stroke=r)):o=n.getItemStyle(["borderWidth","borderColor"]),t.setStyle(o)}function Wd(t,e,n,i){Yd(t,e,n,i),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),Xd(t,e,n,i)}function Xd(t,e,n,i){var r=n.getZr().storage.getDisplayList()[0];r&&r.useHoverLayer||n.dispatchAction({type:"highlight",seriesName:t,name:e,excludeSeriesId:i})}function Yd(t,e,n,i){var r=n.getZr().storage.getDisplayList()[0];r&&r.useHoverLayer||n.dispatchAction({type:"downplay",seriesName:t,name:e,excludeSeriesId:i})}function Ud(t,e,n){var i=t.getOrient(),r=[1,1];r[i.index]=0,qo(e,n,{type:"box",ignoreSize:r})}function qd(t,e,n,i,r){var a=t.axis;if(!a.scale.isBlank()&&a.containData(e)){if(!t.involveSeries)return void n.showPointer(t,e);var s=jd(e,t),l=s.payloadBatch,u=s.snapToValue;l[0]&&null==r.seriesIndex&&o(r,l[0]),!i&&t.snap&&a.containData(u)&&null!=u&&(e=u),n.showPointer(t,e,l,r),n.showTooltip(t,s,u)}}function jd(t,e){var n=e.axis,i=n.dim,r=t,a=[],o=Number.MAX_VALUE,s=-1;return SS(e.seriesModels,function(e){var l,u,h=e.getData().mapDimension(i,!0);if(e.getAxisTooltipData){var c=e.getAxisTooltipData(h,t,n);u=c.dataIndices,l=c.nestestValue}else{if(u=e.getData().indicesOfNearest(h[0],t,"category"===n.type?.5:null),!u.length)return;l=e.getData().get(h[0],u[0])}if(null!=l&&isFinite(l)){var d=t-l,f=Math.abs(d);o>=f&&((o>f||d>=0&&0>s)&&(o=f,s=d,r=l,a.length=0),SS(u,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:r}}function Zd(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function Kd(t,e,n,i){var r=n.payloadBatch,a=e.axis,o=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,u=id(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:a.dim,axisIndex:o.componentIndex,axisType:o.type,axisId:o.id,value:i,valueLabelOpt:{precision:s.get("label.precision"),formatter:s.get("label.formatter")},seriesDataIndices:r.slice()})}}function $d(t,e,n){var i=n.axesInfo=[];SS(e,function(e,n){var r=e.axisPointerModel.option,a=t[n];a?(!e.useHandle&&(r.status="show"),r.value=a.value,r.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})})}function Qd(t,e,n,i){if(nf(e)||!t.list.length)return void i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}function Jd(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",a=IS(i)[r]||{},o=IS(i)[r]={};SS(t,function(t){var e=t.axisPointerModel.option;"show"===e.status&&SS(e.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;o[e]=t})});var s=[],l=[];f(a,function(t,e){!o[e]&&l.push(t)}),f(o,function(t,e){!a[e]&&s.push(t)}),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,batch:s})}function tf(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}function ef(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function nf(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function rf(t,e,n){if(!Hf.node){var i=e.getZr();CS(i).records||(CS(i).records={}),af(i,e);var r=CS(i).records[t]||(CS(i).records[t]={});r.handler=n}}function af(t,e){function n(n,i){t.on(n,function(n){var r=uf(e);DS(CS(t).records,function(t){t&&i(t,n,r.dispatchAction)}),of(r.pendings,e)})}CS(t).initialized||(CS(t).initialized=!0,n("click",_(lf,"click")),n("mousemove",_(lf,"mousemove")),n("globalout",sf))}function of(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]),n&&(n.dispatchAction=null,e.dispatchAction(n))}function sf(t,e,n){t.handler("leave",null,n)}function lf(t,e,n,i){e.handler(t,n,i)}function uf(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}function hf(t,e){if(!Hf.node){var n=e.getZr(),i=(CS(n).records||{})[t];i&&(CS(n).records[t]=null)}}function cf(){}function df(t,e,n,i){ff(kS(n).lastProp,i)||(kS(n).lastProp=i,e?Ka(n,i,t):(n.stopAnimation(),n.attr(i)))}function ff(t,e){if(S(t)&&S(e)){var n=!0;return f(e,function(e,i){n=n&&ff(t[i],e)}),!!n}return t===e}function pf(t,e){t[e.get("label.show")?"show":"hide"]()}function gf(t){return{position:t.position.slice(),rotation:t.rotation||0}}function vf(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)})}function mf(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle(),e.fill=null):"shadow"===n&&(e=i.getAreaStyle(),e.stroke=null),e}function yf(t,e,n,i,r){var a=n.get("value"),o=xf(a,e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get("label.precision"),formatter:n.get("label.formatter")}),s=n.getModel("label"),l=hy(s.get("padding")||0),u=s.getFont(),h=Gn(o,u),c=r.position,d=h.width+l[1]+l[3],f=h.height+l[0]+l[2],p=r.align;"right"===p&&(c[0]-=d),"center"===p&&(c[0]-=d/2);var g=r.verticalAlign;"bottom"===g&&(c[1]-=f),"middle"===g&&(c[1]-=f/2),_f(c,d,f,i);var v=s.get("backgroundColor");v&&"auto"!==v||(v=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:d,height:f,r:s.get("borderRadius")},position:c.slice(),style:{text:o,textFont:u,textFill:s.getTextColor(),textPosition:"inside",textPadding:l,fill:v,stroke:s.get("borderColor")||"transparent",lineWidth:s.get("borderWidth")||0,shadowBlur:s.get("shadowBlur"),shadowColor:s.get("shadowColor"),shadowOffsetX:s.get("shadowOffsetX"),shadowOffsetY:s.get("shadowOffsetY")},z2:10}}function _f(t,e,n,i){var r=i.getWidth(),a=i.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+n,a)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function xf(t,e,n,i,r){t=e.scale.parse(t);var a=e.scale.getLabel(t,{precision:r.precision}),o=r.formatter;if(o){var s={value:zh(e,t),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};f(i,function(t){var e=n.getSeriesByIndex(t.seriesIndex),i=t.dataIndexInside,r=e&&e.getDataParams(i);r&&s.seriesData.push(r)}),b(o)?a=o.replace("{value}",a):w(o)&&(a=o(s))}return a}function wf(t,e,n){var i=Ae();return Be(i,i,n.rotation),Oe(i,i,n.position),Ja([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}function bf(t,e,n,i,r,a){var o=mb.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get("label.margin"),yf(e,i,r,a,{position:wf(i.axis,t,n),align:o.textAlign,verticalAlign:o.textVerticalAlign})}function Sf(t,e,n){return n=n||0,{x1:t[n],y1:t[1-n],x2:e[n],y2:e[1-n]}}function Mf(t,e,n){return n=n||0,{x:t[n],y:t[1-n],width:e[n],height:e[1-n]}}function If(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}function Tf(t){return"x"===t.dim?0:1}function Cf(t){var e="cubic-bezier(0.23, 1, 0.32, 1)",n="left "+t+"s "+e+",top "+t+"s "+e;return p(RS,function(t){return t+"transition:"+n}).join(";")}function Df(t){var e=[],n=t.get("fontSize"),i=t.getTextColor();return i&&e.push("color:"+i),e.push("font:"+t.getFont()),n&&e.push("line-height:"+Math.round(3*n/2)+"px"),ES(["decoration","align"],function(n){var i=t.get(n);i&&e.push("text-"+n+":"+i)}),e.join(";")}function Af(t){var e=[],n=t.get("transitionDuration"),i=t.get("backgroundColor"),r=t.getModel("textStyle"),a=t.get("padding");return n&&e.push(Cf(n)),i&&(Hf.canvasSupported?e.push("background-Color:"+i):(e.push("background-Color:#"+tn(i)),e.push("filter:alpha(opacity=70)"))),ES(["width","color","radius"],function(n){var i="border-"+n,r=zS(i),a=t.get(r);null!=a&&e.push(i+":"+a+("color"===n?"":"px"))}),e.push(Df(r)),null!=a&&e.push("padding:"+hy(a).join("px ")+"px"),e.join(";")+";"}function kf(t,e){if(Hf.wxa)return null;var n=document.createElement("div"),i=this._zr=e.getZr();this.el=n,this._x=e.getWidth()/2,this._y=e.getHeight()/2,t.appendChild(n),this._container=t,this._show=!1,this._hideTimeout;var r=this;n.onmouseenter=function(){r._enterable&&(clearTimeout(r._hideTimeout),r._show=!0),r._inContent=!0},n.onmousemove=function(e){if(e=e||window.event,!r._enterable){var n=i.handler;_e(t,e,!0),n.dispatch("mousemove",e)}},n.onmouseleave=function(){r._enterable&&r._show&&r.hideLater(r._hideDelay),r._inContent=!1}}function Pf(t){this._zr=t.getZr(),this._show=!1,this._hideTimeout}function Lf(t){for(var e=t.pop();t.length;){var n=t.pop();n&&(uo.isInstance(n)&&(n=n.get("tooltip",!0)),"string"==typeof n&&(n={formatter:n}),e=new uo(n,e,e.ecModel))}return e}function Of(t,e){return t.dispatchAction||y(e.dispatchAction,e)}function Bf(t,e,n,i,r,a,o){var s=n.getOuterSize(),l=s.width,u=s.height;return null!=a&&(t+l+a>i?t-=l+a:t+=a),null!=o&&(e+u+o>r?e-=u+o:e+=o),[t,e]}function Ef(t,e,n,i,r){var a=n.getOuterSize(),o=a.width,s=a.height;return t=Math.min(t+o,i)-o,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function zf(t,e,n){var i=n[0],r=n[1],a=5,o=0,s=0,l=e.width,u=e.height;switch(t){case"inside":o=e.x+l/2-i/2,s=e.y+u/2-r/2;break;case"top":o=e.x+l/2-i/2,s=e.y-r-a;break;case"bottom":o=e.x+l/2-i/2,s=e.y+u+a;break;case"left":o=e.x-i-a,s=e.y+u/2-r/2;break;case"right":o=e.x+l+a,s=e.y+u/2-r/2}return[o,s]}function Rf(t){return"center"===t||"middle"===t}var Nf=2311,Ff=function(){return Nf++},Vf={};Vf="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:e(navigator.userAgent);var Hf=Vf,Gf={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},Wf={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},Xf=Object.prototype.toString,Yf=Array.prototype,Uf=Yf.forEach,qf=Yf.filter,jf=Yf.slice,Zf=Yf.map,Kf=Yf.reduce,$f={},Qf=function(){return $f.createCanvas()};$f.createCanvas=function(){return document.createElement("canvas")};var Jf,tp="__ec_primitive__";R.prototype={constructor:R,get:function(t){return this.data.hasOwnProperty(t)?this.data[t]:null},set:function(t,e){return this.data[t]=e},each:function(t,e){void 0!==e&&(t=y(t,e));for(var n in this.data)this.data.hasOwnProperty(n)&&t(this.data[n],n)},removeKey:function(t){delete this.data[t]}};var ep=(Object.freeze||Object)({$override:n,clone:i,merge:r,mergeAll:a,extend:o,defaults:s,createCanvas:Qf,getContext:l,indexOf:u,inherits:h,mixin:c,isArrayLike:d,each:f,map:p,reduce:g,filter:v,find:m,bind:y,curry:_,isArray:x,isFunction:w,isString:b,isObject:S,isBuiltInObject:M,isTypedArray:I,isDom:T,eqNaN:C,retrieve:D,retrieve2:A,retrieve3:k,slice:P,normalizeCssArray:L,assert:O,trim:B,setAsPrimitive:E,isPrimitive:z,createHashMap:N,concatArray:F,noop:V}),np="undefined"==typeof Float32Array?Array:Float32Array,ip=j,rp=Z,ap=ee,op=ne,sp=(Object.freeze||Object)({create:H,copy:G,clone:W,set:X,add:Y,scaleAndAdd:U,sub:q,len:j,length:ip,lenSquare:Z,lengthSquare:rp,mul:K,div:$,dot:Q,scale:J,normalize:te,distance:ee,dist:ap,distanceSquare:ne,distSquare:op,negate:ie,lerp:re,applyTransform:ae,min:oe,max:se});le.prototype={constructor:le,_dragStart:function(t){var e=t.target;e&&e.draggable&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.dispatchToElement(ue(e,t),"dragstart",t.event))},_drag:function(t){var e=this._draggingTarget;if(e){var n=t.offsetX,i=t.offsetY,r=n-this._x,a=i-this._y;this._x=n,this._y=i,e.drift(r,a,t),this.dispatchToElement(ue(e,t),"drag",t.event);var o=this.findHover(n,i,e).target,s=this._dropTarget;this._dropTarget=o,e!==o&&(s&&o!==s&&this.dispatchToElement(ue(s,t),"dragleave",t.event),o&&o!==s&&this.dispatchToElement(ue(o,t),"dragenter",t.event))}},_dragEnd:function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.dispatchToElement(ue(e,t),"dragend",t.event),this._dropTarget&&this.dispatchToElement(ue(this._dropTarget,t),"drop",t.event),this._draggingTarget=null,this._dropTarget=null}};var lp=Array.prototype.slice,up=function(t){this._$handlers={},this._$eventProcessor=t};up.prototype={constructor:up,one:function(t,e,n,i){return ce(this,t,e,n,i,!0)},on:function(t,e,n,i){return ce(this,t,e,n,i,!1)},isSilent:function(t){var e=this._$handlers;return!e[t]||!e[t].length},off:function(t,e){var n=this._$handlers;if(!t)return this._$handlers={},this;if(e){if(n[t]){for(var i=[],r=0,a=n[t].length;a>r;r++)n[t][r].h!==e&&i.push(n[t][r]);n[t]=i}n[t]&&0===n[t].length&&delete n[t]}else delete n[t];return this},trigger:function(t){var e=this._$handlers[t],n=this._$eventProcessor;if(e){var i=arguments,r=i.length;r>3&&(i=lp.call(i,1));for(var a=e.length,o=0;a>o;){var s=e[o];if(n&&n.filter&&null!=s.query&&!n.filter(t,s.query))o++;else{switch(r){case 1:s.h.call(s.ctx);break;case 2:s.h.call(s.ctx,i[1]);break;case 3:s.h.call(s.ctx,i[1],i[2]);break;default:s.h.apply(s.ctx,i)}s.one?(e.splice(o,1),a--):o++}}}return n&&n.afterTrigger&&n.afterTrigger(t),this},triggerWithContext:function(t){var e=this._$handlers[t],n=this._$eventProcessor;if(e){var i=arguments,r=i.length;r>4&&(i=lp.call(i,1,i.length-1));for(var a=i[i.length-1],o=e.length,s=0;o>s;){var l=e[s];if(n&&n.filter&&null!=l.query&&!n.filter(t,l.query))s++;else{switch(r){case 1:l.h.call(a);break;case 2:l.h.call(a,i[1]);break;case 3:l.h.call(a,i[1],i[2]);break;default:l.h.apply(a,i)}l.one?(e.splice(s,1),o--):s++}}}return n&&n.afterTrigger&&n.afterTrigger(t),this}};var hp=Math.log(2),cp="undefined"!=typeof window&&!!window.addEventListener,dp=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fp="___zrEVENTSAVED",pp=[],gp=cp?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0},vp=function(){this._track=[]};vp.prototype={constructor:vp,recognize:function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},a=0,o=i.length;o>a;a++){var s=i[a],l=pe(n,s,{});r.points.push([l.zrX,l.zrY]),r.touches.push(s)}this._track.push(r)}},_recognize:function(t){for(var e in mp)if(mp.hasOwnProperty(e)){var n=mp[e](this._track,t);if(n)return n}}};var mp={pinch:function(t,e){var n=t.length;if(n){var i=(t[n-1]||{}).points,r=(t[n-2]||{}).points||i;if(r&&r.length>1&&i&&i.length>1){var a=be(i)/be(r);!isFinite(a)&&(a=1),e.pinchScale=a;var o=Se(i);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:t[0].target,event:e}}}}},yp="silent";Te.prototype.dispose=function(){};var _p=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],xp=function(t,e,n,i){up.call(this),this.storage=t,this.painter=e,this.painterRoot=i,n=n||new Te,this.proxy=null,this._hovered={},this._lastTouchMoment,this._lastX,this._lastY,this._gestureMgr,le.call(this),this.setHandlerProxy(n)};xp.prototype={constructor:xp,setHandlerProxy:function(t){this.proxy&&this.proxy.dispose(),t&&(f(_p,function(e){t.on&&t.on(e,this[e],this)},this),t.handler=this),this.proxy=t},mousemove:function(t){var e=t.zrX,n=t.zrY,i=De(this,e,n),r=this._hovered,a=r.target;a&&!a.__zr&&(r=this.findHover(r.x,r.y),a=r.target);var o=this._hovered=i?{x:e,y:n}:this.findHover(e,n),s=o.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),a&&s!==a&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(o,"mousemove",t),s&&s!==a&&this.dispatchToElement(o,"mouseover",t)},mouseout:function(t){var e=t.zrEventControl,n=t.zrIsToLocalDOM;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&!n&&this.trigger("globalout",{type:"globalout",event:t})},resize:function(){this._hovered={}},dispatch:function(t,e){var n=this[t];n&&n.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,n){t=t||{};var i=t.target;if(!i||!i.silent){for(var r="on"+e,a=Me(e,t,n);i&&(i[r]&&(a.cancelBubble=i[r].call(i,a)),i.trigger(e,a),i=i.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[r]&&t[r].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,n){for(var i=this.storage.getDisplayList(),r={x:t,y:e},a=i.length-1;a>=0;a--){var o;if(i[a]!==n&&!i[a].ignore&&(o=Ce(i[a],t,e))&&(!r.topTarget&&(r.topTarget=i[a]),o!==yp)){r.target=i[a];break}}return r},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new vp);var n=this._gestureMgr;"start"===e&&n.clear();var i=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),i){var r=i.type;t.gestureEvent=r,this.dispatchToElement({target:i.target},r,i.event)}}},f(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){xp.prototype[t]=function(e){var n,i,r=e.zrX,a=e.zrY,o=De(this,r,a);if("mouseup"===t&&o||(n=this.findHover(r,a),i=n.target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||ap(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}),c(xp,up),c(xp,le);var wp="undefined"==typeof Float32Array?Array:Float32Array,bp=(Object.freeze||Object)({create:Ae,identity:ke,copy:Pe,mul:Le,translate:Oe,rotate:Be,scale:Ee,invert:ze,clone:Re}),Sp=ke,Mp=5e-5,Ip=function(t){t=t||{},t.position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},Tp=Ip.prototype;Tp.transform=null,Tp.needLocalTransform=function(){return Ne(this.rotation)||Ne(this.position[0])||Ne(this.position[1])||Ne(this.scale[0]-1)||Ne(this.scale[1]-1)};var Cp=[];Tp.updateTransform=function(){var t=this.parent,e=t&&t.transform,n=this.needLocalTransform(),i=this.transform;if(!n&&!e)return void(i&&Sp(i));i=i||Ae(),n?this.getLocalTransform(i):Sp(i),e&&(n?Le(i,t.transform,i):Pe(i,t.transform)),this.transform=i;var r=this.globalScaleRatio;if(null!=r&&1!==r){this.getGlobalScale(Cp);var a=Cp[0]<0?-1:1,o=Cp[1]<0?-1:1,s=((Cp[0]-a)*r+a)/Cp[0]||0,l=((Cp[1]-o)*r+o)/Cp[1]||0;i[0]*=s,i[1]*=s,i[2]*=l,i[3]*=l}this.invTransform=this.invTransform||Ae(),ze(this.invTransform,i)},Tp.getLocalTransform=function(t){return Ip.getLocalTransform(this,t)},Tp.setTransform=function(t){var e=this.transform,n=t.dpr||1;e?t.setTransform(n*e[0],n*e[1],n*e[2],n*e[3],n*e[4],n*e[5]):t.setTransform(n,0,0,n,0,0)},Tp.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var Dp=[],Ap=Ae();Tp.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=this.position,r=this.scale;Ne(e-1)&&(e=Math.sqrt(e)),Ne(n-1)&&(n=Math.sqrt(n)),t[0]<0&&(e=-e),t[3]<0&&(n=-n),i[0]=t[4],i[1]=t[5],r[0]=e,r[1]=n,this.rotation=Math.atan2(-t[1]/n,t[0]/e)}},Tp.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(Le(Dp,t.invTransform,e),e=Dp);var n=this.origin;n&&(n[0]||n[1])&&(Ap[4]=n[0],Ap[5]=n[1],Le(Dp,e,Ap),Dp[4]-=n[0],Dp[5]-=n[1],e=Dp),this.setLocalTransform(e)}},Tp.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},Tp.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&ae(n,n,i),n},Tp.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&ae(n,n,i),n},Ip.getLocalTransform=function(t,e){e=e||[],Sp(e);var n=t.origin,i=t.scale||[1,1],r=t.rotation||0,a=t.position||[0,0];return n&&(e[4]-=n[0],e[5]-=n[1]),Ee(e,e,i),r&&Be(e,e,r),n&&(e[4]+=n[0],e[5]+=n[1]),e[4]+=a[0],e[5]+=a[1],e};var kp={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(-Math.pow(2,-10*(t-1))+2)},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||1>n?(n=1,e=i/4):e=i*Math.asin(1/n)/(2*Math.PI),-(n*Math.pow(2,10*(t-=1))*Math.sin(2*(t-e)*Math.PI/i)))},elasticOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||1>n?(n=1,e=i/4):e=i*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin(2*(t-e)*Math.PI/i)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||1>n?(n=1,e=i/4):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?-.5*n*Math.pow(2,10*(t-=1))*Math.sin(2*(t-e)*Math.PI/i):n*Math.pow(2,-10*(t-=1))*Math.sin(2*(t-e)*Math.PI/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?.5*t*t*((e+1)*t-e):.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-kp.bounceOut(1-t)},bounceOut:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return.5>t?.5*kp.bounceIn(2*t):.5*kp.bounceOut(2*t-1)+.5}};Fe.prototype={constructor:Fe,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)return void(this._pausedTime+=e);var n=(t-this._startTime-this._pausedTime)/this._life;if(!(0>n)){n=Math.min(n,1); +var i=this.easing,r="string"==typeof i?kp[i]:i,a="function"==typeof r?r(n):n;return this.fire("frame",a),1===n?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){t="on"+t,this[t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var Pp=function(){this.head=null,this.tail=null,this._len=0},Lp=Pp.prototype;Lp.insert=function(t){var e=new Op(t);return this.insertEntry(e),e},Lp.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Lp.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Lp.len=function(){return this._len},Lp.clear=function(){this.head=this.tail=null,this._len=0};var Op=function(t){this.value=t,this.next,this.prev},Bp=function(t){this._list=new Pp,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Ep=Bp.prototype;Ep.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var a=n.len(),o=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}o?o.value=e:o=new Op(e),o.key=t,n.insertEntry(o),i[t]=o}return r},Ep.get=function(t){var e=this._map[t],n=this._list;return null!=e?(e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value):void 0},Ep.clear=function(){this._list.clear(),this._map={}};var zp={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},Rp=new Bp(20),Np=null,Fp=en,Vp=nn,Hp=(Object.freeze||Object)({parse:Ke,lift:Je,toHex:tn,fastLerp:en,fastMapToColor:Fp,lerp:nn,mapToColor:Vp,modifyHSL:rn,modifyAlpha:an,stringify:on}),Gp=Array.prototype.slice,Wp=function(t,e,n,i){this._tracks={},this._target=t,this._loop=e||!1,this._getter=n||sn,this._setter=i||ln,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Wp.prototype={when:function(t,e){var n=this._tracks;for(var i in e)if(e.hasOwnProperty(i)){if(!n[i]){n[i]=[];var r=this._getter(this._target,i);if(null==r)continue;0!==t&&n[i].push({time:0,value:vn(r)})}n[i].push({time:t,value:e[i]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;t<this._clipList.length;t++)this._clipList[t].pause();this._paused=!0},resume:function(){for(var t=0;t<this._clipList.length;t++)this._clipList[t].resume();this._paused=!1},isPaused:function(){return!!this._paused},_doneCallback:function(){this._tracks={},this._clipList.length=0;for(var t=this._doneList,e=t.length,n=0;e>n;n++)t[n].call(this)},start:function(t,e){var n,i=this,r=0,a=function(){r--,r||i._doneCallback()};for(var o in this._tracks)if(this._tracks.hasOwnProperty(o)){var s=_n(this,t,a,this._tracks[o],o,e);s&&(this._clipList.push(s),r++,this.animation&&this.animation.addClip(s),n=s)}if(n){var l=n.onframe;n.onframe=function(t,e){l(t,e);for(var n=0;n<i._onframeList.length;n++)i._onframeList[n](t,e)}}return r||this._doneCallback(),this},stop:function(t){for(var e=this._clipList,n=this.animation,i=0;i<e.length;i++){var r=e[i];t&&r.onframe(this._target,1),n&&n.removeClip(r)}e.length=0},delay:function(t){return this._delay=t,this},done:function(t){return t&&this._doneList.push(t),this},getClips:function(){return this._clipList}};var Xp=1;"undefined"!=typeof window&&(Xp=Math.max(window.devicePixelRatio||1,1));var Yp=0,Up=Xp,qp=function(){};1===Yp&&(qp=console.error);var jp=qp,Zp=function(){this.animators=[]};Zp.prototype={constructor:Zp,animate:function(t,e){var n,i=!1,r=this,a=this.__zr;if(t){var o=t.split("."),s=r;i="shape"===o[0];for(var l=0,h=o.length;h>l;l++)s&&(s=s[o[l]]);s&&(n=s)}else n=r;if(!n)return void jp('Property "'+t+'" is not existed in element '+r.id);var c=r.animators,d=new Wp(n,e);return d.during(function(){r.dirty(i)}).done(function(){c.splice(u(c,d),1)}),c.push(d),a&&a.animation.addAnimator(d),d},stopAnimation:function(t){for(var e=this.animators,n=e.length,i=0;n>i;i++)e[i].stop(t);return e.length=0,this},animateTo:function(t,e,n,i,r,a){xn(this,t,e,n,i,r,a)},animateFrom:function(t,e,n,i,r,a){xn(this,t,e,n,i,r,a,!0)}};var Kp=function(t){Ip.call(this,t),up.call(this,t),Zp.call(this,t),this.id=t.id||Ff()};Kp.prototype={type:"element",name:"",__zr:null,ignore:!1,clipPath:null,isGroup:!1,drift:function(t,e){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var n=this.transform;n||(n=this.transform=[1,0,0,1,0,0]),n[4]+=t,n[5]+=e,this.decomposeTransform(),this.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(){},attrKV:function(t,e){if("position"===t||"scale"===t||"origin"===t){if(e){var n=this[t];n||(n=this[t]=[]),n[0]=e[0],n[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(S(t))for(var n in t)t.hasOwnProperty(n)&&this.attrKV(n,t[n]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var n=0;n<e.length;n++)t.animation.addAnimator(e[n]);this.clipPath&&this.clipPath.addSelfToZr(t)},removeSelfFromZr:function(t){this.__zr=null;var e=this.animators;if(e)for(var n=0;n<e.length;n++)t.animation.removeAnimator(e[n]);this.clipPath&&this.clipPath.removeSelfFromZr(t)}},c(Kp,Zp),c(Kp,Ip),c(Kp,up);var $p=ae,Qp=Math.min,Jp=Math.max;Sn.prototype={constructor:Sn,union:function(t){var e=Qp(t.x,this.x),n=Qp(t.y,this.y);this.width=Jp(t.x+t.width,this.x+this.width)-e,this.height=Jp(t.y+t.height,this.y+this.height)-n,this.x=e,this.y=n},applyTransform:function(){var t=[],e=[],n=[],i=[];return function(r){if(r){t[0]=n[0]=this.x,t[1]=i[1]=this.y,e[0]=i[0]=this.x+this.width,e[1]=n[1]=this.y+this.height,$p(t,t,r),$p(e,e,r),$p(n,n,r),$p(i,i,r),this.x=Qp(t[0],e[0],n[0],i[0]),this.y=Qp(t[1],e[1],n[1],i[1]);var a=Jp(t[0],e[0],n[0],i[0]),o=Jp(t[1],e[1],n[1],i[1]);this.width=a-this.x,this.height=o-this.y}}}(),calculateTransform:function(t){var e=this,n=t.width/e.width,i=t.height/e.height,r=Ae();return Oe(r,r,[-e.x,-e.y]),Ee(r,r,[n,i]),Oe(r,r,[t.x,t.y]),r},intersect:function(t){if(!t)return!1;t instanceof Sn||(t=Sn.create(t));var e=this,n=e.x,i=e.x+e.width,r=e.y,a=e.y+e.height,o=t.x,s=t.x+t.width,l=t.y,u=t.y+t.height;return!(o>i||n>s||l>a||r>u)},contain:function(t,e){var n=this;return t>=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},clone:function(){return new Sn(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},Sn.create=function(t){return new Sn(t.x,t.y,t.width,t.height)};var tg=function(t){t=t||{},Kp.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};tg.prototype={constructor:tg,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,n=0;n<e.length;n++)if(e[n].name===t)return e[n]},childCount:function(){return this._children.length},add:function(t){return t&&t!==this&&t.parent!==this&&(this._children.push(t),this._doAdd(t)),this},addBefore:function(t,e){if(t&&t!==this&&t.parent!==this&&e&&e.parent===this){var n=this._children,i=n.indexOf(e);i>=0&&(n.splice(i,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,n=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof tg&&t.addChildrenToStorage(e)),n&&n.refresh()},remove:function(t){var e=this.__zr,n=this.__storage,i=this._children,r=u(i,t);return 0>r?this:(i.splice(r,1),t.parent=null,n&&(n.delFromStorage(t),t instanceof tg&&t.delChildrenFromStorage(n)),e&&e.refresh(),this)},removeAll:function(){var t,e,n=this._children,i=this.__storage;for(e=0;e<n.length;e++)t=n[e],i&&(i.delFromStorage(t),t instanceof tg&&t.delChildrenFromStorage(i)),t.parent=null;return n.length=0,this},eachChild:function(t,e){for(var n=this._children,i=0;i<n.length;i++){var r=n[i];t.call(e,r,i)}return this},traverse:function(t,e){for(var n=0;n<this._children.length;n++){var i=this._children[n];t.call(e,i),"group"===i.type&&i.traverse(t,e)}return this},addChildrenToStorage:function(t){for(var e=0;e<this._children.length;e++){var n=this._children[e];t.addToStorage(n),n instanceof tg&&n.addChildrenToStorage(t)}},delChildrenFromStorage:function(t){for(var e=0;e<this._children.length;e++){var n=this._children[e];t.delFromStorage(n),n instanceof tg&&n.delChildrenFromStorage(t)}},dirty:function(){return this.__dirty=!0,this.__zr&&this.__zr.refresh(),this},getBoundingRect:function(t){for(var e=null,n=new Sn(0,0,0,0),i=t||this._children,r=[],a=0;a<i.length;a++){var o=i[a];if(!o.ignore&&!o.invisible){var s=o.getBoundingRect(),l=o.getLocalTransform(r);l?(n.copy(s),n.applyTransform(l),e=e||n.clone(),e.union(n)):(e=e||s.clone(),e.union(s))}}return e||n}},h(tg,Kp);var eg=32,ng=7,ig=function(){this._roots=[],this._displayList=[],this._displayListLen=0};ig.prototype={constructor:ig,traverse:function(t,e){for(var n=0;n<this._roots.length;n++)this._roots[n].traverse(t,e)},getDisplayList:function(t,e){return e=e||!1,t&&this.updateDisplayList(e),this._displayList},updateDisplayList:function(t){this._displayListLen=0;for(var e=this._roots,n=this._displayList,i=0,r=e.length;r>i;i++)this._updateAndAddDisplayable(e[i],null,t);n.length=this._displayListLen,Hf.canvasSupported&&Pn(n,Ln)},_updateAndAddDisplayable:function(t,e,n){if(!t.ignore||n){t.beforeUpdate(),t.__dirty&&t.update(),t.afterUpdate();var i=t.clipPath;if(i){e=e?e.slice():[];for(var r=i,a=t;r;)r.parent=a,r.updateTransform(),e.push(r),a=r,r=r.clipPath}if(t.isGroup){for(var o=t._children,s=0;s<o.length;s++){var l=o[s];t.__dirty&&(l.__dirty=!0),this._updateAndAddDisplayable(l,e,n)}t.__dirty=!1}else t.__clipPaths=e,this._displayList[this._displayListLen++]=t}},addRoot:function(t){t.__storage!==this&&(t instanceof tg&&t.addChildrenToStorage(this),this.addToStorage(t),this._roots.push(t))},delRoot:function(t){if(null==t){for(var e=0;e<this._roots.length;e++){var n=this._roots[e];n instanceof tg&&n.delChildrenFromStorage(this)}return this._roots=[],this._displayList=[],void(this._displayListLen=0)}if(t instanceof Array)for(var e=0,i=t.length;i>e;e++)this.delRoot(t[e]);else{var r=u(this._roots,t);r>=0&&(this.delFromStorage(t),this._roots.splice(r,1),t instanceof tg&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t&&(t.__storage=this,t.dirty(!1)),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:Ln};var rg={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1},ag=function(t,e,n){return rg.hasOwnProperty(e)?n*=t.dpr:n},og={NONE:0,STYLE_BIND:1,PLAIN_TEXT:2},sg=9,lg=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],ug=function(t){this.extendFrom(t,!1)};ug.prototype={constructor:ug,fill:"#000",stroke:null,opacity:1,fillOpacity:null,strokeOpacity:null,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,n){var i=this,r=n&&n.style,a=!r||t.__attrCachedBy!==og.STYLE_BIND;t.__attrCachedBy=og.STYLE_BIND;for(var o=0;o<lg.length;o++){var s=lg[o],l=s[0];(a||i[l]!==r[l])&&(t[l]=ag(t,l,i[l]||s[1]))}if((a||i.fill!==r.fill)&&(t.fillStyle=i.fill),(a||i.stroke!==r.stroke)&&(t.strokeStyle=i.stroke),(a||i.opacity!==r.opacity)&&(t.globalAlpha=null==i.opacity?1:i.opacity),(a||i.blend!==r.blend)&&(t.globalCompositeOperation=i.blend||"source-over"),this.hasStroke()){var u=i.lineWidth;t.lineWidth=u/(this.strokeNoScale&&e&&e.getLineScale?e.getLineScale():1)}},hasFill:function(){var t=this.fill;return null!=t&&"none"!==t},hasStroke:function(){var t=this.stroke;return null!=t&&"none"!==t&&this.lineWidth>0},extendFrom:function(t,e){if(t)for(var n in t)!t.hasOwnProperty(n)||e!==!0&&(e===!1?this.hasOwnProperty(n):null==t[n])||(this[n]=t[n])},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,n){for(var i="radial"===e.type?Bn:On,r=i(t,e,n),a=e.colorStops,o=0;o<a.length;o++)r.addColorStop(a[o].offset,a[o].color);return r}};for(var hg=ug.prototype,cg=0;cg<lg.length;cg++){var dg=lg[cg];dg[0]in hg||(hg[dg[0]]=dg[1])}ug.getGradient=hg.getGradient;var fg=function(t,e){this.image=t,this.repeat=e,this.type="pattern"};fg.prototype.getCanvasPattern=function(t){return t.createPattern(this.image,this.repeat||"repeat")};var pg=function(t,e,n){var i;n=n||Up,"string"==typeof t?i=zn(t,e,n):S(t)&&(i=t,t=i.id),this.id=t,this.dom=i;var r=i.style;r&&(i.onselectstart=En,r["-webkit-user-select"]="none",r["user-select"]="none",r["-webkit-touch-callout"]="none",r["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",r.padding=0,r.margin=0,r["border-width"]=0),this.domBack=null,this.ctxBack=null,this.painter=e,this.config=null,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.dpr=n};pg.prototype={constructor:pg,__dirty:!0,__used:!1,__drawIndex:0,__startIndex:0,__endIndex:0,incremental:!1,getElementCount:function(){return this.__endIndex-this.__startIndex},initContext:function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},createBackBuffer:function(){var t=this.dpr;this.domBack=zn("back-"+this.id,this.painter,t),this.ctxBack=this.domBack.getContext("2d"),1!==t&&this.ctxBack.scale(t,t)},resize:function(t,e){var n=this.dpr,i=this.dom,r=i.style,a=this.domBack;r&&(r.width=t+"px",r.height=e+"px"),i.width=t*n,i.height=e*n,a&&(a.width=t*n,a.height=e*n,1!==n&&this.ctxBack.scale(n,n))},clear:function(t,e){var n=this.dom,i=this.ctx,r=n.width,a=n.height,e=e||this.clearColor,o=this.motionBlur&&!t,s=this.lastFrameAlpha,l=this.dpr;if(o&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(n,0,0,r/l,a/l)),i.clearRect(0,0,r,a),e&&"transparent"!==e){var u;e.colorStops?(u=e.__canvasGradient||ug.getGradient(i,e,{x:0,y:0,width:r,height:a}),e.__canvasGradient=u):e.image&&(u=fg.prototype.getCanvasPattern.call(e,i)),i.save(),i.fillStyle=u||e,i.fillRect(0,0,r,a),i.restore()}if(o){var h=this.domBack;i.save(),i.globalAlpha=s,i.drawImage(h,0,0,r,a),i.restore()}}};var gg="undefined"!=typeof window&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){setTimeout(t,16)},vg=new Bp(50),mg={},yg=0,_g=5e3,xg=/\{([a-zA-Z0-9_]+)\|([^}]*)\}/g,wg="12px sans-serif",bg={};bg.measureText=function(t,e){var n=l();return n.font=e||wg,n.measureText(t)};var Sg=wg,Mg={left:1,right:1,center:1},Ig={top:1,bottom:1,middle:1},Tg=[["textShadowBlur","shadowBlur",0],["textShadowOffsetX","shadowOffsetX",0],["textShadowOffsetY","shadowOffsetY",0],["textShadowColor","shadowColor","transparent"]],Cg={},Dg={},Ag=new Sn,kg=function(){};kg.prototype={constructor:kg,drawRectText:function(t,e){var n=this.style;e=n.textRect||e,this.__dirty&&ai(n,!0);var i=n.text;if(null!=i&&(i+=""),bi(i,n)){t.save();var r=this.transform;n.transformText?this.setTransform(t):r&&(Ag.copy(e),Ag.applyTransform(r),e=Ag),si(this,t,i,n,e,sg),t.restore()}}},Si.prototype={constructor:Si,type:"displayable",__dirty:!0,invisible:!1,z:0,z2:0,zlevel:0,draggable:!1,dragging:!1,silent:!1,culling:!1,cursor:"pointer",rectHover:!1,progressive:!1,incremental:!1,globalScaleRatio:1,beforeBrush:function(){},afterBrush:function(){},brush:function(){},getBoundingRect:function(){},contain:function(t,e){return this.rectContain(t,e)},traverse:function(t,e){t.call(e,this)},rectContain:function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return i.contain(n[0],n[1])},dirty:function(){this.__dirty=this.__dirtyText=!0,this._rect=null,this.__zr&&this.__zr.refresh()},animateStyle:function(t){return this.animate("style",t)},attrKV:function(t,e){"style"!==t?Kp.prototype.attrKV.call(this,t,e):this.style.set(e)},setStyle:function(t,e){return this.style.set(t,e),this.dirty(!1),this},useStyle:function(t){return this.style=new ug(t,this),this.dirty(!1),this},calculateTextPosition:null},h(Si,Kp),c(Si,kg),Mi.prototype={constructor:Mi,type:"image",brush:function(t,e){var n=this.style,i=n.image;n.bind(t,this,e);var r=this._image=Nn(i,this._image,this,this.onload);if(r&&Vn(r)){var a=n.x||0,o=n.y||0,s=n.width,l=n.height,u=r.width/r.height;if(null==s&&null!=l?s=l*u:null==l&&null!=s?l=s/u:null==s&&null==l&&(s=r.width,l=r.height),this.setTransform(t),n.sWidth&&n.sHeight){var h=n.sx||0,c=n.sy||0;t.drawImage(r,h,c,n.sWidth,n.sHeight,a,o,s,l)}else if(n.sx&&n.sy){var h=n.sx,c=n.sy,d=s-h,f=l-c;t.drawImage(r,h,c,d,f,a,o,s,l)}else t.drawImage(r,a,o,s,l);null!=n.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))}},getBoundingRect:function(){var t=this.style;return this._rect||(this._rect=new Sn(t.x||0,t.y||0,t.width||0,t.height||0)),this._rect}},h(Mi,Si);var Pg=1e5,Lg=314159,Og=.01,Bg=.001,Eg=new Sn(0,0,0,0),zg=new Sn(0,0,0,0),Rg=function(t,e,n){this.type="canvas";var i=!t.nodeName||"CANVAS"===t.nodeName.toUpperCase();this._opts=n=o({},n||{}),this.dpr=n.devicePixelRatio||Up,this._singleCanvas=i,this.root=t;var r=t.style;r&&(r["-webkit-tap-highlight-color"]="transparent",r["-webkit-user-select"]=r["user-select"]=r["-webkit-touch-callout"]="none",t.innerHTML=""),this.storage=e;var a=this._zlevelList=[],s=this._layers={};if(this._layerConfig={},this._needsManuallyCompositing=!1,i){var l=t.width,u=t.height;null!=n.width&&(l=n.width),null!=n.height&&(u=n.height),this.dpr=n.devicePixelRatio||1,t.width=l*this.dpr,t.height=u*this.dpr,this._width=l,this._height=u;var h=new pg(t,this,this.dpr);h.__builtin__=!0,h.initContext(),s[Lg]=h,h.zlevel=Lg,a.push(Lg),this._domRoot=t}else{this._width=this._getSize(0),this._height=this._getSize(1);var c=this._domRoot=ki(this._width,this._height);t.appendChild(c)}this._hoverlayer=null,this._hoverElements=[]};Rg.prototype={constructor:Rg,getType:function(){return"canvas"},isSingleCanvas:function(){return this._singleCanvas},getViewportRoot:function(){return this._domRoot},getViewportRootOffset:function(){var t=this.getViewportRoot();return t?{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}:void 0},refresh:function(t){var e=this.storage.getDisplayList(!0),n=this._zlevelList;this._redrawId=Math.random(),this._paintList(e,t,this._redrawId);for(var i=0;i<n.length;i++){var r=n[i],a=this._layers[r];if(!a.__builtin__&&a.refresh){var o=0===i?this._backgroundColor:null;a.refresh(o)}}return this.refreshHover(),this},addHover:function(t,e){if(!t.__hoverMir){var n=new t.constructor({style:t.style,shape:t.shape,z:t.z,z2:t.z2,silent:t.silent});return n.__from=t,t.__hoverMir=n,e&&n.setStyle(e),this._hoverElements.push(n),n}},removeHover:function(t){var e=t.__hoverMir,n=this._hoverElements,i=u(n,e);i>=0&&n.splice(i,1),t.__hoverMir=null},clearHover:function(){for(var t=this._hoverElements,e=0;e<t.length;e++){var n=t[e].__from;n&&(n.__hoverMir=null)}t.length=0},refreshHover:function(){var t=this._hoverElements,e=t.length,n=this._hoverlayer;if(n&&n.clear(),e){Pn(t,this.storage.displayableSortFunc),n||(n=this._hoverlayer=this.getLayer(Pg));var i={};n.ctx.save();for(var r=0;e>r;){var a=t[r],o=a.__from;o&&o.__zr?(r++,o.invisible||(a.transform=o.transform,a.invTransform=o.invTransform,a.__clipPaths=o.__clipPaths,this._doPaintEl(a,n,!0,i))):(t.splice(r,1),o.__hoverMir=null,e--)}n.ctx.restore()}},getHoverLayer:function(){return this.getLayer(Pg)},_paintList:function(t,e,n){if(this._redrawId===n){e=e||!1,this._updateLayerStatus(t);var i=this._doPaintList(t,e);if(this._needsManuallyCompositing&&this._compositeManually(),!i){var r=this;gg(function(){r._paintList(t,e,n)})}}},_compositeManually:function(){var t=this.getLayer(Lg).ctx,e=this._domRoot.width,n=this._domRoot.height;t.clearRect(0,0,e,n),this.eachBuiltinLayer(function(i){i.virtual&&t.drawImage(i.dom,0,0,e,n)})},_doPaintList:function(t,e){for(var n=[],i=0;i<this._zlevelList.length;i++){var r=this._zlevelList[i],a=this._layers[r];a.__builtin__&&a!==this._hoverlayer&&(a.__dirty||e)&&n.push(a)}for(var o=!0,s=0;s<n.length;s++){var a=n[s],l=a.ctx,u={};l.save();var h=e?a.__startIndex:a.__drawIndex,c=!e&&a.incremental&&Date.now,d=c&&Date.now(),p=a.zlevel===this._zlevelList[0]?this._backgroundColor:null;if(a.__startIndex===a.__endIndex)a.clear(!1,p);else if(h===a.__startIndex){var g=t[h];g.incremental&&g.notClear&&!e||a.clear(!1,p)}-1===h&&(console.error("For some unknown reason. drawIndex is -1"),h=a.__startIndex);for(var v=h;v<a.__endIndex;v++){var m=t[v];if(this._doPaintEl(m,a,e,u),m.__dirty=m.__dirtyText=!1,c){var y=Date.now()-d;if(y>15)break}}a.__drawIndex=v,a.__drawIndex<a.__endIndex&&(o=!1),u.prevElClipPaths&&l.restore(),l.restore()}return Hf.wxa&&f(this._layers,function(t){t&&t.ctx&&t.ctx.draw&&t.ctx.draw()}),o},_doPaintEl:function(t,e,n,i){var r=e.ctx,a=t.transform;if(!(!e.__dirty&&!n||t.invisible||0===t.style.opacity||a&&!a[0]&&!a[3]||t.culling&&Ci(t,this._width,this._height))){var o=t.__clipPaths,s=i.prevElClipPaths;(!s||Di(o,s))&&(s&&(r.restore(),i.prevElClipPaths=null,i.prevEl=null),o&&(r.save(),Ai(o,r),i.prevElClipPaths=o)),t.beforeBrush&&t.beforeBrush(r),t.brush(r,i.prevEl||null),i.prevEl=t,t.afterBrush&&t.afterBrush(r)}},getLayer:function(t,e){this._singleCanvas&&!this._needsManuallyCompositing&&(t=Lg);var n=this._layers[t];return n||(n=new pg("zr_"+t,this,this.dpr),n.zlevel=t,n.__builtin__=!0,this._layerConfig[t]&&r(n,this._layerConfig[t],!0),e&&(n.virtual=e),this.insertLayer(t,n),n.initContext()),n},insertLayer:function(t,e){var n=this._layers,i=this._zlevelList,r=i.length,a=null,o=-1,s=this._domRoot;if(n[t])return void jp("ZLevel "+t+" has been used already");if(!Ti(e))return void jp("Layer of zlevel "+t+" is not valid");if(r>0&&t>i[0]){for(o=0;r-1>o&&!(i[o]<t&&i[o+1]>t);o++);a=n[i[o]]}if(i.splice(o+1,0,t),n[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)},eachLayer:function(t,e){var n,i,r=this._zlevelList;for(i=0;i<r.length;i++)n=r[i],t.call(e,this._layers[n],n)},eachBuiltinLayer:function(t,e){var n,i,r,a=this._zlevelList;for(r=0;r<a.length;r++)i=a[r],n=this._layers[i],n.__builtin__&&t.call(e,n,i)},eachOtherLayer:function(t,e){var n,i,r,a=this._zlevelList;for(r=0;r<a.length;r++)i=a[r],n=this._layers[i],n.__builtin__||t.call(e,n,i)},getLayers:function(){return this._layers},_updateLayerStatus:function(t){function e(t){r&&(r.__endIndex!==t&&(r.__dirty=!0),r.__endIndex=t)}if(this.eachBuiltinLayer(function(t){t.__dirty=t.__used=!1}),this._singleCanvas)for(var n=1;n<t.length;n++){var i=t[n];if(i.zlevel!==t[n-1].zlevel||i.incremental){this._needsManuallyCompositing=!0;break}}for(var r=null,a=0,n=0;n<t.length;n++){var o,i=t[n],s=i.zlevel;i.incremental?(o=this.getLayer(s+Bg,this._needsManuallyCompositing),o.incremental=!0,a=1):o=this.getLayer(s+(a>0?Og:0),this._needsManuallyCompositing),o.__builtin__||jp("ZLevel "+s+" has been used by unkown layer "+o.id),o!==r&&(o.__used=!0,o.__startIndex!==n&&(o.__dirty=!0),o.__startIndex=n,o.__drawIndex=o.incremental?-1:n,e(n),r=o),i.__dirty&&(o.__dirty=!0,o.incremental&&o.__drawIndex<0&&(o.__drawIndex=n))}e(n),this.eachBuiltinLayer(function(t){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},setBackgroundColor:function(t){this._backgroundColor=t},configLayer:function(t,e){if(e){var n=this._layerConfig;n[t]?r(n[t],e,!0):n[t]=e;for(var i=0;i<this._zlevelList.length;i++){var a=this._zlevelList[i];if(a===t||a===t+Og){var o=this._layers[a];r(o,n[t],!0)}}}},delLayer:function(t){var e=this._layers,n=this._zlevelList,i=e[t];i&&(i.dom.parentNode.removeChild(i.dom),delete e[t],n.splice(u(n,t),1))},resize:function(t,e){if(this._domRoot.style){var n=this._domRoot;n.style.display="none";var i=this._opts;if(null!=t&&(i.width=t),null!=e&&(i.height=e),t=this._getSize(0),e=this._getSize(1),n.style.display="",this._width!==t||e!==this._height){n.style.width=t+"px",n.style.height=e+"px";for(var r in this._layers)this._layers.hasOwnProperty(r)&&this._layers[r].resize(t,e);f(this._progressiveLayers,function(n){n.resize(t,e)}),this.refresh(!0)}this._width=t,this._height=e}else{if(null==t||null==e)return;this._width=t,this._height=e,this.getLayer(Lg).resize(t,e)}return this},clearLayer:function(t){var e=this._layers[t];e&&e.clear()},dispose:function(){this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},getRenderedCanvas:function(t){if(t=t||{},this._singleCanvas&&!this._compositeManually)return this._layers[Lg].dom;var e=new pg("image",this,t.pixelRatio||this.dpr);if(e.initContext(),e.clear(!1,t.backgroundColor||this._backgroundColor),t.pixelRatio<=this.dpr){this.refresh();var n=e.dom.width,i=e.dom.height,r=e.ctx;this.eachLayer(function(t){t.__builtin__?r.drawImage(t.dom,0,0,n,i):t.renderToCanvas&&(e.ctx.save(),t.renderToCanvas(e.ctx),e.ctx.restore())})}else for(var a={},o=this.storage.getDisplayList(!0),s=0;s<o.length;s++){var l=o[s];this._doPaintEl(l,e,!0,a)}return e.dom},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,n=["width","height"][t],i=["clientWidth","clientHeight"][t],r=["paddingLeft","paddingTop"][t],a=["paddingRight","paddingBottom"][t];if(null!=e[n]&&"auto"!==e[n])return parseFloat(e[n]);var o=this.root,s=document.defaultView.getComputedStyle(o);return(o[i]||Ii(s[n])||Ii(o.style[n]))-(Ii(s[r])||0)-(Ii(s[a])||0)|0},pathToImage:function(t,e){e=e||this.dpr;var n=document.createElement("canvas"),i=n.getContext("2d"),r=t.getBoundingRect(),a=t.style,o=a.shadowBlur*e,s=a.shadowOffsetX*e,l=a.shadowOffsetY*e,u=a.hasStroke()?a.lineWidth:0,h=Math.max(u/2,-s+o),c=Math.max(u/2,s+o),d=Math.max(u/2,-l+o),f=Math.max(u/2,l+o),p=r.width+h+c,g=r.height+d+f;n.width=p*e,n.height=g*e,i.scale(e,e),i.clearRect(0,0,p,g),i.dpr=e;var v={position:t.position,rotation:t.rotation,scale:t.scale};t.position=[h-r.x,d-r.y],t.rotation=0,t.scale=[1,1],t.updateTransform(),t&&t.brush(i);var m=Mi,y=new m({style:{x:0,y:0,image:n}});return null!=v.position&&(y.position=t.position=v.position),null!=v.rotation&&(y.rotation=t.rotation=v.rotation),null!=v.scale&&(y.scale=t.scale=v.scale),y}};var Ng=function(t){t=t||{},this.stage=t.stage||{},this.onframe=t.onframe||function(){},this._clips=[],this._running=!1,this._time,this._pausedTime,this._pauseStart,this._paused=!1,up.call(this)};Ng.prototype={constructor:Ng,addClip:function(t){this._clips.push(t)},addAnimator:function(t){t.animation=this;for(var e=t.getClips(),n=0;n<e.length;n++)this.addClip(e[n])},removeClip:function(t){var e=u(this._clips,t); +e>=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),n=0;n<e.length;n++)this.removeClip(e[n]);t.animation=null},_update:function(){for(var t=(new Date).getTime()-this._pausedTime,e=t-this._time,n=this._clips,i=n.length,r=[],a=[],o=0;i>o;o++){var s=n[o],l=s.step(t,e);l&&(r.push(l),a.push(s))}for(var o=0;i>o;)n[o]._needsRemove?(n[o]=n[i-1],n.pop(),i--):o++;i=r.length;for(var o=0;i>o;o++)a[o].fire(r[o]);this._time=t,this.onframe(e),this.trigger("frame",e),this.stage.update&&this.stage.update()},_startLoop:function(){function t(){e._running&&(gg(t),!e._paused&&e._update())}var e=this;this._running=!0,gg(t)},start:function(){this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop()},stop:function(){this._running=!1},pause:function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},resume:function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},clear:function(){this._clips=[]},isFinished:function(){return!this._clips.length},animate:function(t,e){e=e||{};var n=new Wp(t,e.loop,e.getter,e.setter);return this.addAnimator(n),n}},c(Ng,up);var Fg=300,Vg=Hf.domSupported,Hg=function(){var t=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],n={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},i=p(t,function(t){var e=t.replace("mouse","pointer");return n.hasOwnProperty(e)?e:t});return{mouse:t,touch:e,pointer:i}}(),Gg={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},Wg=Ri.prototype;Wg.stopPropagation=Wg.stopImmediatePropagation=Wg.preventDefault=V;var Xg={mousedown:function(t){t=_e(this.dom,t),this._mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=_e(this.dom,t);var e=this._mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||Gi(this,!0),this.trigger("mousemove",t)},mouseup:function(t){t=_e(this.dom,t),Gi(this,!1),this.trigger("mouseup",t)},mouseout:function(t){t=_e(this.dom,t),this._pointerCapturing&&(t.zrEventControl="no_globalout");var e=t.toElement||t.relatedTarget;t.zrIsToLocalDOM=zi(this,e),this.trigger("mouseout",t)},touchstart:function(t){t=_e(this.dom,t),Bi(t),this._lastTouchMoment=new Date,this.handler.processGesture(t,"start"),Xg.mousemove.call(this,t),Xg.mousedown.call(this,t)},touchmove:function(t){t=_e(this.dom,t),Bi(t),this.handler.processGesture(t,"change"),Xg.mousemove.call(this,t)},touchend:function(t){t=_e(this.dom,t),Bi(t),this.handler.processGesture(t,"end"),Xg.mouseup.call(this,t),+new Date-this._lastTouchMoment<Fg&&Xg.click.call(this,t)},pointerdown:function(t){Xg.mousedown.call(this,t)},pointermove:function(t){Li(t)||Xg.mousemove.call(this,t)},pointerup:function(t){Xg.mouseup.call(this,t)},pointerout:function(t){Li(t)||Xg.mouseout.call(this,t)}};f(["click","mousewheel","dblclick","contextmenu"],function(t){Xg[t]=function(e){e=_e(this.dom,e),this.trigger(t,e)}});var Yg={pointermove:function(t){Li(t)||Yg.mousemove.call(this,t)},pointerup:function(t){Yg.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this._pointerCapturing;Gi(this,!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}},Ug=Xi.prototype;Ug.dispose=function(){Hi(this._localHandlerScope),Vg&&Hi(this._globalHandlerScope)},Ug.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},c(Xi,up);var qg=!Hf.canvasSupported,jg={canvas:Rg},Zg={},Kg="4.2.0",$g=function(t,e,n){n=n||{},this.dom=e,this.id=t;var i=this,r=new ig,a=n.renderer;if(qg){if(!jg.vml)throw new Error("You need to require 'zrender/vml/vml' to support IE8");a="vml"}else a&&jg[a]||(a="canvas");var o=new jg[a](e,r,n,t);this.storage=r,this.painter=o;var s=Hf.node||Hf.worker?null:new Xi(o.getViewportRoot(),o.root);this.handler=new xp(r,o,s,o.root),this.animation=new Ng({stage:{update:y(this.flush,this)}}),this.animation.start(),this._needsRefresh;var l=r.delFromStorage,u=r.addToStorage;r.delFromStorage=function(t){l.call(r,t),t&&t.removeSelfFromZr(i)},r.addToStorage=function(t){u.call(r,t),t.addSelfToZr(i)}};$g.prototype={constructor:$g,getId:function(){return this.id},add:function(t){this.storage.addRoot(t),this._needsRefresh=!0},remove:function(t){this.storage.delRoot(t),this._needsRefresh=!0},configLayer:function(t,e){this.painter.configLayer&&this.painter.configLayer(t,e),this._needsRefresh=!0},setBackgroundColor:function(t){this.painter.setBackgroundColor&&this.painter.setBackgroundColor(t),this._needsRefresh=!0},refreshImmediately:function(){this._needsRefresh=this._needsRefreshHover=!1,this.painter.refresh(),this._needsRefresh=this._needsRefreshHover=!1},refresh:function(){this._needsRefresh=!0},flush:function(){var t;this._needsRefresh&&(t=!0,this.refreshImmediately()),this._needsRefreshHover&&(t=!0,this.refreshHoverImmediately()),t&&this.trigger("rendered")},addHover:function(t,e){if(this.painter.addHover){var n=this.painter.addHover(t,e);return this.refreshHover(),n}},removeHover:function(t){this.painter.removeHover&&(this.painter.removeHover(t),this.refreshHover())},clearHover:function(){this.painter.clearHover&&(this.painter.clearHover(),this.refreshHover())},refreshHover:function(){this._needsRefreshHover=!0},refreshHoverImmediately:function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.refreshHover()},resize:function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},clearAnimation:function(){this.animation.clear()},getWidth:function(){return this.painter.getWidth()},getHeight:function(){return this.painter.getHeight()},pathToImage:function(t,e){return this.painter.pathToImage(t,e)},setCursorStyle:function(t){this.handler.setCursorStyle(t)},findHover:function(t,e){return this.handler.findHover(t,e)},on:function(t,e,n){this.handler.on(t,e,n)},off:function(t,e){this.handler.off(t,e)},trigger:function(t,e){this.handler.trigger(t,e)},clear:function(){this.storage.delRoot(),this.painter.clear()},dispose:function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,Zi(this.id)}};var Qg=(Object.freeze||Object)({version:Kg,init:Yi,dispose:Ui,getInstance:qi,registerPainter:ji}),Jg=f,tv=S,ev=x,nv="series\x00",iv=["fontStyle","fontWeight","fontSize","fontFamily","rich","tag","color","textBorderColor","textBorderWidth","width","height","lineHeight","align","verticalAlign","baseline","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","backgroundColor","borderColor","borderWidth","borderRadius","padding"],rv=0,av=".",ov="___EC__COMPONENT__CONTAINER___",sv=0,lv=function(t){for(var e=0;e<t.length;e++)t[e][1]||(t[e][1]=t[e][0]);return function(e,n,i){for(var r={},a=0;a<t.length;a++){var o=t[a][1];if(!(n&&u(n,o)>=0||i&&u(i,o)<0)){var s=e.getShallow(o);null!=s&&(r[t[a][0]]=s)}}return r}},uv=lv([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),hv={getLineStyle:function(t){var e=uv(this,t);return e.lineDash=this.getLineDash(e.lineWidth),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),n=Math.max(t,2),i=4*t;return"solid"===e||null==e?!1:"dashed"===e?[i,i]:[n,n]}},cv=lv([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),dv={getAreaStyle:function(t,e){return cv(this,t,e)}},fv=Math.pow,pv=Math.sqrt,gv=1e-8,vv=1e-4,mv=pv(3),yv=1/3,_v=H(),xv=H(),wv=H(),bv=Math.min,Sv=Math.max,Mv=Math.sin,Iv=Math.cos,Tv=2*Math.PI,Cv=H(),Dv=H(),Av=H(),kv=[],Pv=[],Lv={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},Ov=[],Bv=[],Ev=[],zv=[],Rv=Math.min,Nv=Math.max,Fv=Math.cos,Vv=Math.sin,Hv=Math.sqrt,Gv=Math.abs,Wv="undefined"!=typeof Float32Array,Xv=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};Xv.prototype={constructor:Xv,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e,n){n=n||0,this._ux=Gv(n/Up/t)||0,this._uy=Gv(n/Up/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(Lv.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var n=Gv(t-this._xi)>this._ux||Gv(e-this._yi)>this._uy||this._len<5;return this.addData(Lv.L,t,e),this._ctx&&n&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),n&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,n,i,r,a){return this.addData(Lv.C,t,e,n,i,r,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,n,i,r,a):this._ctx.bezierCurveTo(t,e,n,i,r,a)),this._xi=r,this._yi=a,this},quadraticCurveTo:function(t,e,n,i){return this.addData(Lv.Q,t,e,n,i),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,n,i):this._ctx.quadraticCurveTo(t,e,n,i)),this._xi=n,this._yi=i,this},arc:function(t,e,n,i,r,a){return this.addData(Lv.A,t,e,n,n,i,r-i,0,a?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,a),this._xi=Fv(r)*n+t,this._yi=Vv(r)*n+e,this},arcTo:function(t,e,n,i,r){return this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},rect:function(t,e,n,i){return this._ctx&&this._ctx.rect(t,e,n,i),this.addData(Lv.R,t,e,n,i),this},closePath:function(){this.addData(Lv.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,n),t.closePath()),this._xi=e,this._yi=n,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,n=0;n<t.length;n++)e+=t[n];this._dashSum=e}return this},setLineDashOffset:function(t){return this._dashOffset=t,this},len:function(){return this._len},setData:function(t){var e=t.length;this.data&&this.data.length===e||!Wv||(this.data=new Float32Array(e));for(var n=0;e>n;n++)this.data[n]=t[n];this._len=e},appendPath:function(t){t instanceof Array||(t=[t]);for(var e=t.length,n=0,i=this._len,r=0;e>r;r++)n+=t[r].len();Wv&&this.data instanceof Float32Array&&(this.data=new Float32Array(i+n));for(var r=0;e>r;r++)for(var a=t[r].data,o=0;o<a.length;o++)this.data[i++]=a[o];this._len=i},addData:function(t){if(this._saveData){var e=this.data;this._len+arguments.length>e.length&&(this._expandData(),e=this.data);for(var n=0;n<arguments.length;n++)e[this._len++]=arguments[n];this._prevCmd=t}},_expandData:function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e<this._len;e++)t[e]=this.data[e];this.data=t}},_needsDash:function(){return this._lineDash},_dashedLineTo:function(t,e){var n,i,r=this._dashSum,a=this._dashOffset,o=this._lineDash,s=this._ctx,l=this._xi,u=this._yi,h=t-l,c=e-u,d=Hv(h*h+c*c),f=l,p=u,g=o.length;for(h/=d,c/=d,0>a&&(a=r+a),a%=r,f-=a*h,p-=a*c;h>0&&t>=f||0>h&&f>=t||0===h&&(c>0&&e>=p||0>c&&p>=e);)i=this._dashIdx,n=o[i],f+=h*n,p+=c*n,this._dashIdx=(i+1)%g,h>0&&l>f||0>h&&f>l||c>0&&u>p||0>c&&p>u||s[i%2?"moveTo":"lineTo"](h>=0?Rv(f,t):Nv(f,t),c>=0?Rv(p,e):Nv(p,e));h=f-t,c=p-e,this._dashOffset=-Hv(h*h+c*c)},_dashedBezierTo:function(t,e,n,i,r,a){var o,s,l,u,h,c=this._dashSum,d=this._dashOffset,f=this._lineDash,p=this._ctx,g=this._xi,v=this._yi,m=xr,y=0,_=this._dashIdx,x=f.length,w=0;for(0>d&&(d=c+d),d%=c,o=0;1>o;o+=.1)s=m(g,t,n,r,o+.1)-m(g,t,n,r,o),l=m(v,e,i,a,o+.1)-m(v,e,i,a,o),y+=Hv(s*s+l*l);for(;x>_&&(w+=f[_],!(w>d));_++);for(o=(w-d)/y;1>=o;)u=m(g,t,n,r,o),h=m(v,e,i,a,o),_%2?p.moveTo(u,h):p.lineTo(u,h),o+=f[_]/y,_=(_+1)%x;_%2!==0&&p.lineTo(r,a),s=r-u,l=a-h,this._dashOffset=-Hv(s*s+l*l)},_dashedQuadraticTo:function(t,e,n,i){var r=n,a=i;n=(n+2*t)/3,i=(i+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,n,i,r,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,Wv&&(this.data=new Float32Array(t)))},getBoundingRect:function(){Ov[0]=Ov[1]=Ev[0]=Ev[1]=Number.MAX_VALUE,Bv[0]=Bv[1]=zv[0]=zv[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,n=0,i=0,r=0,a=0;a<t.length;){var o=t[a++];switch(1===a&&(e=t[a],n=t[a+1],i=e,r=n),o){case Lv.M:i=t[a++],r=t[a++],e=i,n=r,Ev[0]=i,Ev[1]=r,zv[0]=i,zv[1]=r;break;case Lv.L:Or(e,n,t[a],t[a+1],Ev,zv),e=t[a++],n=t[a++];break;case Lv.C:Br(e,n,t[a++],t[a++],t[a++],t[a++],t[a],t[a+1],Ev,zv),e=t[a++],n=t[a++];break;case Lv.Q:Er(e,n,t[a++],t[a++],t[a],t[a+1],Ev,zv),e=t[a++],n=t[a++];break;case Lv.A:var s=t[a++],l=t[a++],u=t[a++],h=t[a++],c=t[a++],d=t[a++]+c;a+=1;var f=1-t[a++];1===a&&(i=Fv(c)*u+s,r=Vv(c)*h+l),zr(s,l,u,h,c,d,f,Ev,zv),e=Fv(d)*u+s,n=Vv(d)*h+l;break;case Lv.R:i=e=t[a++],r=n=t[a++];var p=t[a++],g=t[a++];Or(i,r,i+p,r+g,Ev,zv);break;case Lv.Z:e=i,n=r}oe(Ov,Ov,Ev),se(Bv,Bv,zv)}return 0===a&&(Ov[0]=Ov[1]=Bv[0]=Bv[1]=0),new Sn(Ov[0],Ov[1],Bv[0]-Ov[0],Bv[1]-Ov[1])},rebuildPath:function(t){for(var e,n,i,r,a,o,s=this.data,l=this._ux,u=this._uy,h=this._len,c=0;h>c;){var d=s[c++];switch(1===c&&(i=s[c],r=s[c+1],e=i,n=r),d){case Lv.M:e=i=s[c++],n=r=s[c++],t.moveTo(i,r);break;case Lv.L:a=s[c++],o=s[c++],(Gv(a-i)>l||Gv(o-r)>u||c===h-1)&&(t.lineTo(a,o),i=a,r=o);break;case Lv.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),i=s[c-2],r=s[c-1];break;case Lv.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),i=s[c-2],r=s[c-1];break;case Lv.A:var f=s[c++],p=s[c++],g=s[c++],v=s[c++],m=s[c++],y=s[c++],_=s[c++],x=s[c++],w=g>v?g:v,b=g>v?1:g/v,S=g>v?v/g:1,M=Math.abs(g-v)>.001,I=m+y;M?(t.translate(f,p),t.rotate(_),t.scale(b,S),t.arc(0,0,w,m,I,1-x),t.scale(1/b,1/S),t.rotate(-_),t.translate(-f,-p)):t.arc(f,p,w,m,I,1-x),1===c&&(e=Fv(m)*g+f,n=Vv(m)*v+p),i=Fv(I)*g+f,r=Vv(I)*v+p;break;case Lv.R:e=i=s[c],n=r=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case Lv.Z:t.closePath(),i=e,r=n}}}},Xv.CMD=Lv;var Yv=2*Math.PI,Uv=2*Math.PI,qv=Xv.CMD,jv=2*Math.PI,Zv=1e-4,Kv=[-1,-1,-1],$v=[-1,-1],Qv=fg.prototype.getCanvasPattern,Jv=Math.abs,tm=new Xv(!0);$r.prototype={constructor:$r,type:"path",__dirtyPath:!0,strokeContainThreshold:5,segmentIgnoreThreshold:0,subPixelOptimize:!1,brush:function(t,e){var n=this.style,i=this.path||tm,r=n.hasStroke(),a=n.hasFill(),o=n.fill,s=n.stroke,l=a&&!!o.colorStops,u=r&&!!s.colorStops,h=a&&!!o.image,c=r&&!!s.image;if(n.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=n.getGradient(t,o,d)),u&&(d=d||this.getBoundingRect(),this._strokeGradient=n.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:h&&(t.fillStyle=Qv.call(o,t)),u?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=Qv.call(s,t));var f=n.lineDash,p=n.lineDashOffset,g=!!t.setLineDash,v=this.getGlobalScale();if(i.setScale(v[0],v[1],this.segmentIgnoreThreshold),this.__dirtyPath||f&&!g&&r?(i.beginPath(t),f&&!g&&(i.setLineDash(f),i.setLineDashOffset(p)),this.buildPath(i,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a)if(null!=n.fillOpacity){var m=t.globalAlpha;t.globalAlpha=n.fillOpacity*n.opacity,i.fill(t),t.globalAlpha=m}else i.fill(t);if(f&&g&&(t.setLineDash(f),t.lineDashOffset=p),r)if(null!=n.strokeOpacity){var m=t.globalAlpha;t.globalAlpha=n.strokeOpacity*n.opacity,i.stroke(t),t.globalAlpha=m}else i.stroke(t);f&&g&&t.setLineDash([]),null!=n.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))},buildPath:function(){},createPathProxy:function(){this.path=new Xv},getBoundingRect:function(){var t=this._rect,e=this.style,n=!t;if(n){var i=this.path;i||(i=this.path=new Xv),this.__dirtyPath&&(i.beginPath(),this.buildPath(i,this.shape,!1)),t=i.getBoundingRect()}if(this._rect=t,e.hasStroke()){var r=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||n){r.copy(t);var a=e.lineWidth,o=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),o>1e-10&&(r.width+=a/o,r.height+=a/o,r.x-=a/o/2,r.y-=a/o/2)}return r}return t},contain:function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var a=this.path.data;if(r.hasStroke()){var o=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(r.hasFill()||(o=Math.max(o,this.strokeContainThreshold)),Kr(a,o/s,t,e)))return!0}if(r.hasFill())return Zr(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):Si.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var n=this.shape;if(n){if(S(t))for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);else n[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&Jv(t[0]-1)>1e-10&&Jv(t[3]-1)>1e-10?Math.sqrt(Jv(t[0]*t[3]-t[2]*t[1])):1}},$r.extend=function(t){var e=function(e){$r.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var n=t.shape;if(n){this.shape=this.shape||{};var i=this.shape;for(var r in n)!i.hasOwnProperty(r)&&n.hasOwnProperty(r)&&(i[r]=n[r])}t.init&&t.init.call(this,e)};h(e,$r);for(var n in t)"style"!==n&&"shape"!==n&&(e.prototype[n]=t[n]);return e},h($r,Si);var em=Xv.CMD,nm=[[],[],[]],im=Math.sqrt,rm=Math.atan2,am=function(t,e){var n,i,r,a,o,s,l=t.data,u=em.M,h=em.C,c=em.L,d=em.R,f=em.A,p=em.Q;for(r=0,a=0;r<l.length;){switch(n=l[r++],a=r,i=0,n){case u:i=1;break;case c:i=1;break;case h:i=3;break;case p:i=2;break;case f:var g=e[4],v=e[5],m=im(e[0]*e[0]+e[1]*e[1]),y=im(e[2]*e[2]+e[3]*e[3]),_=rm(-e[1]/y,e[0]/m);l[r]*=m,l[r++]+=g,l[r]*=y,l[r++]+=v,l[r++]*=m,l[r++]*=y,l[r++]+=_,l[r++]+=_,r+=2,a=r;break;case d:s[0]=l[r++],s[1]=l[r++],ae(s,s,e),l[a++]=s[0],l[a++]=s[1],s[0]+=l[r++],s[1]+=l[r++],ae(s,s,e),l[a++]=s[0],l[a++]=s[1]}for(o=0;i>o;o++){var s=nm[o];s[0]=l[r++],s[1]=l[r++],ae(s,s,e),l[a++]=s[0],l[a++]=s[1]}}},om=Math.sqrt,sm=Math.sin,lm=Math.cos,um=Math.PI,hm=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},cm=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(hm(t)*hm(e))},dm=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(cm(t,e))},fm=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,pm=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g,gm=function(t){Si.call(this,t)};gm.prototype={constructor:gm,type:"text",brush:function(t,e){var n=this.style;this.__dirty&&ai(n,!0),n.fill=n.stroke=n.shadowBlur=n.shadowColor=n.shadowOffsetX=n.shadowOffsetY=null;var i=n.text;return null!=i&&(i+=""),bi(i,n)?(this.setTransform(t),si(this,t,i,n,null,e),void this.restoreTransform(t)):void(t.__attrCachedBy=og.NONE)},getBoundingRect:function(){var t=this.style;if(this.__dirty&&ai(t,!0),!this._rect){var e=t.text;null!=e?e+="":e="";var n=Gn(t.text+"",t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich);if(n.x+=t.x||0,n.y+=t.y||0,yi(t.textStroke,t.textStrokeWidth)){var i=t.textStrokeWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect}},h(gm,Si);var vm=$r.extend({type:"circle",shape:{cx:0,cy:0,r:0},buildPath:function(t,e,n){n&&t.moveTo(e.cx+e.r,e.cy),t.arc(e.cx,e.cy,e.r,0,2*Math.PI,!0)}}),mm=[["shadowBlur",0],["shadowColor","#000"],["shadowOffsetX",0],["shadowOffsetY",0]],ym=function(t){return Hf.browser.ie&&Hf.browser.version>=11?function(){var e,n=this.__clipPaths,i=this.style;if(n)for(var r=0;r<n.length;r++){var a=n[r],o=a&&a.shape,s=a&&a.type;if(o&&("sector"===s&&o.startAngle===o.endAngle||"rect"===s&&(!o.width||!o.height))){for(var l=0;l<mm.length;l++)mm[l][2]=i[mm[l][0]],i[mm[l][0]]=mm[l][1];e=!0;break}}if(t.apply(this,arguments),e)for(var l=0;l<mm.length;l++)i[mm[l][0]]=mm[l][2]}:t},_m=$r.extend({type:"sector",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},brush:ym($r.prototype.brush),buildPath:function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),a=Math.max(e.r,0),o=e.startAngle,s=e.endAngle,l=e.clockwise,u=Math.cos(o),h=Math.sin(o);t.moveTo(u*r+n,h*r+i),t.lineTo(u*a+n,h*a+i),t.arc(n,i,a,o,s,!l),t.lineTo(Math.cos(s)*r+n,Math.sin(s)*r+i),0!==r&&t.arc(n,i,r,s,o,l),t.closePath()}}),xm=$r.extend({type:"ring",shape:{cx:0,cy:0,r:0,r0:0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=2*Math.PI;t.moveTo(n+e.r,i),t.arc(n,i,e.r,0,r,!1),t.moveTo(n+e.r0,i),t.arc(n,i,e.r0,0,r,!0)}}),wm=function(t,e){for(var n=t.length,i=[],r=0,a=1;n>a;a++)r+=ee(t[a-1],t[a]);var o=r/2;o=n>o?n:o;for(var a=0;o>a;a++){var s,l,u,h=a/(o-1)*(e?n:n-1),c=Math.floor(h),d=h-c,f=t[c%n];e?(s=t[(c-1+n)%n],l=t[(c+1)%n],u=t[(c+2)%n]):(s=t[0===c?c:c-1],l=t[c>n-2?n-1:c+1],u=t[c>n-3?n-1:c+2]);var p=d*d,g=d*p;i.push([ra(s[0],f[0],l[0],u[0],d,p,g),ra(s[1],f[1],l[1],u[1],d,p,g)])}return i},bm=function(t,e,n,i){var r,a,o,s,l=[],u=[],h=[],c=[];if(i){o=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;f>d;d++)oe(o,o,t[d]),se(s,s,t[d]);oe(o,o,i[0]),se(s,s,i[1])}for(var d=0,f=t.length;f>d;d++){var p=t[d];if(n)r=t[d?d-1:f-1],a=t[(d+1)%f];else{if(0===d||d===f-1){l.push(W(t[d]));continue}r=t[d-1],a=t[d+1]}q(u,a,r),J(u,u,e);var g=ee(p,r),v=ee(p,a),m=g+v;0!==m&&(g/=m,v/=m),J(h,u,-g),J(c,u,v);var y=Y([],p,h),_=Y([],p,c);i&&(se(y,y,o),oe(y,y,s),se(_,_,o),oe(_,_,s)),l.push(y),l.push(_)}return n&&l.push(l.shift()),l},Sm=$r.extend({type:"polygon",shape:{points:null,smooth:!1,smoothConstraint:null},buildPath:function(t,e){aa(t,e,!0)}}),Mm=$r.extend({type:"polyline",shape:{points:null,smooth:!1,smoothConstraint:null},style:{stroke:"#000",fill:null},buildPath:function(t,e){aa(t,e,!1)}}),Im=Math.round,Tm={},Cm=$r.extend({type:"rect",shape:{r:0,x:0,y:0,width:0,height:0},buildPath:function(t,e){var n,i,r,a;this.subPixelOptimize?(sa(Tm,e,this.style),n=Tm.x,i=Tm.y,r=Tm.width,a=Tm.height,Tm.r=e.r,e=Tm):(n=e.x,i=e.y,r=e.width,a=e.height),e.r?ri(t,e):t.rect(n,i,r,a),t.closePath()}}),Dm={},Am=$r.extend({type:"line",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n,i,r,a;this.subPixelOptimize?(oa(Dm,e,this.style),n=Dm.x1,i=Dm.y1,r=Dm.x2,a=Dm.y2):(n=e.x1,i=e.y1,r=e.x2,a=e.y2);var o=e.percent;0!==o&&(t.moveTo(n,i),1>o&&(r=n*(1-o)+r*o,a=i*(1-o)+a*o),t.lineTo(r,a))},pointAt:function(t){var e=this.shape;return[e.x1*(1-t)+e.x2*t,e.y1*(1-t)+e.y2*t]}}),km=[],Pm=$r.extend({type:"bezier-curve",shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n=e.x1,i=e.y1,r=e.x2,a=e.y2,o=e.cpx1,s=e.cpy1,l=e.cpx2,u=e.cpy2,h=e.percent;0!==h&&(t.moveTo(n,i),null==l||null==u?(1>h&&(kr(n,o,r,h,km),o=km[1],r=km[2],kr(i,s,a,h,km),s=km[1],a=km[2]),t.quadraticCurveTo(o,s,r,a)):(1>h&&(Mr(n,o,l,r,h,km),o=km[1],l=km[2],r=km[3],Mr(i,s,u,a,h,km),s=km[1],u=km[2],a=km[3]),t.bezierCurveTo(o,s,l,u,r,a)))},pointAt:function(t){return ua(this.shape,t,!1)},tangentAt:function(t){var e=ua(this.shape,t,!0);return te(e,e)}}),Lm=$r.extend({type:"arc",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r,0),a=e.startAngle,o=e.endAngle,s=e.clockwise,l=Math.cos(a),u=Math.sin(a);t.moveTo(l*r+n,u*r+i),t.arc(n,i,r,a,o,!s)}}),Om=$r.extend({type:"compound",shape:{paths:null},_updatePathDirty:function(){for(var t=this.__dirtyPath,e=this.shape.paths,n=0;n<e.length;n++)t=t||e[n].__dirtyPath;this.__dirtyPath=t,this.__dirty=this.__dirty||t},beforeBrush:function(){this._updatePathDirty();for(var t=this.shape.paths||[],e=this.getGlobalScale(),n=0;n<t.length;n++)t[n].path||t[n].createPathProxy(),t[n].path.setScale(e[0],e[1],t[n].segmentIgnoreThreshold)},buildPath:function(t,e){for(var n=e.paths||[],i=0;i<n.length;i++)n[i].buildPath(t,n[i].shape,!0)},afterBrush:function(){for(var t=this.shape.paths||[],e=0;e<t.length;e++)t[e].__dirtyPath=!1},getBoundingRect:function(){return this._updatePathDirty(),$r.prototype.getBoundingRect.call(this)}}),Bm=function(t){this.colorStops=t||[]};Bm.prototype={constructor:Bm,addColorStop:function(t,e){this.colorStops.push({offset:t,color:e})}};var Em=function(t,e,n,i,r,a){this.x=null==t?0:t,this.y=null==e?0:e,this.x2=null==n?1:n,this.y2=null==i?0:i,this.type="linear",this.global=a||!1,Bm.call(this,r)};Em.prototype={constructor:Em},h(Em,Bm);var zm=function(t,e,n,i,r){this.x=null==t?.5:t,this.y=null==e?.5:e,this.r=null==n?.5:n,this.type="radial",this.global=r||!1,Bm.call(this,i)};zm.prototype={constructor:zm},h(zm,Bm),ha.prototype.incremental=!0,ha.prototype.clearDisplaybles=function(){this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.dirty(),this.notClear=!1},ha.prototype.addDisplayable=function(t,e){e?this._temporaryDisplayables.push(t):this._displayables.push(t),this.dirty()},ha.prototype.addDisplayables=function(t,e){e=e||!1;for(var n=0;n<t.length;n++)this.addDisplayable(t[n],e)},ha.prototype.eachPendingDisplayable=function(t){for(var e=this._cursor;e<this._displayables.length;e++)t&&t(this._displayables[e]);for(var e=0;e<this._temporaryDisplayables.length;e++)t&&t(this._temporaryDisplayables[e])},ha.prototype.update=function(){this.updateTransform();for(var t=this._cursor;t<this._displayables.length;t++){var e=this._displayables[t];e.parent=this,e.update(),e.parent=null}for(var t=0;t<this._temporaryDisplayables.length;t++){var e=this._temporaryDisplayables[t];e.parent=this,e.update(),e.parent=null}},ha.prototype.brush=function(t){for(var e=this._cursor;e<this._displayables.length;e++){var n=this._displayables[e];n.beforeBrush&&n.beforeBrush(t),n.brush(t,e===this._cursor?null:this._displayables[e-1]),n.afterBrush&&n.afterBrush(t)}this._cursor=e;for(var e=0;e<this._temporaryDisplayables.length;e++){var n=this._temporaryDisplayables[e];n.beforeBrush&&n.beforeBrush(t),n.brush(t,0===e?null:this._temporaryDisplayables[e-1]),n.afterBrush&&n.afterBrush(t)}this._temporaryDisplayables=[],this.notClear=!0};var Rm=[];ha.prototype.getBoundingRect=function(){if(!this._rect){for(var t=new Sn(1/0,1/0,-1/0,-1/0),e=0;e<this._displayables.length;e++){var n=this._displayables[e],i=n.getBoundingRect().clone();n.needLocalTransform()&&i.applyTransform(n.getLocalTransform(Rm)),t.union(i)}this._rect=t}return this._rect},ha.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();if(i.contain(n[0],n[1]))for(var r=0;r<this._displayables.length;r++){var a=this._displayables[r];if(a.contain(t,e))return!0}return!1},h(ha,Si);var Nm=Math.max,Fm=Math.min,Vm={},Hm=1,Gm={color:"textFill",textBorderColor:"textStroke",textBorderWidth:"textStrokeWidth"},Wm="emphasis",Xm="normal",Ym=1,Um={},qm={},jm=ia,Zm=la,Km=N(),$m=0;fa("circle",vm),fa("sector",_m),fa("ring",xm),fa("polygon",Sm),fa("polyline",Mm),fa("rect",Cm),fa("line",Am),fa("bezierCurve",Pm),fa("arc",Lm);var Qm=(Object.freeze||Object)({Z2_EMPHASIS_LIFT:Hm,CACHED_LABEL_STYLE_PROPERTIES:Gm,extendShape:ca,extendPath:da,registerShape:fa,getShapeClass:pa,makePath:ga,makeImage:va,mergePath:jm,resizePath:ya,subPixelOptimizeLine:_a,subPixelOptimizeRect:xa,subPixelOptimize:Zm,setElementHoverStyle:Da,setHoverStyle:Ba,setAsHighDownDispatcher:Ea,isHighDownDispatcher:za,getHighlightDigit:Ra,setLabelStyle:Na,modifyLabelStyle:Fa,setTextStyle:Va,setText:Ha,getFont:ja,updateProps:Ka,initProps:$a,getTransform:Qa,applyTransform:Ja,transformDirection:to,groupTransition:eo,clipPointsByRect:no,clipRectByRect:io,createIcon:ro,linePolygonIntersect:ao,lineLineIntersect:oo,Group:tg,Image:Mi,Text:gm,Circle:vm,Sector:_m,Ring:xm,Polygon:Sm,Polyline:Mm,Rect:Cm,Line:Am,BezierCurve:Pm,Arc:Lm,IncrementalDisplayable:ha,CompoundPath:Om,LinearGradient:Em,RadialGradient:zm,BoundingRect:Sn}),Jm=["textStyle","color"],ty={getTextColor:function(t){var e=this.ecModel;return this.getShallow("color")||(!t&&e?e.get(Jm):null)},getFont:function(){return ja({fontStyle:this.getShallow("fontStyle"),fontWeight:this.getShallow("fontWeight"),fontSize:this.getShallow("fontSize"),fontFamily:this.getShallow("fontFamily")},this.ecModel)},getTextRect:function(t){return Gn(t,this.getFont(),this.getShallow("align"),this.getShallow("verticalAlign")||this.getShallow("baseline"),this.getShallow("padding"),this.getShallow("lineHeight"),this.getShallow("rich"),this.getShallow("truncateText"))}},ey=lv([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]),ny={getItemStyle:function(t,e){var n=ey(this,t,e),i=this.getBorderLineDash();return i&&(n.lineDash=i),n},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}},iy=c,ry=ar();uo.prototype={constructor:uo,init:null,mergeOption:function(t){r(this.option,t,!0)},get:function(t,e){return null==t?this.option:ho(this.option,this.parsePath(t),!e&&co(this,t))},getShallow:function(t,e){var n=this.option,i=null==n?n:n[t],r=!e&&co(this,t);return null==i&&r&&(i=r.getShallow(t)),i},getModel:function(t,e){var n,i=null==t?this.option:ho(this.option,t=this.parsePath(t));return e=e||(n=co(this,t))&&n.getModel(t),new uo(i,e,this.ecModel)},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){var t=this.constructor;return new t(i(this.option))},setReadOnly:function(){},parsePath:function(t){return"string"==typeof t&&(t=t.split(".")),t},customizeGetParent:function(t){ry(this).getParent=t},isAnimationEnabled:function(){if(!Hf.node){if(null!=this.option.animation)return!!this.option.animation;if(this.parentModel)return this.parentModel.isAnimationEnabled()}}},fr(uo),pr(uo),iy(uo,hv),iy(uo,dv),iy(uo,ty),iy(uo,ny);var ay=0,oy=1e-4,sy=9007199254740991,ly=/^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/,uy=(Object.freeze||Object)({linearMap:mo,parsePercent:yo,round:_o,asc:xo,getPrecision:wo,getPrecisionSafe:bo,getPixelPrecision:So,getPercentWithPrecision:Mo,MAX_SAFE_INTEGER:sy,remRadian:Io,isRadianAroundZero:To,parseDate:Co,quantity:Do,quantityExponent:Ao,nice:ko,quantile:Po,reformIntervals:Lo,isNumeric:Oo}),hy=L,cy=/([&<>"'])/g,dy={"&":"&","<":"<",">":">",'"':""","'":"'"},fy=["a","b","c","d","e","f","g"],py=function(t,e){return"{"+t+(null==e?"":e)+"}"},gy=jn,vy=(Object.freeze||Object)({addCommas:Bo,toCamelCase:Eo,normalizeCssArray:hy,encodeHTML:zo,formatTpl:Ro,formatTplSimple:No,getTooltipMarker:Fo,formatTime:Ho,capitalFirst:Go,truncateText:gy,getTextBoundingRect:Wo,getTextRect:Xo}),my=f,yy=["left","right","top","bottom","width","height"],_y=[["width","left","right"],["height","top","bottom"]],xy=Yo,wy=(_(Yo,"vertical"),_(Yo,"horizontal"),{getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}),by=ar(),Sy=uo.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,n,i){uo.call(this,t,e,n,i),this.uid=fo("ec_cpt_model")},init:function(t,e,n){this.mergeDefaultAndTheme(t,n)},mergeDefaultAndTheme:function(t,e){var n=this.layoutMode,i=n?jo(t):{},a=e.getTheme();r(t,a.get(this.mainType)),r(t,this.getDefaultOption()),n&&qo(t,i,n)},mergeOption:function(t){r(this.option,t,!0);var e=this.layoutMode;e&&qo(this.option,t,e)},optionUpdated:function(){},getDefaultOption:function(){var t=by(this);if(!t.defaultOption){for(var e=[],n=this.constructor;n;){var i=n.prototype.defaultOption;i&&e.push(i),n=n.superClass}for(var a={},o=e.length-1;o>=0;o--)a=r(a,e[o],!0);t.defaultOption=a}return t.defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});mr(Sy,{registerWhenExtend:!0}),po(Sy),go(Sy,Ko),c(Sy,wy);var My="";"undefined"!=typeof navigator&&(My=navigator.platform||"");var Iy={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],gradientColor:["#f6efa6","#d88273","#bf444c"],textStyle:{fontFamily:My.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},Ty=ar(),Cy={clearColorPalette:function(){Ty(this).colorIdx=0,Ty(this).colorNameMap={} +},getColorFromPalette:function(t,e,n){e=e||this;var i=Ty(e),r=i.colorIdx||0,a=i.colorNameMap=i.colorNameMap||{};if(a.hasOwnProperty(t))return a[t];var o=Ki(this.get("color",!0)),s=this.get("colorLayer",!0),l=null!=n&&s?$o(s,n):o;if(l=l||o,l&&l.length){var u=l[r];return t&&(a[t]=u),i.colorIdx=(r+1)%l.length,u}}},Dy="original",Ay="arrayRows",ky="objectRows",Py="keyedColumns",Ly="unknown",Oy="typedArray",By="column",Ey="row";Qo.seriesDataToSource=function(t){return new Qo({data:t,sourceFormat:I(t)?Oy:Dy,fromDataset:!1})},pr(Qo);var zy={Must:1,Might:2,Not:3},Ry=ar(),Ny="\x00_ec_inner",Fy=uo.extend({init:function(t,e,n,i){n=n||{},this.option=null,this._theme=new uo(n),this._optionManager=i},setOption:function(t,e){O(!(Ny in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,n=this._optionManager;if(!t||"recreate"===t){var i=n.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(i)):ps.call(this,i),e=!0}if(("timeline"===t||"media"===t)&&this.restoreData(),!t||"recreate"===t||"timeline"===t){var r=n.getTimelineOption(this);r&&(this.mergeOption(r),e=!0)}if(!t||"recreate"===t||"media"===t){var a=n.getMediaOption(this,this._api);a.length&&f(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){function e(e,i){var r=Ki(t[e]),s=tr(a.get(e),r);er(s),f(s,function(t){var n=t.option;S(n)&&(t.keyInfo.mainType=e,t.keyInfo.subType=vs(e,n,t.exist))});var l=gs(a,i);n[e]=[],a.set(e,[]),f(s,function(t,i){var r=t.exist,s=t.option;if(O(S(s)||r,"Empty component definition"),s){var u=Sy.getClass(e,t.keyInfo.subType,!0);if(r&&r.constructor===u)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var h=o({dependentModels:l,componentIndex:i},t.keyInfo);r=new u(s,this,this,h),o(r,h),r.init(s,this,this,h),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);a.get(e)[i]=r,n[e][i]=r.option},this),"series"===e&&ms(this,a.get("series"))}var n=this.option,a=this._componentsMap,s=[];es(this),f(t,function(t,e){null!=t&&(Sy.hasClass(e)?e&&s.push(e):n[e]=null==n[e]?i(t):r(n[e],t,!0))}),Sy.topologicalTravel(s,Sy.getAllClassMainTypes(),e,this),this._seriesIndicesMap=N(this._seriesIndices=this._seriesIndices||[])},getOption:function(){var t=i(this.option);return f(t,function(e,n){if(Sy.hasClass(n)){for(var e=Ki(e),i=e.length-1;i>=0;i--)ir(e[i])&&e.splice(i,1);t[n]=e}}),delete t[Ny],t},getTheme:function(){return this._theme},getComponent:function(t,e){var n=this._componentsMap.get(t);return n?n[e||0]:void 0},queryComponents:function(t){var e=t.mainType;if(!e)return[];var n=t.index,i=t.id,r=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var o;if(null!=n)x(n)||(n=[n]),o=v(p(n,function(t){return a[t]}),function(t){return!!t});else if(null!=i){var s=x(i);o=v(a,function(t){return s&&u(i,t.id)>=0||!s&&t.id===i})}else if(null!=r){var l=x(r);o=v(a,function(t){return l&&u(r,t.name)>=0||!l&&t.name===r})}else o=a.slice();return ys(o,t)},findComponents:function(t){function e(t){var e=r+"Index",n=r+"Id",i=r+"Name";return!t||null==t[e]&&null==t[n]&&null==t[i]?null:{mainType:r,index:t[e],id:t[n],name:t[i]}}function n(e){return t.filter?v(e,t.filter):e}var i=t.query,r=t.mainType,a=e(i),o=a?this.queryComponents(a):this._componentsMap.get(r);return n(ys(o,t))},eachComponent:function(t,e,n){var i=this._componentsMap;if("function"==typeof t)n=e,e=t,i.each(function(t,i){f(t,function(t,r){e.call(n,i,t,r)})});else if(b(t))f(i.get(t),e,n);else if(S(t)){var r=this.findComponents(t);f(r,e,n)}},getSeriesByName:function(t){var e=this._componentsMap.get("series");return v(e,function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){var e=this._componentsMap.get("series");return v(e,function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get("series").slice()},getSeriesCount:function(){return this._componentsMap.get("series").length},eachSeries:function(t,e){f(this._seriesIndices,function(n){var i=this._componentsMap.get("series")[n];t.call(e,i,n)},this)},eachRawSeries:function(t,e){f(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,n){f(this._seriesIndices,function(i){var r=this._componentsMap.get("series")[i];r.subType===t&&e.call(n,r,i)},this)},eachRawSeriesByType:function(t,e,n){return f(this.getSeriesByType(t),e,n)},isSeriesFiltered:function(t){return null==this._seriesIndicesMap.get(t.componentIndex)},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){var n=v(this._componentsMap.get("series"),t,e);ms(this,n)},restoreData:function(t){var e=this._componentsMap;ms(this,e.get("series"));var n=[];e.each(function(t,e){n.push(e)}),Sy.topologicalTravel(n,Sy.getAllClassMainTypes(),function(n){f(e.get(n),function(e){("series"!==n||!ds(e,t))&&e.restoreData()})})}});c(Fy,Cy);var Vy=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"],Hy={};xs.prototype={constructor:xs,create:function(t,e){var n=[];f(Hy,function(i){var r=i.create(t,e);n=n.concat(r||[])}),this._coordinateSystems=n},update:function(t,e){f(this._coordinateSystems,function(n){n.update&&n.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},xs.register=function(t,e){Hy[t]=e},xs.get=function(t){return Hy[t]};var Gy=f,Wy=i,Xy=p,Yy=r,Uy=/^(min|max)?(.+)$/;ws.prototype={constructor:ws,setOption:function(t,e){t&&f(Ki(t.series),function(t){t&&t.data&&I(t.data)&&E(t.data)}),t=Wy(t);var n=this._optionBackup,i=bs.call(this,t,e,!n);this._newBaseOption=i.baseOption,n?(Ts(n.baseOption,i.baseOption),i.timelineOptions.length&&(n.timelineOptions=i.timelineOptions),i.mediaList.length&&(n.mediaList=i.mediaList),i.mediaDefault&&(n.mediaDefault=i.mediaDefault)):this._optionBackup=i},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=Xy(e.timelineOptions,Wy),this._mediaList=Xy(e.mediaList,Wy),this._mediaDefault=Wy(e.mediaDefault),this._currentMediaIndices=[],Wy(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,n=this._timelineOptions;if(n.length){var i=t.getComponent("timeline");i&&(e=Wy(n[i.getCurrentIndex()],!0))}return e},getMediaOption:function(){var t=this._api.getWidth(),e=this._api.getHeight(),n=this._mediaList,i=this._mediaDefault,r=[],a=[];if(!n.length&&!i)return a;for(var o=0,s=n.length;s>o;o++)Ss(n[o].query,t,e)&&r.push(o);return!r.length&&i&&(r=[-1]),r.length&&!Is(r,this._currentMediaIndices)&&(a=Xy(r,function(t){return Wy(-1===t?i.option:n[t].option)})),this._currentMediaIndices=r,a}};var qy=f,jy=S,Zy=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"],Ky=function(t,e){qy(Os(t.series),function(t){jy(t)&&Ls(t)});var n=["xAxis","yAxis","radiusAxis","angleAxis","singleAxis","parallelAxis","radar"];e&&n.push("valueAxis","categoryAxis","logAxis","timeAxis"),qy(n,function(e){qy(Os(t[e]),function(t){t&&(ks(t,"axisLabel"),ks(t.axisPointer,"label"))})}),qy(Os(t.parallel),function(t){var e=t&&t.parallelAxisDefault;ks(e,"axisLabel"),ks(e&&e.axisPointer,"label")}),qy(Os(t.calendar),function(t){Ds(t,"itemStyle"),ks(t,"dayLabel"),ks(t,"monthLabel"),ks(t,"yearLabel")}),qy(Os(t.radar),function(t){ks(t,"name")}),qy(Os(t.geo),function(t){jy(t)&&(Ps(t),qy(Os(t.regions),function(t){Ps(t)}))}),qy(Os(t.timeline),function(t){Ps(t),Ds(t,"label"),Ds(t,"itemStyle"),Ds(t,"controlStyle",!0);var e=t.data;x(e)&&f(e,function(t){S(t)&&(Ds(t,"label"),Ds(t,"itemStyle"))})}),qy(Os(t.toolbox),function(t){Ds(t,"iconStyle"),qy(t.feature,function(t){Ds(t,"iconStyle")})}),ks(Bs(t.axisPointer),"label"),ks(Bs(t.tooltip).axisPointer,"label")},$y=[["x","left"],["y","top"],["x2","right"],["y2","bottom"]],Qy=["grid","geo","parallel","legend","toolbox","title","visualMap","dataZoom","timeline"],Jy=function(t,e){Ky(t,e),t.series=Ki(t.series),f(t.series,function(t){if(S(t)){var e=t.type;if("line"===e)null!=t.clipOverflow&&(t.clip=t.clipOverflow);else if("pie"===e||"gauge"===e)null!=t.clockWise&&(t.clockwise=t.clockWise);else if("gauge"===e){var n=Es(t,"pointer.color");null!=n&&zs(t,"itemStyle.color",n)}Rs(t)}}),t.dataRange&&(t.visualMap=t.dataRange),f(Qy,function(e){var n=t[e];n&&(x(n)||(n=[n]),f(n,function(t){Rs(t)}))})},t_=function(t){var e=N();t.eachSeries(function(t){var n=t.get("stack");if(n){var i=e.get(n)||e.set(n,[]),r=t.getData(),a={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!a.stackedDimension||!a.isStackedByIndex&&!a.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(a)}}),e.each(Ns)},e_=Fs.prototype;e_.pure=!1,e_.persistent=!0,e_.getSource=function(){return this._source};var n_={arrayRows_column:{pure:!0,count:function(){return Math.max(0,this._data.length-this._source.startIndex)},getItem:function(t){return this._data[t+this._source.startIndex]},appendData:Gs},arrayRows_row:{pure:!0,count:function(){var t=this._data[0];return t?Math.max(0,t.length-this._source.startIndex):0},getItem:function(t){t+=this._source.startIndex;for(var e=[],n=this._data,i=0;i<n.length;i++){var r=n[i];e.push(r?r[t]:null)}return e},appendData:function(){throw new Error('Do not support appendData when set seriesLayoutBy: "row".')}},objectRows:{pure:!0,count:Vs,getItem:Hs,appendData:Gs},keyedColumns:{pure:!0,count:function(){var t=this._source.dimensionsDefine[0].name,e=this._data[t];return e?e.length:0},getItem:function(t){for(var e=[],n=this._source.dimensionsDefine,i=0;i<n.length;i++){var r=this._data[n[i].name];e.push(r?r[t]:null)}return e},appendData:function(t){var e=this._data;f(t,function(t,n){for(var i=e[n]||(e[n]=[]),r=0;r<(t||[]).length;r++)i.push(t[r])})}},original:{count:Vs,getItem:Hs,appendData:Gs},typedArray:{persistent:!1,pure:!0,count:function(){return this._data?this._data.length/this._dimSize:0},getItem:function(t,e){t-=this._offset,e=e||[];for(var n=this._dimSize*t,i=0;i<this._dimSize;i++)e[i]=this._data[n+i];return e},appendData:function(t){this._data=t},clean:function(){this._offset+=this.count(),this._data=null}}},i_={arrayRows:Ws,objectRows:function(t,e,n,i){return null!=n?t[i]:t},keyedColumns:Ws,original:function(t,e,n){var i=Qi(t);return null!=n&&i instanceof Array?i[n]:i},typedArray:Ws},r_={arrayRows:Xs,objectRows:function(t,e){return Ys(t[e],this._dimensionInfos[e])},keyedColumns:Xs,original:function(t,e,n,i){var r=t&&(null==t.value?t:t.value);return!this._rawData.pure&&Ji(t)&&(this.hasItemOption=!0),Ys(r instanceof Array?r[i]:r,this._dimensionInfos[e])},typedArray:function(t,e,n,i){return t[i]}},a_=/\{@(.+?)\}/g,o_={getDataParams:function(t,e){var n=this.getData(e),i=this.getRawValue(t,e),r=n.getRawIndex(t),a=n.getName(t),o=n.getRawDataItem(t),s=n.getItemVisual(t,"color"),l=n.getItemVisual(t,"borderColor"),u=this.ecModel.getComponent("tooltip"),h=u&&u.get("renderMode"),c=hr(h),d=this.mainType,f="series"===d,p=n.userOutput;return{componentType:d,componentSubType:this.subType,componentIndex:this.componentIndex,seriesType:f?this.subType:null,seriesIndex:this.seriesIndex,seriesId:f?this.id:null,seriesName:f?this.name:null,name:a,dataIndex:r,data:o,dataType:e,value:i,color:s,borderColor:l,dimensionNames:p?p.dimensionNames:null,encode:p?p.encode:null,marker:Fo({color:s,renderMode:c}),$vars:["seriesName","name","value"]}},getFormattedLabel:function(t,e,n,i,r){e=e||"normal";var a=this.getData(n),o=a.getItemModel(t),s=this.getDataParams(t,n);null!=i&&s.value instanceof Array&&(s.value=s.value[i]);var l=o.get("normal"===e?[r||"label","formatter"]:[e,r||"label","formatter"]);if("function"==typeof l)return s.status=e,s.dimensionIndex=i,l(s);if("string"==typeof l){var u=Ro(l,s);return u.replace(a_,function(e,n){var i=n.length;return"["===n.charAt(0)&&"]"===n.charAt(i-1)&&(n=+n.slice(1,i-1)),Us(a,t,n)})}},getRawValue:function(t,e){return Us(this.getData(e),t)},formatTooltip:function(){}},s_=Zs.prototype;s_.perform=function(t){function e(t){return!(t>=1)&&(t=1),t}var n=this._upstream,i=t&&t.skip;if(this._dirty&&n){var r=this.context;r.data=r.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!i&&(a=this._plan(this.context));var o=e(this._modBy),s=this._modDataCount||0,l=e(t&&t.modBy),u=t&&t.modDataCount||0;(o!==l||s!==u)&&(a="reset");var h;(this._dirty||"reset"===a)&&(this._dirty=!1,h=$s(this,i)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,f=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!i&&(h||f>d)){var p=this._progress;if(x(p))for(var g=0;g<p.length;g++)Ks(this,p[g],d,f,l,u);else Ks(this,p,d,f,l,u)}this._dueIndex=f;var v=null!=this._settedOutputEnd?this._settedOutputEnd:f;this._outputDueEnd=v}else this._dueIndex=this._outputDueEnd=null!=this._settedOutputEnd?this._settedOutputEnd:this._dueEnd;return this.unfinished()};var l_=function(){function t(){return n>i?i++:null}function e(){var t=i%o*r+Math.ceil(i/o),e=i>=n?null:a>t?t:i;return i++,e}var n,i,r,a,o,s={reset:function(l,u,h,c){i=l,n=u,r=h,a=c,o=Math.ceil(a/r),s.next=r>1&&a>0?e:t}};return s}();s_.dirty=function(){this._dirty=!0,this._onDirty&&this._onDirty(this.context)},s_.unfinished=function(){return this._progress&&this._dueIndex<this._dueEnd},s_.pipe=function(t){(this._downstream!==t||this._dirty)&&(this._downstream=t,t._upstream=this,t.dirty())},s_.dispose=function(){this._disposed||(this._upstream&&(this._upstream._downstream=null),this._downstream&&(this._downstream._upstream=null),this._dirty=!1,this._disposed=!0)},s_.getUpstream=function(){return this._upstream},s_.getDownstream=function(){return this._downstream},s_.setOutputEnd=function(t){this._outputDueEnd=this._settedOutputEnd=t};var u_=ar(),h_=Sy.extend({type:"series.__base__",seriesIndex:0,coordinateSystem:null,defaultOption:null,legendVisualProvider:null,visualColorAccessPath:"itemStyle.color",visualBorderColorAccessPath:"itemStyle.borderColor",layoutMode:null,init:function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=js({count:tl,reset:el}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),ns(this);var i=this.getInitialData(t,n);il(i,this),this.dataTask.context.data=i,u_(this).dataBeforeProcessed=i,Qs(this)},mergeDefaultAndTheme:function(t,e){var n=this.layoutMode,i=n?jo(t):{},a=this.subType;Sy.hasClass(a)&&(a+="Series"),r(t,e.getTheme().get(this.subType)),r(t,this.getDefaultOption()),$i(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&qo(t,i,n)},mergeOption:function(t,e){t=r(this.option,t,!0),this.fillDataTextStyle(t.data);var n=this.layoutMode;n&&qo(this.option,t,n),ns(this);var i=this.getInitialData(t,e);il(i,this),this.dataTask.dirty(),this.dataTask.context.data=i,u_(this).dataBeforeProcessed=i,Qs(this)},fillDataTextStyle:function(t){if(t&&!I(t))for(var e=["show"],n=0;n<t.length;n++)t[n]&&t[n].label&&$i(t[n],"label",e)},getInitialData:function(){},appendData:function(t){var e=this.getRawData();e.appendData(t.data)},getData:function(t){var e=al(this);if(e){var n=e.context.data;return null==t?n:n.getLinkedData(t)}return u_(this).data},setData:function(t){var e=al(this);if(e){var n=e.context;n.data!==t&&e.modifyOutputEnd&&e.setOutputEnd(t.count()),n.outputData=t,e!==this.dataTask&&(n.data=t)}u_(this).data=t},getSource:function(){return ts(this)},getRawData:function(){return u_(this).dataBeforeProcessed},getBaseAxis:function(){var t=this.coordinateSystem;return t&&t.getBaseAxis&&t.getBaseAxis()},formatTooltip:function(t,e,n,i){function r(n){function r(t,n){var r=c.getDimensionInfo(n);if(r&&r.otherDims.tooltip!==!1){var d=r.type,f="sub"+o.seriesIndex+"at"+h,p=Fo({color:y,type:"subItem",renderMode:i,markerId:f}),g="string"==typeof p?p:p.content,v=(a?g+zo(r.displayName||"-")+": ":"")+zo("ordinal"===d?t+"":"time"===d?e?"":Ho("yyyy/MM/dd hh:mm:ss",t):Bo(t));v&&s.push(v),l&&(u[f]=y,++h)}}var a=g(n,function(t,e,n){var i=c.getDimensionInfo(n);return t|=i&&i.tooltip!==!1&&null!=i.displayName},0),s=[];d.length?f(d,function(e){r(Us(c,t,e),e)}):f(n,r);var p=a?l?"\n":"<br/>":"",v=p+s.join(p||", ");return{renderMode:i,content:v,style:u}}function a(t){return{renderMode:i,content:zo(Bo(t)),style:u}}var o=this;i=i||"html";var s="html"===i?"<br/>":"\n",l="richText"===i,u={},h=0,c=this.getData(),d=c.mapDimension("defaultedTooltip",!0),p=d.length,v=this.getRawValue(t),m=x(v),y=c.getItemVisual(t,"color");S(y)&&y.colorStops&&(y=(y.colorStops[0]||{}).color),y=y||"transparent";var _=p>1||m&&!p?r(v):a(p?Us(c,t,d[0]):m?v[0]:v),w=_.content,b=o.seriesIndex+"at"+h,M=Fo({color:y,type:"item",renderMode:i,markerId:b});u[b]=y,++h;var I=c.getName(t),T=this.name;nr(this)||(T=""),T=T?zo(T)+(e?": ":s):"";var C="string"==typeof M?M:M.content,D=e?C+T+w:T+C+(I?zo(I)+": "+w:w);return{html:D,markers:u}},isAnimationEnabled:function(){if(Hf.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,n){var i=this.ecModel,r=Cy.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});c(h_,o_),c(h_,Cy);var c_=function(){this.group=new tg,this.uid=fo("viewComponent")};c_.prototype={constructor:c_,init:function(){},render:function(){},dispose:function(){},filterForExposedEvent:null};var d_=c_.prototype;d_.updateView=d_.updateLayout=d_.updateVisual=function(){},fr(c_),mr(c_,{registerWhenExtend:!0});var f_=function(){var t=ar();return function(e){var n=t(e),i=e.pipelineContext,r=n.large,a=n.progressiveRender,o=n.large=i.large,s=n.progressiveRender=i.progressiveRender;return!!(r^o||a^s)&&"reset"}},p_=ar(),g_=f_();ol.prototype={type:"chart",init:function(){},render:function(){},highlight:function(t,e,n,i){ll(t.getData(),i,"emphasis")},downplay:function(t,e,n,i){ll(t.getData(),i,"normal")},remove:function(){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};var v_=ol.prototype;v_.updateView=v_.updateLayout=v_.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},fr(ol,["dispose"]),mr(ol,{registerWhenExtend:!0}),ol.markUpdateMethod=function(t,e){p_(t).updateMethod=e};var m_={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},y_="\x00__throttleOriginMethod",__="\x00__throttleRate",x_="\x00__throttleType",w_={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),i=(t.visualColorAccessPath||"itemStyle.color").split("."),r=t.get(i),a=!w(r)||r instanceof Bm?null:r;(!r||a)&&(r=t.getColorFromPalette(t.name,null,e.getSeriesCount())),n.setVisual("color",r);var o=(t.visualBorderColorAccessPath||"itemStyle.borderColor").split("."),s=t.get(o);if(n.setVisual("borderColor",s),!e.isSeriesFiltered(t)){a&&n.each(function(e){n.setItemVisual(e,"color",a(t.getDataParams(e)))});var l=function(t,e){var n=t.getItemModel(e),r=n.get(i,!0),a=n.get(o,!0);null!=r&&t.setItemVisual(e,"color",r),null!=a&&t.setItemVisual(e,"borderColor",a)};return{dataEach:n.hasItemOption?l:null}}}},b_={legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}},S_=function(t,e){function n(t,e){if("string"!=typeof t)return t;var n=t;return f(e,function(t,e){n=n.replace(new RegExp("\\{\\s*"+e+"\\s*\\}","g"),t)}),n}function i(t){var e=o.get(t);if(null==e){for(var n=t.split("."),i=b_.aria,r=0;r<n.length;++r)i=i[n[r]];return i}return e}function r(){var t=e.getModel("title").option;return t&&t.length&&(t=t[0]),t&&t.text}function a(t){return b_.series.typeNames[t]||"自定义图"}var o=e.getModel("aria");if(o.get("show")){if(o.get("description"))return void t.setAttribute("aria-label",o.get("description"));var s=0;e.eachSeries(function(){++s},this);var l,u=o.get("data.maxCount")||10,h=o.get("series.maxCount")||10,c=Math.min(s,h);if(!(1>s)){var d=r();l=d?n(i("general.withTitle"),{title:d}):i("general.withoutTitle");var p=[],g=s>1?"series.multiple.prefix":"series.single.prefix";l+=n(i(g),{seriesCount:s}),e.eachSeries(function(t,e){if(c>e){var r,o=t.get("name"),l="series."+(s>1?"multiple":"single")+".";r=i(o?l+"withName":l+"withoutName"),r=n(r,{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:a(t.subType)});var h=t.getData();window.data=h,r+=h.count()>u?n(i("data.partialData"),{displayCnt:u}):i("data.allData");for(var d=[],f=0;f<h.count();f++)if(u>f){var g=h.getName(f),v=Us(h,f);d.push(n(i(g?"data.withName":"data.withoutName"),{name:g,value:v}))}r+=d.join(i("data.separator.middle"))+i("data.separator.end"),p.push(r)}}),l+=p.join(i("series.multiple.separator.middle"))+i("series.multiple.separator.end"),t.setAttribute("aria-label",l)}}},M_=Math.PI,I_=function(t,e){e=e||{},s(e,{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var n=new Cm({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),i=new Lm({shape:{startAngle:-M_/2,endAngle:-M_/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),r=new Cm({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});i.animateShape(!0).when(1e3,{endAngle:3*M_/2}).start("circularInOut"),i.animateShape(!0).when(1e3,{startAngle:3*M_/2}).delay(300).start("circularInOut");var a=new tg;return a.add(i),a.add(r),a.add(n),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;i.setShape({cx:e,cy:a});var o=i.shape.r;r.setShape({x:e-o,y:a-o,width:2*o,height:2*o}),n.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a},T_=fl.prototype;T_.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each(function(t){var e=t.overallTask;e&&e.dirty()})},T_.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,r=!e&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex,a=r?n.step:null,o=i&&i.modDataCount,s=null!=o?Math.ceil(o/a):null;return{step:a,modBy:s,modDataCount:o}}},T_.getPipeline=function(t){return this._pipelineMap.get(t)},T_.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData(),r=i.count(),a=n.progressiveEnabled&&e.incrementalPrepareRender&&r>=n.threshold,o=t.get("large")&&r>=t.get("largeThreshold"),s="mod"===t.get("progressiveChunkMode")?r:null;t.pipelineContext=n.context={progressiveRender:a,modDataCount:s,large:o}},T_.restorePipelines=function(t){var e=this,n=e._pipelineMap=N();t.eachSeries(function(t){var i=t.getProgressive(),r=t.uid;n.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:i&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),Il(e,t,t.dataTask)})},T_.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.ecInstance.getModel(),n=this.api;f(this._allHandlers,function(i){var r=t.get(i.uid)||t.set(i.uid,[]);i.reset&&gl(this,i,r,e,n),i.overallReset&&vl(this,i,r,e,n)},this)},T_.prepareView=function(t,e,n,i){var r=t.renderTask,a=r.context;a.model=e,a.ecModel=n,a.api=i,r.__block=!t.incrementalPrepareRender,Il(this,e,r)},T_.performDataProcessorTasks=function(t,e){pl(this,this._dataProcessorHandlers,t,e,{block:!0})},T_.performVisualTasks=function(t,e,n){pl(this,this._visualHandlers,t,e,n)},T_.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},T_.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var C_=T_.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},D_=Sl(0);fl.wrapStageHandler=function(t,e){return w(t)&&(t={overallReset:t,seriesType:Tl(t)}),t.uid=fo("stageHandler"),e&&(t.visualType=e),t};var A_,k_={},P_={};Cl(k_,Fy),Cl(P_,_s),k_.eachSeriesByType=k_.eachRawSeriesByType=function(t){A_=t},k_.eachComponent=function(t){"series"===t.mainType&&t.subType&&(A_=t.subType)};var L_=["#37A2DA","#32C5E9","#67E0E3","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#E062AE","#E690D1","#e7bcf3","#9d96f5","#8378EA","#96BFFF"],O_={color:L_,colorLayer:[["#37A2DA","#ffd85c","#fd7b5f"],["#37A2DA","#67E0E3","#FFDB5C","#ff9f7f","#E062AE","#9d96f5"],["#37A2DA","#32C5E9","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#e7bcf3","#8378EA","#96BFFF"],L_]},B_="#eee",E_=function(){return{axisLine:{lineStyle:{color:B_}},axisTick:{lineStyle:{color:B_}},axisLabel:{textStyle:{color:B_}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:B_}}}},z_=["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78","#73a373","#73b9bc","#7289ab","#91ca8c","#f49f42"],R_={color:z_,backgroundColor:"#333",tooltip:{axisPointer:{lineStyle:{color:B_},crossStyle:{color:B_},label:{color:"#000"}}},legend:{textStyle:{color:B_}},textStyle:{color:B_},title:{textStyle:{color:B_}},toolbox:{iconStyle:{normal:{borderColor:B_}}},dataZoom:{textStyle:{color:B_}},visualMap:{textStyle:{color:B_}},timeline:{lineStyle:{color:B_},itemStyle:{normal:{color:z_[1]}},label:{normal:{textStyle:{color:B_}}},controlStyle:{normal:{color:B_,borderColor:B_}}},timeAxis:E_(),logAxis:E_(),valueAxis:E_(),categoryAxis:E_(),line:{symbol:"circle"},graph:{color:z_},gauge:{title:{textStyle:{color:B_}}},candlestick:{itemStyle:{normal:{color:"#FD1050",color0:"#0CF49B",borderColor:"#FD1050",borderColor0:"#0CF49B"}}}};R_.categoryAxis.splitLine.show=!1,Sy.extend({type:"dataset",defaultOption:{seriesLayoutBy:By,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){Jo(this)}}),c_.extend({type:"dataset"});var N_=$r.extend({type:"ellipse",shape:{cx:0,cy:0,rx:0,ry:0},buildPath:function(t,e){var n=.5522848,i=e.cx,r=e.cy,a=e.rx,o=e.ry,s=a*n,l=o*n;t.moveTo(i-a,r),t.bezierCurveTo(i-a,r-l,i-s,r-o,i,r-o),t.bezierCurveTo(i+s,r-o,i+a,r-l,i+a,r),t.bezierCurveTo(i+a,r+l,i+s,r+o,i,r+o),t.bezierCurveTo(i-s,r+o,i-a,r+l,i-a,r),t.closePath()}}),F_=/[\s,]+/;Al.prototype.parse=function(t,e){e=e||{};var n=Dl(t);if(!n)throw new Error("Illegal svg");var i=new tg;this._root=i;var r=n.getAttribute("viewBox")||"",a=parseFloat(n.getAttribute("width")||e.width),o=parseFloat(n.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(o)&&(o=null),Ol(n,i,null,!0);for(var s=n.firstChild;s;)this._parseNode(s,i),s=s.nextSibling;var l,u;if(r){var h=B(r).split(F_);h.length>=4&&(l={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(l&&null!=a&&null!=o&&(u=Rl(l,a,o),!e.ignoreViewBox)){var c=i;i=new tg,i.add(c),c.scale=u.scale.slice(),c.position=u.position.slice()}return e.ignoreRootClip||null==a||null==o||i.setClipPath(new Cm({shape:{x:0,y:0,width:a,height:o}})),{root:i,width:a,height:o,viewBoxRect:l,viewBoxTransform:u}},Al.prototype._parseNode=function(t,e){var n=t.nodeName.toLowerCase();"defs"===n?this._isDefine=!0:"text"===n&&(this._isText=!0);var i;if(this._isDefine){var r=H_[n];if(r){var a=r.call(this,t),o=t.getAttribute("id");o&&(this._defs[o]=a)}}else{var r=V_[n];r&&(i=r.call(this,t,e),e.add(i))}for(var s=t.firstChild;s;)1===s.nodeType&&this._parseNode(s,i),3===s.nodeType&&this._isText&&this._parseText(s,i),s=s.nextSibling;"defs"===n?this._isDefine=!1:"text"===n&&(this._isText=!1)},Al.prototype._parseText=function(t,e){if(1===t.nodeType){var n=t.getAttribute("dx")||0,i=t.getAttribute("dy")||0;this._textX+=parseFloat(n),this._textY+=parseFloat(i)}var r=new gm({style:{text:t.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});Pl(e,r),Ol(t,r,this._defs);var a=r.style.fontSize;a&&9>a&&(r.style.fontSize=9,r.scale=r.scale||[1,1],r.scale[0]*=a/9,r.scale[1]*=a/9);var o=r.getBoundingRect();return this._textX+=o.width,e.add(r),r};var V_={g:function(t,e){var n=new tg;return Pl(e,n),Ol(t,n,this._defs),n},rect:function(t,e){var n=new Cm;return Pl(e,n),Ol(t,n,this._defs),n.setShape({x:parseFloat(t.getAttribute("x")||0),y:parseFloat(t.getAttribute("y")||0),width:parseFloat(t.getAttribute("width")||0),height:parseFloat(t.getAttribute("height")||0)}),n},circle:function(t,e){var n=new vm;return Pl(e,n),Ol(t,n,this._defs),n.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),r:parseFloat(t.getAttribute("r")||0)}),n},line:function(t,e){var n=new Am;return Pl(e,n),Ol(t,n,this._defs),n.setShape({x1:parseFloat(t.getAttribute("x1")||0),y1:parseFloat(t.getAttribute("y1")||0),x2:parseFloat(t.getAttribute("x2")||0),y2:parseFloat(t.getAttribute("y2")||0)}),n},ellipse:function(t,e){var n=new N_;return Pl(e,n),Ol(t,n,this._defs),n.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),rx:parseFloat(t.getAttribute("rx")||0),ry:parseFloat(t.getAttribute("ry")||0)}),n},polygon:function(t,e){var n=t.getAttribute("points");n&&(n=Ll(n));var i=new Sm({shape:{points:n||[]}});return Pl(e,i),Ol(t,i,this._defs),i},polyline:function(t,e){var n=new $r;Pl(e,n),Ol(t,n,this._defs);var i=t.getAttribute("points");i&&(i=Ll(i));var r=new Mm({shape:{points:i||[]}});return r},image:function(t,e){var n=new Mi;return Pl(e,n),Ol(t,n,this._defs),n.setStyle({image:t.getAttribute("xlink:href"),x:t.getAttribute("x"),y:t.getAttribute("y"),width:t.getAttribute("width"),height:t.getAttribute("height")}),n},text:function(t,e){var n=t.getAttribute("x")||0,i=t.getAttribute("y")||0,r=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0;this._textX=parseFloat(n)+parseFloat(r),this._textY=parseFloat(i)+parseFloat(a);var o=new tg;return Pl(e,o),Ol(t,o,this._defs),o},tspan:function(t,e){var n=t.getAttribute("x"),i=t.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=i&&(this._textY=parseFloat(i));var r=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0,o=new tg;return Pl(e,o),Ol(t,o,this._defs),this._textX+=r,this._textY+=a,o},path:function(t,e){var n=t.getAttribute("d")||"",i=ea(n);return Pl(e,i),Ol(t,i,this._defs),i}},H_={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||0,10),n=parseInt(t.getAttribute("y1")||0,10),i=parseInt(t.getAttribute("x2")||10,10),r=parseInt(t.getAttribute("y2")||0,10),a=new Em(e,n,i,r);return kl(t,a),a},radialgradient:function(){}},G_={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-align":"textAlign","alignment-baseline":"textBaseline"},W_=/url\(\s*#(.*?)\)/,X_=/(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,Y_=/([^\s:;]+)\s*:\s*([^:;]+)/g,U_=N(),q_={registerMap:function(t,e,n){var i; +return x(e)?i=e:e.svg?i=[{type:"svg",source:e.svg,specialAreas:e.specialAreas}]:(e.geoJson&&!e.features&&(n=e.specialAreas,e=e.geoJson),i=[{type:"geoJSON",source:e,specialAreas:n}]),f(i,function(t){var e=t.type;"geoJson"===e&&(e=t.type="geoJSON");var n=j_[e];n(t)}),U_.set(t,i)},retrieveMap:function(t){return U_.get(t)}},j_={geoJSON:function(t){var e=t.source;t.geoJSON=b(e)?"undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")():e},svg:function(t){t.svgXML=Dl(t.source)}},Z_=O,K_=f,$_=w,Q_=S,J_=Sy.parseClassType,tx="4.6.0",ex={zrender:"4.2.0"},nx=1,ix=1e3,rx=800,ax=900,ox=5e3,sx=1e3,lx=1100,ux=2e3,hx=3e3,cx=3500,dx=4e3,fx=5e3,px={PROCESSOR:{FILTER:ix,SERIES_FILTER:rx,STATISTIC:ox},VISUAL:{LAYOUT:sx,PROGRESSIVE_LAYOUT:lx,GLOBAL:ux,CHART:hx,POST_CHART_LAYOUT:cx,COMPONENT:dx,BRUSH:fx}},gx="__flagInMainProcess",vx="__optionUpdated",mx=/^[a-zA-Z0-9_]+$/;Fl.prototype.on=Nl("on",!0),Fl.prototype.off=Nl("off",!0),Fl.prototype.one=Nl("one",!0),c(Fl,up);var yx=Vl.prototype;yx._onframe=function(){if(!this._disposed){var t=this._scheduler;if(this[vx]){var e=this[vx].silent;this[gx]=!0,Gl(this),_x.update.call(this),this[gx]=!1,this[vx]=!1,Ul.call(this,e),ql.call(this,e)}else if(t.unfinished){var n=nx,i=this._model,r=this._api;t.unfinished=!1;do{var a=+new Date;t.performSeriesTasks(i),t.performDataProcessorTasks(i),Xl(this,i),t.performVisualTasks(i),Jl(this,this._model,r,"remain"),n-=+new Date-a}while(n>0&&t.unfinished);t.unfinished||this._zr.flush()}}},yx.getDom=function(){return this._dom},yx.getZr=function(){return this._zr},yx.setOption=function(t,e,n){if(!this._disposed){var i;if(Q_(e)&&(n=e.lazyUpdate,i=e.silent,e=e.notMerge),this[gx]=!0,!this._model||e){var r=new ws(this._api),a=this._theme,o=this._model=new Fy;o.scheduler=this._scheduler,o.init(null,null,a,r)}this._model.setOption(t,Ix),n?(this[vx]={silent:i},this[gx]=!1):(Gl(this),_x.update.call(this),this._zr.flush(),this[vx]=!1,this[gx]=!1,Ul.call(this,i),ql.call(this,i))}},yx.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},yx.getModel=function(){return this._model},yx.getOption=function(){return this._model&&this._model.getOption()},yx.getWidth=function(){return this._zr.getWidth()},yx.getHeight=function(){return this._zr.getHeight()},yx.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},yx.getRenderedCanvas=function(t){if(Hf.canvasSupported){t=t||{},t.pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor");var e=this._zr;return e.painter.getRenderedCanvas(t)}},yx.getSvgDataUrl=function(){if(Hf.svgSupported){var t=this._zr,e=t.storage.getDisplayList();return f(e,function(t){t.stopAnimation(!0)}),t.painter.pathToDataUrl()}},yx.getDataURL=function(t){if(!this._disposed){t=t||{};var e=t.excludeComponents,n=this._model,i=[],r=this;K_(e,function(t){n.eachComponent({mainType:t},function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)})});var a="svg"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return K_(i,function(t){t.group.ignore=!1}),a}},yx.getConnectedDataURL=function(t){if(!this._disposed&&Hf.canvasSupported){var e=this.group,n=Math.min,r=Math.max,a=1/0;if(Px[e]){var o=a,s=a,l=-a,u=-a,h=[],c=t&&t.pixelRatio||1;f(kx,function(a){if(a.group===e){var c=a.getRenderedCanvas(i(t)),d=a.getDom().getBoundingClientRect();o=n(d.left,o),s=n(d.top,s),l=r(d.right,l),u=r(d.bottom,u),h.push({dom:c,left:d.left,top:d.top})}}),o*=c,s*=c,l*=c,u*=c;var d=l-o,p=u-s,g=Qf();g.width=d,g.height=p;var v=Yi(g);return t.connectedBackgroundColor&&v.add(new Cm({shape:{x:0,y:0,width:d,height:p},style:{fill:t.connectedBackgroundColor}})),K_(h,function(t){var e=new Mi({style:{x:t.left*c-o,y:t.top*c-s,image:t.dom}});v.add(e)}),v.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},yx.convertToPixel=_(Hl,"convertToPixel"),yx.convertFromPixel=_(Hl,"convertFromPixel"),yx.containPixel=function(t,e){if(!this._disposed){var n,i=this._model;return t=or(i,t),f(t,function(t,i){i.indexOf("Models")>=0&&f(t,function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n|=!!r.containPoint(e);else if("seriesModels"===i){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(n|=a.containPoint(e,t))}},this)},this),!!n}},yx.getVisual=function(t,e){var n=this._model;t=or(n,t,{defaultMainType:"series"});var i=t.seriesModel,r=i.getData(),a=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?r.indexOfRawIndex(t.dataIndex):null;return null!=a?r.getItemVisual(a,e):r.getVisual(e)},yx.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},yx.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var _x={prepareAndUpdate:function(t){Gl(this),_x.update.call(this,t)},update:function(t){var e=this._model,n=this._api,i=this._zr,r=this._coordSysMgr,a=this._scheduler;if(e){a.restoreData(e,t),a.performSeriesTasks(e),r.create(e,n),a.performDataProcessorTasks(e,t),Xl(this,e),r.update(e,n),Kl(e),a.performVisualTasks(e,t),$l(this,e,n,t);var o=e.get("backgroundColor")||"transparent";if(Hf.canvasSupported)i.setBackgroundColor(o);else{var s=Ke(o);o=on(s,"rgb"),0===s[3]&&(o="transparent")}tu(e,n)}},updateTransform:function(t){var e=this._model,n=this,i=this._api;if(e){var r=[];e.eachComponent(function(a,o){var s=n.getViewOfComponentModel(o);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(o,e,i,t);l&&l.update&&r.push(s)}else r.push(s)});var a=N();e.eachSeries(function(r){var o=n._chartsMap[r.__viewId];if(o.updateTransform){var s=o.updateTransform(r,e,i,t);s&&s.update&&a.set(r.uid,1)}else a.set(r.uid,1)}),Kl(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0,dirtyMap:a}),Jl(n,e,i,t,a),tu(e,this._api)}},updateView:function(t){var e=this._model;e&&(ol.markUpdateMethod(t,"updateView"),Kl(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),$l(this,this._model,this._api,t),tu(e,this._api))},updateVisual:function(t){_x.update.call(this,t)},updateLayout:function(t){_x.update.call(this,t)}};yx.resize=function(t){if(!this._disposed){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this[gx]=!0,n&&Gl(this),_x.update.call(this),this[gx]=!1,Ul.call(this,i),ql.call(this,i)}}},yx.showLoading=function(t,e){if(!this._disposed&&(Q_(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Ax[t])){var n=Ax[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},yx.hideLoading=function(){this._disposed||(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},yx.makeActionFromEvent=function(t){var e=o({},t);return e.type=Sx[t.type],e},yx.dispatchAction=function(t,e){if(!this._disposed&&(Q_(e)||(e={silent:!!e}),bx[t.type]&&this._model)){if(this[gx])return void this._pendingActions.push(t);Yl.call(this,t,e.silent),e.flush?this._zr.flush(!0):e.flush!==!1&&Hf.browser.weChat&&this._throttledZrFlush(),Ul.call(this,e.silent),ql.call(this,e.silent)}},yx.appendData=function(t){if(!this._disposed){var e=t.seriesIndex,n=this.getModel(),i=n.getSeriesByIndex(e);i.appendData(t),this._scheduler.unfinished=!0}},yx.on=Nl("on",!1),yx.off=Nl("off",!1),yx.one=Nl("one",!1);var xx=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];yx._initEvents=function(){K_(xx,function(t){var e=function(e){var n,i=this.getModel(),r=e.target,a="globalout"===t;if(a)n={};else if(r&&null!=r.dataIndex){var s=r.dataModel||i.getSeriesByIndex(r.seriesIndex);n=s&&s.getDataParams(r.dataIndex,r.dataType,r)||{}}else r&&r.eventData&&(n=o({},r.eventData));if(n){var l=n.componentType,u=n.componentIndex;("markLine"===l||"markPoint"===l||"markArea"===l)&&(l="series",u=n.seriesIndex);var h=l&&null!=u&&i.getComponent(l,u),c=h&&this["series"===h.mainType?"_chartsMap":"_componentsMap"][h.__viewId];n.event=e,n.type=t,this._ecEventProcessor.eventInfo={targetEl:r,packedEvent:n,model:h,view:c},this.trigger(t,n)}};e.zrEventfulCallAtLast=!0,this._zr.on(t,e,this)},this),K_(Sx,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},yx.isDisposed=function(){return this._disposed},yx.clear=function(){this._disposed||this.setOption({series:[]},!0)},yx.dispose=function(){if(!this._disposed){this._disposed=!0,lr(this.getDom(),Bx,"");var t=this._api,e=this._model;K_(this._componentsViews,function(n){n.dispose(e,t)}),K_(this._chartsViews,function(n){n.dispose(e,t)}),this._zr.dispose(),delete kx[this.id]}},c(Vl,up),au.prototype={constructor:au,normalizeQuery:function(t){var e={},n={},i={};if(b(t)){var r=J_(t);e.mainType=r.main||null,e.subType=r.sub||null}else{var a=["Index","Name","Id"],o={name:1,dataIndex:1,dataType:1};f(t,function(t,r){for(var s=!1,l=0;l<a.length;l++){var u=a[l],h=r.lastIndexOf(u);if(h>0&&h===r.length-u.length){var c=r.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}o.hasOwnProperty(r)&&(n[r]=t,s=!0),s||(i[r]=t)})}return{cptQuery:e,dataQuery:n,otherQuery:i}},filter:function(t,e){function n(t,e,n,i){return null==t[n]||e[i||n]===t[n]}var i=this.eventInfo;if(!i)return!0;var r=i.targetEl,a=i.packedEvent,o=i.model,s=i.view;if(!o||!s)return!0;var l=e.cptQuery,u=e.dataQuery;return n(l,o,"mainType")&&n(l,o,"subType")&&n(l,o,"index","componentIndex")&&n(l,o,"name")&&n(l,o,"id")&&n(u,a,"name")&&n(u,a,"dataIndex")&&n(u,a,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,e.otherQuery,r,a))},afterTrigger:function(){this.eventInfo=null}};var bx={},Sx={},Mx=[],Ix=[],Tx=[],Cx=[],Dx={},Ax={},kx={},Px={},Lx=new Date-0,Ox=new Date-0,Bx="_echarts_instance_",Ex=uu;wu(ux,w_),pu(Jy),gu(ax,t_),Su("default",I_),mu({type:"highlight",event:"highlight",update:"highlight"},V),mu({type:"downplay",event:"downplay",update:"downplay"},V),fu("light",O_),fu("dark",R_);var zx={};Lu.prototype={constructor:Lu,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t,e=this._old,n=this._new,i={},r={},a=[],o=[];for(Ou(e,i,a,"_oldKeyGetter",this),Ou(n,r,o,"_newKeyGetter",this),t=0;t<e.length;t++){var s=a[t],l=r[s];if(null!=l){var u=l.length;u?(1===u&&(r[s]=null),l=l.shift()):r[s]=null,this._update&&this._update(l,t)}else this._remove&&this._remove(t)}for(var t=0;t<o.length;t++){var s=o[t];if(r.hasOwnProperty(s)){var l=r[s];if(null==l)continue;if(l.length)for(var h=0,u=l.length;u>h;h++)this._add&&this._add(l[h]);else this._add&&this._add(l)}}}};var Rx=N(["tooltip","label","itemName","itemId","seriesName"]),Nx=S,Fx="undefined",Vx=-1,Hx="e\x00\x00",Gx={"float":typeof Float64Array===Fx?Array:Float64Array,"int":typeof Int32Array===Fx?Array:Int32Array,ordinal:Array,number:Array,time:Array},Wx=typeof Uint32Array===Fx?Array:Uint32Array,Xx=typeof Int32Array===Fx?Array:Int32Array,Yx=typeof Uint16Array===Fx?Array:Uint16Array,Ux=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_rawData","_chunkSize","_chunkCount","_dimValueGetter","_count","_rawCount","_nameDimIdx","_idDimIdx"],qx=["_extent","_approximateExtent","_rawExtent"],jx=function(t,e){t=t||["x","y"];for(var n={},i=[],r={},a=0;a<t.length;a++){var o=t[a];b(o)?o=new Nu({name:o}):o instanceof Nu||(o=new Nu(o));var s=o.name;o.type=o.type||"float",o.coordDim||(o.coordDim=s,o.coordDimIndex=0),o.otherDims=o.otherDims||{},i.push(s),n[s]=o,o.index=a,o.createInvertedIndices&&(r[s]=[])}this.dimensions=i,this._dimensionInfos=n,this.hostModel=e,this.dataType,this._indices=null,this._count=0,this._rawCount=0,this._storage={},this._nameList=[],this._idList=[],this._optionModels=[],this._visual={},this._layout={},this._itemVisuals=[],this.hasItemVisual={},this._itemLayouts=[],this._graphicEls=[],this._chunkSize=1e5,this._chunkCount=0,this._rawData,this._rawExtent={},this._extent={},this._approximateExtent={},this._dimensionsSummary=Bu(this),this._invertedIndicesMap=r,this._calculationInfo={},this.userOutput=this._dimensionsSummary.userOutput},Zx=jx.prototype;Zx.type="list",Zx.hasItemOption=!0,Zx.getDimension=function(t){return("number"==typeof t||!isNaN(t)&&!this._dimensionInfos.hasOwnProperty(t))&&(t=this.dimensions[t]),t},Zx.getDimensionInfo=function(t){return this._dimensionInfos[this.getDimension(t)]},Zx.getDimensionsOnCoord=function(){return this._dimensionsSummary.dataDimsOnCoord.slice()},Zx.mapDimension=function(t,e){var n=this._dimensionsSummary;if(null==e)return n.encodeFirstDimNotExtra[t];var i=n.encode[t];return e===!0?(i||[]).slice():i&&i[e]},Zx.initData=function(t,e,n){var i=Qo.isInstance(t)||d(t);i&&(t=new Fs(t,this.dimensions.length)),this._rawData=t,this._storage={},this._indices=null,this._nameList=e||[],this._idList=[],this._nameRepeatCount={},n||(this.hasItemOption=!1),this.defaultDimValueGetter=r_[this._rawData.getSource().sourceFormat],this._dimValueGetter=n=n||this.defaultDimValueGetter,this._dimValueGetterArrayRows=r_.arrayRows,this._rawExtent={},this._initDataFromProvider(0,t.count()),t.pure&&(this.hasItemOption=!1)},Zx.getProvider=function(){return this._rawData},Zx.appendData=function(t){var e=this._rawData,n=this.count();e.appendData(t);var i=e.count();e.persistent||(i+=n),this._initDataFromProvider(n,i)},Zx.appendValues=function(t,e){for(var n=this._chunkSize,i=this._storage,r=this.dimensions,a=r.length,o=this._rawExtent,s=this.count(),l=s+Math.max(t.length,e?e.length:0),u=this._chunkCount,h=0;a>h;h++){var c=r[h];o[c]||(o[c]=$u()),i[c]||(i[c]=[]),Gu(i,this._dimensionInfos[c],n,u,l),this._chunkCount=i[c].length}for(var d=new Array(a),f=s;l>f;f++){for(var p=f-s,g=Math.floor(f/n),v=f%n,m=0;a>m;m++){var c=r[m],y=this._dimValueGetterArrayRows(t[p]||d,c,p,m);i[c][g][v]=y;var _=o[c];y<_[0]&&(_[0]=y),y>_[1]&&(_[1]=y)}e&&(this._nameList[f]=e[p])}this._rawCount=this._count=l,this._extent={},Wu(this)},Zx._initDataFromProvider=function(t,e){if(!(t>=e)){for(var n,i=this._chunkSize,r=this._rawData,a=this._storage,o=this.dimensions,s=o.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;s>p;p++){var g=o[p];c[g]||(c[g]=$u());var v=l[g];0===v.otherDims.itemName&&(n=this._nameDimIdx=p),0===v.otherDims.itemId&&(this._idDimIdx=p),a[g]||(a[g]=[]),Gu(a,v,i,f,e),this._chunkCount=a[g].length}for(var m=new Array(s),y=t;e>y;y++){m=r.getItem(y,m);for(var _=Math.floor(y/i),x=y%i,w=0;s>w;w++){var g=o[w],b=a[g][_],S=this._dimValueGetter(m,g,y,w);b[x]=S;var M=c[g];S<M[0]&&(M[0]=S),S>M[1]&&(M[1]=S)}if(!r.pure){var I=u[y];if(m&&null==I)if(null!=m.name)u[y]=I=m.name;else if(null!=n){var T=o[n],C=a[T][_];if(C){I=C[x];var D=l[T].ordinalMeta;D&&D.categories.length&&(I=D.categories[I])}}var A=null==m?null:m.id;null==A&&null!=I&&(d[I]=d[I]||0,A=I,d[I]>0&&(A+="__ec__"+d[I]),d[I]++),null!=A&&(h[y]=A)}}!r.persistent&&r.clean&&r.clean(),this._rawCount=this._count=e,this._extent={},Wu(this)}},Zx.count=function(){return this._count},Zx.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,i=this._count;if(n===Array){t=new n(i);for(var r=0;i>r;r++)t[r]=e[r]}else t=new n(e.buffer,0,i)}else for(var n=Fu(this),t=new n(this.count()),r=0;r<t.length;r++)t[r]=r;return t},Zx.get=function(t,e){if(!(e>=0&&e<this._count))return 0/0;var n=this._storage;if(!n[t])return 0/0;e=this.getRawIndex(e);var i=Math.floor(e/this._chunkSize),r=e%this._chunkSize,a=n[t][i],o=a[r];return o},Zx.getByRawIndex=function(t,e){if(!(e>=0&&e<this._rawCount))return 0/0;var n=this._storage[t];if(!n)return 0/0;var i=Math.floor(e/this._chunkSize),r=e%this._chunkSize,a=n[i];return a[r]},Zx._getFast=function(t,e){var n=Math.floor(e/this._chunkSize),i=e%this._chunkSize,r=this._storage[t][n];return r[i]},Zx.getValues=function(t,e){var n=[];x(t)||(e=t,t=this.dimensions);for(var i=0,r=t.length;r>i;i++)n.push(this.get(t[i],e));return n},Zx.hasValue=function(t){for(var e=this._dimensionsSummary.dataDimsOnCoord,n=0,i=e.length;i>n;n++)if(isNaN(this.get(e[n],t)))return!1;return!0},Zx.getDataExtent=function(t){t=this.getDimension(t);var e=this._storage[t],n=$u();if(!e)return n;var i,r=this.count(),a=!this._indices;if(a)return this._rawExtent[t].slice();if(i=this._extent[t])return i.slice();i=n;for(var o=i[0],s=i[1],l=0;r>l;l++){var u=this._getFast(t,this.getRawIndex(l));o>u&&(o=u),u>s&&(s=u)}return i=[o,s],this._extent[t]=i,i},Zx.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},Zx.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},Zx.getCalculationInfo=function(t){return this._calculationInfo[t]},Zx.setCalculationInfo=function(t,e){Nx(t)?o(this._calculationInfo,t):this._calculationInfo[t]=e},Zx.getSum=function(t){var e=this._storage[t],n=0;if(e)for(var i=0,r=this.count();r>i;i++){var a=this.get(t,i);isNaN(a)||(n+=a)}return n},Zx.getMedian=function(t){var e=[];this.each(t,function(t){isNaN(t)||e.push(t)});var n=[].concat(e).sort(function(t,e){return t-e}),i=this.count();return 0===i?0:i%2===1?n[(i-1)/2]:(n[i/2]+n[i/2-1])/2},Zx.rawIndexOf=function(t,e){var n=t&&this._invertedIndicesMap[t],i=n[e];return null==i||isNaN(i)?Vx:i},Zx.indexOfName=function(t){for(var e=0,n=this.count();n>e;e++)if(this.getName(e)===t)return e;return-1},Zx.indexOfRawIndex=function(t){if(t>=this._rawCount||0>t)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&n<this._count&&n===t)return t;for(var i=0,r=this._count-1;r>=i;){var a=(i+r)/2|0;if(e[a]<t)i=a+1;else{if(!(e[a]>t))return a;r=a-1}}return-1},Zx.indicesOfNearest=function(t,e,n){var i=this._storage,r=i[t],a=[];if(!r)return a;null==n&&(n=1/0);for(var o=1/0,s=-1,l=0,u=0,h=this.count();h>u;u++){var c=e-this.get(t,u),d=Math.abs(c);n>=d&&((o>d||d===o&&c>=0&&0>s)&&(o=d,s=c,l=0),c===s&&(a[l++]=u))}return a.length=l,a},Zx.getRawIndex=Yu,Zx.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],n=0;n<this.dimensions.length;n++){var i=this.dimensions[n];e.push(this.get(i,t))}return e},Zx.getName=function(t){var e=this.getRawIndex(t);return this._nameList[e]||Xu(this,this._nameDimIdx,e)||""},Zx.getId=function(t){return qu(this,this.getRawIndex(t))},Zx.each=function(t,e,n,i){if(this._count){"function"==typeof t&&(i=n,n=e,e=t,t=[]),n=n||i||this,t=p(ju(t),this.getDimension,this);for(var r=t.length,a=0;a<this.count();a++)switch(r){case 0:e.call(n,a);break;case 1:e.call(n,this.get(t[0],a),a);break;case 2:e.call(n,this.get(t[0],a),this.get(t[1],a),a);break;default:for(var o=0,s=[];r>o;o++)s[o]=this.get(t[o],a);s[o]=a,e.apply(n,s)}}},Zx.filterSelf=function(t,e,n,i){if(this._count){"function"==typeof t&&(i=n,n=e,e=t,t=[]),n=n||i||this,t=p(ju(t),this.getDimension,this);for(var r=this.count(),a=Fu(this),o=new a(r),s=[],l=t.length,u=0,h=t[0],c=0;r>c;c++){var d,f=this.getRawIndex(c);if(0===l)d=e.call(n,c);else if(1===l){var g=this._getFast(h,f);d=e.call(n,g,c)}else{for(var v=0;l>v;v++)s[v]=this._getFast(h,f);s[v]=c,d=e.apply(n,s)}d&&(o[u++]=f)}return r>u&&(this._indices=o),this._count=u,this._extent={},this.getRawIndex=this._indices?Uu:Yu,this}},Zx.selectRange=function(t){if(this._count){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(n);var i=e.length;if(i){var r=this.count(),a=Fu(this),o=new a(r),s=0,l=e[0],u=t[l][0],h=t[l][1],c=!1;if(!this._indices){var d=0;if(1===i){for(var f=this._storage[e[0]],p=0;p<this._chunkCount;p++)for(var g=f[p],v=Math.min(this._count-p*this._chunkSize,this._chunkSize),m=0;v>m;m++){var y=g[m];(y>=u&&h>=y||isNaN(y))&&(o[s++]=d),d++}c=!0}else if(2===i){for(var f=this._storage[l],_=this._storage[e[1]],x=t[e[1]][0],w=t[e[1]][1],p=0;p<this._chunkCount;p++)for(var g=f[p],b=_[p],v=Math.min(this._count-p*this._chunkSize,this._chunkSize),m=0;v>m;m++){var y=g[m],S=b[m];(y>=u&&h>=y||isNaN(y))&&(S>=x&&w>=S||isNaN(S))&&(o[s++]=d),d++}c=!0}}if(!c)if(1===i)for(var m=0;r>m;m++){var M=this.getRawIndex(m),y=this._getFast(l,M);(y>=u&&h>=y||isNaN(y))&&(o[s++]=M)}else for(var m=0;r>m;m++){for(var I=!0,M=this.getRawIndex(m),p=0;i>p;p++){var T=e[p],y=this._getFast(n,M);(y<t[T][0]||y>t[T][1])&&(I=!1)}I&&(o[s++]=this.getRawIndex(m))}return r>s&&(this._indices=o),this._count=s,this._extent={},this.getRawIndex=this._indices?Uu:Yu,this}}},Zx.mapArray=function(t,e,n,i){"function"==typeof t&&(i=n,n=e,e=t,t=[]),n=n||i||this;var r=[];return this.each(t,function(){r.push(e&&e.apply(this,arguments))},n),r},Zx.map=function(t,e,n,i){n=n||i||this,t=p(ju(t),this.getDimension,this);var r=Zu(this,t);r._indices=this._indices,r.getRawIndex=r._indices?Uu:Yu;for(var a=r._storage,o=[],s=this._chunkSize,l=t.length,u=this.count(),h=[],c=r._rawExtent,d=0;u>d;d++){for(var f=0;l>f;f++)h[f]=this.get(t[f],d);h[l]=d;var g=e&&e.apply(n,h);if(null!=g){"object"!=typeof g&&(o[0]=g,g=o);for(var v=this.getRawIndex(d),m=Math.floor(v/s),y=v%s,_=0;_<g.length;_++){var x=t[_],w=g[_],b=c[x],S=a[x];S&&(S[m][y]=w),w<b[0]&&(b[0]=w),w>b[1]&&(b[1]=w)}}}return r},Zx.downSample=function(t,e,n,i){for(var r=Zu(this,[t]),a=r._storage,o=[],s=Math.floor(1/e),l=a[t],u=this.count(),h=this._chunkSize,c=r._rawExtent[t],d=new(Fu(this))(u),f=0,p=0;u>p;p+=s){s>u-p&&(s=u-p,o.length=s);for(var g=0;s>g;g++){var v=this.getRawIndex(p+g),m=Math.floor(v/h),y=v%h;o[g]=l[m][y]}var _=n(o),x=this.getRawIndex(Math.min(p+i(o,_)||0,u-1)),w=Math.floor(x/h),b=x%h;l[w][b]=_,_<c[0]&&(c[0]=_),_>c[1]&&(c[1]=_),d[f++]=x}return r._count=f,r._indices=d,r.getRawIndex=Uu,r},Zx.getItemModel=function(t){var e=this.hostModel;return new uo(this.getRawDataItem(t),e,e&&e.ecModel)},Zx.diff=function(t){var e=this;return new Lu(t?t.getIndices():[],this.getIndices(),function(e){return qu(t,e)},function(t){return qu(e,t)})},Zx.getVisual=function(t){var e=this._visual;return e&&e[t]},Zx.setVisual=function(t,e){if(Nx(t))for(var n in t)t.hasOwnProperty(n)&&this.setVisual(n,t[n]);else this._visual=this._visual||{},this._visual[t]=e},Zx.setLayout=function(t,e){if(Nx(t))for(var n in t)t.hasOwnProperty(n)&&this.setLayout(n,t[n]);else this._layout[t]=e},Zx.getLayout=function(t){return this._layout[t]},Zx.getItemLayout=function(t){return this._itemLayouts[t]},Zx.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?o(this._itemLayouts[t]||{},e):e},Zx.clearItemLayouts=function(){this._itemLayouts.length=0},Zx.getItemVisual=function(t,e,n){var i=this._itemVisuals[t],r=i&&i[e];return null!=r||n?r:this.getVisual(e)},Zx.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{},r=this.hasItemVisual;if(this._itemVisuals[t]=i,Nx(e))for(var a in e)e.hasOwnProperty(a)&&(i[a]=e[a],r[a]=!0);else i[e]=n,r[e]=!0},Zx.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};var Kx=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};Zx.setItemGraphicEl=function(t,e){var n=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=n&&n.seriesIndex,"group"===e.type&&e.traverse(Kx,e)),this._graphicEls[t]=e},Zx.getItemGraphicEl=function(t){return this._graphicEls[t]},Zx.eachItemGraphicEl=function(t,e){f(this._graphicEls,function(n,i){n&&t&&t.call(e,n,i)})},Zx.cloneShallow=function(t){if(!t){var e=p(this.dimensions,this.getDimensionInfo,this);t=new jx(e,this.hostModel)}if(t._storage=this._storage,Hu(t,this),this._indices){var n=this._indices.constructor;t._indices=new n(this._indices)}else t._indices=null;return t.getRawIndex=t._indices?Uu:Yu,t},Zx.wrapMethod=function(t,e){var n=this[t];"function"==typeof n&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(P(arguments)))})},Zx.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],Zx.CHANGABLE_METHODS=["filterSelf","selectRange"];var $x=function(t,e){return e=e||{},Qu(e.coordDimensions||[],t,{dimsDef:e.dimensionsDefine||t.dimensionsDefine,encodeDef:e.encodeDefine||t.encodeDefine,dimCount:e.dimensionsCount,encodeDefaulter:e.encodeDefaulter,generateCoord:e.generateCoord,generateCoordCount:e.generateCoordCount})},Qx={cartesian2d:function(t,e,n,i){var r=t.getReferringComponents("xAxis")[0],a=t.getReferringComponents("yAxis")[0];e.coordSysDims=["x","y"],n.set("x",r),n.set("y",a),ih(r)&&(i.set("x",r),e.firstCategoryDimIndex=0),ih(a)&&(i.set("y",a),null==e.firstCategoryDimIndex&(e.firstCategoryDimIndex=1))},singleAxis:function(t,e,n,i){var r=t.getReferringComponents("singleAxis")[0];e.coordSysDims=["single"],n.set("single",r),ih(r)&&(i.set("single",r),e.firstCategoryDimIndex=0)},polar:function(t,e,n,i){var r=t.getReferringComponents("polar")[0],a=r.findAxisModel("radiusAxis"),o=r.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],n.set("radius",a),n.set("angle",o),ih(a)&&(i.set("radius",a),e.firstCategoryDimIndex=0),ih(o)&&(i.set("angle",o),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},geo:function(t,e){e.coordSysDims=["lng","lat"]},parallel:function(t,e,n,i){var r=t.ecModel,a=r.getComponent("parallel",t.get("parallelIndex")),o=e.coordSysDims=a.dimensions.slice();f(a.parallelAxisIndex,function(t,a){var s=r.getComponent("parallelAxis",t),l=o[a];n.set(l,s),ih(s)&&null==e.firstCategoryDimIndex&&(i.set(l,s),e.firstCategoryDimIndex=a)})}};hh.prototype.parse=function(t){return t},hh.prototype.getSetting=function(t){return this._setting[t]},hh.prototype.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},hh.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},hh.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},hh.prototype.unionExtent=function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1])},hh.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},hh.prototype.getExtent=function(){return this._extent.slice()},hh.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},hh.prototype.isBlank=function(){return this._isBlank},hh.prototype.setBlank=function(t){this._isBlank=t},hh.prototype.getLabel=null,fr(hh),mr(hh,{registerWhenExtend:!0}),ch.createByAxisModel=function(t){var e=t.option,n=e.data,i=n&&p(n,fh);return new ch({categories:i,needCollect:!i,deduplication:e.dedplication!==!1})};var Jx=ch.prototype;Jx.getOrdinal=function(t){return dh(this).get(t)},Jx.parseAndCollect=function(t){var e,n=this._needCollect;if("string"!=typeof t&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var i=dh(this);return e=i.get(t),null==e&&(n?(e=this.categories.length,this.categories[e]=t,i.set(t,e)):e=0/0),e};var tw=hh.prototype,ew=hh.extend({type:"ordinal",init:function(t,e){(!t||x(t))&&(t=new ch({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),tw.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return tw.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(tw.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push(n),n++;return t},getLabel:function(t){return this.isBlank()?void 0:this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:V,niceExtent:V});ew.create=function(){return new ew};var nw=_o,iw=_o,rw=hh.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1]),rw.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=gh(t)},getTicks:function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,a=[];if(!e)return a;var o=1e4;n[0]<i[0]&&a.push(t?iw(i[0]-e):n[0]);for(var s=i[0];s<=i[1]&&(a.push(s),s=iw(s+e,r),s!==a[a.length-1]);)if(a.length>o)return[];var l=a.length?a[a.length-1]:i[1];return n[1]>l&&a.push(t?l+e:n[1]),a},getMinorTicks:function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;r<e.length;r++){for(var a=e[r],o=e[r-1],s=0,l=[],u=a-o,h=u/t;t-1>s;){var c=_o(o+(s+1)*h);c>i[0]&&c<i[1]&&l.push(c),s++}n.push(l)}return n},getLabel:function(t,e){if(null==t)return"";var n=e&&e.precision;return null==n?n=bo(t)||0:"auto"===n&&(n=this._intervalPrecision),t=iw(t,n,!0),Bo(t)},niceTicks:function(t,e,n){t=t||5;var i=this._extent,r=i[1]-i[0];if(isFinite(r)){0>r&&(r=-r,i.reverse());var a=ph(i,t,e,n);this._intervalPrecision=a.intervalPrecision,this._interval=a.interval,this._niceExtent=a.niceTickExtent}},niceExtent:function(t){var e=this._extent;if(e[0]===e[1])if(0!==e[0]){var n=e[0];t.fixMax?e[0]-=n/2:(e[1]+=n/2,e[0]-=n/2)}else e[1]=1;var i=e[1]-e[0];isFinite(i)||(e[0]=0,e[1]=1),this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var r=this._interval;t.fixMin||(e[0]=iw(Math.floor(e[0]/r)*r)),t.fixMax||(e[1]=iw(Math.ceil(e[1]/r)*r))}});rw.create=function(){return new rw};var aw="__ec_stack_",ow=.5,sw="undefined"!=typeof Float32Array?Float32Array:Array,lw={seriesType:"bar",plan:f_(),reset:function(t){function e(t,e){for(var n,c=t.count,d=new sw(2*c),f=new sw(c),p=[],g=[],v=0,m=0;null!=(n=t.next());)g[u]=e.get(o,n),g[1-u]=e.get(s,n),p=i.dataToPoint(g,null,p),d[v++]=p[0],d[v++]=p[1],f[m++]=n;e.setLayout({largePoints:d,largeDataIndices:f,barWidth:h,valueAxisStart:Dh(r,a,!1),valueAxisHorizontal:l})}if(Th(t)&&Ch(t)){var n=t.getData(),i=t.coordinateSystem,r=i.getBaseAxis(),a=i.getOtherAxis(r),o=n.mapDimension(a.dim),s=n.mapDimension(r.dim),l=a.isHorizontal(),u=l?0:1,h=Mh(bh([t]),r,t).width;return h>ow||(h=ow),{progress:e}}}},uw=rw.prototype,hw=Math.ceil,cw=Math.floor,dw=1e3,fw=60*dw,pw=60*fw,gw=24*pw,vw=function(t,e,n,i){for(;i>n;){var r=n+i>>>1;t[r][1]<e?n=r+1:i=r}return n},mw=rw.extend({type:"time",getLabel:function(t){var e=this._stepLvl,n=new Date(t);return Ho(e[0],n,this.getSetting("useUTC"))},niceExtent:function(t){var e=this._extent;if(e[0]===e[1]&&(e[0]-=gw,e[1]+=gw),e[1]===-1/0&&1/0===e[0]){var n=new Date;e[1]=+new Date(n.getFullYear(),n.getMonth(),n.getDate()),e[0]=e[1]-gw}this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var i=this._interval;t.fixMin||(e[0]=_o(cw(e[0]/i)*i)),t.fixMax||(e[1]=_o(hw(e[1]/i)*i))},niceTicks:function(t,e,n){t=t||10;var i=this._extent,r=i[1]-i[0],a=r/t;null!=e&&e>a&&(a=e),null!=n&&a>n&&(a=n);var o=yw.length,s=vw(yw,a,0,o),l=yw[Math.min(s,o-1)],u=l[1];if("year"===l[0]){var h=r/u,c=ko(h/t,!0);u*=c}var d=this.getSetting("useUTC")?0:60*new Date(+i[0]||+i[1]).getTimezoneOffset()*1e3,f=[Math.round(hw((i[0]-d)/u)*u+d),Math.round(cw((i[1]-d)/u)*u+d)];mh(f,i),this._stepLvl=l,this._interval=u,this._niceExtent=f},parse:function(t){return+Co(t)}});f(["contain","normalize"],function(t){mw.prototype[t]=function(e){return uw[t].call(this,this.parse(e))}});var yw=[["hh:mm:ss",dw],["hh:mm:ss",5*dw],["hh:mm:ss",10*dw],["hh:mm:ss",15*dw],["hh:mm:ss",30*dw],["hh:mm\nMM-dd",fw],["hh:mm\nMM-dd",5*fw],["hh:mm\nMM-dd",10*fw],["hh:mm\nMM-dd",15*fw],["hh:mm\nMM-dd",30*fw],["hh:mm\nMM-dd",pw],["hh:mm\nMM-dd",2*pw],["hh:mm\nMM-dd",6*pw],["hh:mm\nMM-dd",12*pw],["MM-dd\nyyyy",gw],["MM-dd\nyyyy",2*gw],["MM-dd\nyyyy",3*gw],["MM-dd\nyyyy",4*gw],["MM-dd\nyyyy",5*gw],["MM-dd\nyyyy",6*gw],["week",7*gw],["MM-dd\nyyyy",10*gw],["week",14*gw],["week",21*gw],["month",31*gw],["week",42*gw],["month",62*gw],["week",70*gw],["quarter",95*gw],["month",31*gw*4],["month",31*gw*5],["half-year",380*gw/2],["month",31*gw*8],["month",31*gw*10],["year",380*gw]];mw.create=function(t){return new mw({useUTC:t.ecModel.get("useUTC")})};var _w=hh.prototype,xw=rw.prototype,ww=bo,bw=_o,Sw=Math.floor,Mw=Math.ceil,Iw=Math.pow,Tw=Math.log,Cw=hh.extend({type:"log",base:10,$constructor:function(){hh.apply(this,arguments),this._originalScale=new rw +},getTicks:function(t){var e=this._originalScale,n=this._extent,i=e.getExtent();return p(xw.getTicks.call(this,t),function(t){var r=_o(Iw(this.base,t));return r=t===n[0]&&e.__fixMin?Ah(r,i[0]):r,r=t===n[1]&&e.__fixMax?Ah(r,i[1]):r},this)},getMinorTicks:xw.getMinorTicks,getLabel:xw.getLabel,scale:function(t){return t=_w.scale.call(this,t),Iw(this.base,t)},setExtent:function(t,e){var n=this.base;t=Tw(t)/Tw(n),e=Tw(e)/Tw(n),xw.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=_w.getExtent.call(this);e[0]=Iw(t,e[0]),e[1]=Iw(t,e[1]);var n=this._originalScale,i=n.getExtent();return n.__fixMin&&(e[0]=Ah(e[0],i[0])),n.__fixMax&&(e[1]=Ah(e[1],i[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=Tw(t[0])/Tw(e),t[1]=Tw(t[1])/Tw(e),_w.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},niceTicks:function(t){t=t||10;var e=this._extent,n=e[1]-e[0];if(!(1/0===n||0>=n)){var i=Do(n),r=t/n*i;for(.5>=r&&(i*=10);!isNaN(i)&&Math.abs(i)<1&&Math.abs(i)>0;)i*=10;var a=[_o(Mw(e[0]/i)*i),_o(Sw(e[1]/i)*i)];this._interval=i,this._niceExtent=a}},niceExtent:function(t){xw.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});f(["contain","normalize"],function(t){Cw.prototype[t]=function(e){return e=Tw(e)/Tw(this.base),_w[t].call(this,e)}}),Cw.create=function(){return new Cw};var Dw={getMin:function(t){var e=this.option,n=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=n&&"dataMin"!==n&&"function"!=typeof n&&!C(n)&&(n=this.axis.scale.parse(n)),n},getMax:function(t){var e=this.option,n=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=n&&"dataMax"!==n&&"function"!=typeof n&&!C(n)&&(n=this.axis.scale.parse(n)),n},getNeedCrossZero:function(){var t=this.option;return null!=t.rangeStart||null!=t.rangeEnd?!1:!t.scale},getCoordSysModel:V,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},Aw=ca({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=e.width/2,a=e.height/2;t.moveTo(n,i-a),t.lineTo(n+r,i+a),t.lineTo(n-r,i+a),t.closePath()}}),kw=ca({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=e.width/2,a=e.height/2;t.moveTo(n,i-a),t.lineTo(n+r,i),t.lineTo(n,i+a),t.lineTo(n-r,i),t.closePath()}}),Pw=ca({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var n=e.x,i=e.y,r=e.width/5*3,a=Math.max(r,e.height),o=r/2,s=o*o/(a-o),l=i-a+o+s,u=Math.asin(s/o),h=Math.cos(u)*o,c=Math.sin(u),d=Math.cos(u),f=.6*o,p=.7*o;t.moveTo(n-h,l+s),t.arc(n,l,o,Math.PI-u,2*Math.PI+u),t.bezierCurveTo(n+h-c*f,l+s+d*f,n,i-p,n,i),t.bezierCurveTo(n,i-p,n-h+c*f,l+s+d*f,n-h,l+s),t.closePath()}}),Lw=ca({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var n=e.height,i=e.width,r=e.x,a=e.y,o=i/3*2;t.moveTo(r,a),t.lineTo(r+o,a+n),t.lineTo(r,a+n/4*3),t.lineTo(r-o,a+n),t.lineTo(r,a),t.closePath()}}),Ow={line:Am,rect:Cm,roundRect:Cm,square:Cm,circle:vm,diamond:kw,pin:Pw,arrow:Lw,triangle:Aw},Bw={line:function(t,e,n,i,r){r.x1=t,r.y1=e+i/2,r.x2=t+n,r.y2=e+i/2},rect:function(t,e,n,i,r){r.x=t,r.y=e,r.width=n,r.height=i},roundRect:function(t,e,n,i,r){r.x=t,r.y=e,r.width=n,r.height=i,r.r=Math.min(n,i)/4},square:function(t,e,n,i,r){var a=Math.min(n,i);r.x=t,r.y=e,r.width=a,r.height=a},circle:function(t,e,n,i,r){r.cx=t+n/2,r.cy=e+i/2,r.r=Math.min(n,i)/2},diamond:function(t,e,n,i,r){r.cx=t+n/2,r.cy=e+i/2,r.width=n,r.height=i},pin:function(t,e,n,i,r){r.x=t+n/2,r.y=e+i/2,r.width=n,r.height=i},arrow:function(t,e,n,i,r){r.x=t+n/2,r.y=e+i/2,r.width=n,r.height=i},triangle:function(t,e,n,i,r){r.cx=t+n/2,r.cy=e+i/2,r.width=n,r.height=i}},Ew={};f(Ow,function(t,e){Ew[e]=new t});var zw=ca({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},calculateTextPosition:function(t,e,n){var i=qn(t,e,n),r=this.shape;return r&&"pin"===r.symbolType&&"inside"===e.textPosition&&(i.y=n.y+.4*n.height),i},buildPath:function(t,e,n){var i=e.symbolType;if("none"!==i){var r=Ew[i];r||(i="rect",r=Ew[i]),Bw[i](e.x,e.y,e.width,e.height,r.shape),r.buildPath(t,r.shape,n)}}}),Rw={isDimensionStacked:ah,enableDataStack:rh,getStackedDimension:oh},Nw=(Object.freeze||Object)({createList:Wh,getLayoutRect:Uo,dataStack:Rw,createScale:Xh,mixinAxisModelCommonMethods:Yh,completeDimensions:Qu,createDimensions:$x,createSymbol:Gh}),Fw=1e-8;jh.prototype={constructor:jh,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,n=[e,e],i=[-e,-e],r=[],a=[],o=this.geometries,s=0;s<o.length;s++)if("polygon"===o[s].type){var l=o[s].exterior;Lr(l,r,a),oe(n,n,r),se(i,i,a)}return 0===s&&(n[0]=n[1]=i[0]=i[1]=0),this._rect=new Sn(n[0],n[1],i[0]-n[0],i[1]-n[1])},contain:function(t){var e=this.getBoundingRect(),n=this.geometries;if(!e.contain(t[0],t[1]))return!1;t:for(var i=0,r=n.length;r>i;i++)if("polygon"===n[i].type){var a=n[i].exterior,o=n[i].interiors;if(qh(a,t[0],t[1])){for(var s=0;s<(o?o.length:0);s++)if(qh(o[s]))continue t;return!0}}return!1},transformTo:function(t,e,n,i){var r=this.getBoundingRect(),a=r.width/r.height;n?i||(i=n/a):n=a*i;for(var o=new Sn(t,e,n,i),s=r.calculateTransform(o),l=this.geometries,u=0;u<l.length;u++)if("polygon"===l[u].type){for(var h=l[u].exterior,c=l[u].interiors,d=0;d<h.length;d++)ae(h[d],h[d],s);for(var f=0;f<(c?c.length:0);f++)for(var d=0;d<c[f].length;d++)ae(c[f][d],c[f][d],s)}r=this._rect,r.copy(o),this.center=[r.x+r.width/2,r.y+r.height/2]},cloneShallow:function(t){null==t&&(t=this.name);var e=new jh(t,this.geometries,this.center);return e._rect=this._rect,e.transformTo=null,e}};var Vw=function(t){return Zh(t),p(v(t.features,function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0}),function(t){var e=t.properties,n=t.geometry,i=n.coordinates,r=[];"Polygon"===n.type&&r.push({type:"polygon",exterior:i[0],interiors:i.slice(1)}),"MultiPolygon"===n.type&&f(i,function(t){t[0]&&r.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})});var a=new jh(e.name,r,e.cp);return a.properties=e,a})},Hw=ar(),Gw=[0,1],Ww=function(t,e,n){this.dim=t,this.scale=e,this._extent=n||[0,0],this.inverse=!1,this.onBand=!1};Ww.prototype={constructor:Ww,contain:function(t){var e=this._extent,n=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return t>=n&&i>=t},containData:function(t){return this.scale.contain(t)},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return So(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var n=this._extent;n[0]=t,n[1]=e},dataToCoord:function(t,e){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&"ordinal"===i.type&&(n=n.slice(),cc(n,i.count())),mo(t,Gw,n,e)},coordToData:function(t,e){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&(n=n.slice(),cc(n,i.count()));var r=mo(t,n,Gw,e);return this.scale.scale(r)},pointToData:function(){},getTicksCoords:function(t){t=t||{};var e=t.tickModel||this.getTickModel(),n=Qh(this,e),i=n.ticks,r=p(i,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this),a=e.get("alignWithLabel");return dc(this,r,a,t.clamp),r},getMinorTicksCoords:function(){if("ordinal"===this.scale.type)return[];var t=this.model.getModel("minorTick"),e=t.get("splitNumber");e>0&&100>e||(e=5);var n=this.scale.getMinorTicks(e),i=p(n,function(t){return p(t,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this)},this);return i},getViewLabels:function(){return $h(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return sc(this)}};var Xw=Vw,Yw={};f(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],function(t){Yw[t]=ep[t]});var Uw={};f(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","registerShape","getShapeClass","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],function(t){Uw[t]=Qm[t]});var qw=function(t){this._axes={},this._dimList=[],this.name=t||""};qw.prototype={constructor:qw,type:"cartesian",getAxis:function(t){return this._axes[t]},getAxes:function(){return p(this._dimList,fc,this)},getAxesByScale:function(t){return t=t.toLowerCase(),v(this.getAxes(),function(e){return e.scale.type===t})},addAxis:function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},dataToCoord:function(t){return this._dataCoordConvert(t,"dataToCoord")},coordToData:function(t){return this._dataCoordConvert(t,"coordToData")},_dataCoordConvert:function(t,e){for(var n=this._dimList,i=t instanceof Array?[]:{},r=0;r<n.length;r++){var a=n[r],o=this._axes[a];i[a]=o[e](t[a])}return i}},pc.prototype={constructor:pc,type:"cartesian2d",dimensions:["x","y"],getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},containPoint:function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},containData:function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},dataToPoint:function(t,e,n){var i=this.getAxis("x"),r=this.getAxis("y");return n=n||[],n[0]=i.toGlobalCoord(i.dataToCoord(t[0])),n[1]=r.toGlobalCoord(r.dataToCoord(t[1])),n},clampData:function(t,e){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),a=i.getExtent(),o=n.parse(t[0]),s=i.parse(t[1]);return e=e||[],e[0]=Math.min(Math.max(Math.min(r[0],r[1]),o),Math.max(r[0],r[1])),e[1]=Math.min(Math.max(Math.min(a[0],a[1]),s),Math.max(a[0],a[1])),e},pointToData:function(t,e){var n=this.getAxis("x"),i=this.getAxis("y");return e=e||[],e[0]=n.coordToData(n.toLocalCoord(t[0])),e[1]=i.coordToData(i.toLocalCoord(t[1])),e},getOtherAxis:function(t){return this.getAxis("x"===t.dim?"y":"x")},getArea:function(){var t=this.getAxis("x").getGlobalExtent(),e=this.getAxis("y").getGlobalExtent(),n=Math.min(t[0],t[1]),i=Math.min(e[0],e[1]),r=Math.max(t[0],t[1])-n,a=Math.max(e[0],e[1])-i,o=new Sn(n,i,r,a);return o}},h(pc,qw);var jw=function(t,e,n,i,r){Ww.call(this,t,e,n),this.type=i||"value",this.position=r||"bottom"};jw.prototype={constructor:jw,index:0,getAxesOnZeroOf:null,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},getGlobalExtent:function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},h(jw,Ww);var Zw={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},Kw={};Kw.categoryAxis=r({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},Zw),Kw.valueAxis=r({boundaryGap:[0,0],splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#eee",width:1}}},Zw),Kw.timeAxis=s({scale:!0,min:"dataMin",max:"dataMax"},Kw.valueAxis),Kw.logAxis=s({scale:!0,logBase:10},Kw.valueAxis);var $w=["value","category","time","log"],Qw=function(t,e,n,i){f($w,function(o){e.extend({type:t+"Axis."+o,mergeDefaultAndTheme:function(e,i){var a=this.layoutMode,s=a?jo(e):{},l=i.getTheme();r(e,l.get(o+"Axis")),r(e,this.getDefaultOption()),e.type=n(t,e),a&&qo(e,s,a)},optionUpdated:function(){var t=this.option;"category"===t.type&&(this.__ordinalMeta=ch.createByAxisModel(this))},getCategories:function(t){var e=this.option;return"category"===e.type?t?e.data:this.__ordinalMeta.categories:void 0},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:a([{},Kw[o+"Axis"],i],!0)})}),Sy.registerSubTypeDefaulter(t+"Axis",_(n,t))},Jw=Sy.extend({type:"cartesian2dAxis",axis:null,init:function(){Jw.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){Jw.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){Jw.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});r(Jw.prototype,Dw);var tb={offset:0};Qw("x",Jw,gc,tb),Qw("y",Jw,gc,tb),Sy.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var eb=mc.prototype;eb.type="grid",eb.axisPointerEnabled=!0,eb.getRect=function(){return this._rect},eb.update=function(t,e){var n=this._axesMap;this._updateScale(t,this.model),f(n.x,function(t){Lh(t.scale,t.model)}),f(n.y,function(t){Lh(t.scale,t.model)});var i={};f(n.x,function(t){yc(n,"y",t,i)}),f(n.y,function(t){yc(n,"x",t,i)}),this.resize(this.model,e)},eb.resize=function(t,e,n){function i(){f(a,function(t){var e=t.isHorizontal(),n=e?[0,r.width]:[0,r.height],i=t.inverse?1:0;t.setExtent(n[i],n[1-i]),xc(t,e?r.x:r.y)})}var r=Uo(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=r;var a=this._axesList;i(),!n&&t.get("containLabel")&&(f(a,function(t){if(!t.model.get("axisLabel.inside")){var e=Rh(t);if(e){var n=t.isHorizontal()?"height":"width",i=t.model.get("axisLabel.margin");r[n]-=e[n]+i,"top"===t.position?r.y+=e.height+i:"left"===t.position&&(r.x+=e.width+i)}}}),i())},eb.getAxis=function(t,e){var n=this._axesMap[t];if(null!=n){if(null==e)for(var i in n)if(n.hasOwnProperty(i))return n[i];return n[e]}},eb.getAxes=function(){return this._axesList.slice()},eb.getCartesian=function(t,e){if(null!=t&&null!=e){var n="x"+t+"y"+e;return this._coordsMap[n]}S(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var i=0,r=this._coordsList;i<r.length;i++)if(r[i].getAxis("x").index===t||r[i].getAxis("y").index===e)return r[i]},eb.getCartesians=function(){return this._coordsList.slice()},eb.convertToPixel=function(t,e,n){var i=this._findConvertTarget(t,e);return i.cartesian?i.cartesian.dataToPoint(n):i.axis?i.axis.toGlobalCoord(i.axis.dataToCoord(n)):null},eb.convertFromPixel=function(t,e,n){var i=this._findConvertTarget(t,e);return i.cartesian?i.cartesian.pointToData(n):i.axis?i.axis.coordToData(i.axis.toLocalCoord(n)):null},eb._findConvertTarget=function(t,e){var n,i,r=e.seriesModel,a=e.xAxisModel||r&&r.getReferringComponents("xAxis")[0],o=e.yAxisModel||r&&r.getReferringComponents("yAxis")[0],s=e.gridModel,l=this._coordsList;if(r)n=r.coordinateSystem,u(l,n)<0&&(n=null);else if(a&&o)n=this.getCartesian(a.componentIndex,o.componentIndex);else if(a)i=this.getAxis("x",a.componentIndex);else if(o)i=this.getAxis("y",o.componentIndex);else if(s){var h=s.coordinateSystem;h===this&&(n=this._coordsList[0])}return{cartesian:n,axis:i}},eb.containPoint=function(t){var e=this._coordsList[0];return e?e.containPoint(t):void 0},eb._initCartesian=function(t,e){function n(n){return function(o,s){if(vc(o,t,e)){var l=o.get("position");"x"===n?"top"!==l&&"bottom"!==l&&(l=i.bottom?"top":"bottom"):"left"!==l&&"right"!==l&&(l=i.left?"right":"left"),i[l]=!0;var u=new jw(n,Oh(o),[0,0],o.get("type"),l),h="category"===u.type;u.onBand=h&&o.get("boundaryGap"),u.inverse=o.get("inverse"),o.axis=u,u.model=o,u.grid=this,u.index=s,this._axesList.push(u),r[n][s]=u,a[n]++}}}var i={left:!1,right:!1,top:!1,bottom:!1},r={x:{},y:{}},a={x:0,y:0};return e.eachComponent("xAxis",n("x"),this),e.eachComponent("yAxis",n("y"),this),a.x&&a.y?(this._axesMap=r,void f(r.x,function(e,n){f(r.y,function(i,r){var a="x"+n+"y"+r,o=new pc(a);o.grid=this,o.model=t,this._coordsMap[a]=o,this._coordsList.push(o),o.addAxis(e),o.addAxis(i)},this)},this)):(this._axesMap={},void(this._axesList=[]))},eb._updateScale=function(t,e){function n(t,e){f(t.mapDimension(e.dim,!0),function(n){e.scale.unionExtentFromData(t,oh(t,n))})}f(this._axesList,function(t){t.scale.setExtent(1/0,-1/0)}),t.eachSeries(function(i){if(bc(i)){var r=wc(i,t),a=r[0],o=r[1];if(!vc(a,e,t)||!vc(o,e,t))return;var s=this.getCartesian(a.componentIndex,o.componentIndex),l=i.getData(),u=s.getAxis("x"),h=s.getAxis("y");"list"===l.type&&(n(l,u,i),n(l,h,i))}},this)},eb.getTooltipAxes=function(t){var e=[],n=[];return f(this.getCartesians(),function(i){var r=null!=t&&"auto"!==t?i.getAxis(t):i.getBaseAxis(),a=i.getOtherAxis(r);u(e,r)<0&&e.push(r),u(n,a)<0&&n.push(a)}),{baseAxes:e,otherAxes:n}};var nb=["xAxis","yAxis"];mc.create=function(t,e){var n=[];return t.eachComponent("grid",function(i,r){var a=new mc(i,t,e);a.name="grid_"+r,a.resize(i,e,!0),i.coordinateSystem=a,n.push(a)}),t.eachSeries(function(e){if(bc(e)){var n=wc(e,t),i=n[0],r=n[1],a=i.getCoordSysModel(),o=a.coordinateSystem;e.coordinateSystem=o.getCartesian(i.componentIndex,r.componentIndex)}}),n},mc.dimensions=mc.prototype.dimensions=pc.prototype.dimensions,xs.register("cartesian2d",mc);var ib=h_.extend({type:"series.__base_bar__",getInitialData:function(){return sh(this.getSource(),this,{useEncodeDefaulter:!0})},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var n=e.dataToPoint(e.clampData(t)),i=this.getData(),r=i.getLayout("offset"),a=i.getLayout("size"),o=e.getBaseAxis().isHorizontal()?0:1;return n[o]+=r+a/2,n}return[0/0,0/0]},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",itemStyle:{},emphasis:{}}});ib.extend({type:"series.bar",dependencies:["grid","polar"],brushSelector:"rect",getProgressive:function(){return this.get("large")?this.get("progressive"):!1},getProgressiveThreshold:function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},defaultOption:{clip:!0,roundCap:!1}});var rb=lv([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),ab={getBarItemStyle:function(t){var e=rb(this,t);if(this.getBorderLineDash){var n=this.getBorderLineDash();n&&(e.lineDash=n)}return e}},ob=ca({type:"sausage",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),a=Math.max(e.r,0),o=.5*(a-r),s=r+o,l=e.startAngle,u=e.endAngle,h=e.clockwise,c=Math.cos(l),d=Math.sin(l),f=Math.cos(u),p=Math.sin(u),g=h?u-l<2*Math.PI:l-u<2*Math.PI;g&&(t.moveTo(c*r+n,d*r+i),t.arc(c*s+n,d*s+i,o,-Math.PI+l,l,!h)),t.arc(n,i,a,l,u,!h),t.moveTo(f*a+n,p*a+i),t.arc(f*s+n,p*s+i,o,u-2*Math.PI,u-Math.PI,!h),0!==r&&(t.arc(n,i,r,u,l,h),t.moveTo(c*r+n,p*r+i)),t.closePath()}}),sb=["itemStyle","barBorderWidth"],lb=[0,0];o(uo.prototype,ab),Cu({type:"bar",render:function(t,e,n){this._updateDrawMode(t);var i=t.get("coordinateSystem");return("cartesian2d"===i||"polar"===i)&&(this._isLargeDraw?this._renderLarge(t,e,n):this._renderNormal(t,e,n)),this.group},incrementalPrepareRender:function(t){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e){this._incrementalRenderLarge(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t){var e,n=this.group,i=t.getData(),r=this._data,a=t.coordinateSystem,o=a.getBaseAxis();"cartesian2d"===a.type?e=o.isHorizontal():"polar"===a.type&&(e="angle"===o.dim);var s=t.isAnimationEnabled()?t:null,l=t.get("clip",!0),u=Ac(a,i);n.removeClipPath();var h=t.get("roundCap",!0);i.diff(r).add(function(r){if(i.hasValue(r)){var o=i.getItemModel(r),c=fb[a.type](i,r,o);if(l){var d=cb[a.type](u,c);if(d)return void n.remove(f)}var f=db[a.type](r,c,e,s,!1,h);i.setItemGraphicEl(r,f),n.add(f),Oc(f,i,r,o,c,t,e,"polar"===a.type)}}).update(function(o,c){var d=r.getItemGraphicEl(c);if(!i.hasValue(o))return void n.remove(d);var f=i.getItemModel(o),p=fb[a.type](i,o,f);if(l){var g=cb[a.type](u,p);if(g)return void n.remove(d)}d?Ka(d,{shape:p},s,o):d=db[a.type](o,p,e,s,!0,h),i.setItemGraphicEl(o,d),n.add(d),Oc(d,i,o,f,p,t,e,"polar"===a.type)}).remove(function(t){var e=r.getItemGraphicEl(t);"cartesian2d"===a.type?e&&kc(t,s,e):e&&Pc(t,s,e)}).execute(),this._data=i},_renderLarge:function(t){this._clear(),Ec(t,this.group);var e=t.get("clip",!0)?Dc(t.coordinateSystem,!1,t):null;e?this.group.setClipPath(e):this.group.removeClipPath()},_incrementalRenderLarge:function(t,e){Ec(e,this.group,!0)},dispose:V,remove:function(t){this._clear(t)},_clear:function(t){var e=this.group,n=this._data;t&&t.get("animation")&&n&&!this._isLargeDraw?n.eachItemGraphicEl(function(e){"sector"===e.type?Pc(e.dataIndex,t,e):kc(e.dataIndex,t,e)}):e.removeAll(),this._data=null}});var ub=Math.max,hb=Math.min,cb={cartesian2d:function(t,e){var n=e.width<0?-1:1,i=e.height<0?-1:1;0>n&&(e.x+=e.width,e.width=-e.width),0>i&&(e.y+=e.height,e.height=-e.height);var r=ub(e.x,t.x),a=hb(e.x+e.width,t.x+t.width),o=ub(e.y,t.y),s=hb(e.y+e.height,t.y+t.height);e.x=r,e.y=o,e.width=a-r,e.height=s-o;var l=e.width<0||e.height<0;return 0>n&&(e.x+=e.width,e.width=-e.width),0>i&&(e.y+=e.height,e.height=-e.height),l},polar:function(){return!1}},db={cartesian2d:function(t,e,n,i,r){var a=new Cm({shape:o({},e)});if(i){var s=a.shape,l=n?"height":"width",u={};s[l]=0,u[l]=e[l],Qm[r?"updateProps":"initProps"](a,{shape:u},i,t)}return a},polar:function(t,e,n,i,r,a){var o=e.startAngle<e.endAngle,l=!n&&a?ob:_m,u=new l({shape:s({clockwise:o},e)});if(i){var h=u.shape,c=n?"r":"endAngle",d={};h[c]=n?0:e.startAngle,d[c]=e[c],Qm[r?"updateProps":"initProps"](u,{shape:d},i,t)}return u}},fb={cartesian2d:function(t,e,n){var i=t.getItemLayout(e),r=Bc(n,i),a=i.width>0?1:-1,o=i.height>0?1:-1;return{x:i.x+a*r/2,y:i.y+o*r/2,width:i.width-a*r,height:i.height-o*r}},polar:function(t,e){var n=t.getItemLayout(e);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle}}},pb=$r.extend({type:"largeBar",shape:{points:[]},buildPath:function(t,e){for(var n=e.points,i=this.__startPoint,r=this.__baseDimIdx,a=0;a<n.length;a+=2)i[r]=n[a+r],t.moveTo(i[0],i[1]),t.lineTo(n[a],n[a+1])}}),gb=cl(function(t){var e=this,n=zc(e,t.offsetX,t.offsetY);e.dataIndex=n>=0?n:null},30,!1),vb=Math.PI,mb=function(t,e){this.opt=e,this.axisModel=t,s(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0}),this.group=new tg;var n=new tg({position:e.position.slice(),rotation:e.rotation});n.updateTransform(),this._transform=n.transform,this._dumbGroup=n};mb.prototype={constructor:mb,hasBuilder:function(t){return!!yb[t]},add:function(t){yb[t].call(this)},getGroup:function(){return this.group}};var yb={axisLine:function(){var t=this.opt,e=this.axisModel;if(e.get("axisLine.show")){var n=this.axisModel.axis.getExtent(),i=this._transform,r=[n[0],0],a=[n[1],0];i&&(ae(r,r,i),ae(a,a,i));var s=o({lineCap:"round"},e.getModel("axisLine.lineStyle").getLineStyle());this.group.add(new Am({anid:"line",subPixelOptimize:!0,shape:{x1:r[0],y1:r[1],x2:a[0],y2:a[1]},style:s,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1}));var l=e.get("axisLine.symbol"),u=e.get("axisLine.symbolSize"),h=e.get("axisLine.symbolOffset")||0;if("number"==typeof h&&(h=[h,h]),null!=l){"string"==typeof l&&(l=[l,l]),("string"==typeof u||"number"==typeof u)&&(u=[u,u]);var c=u[0],d=u[1];f([{rotate:t.rotation+Math.PI/2,offset:h[0],r:0},{rotate:t.rotation-Math.PI/2,offset:h[1],r:Math.sqrt((r[0]-a[0])*(r[0]-a[0])+(r[1]-a[1])*(r[1]-a[1]))}],function(e,n){if("none"!==l[n]&&null!=l[n]){var i=Gh(l[n],-c/2,-d/2,c,d,s.stroke,!0),a=e.r+e.offset,o=[r[0]+a*Math.cos(t.rotation),r[1]-a*Math.sin(t.rotation)];i.attr({rotation:e.rotate,position:o,silent:!0,z2:11}),this.group.add(i)}},this)}}},axisTickLabel:function(){var t=this.axisModel,e=this.opt,n=Xc(this,t,e),i=Uc(this,t,e);Fc(t,i,n),Yc(this,t,e)},axisName:function(){var t=this.opt,e=this.axisModel,n=D(t.axisName,e.get("name"));if(n){var i,r=e.get("nameLocation"),a=t.nameDirection,s=e.getModel("nameTextStyle"),l=e.get("nameGap")||0,u=this.axisModel.axis.getExtent(),h=u[0]>u[1]?-1:1,c=["start"===r?u[0]-h*l:"end"===r?u[1]+h*l:(u[0]+u[1])/2,Gc(r)?t.labelOffset+a*l:0],d=e.get("nameRotate");null!=d&&(d=d*vb/180);var f;Gc(r)?i=xb(t.rotation,null!=d?d:t.rotation,a):(i=Nc(t,r,d||0,u),f=t.axisNameAvailableWidth,null!=f&&(f=Math.abs(f/Math.sin(i.rotation)),!isFinite(f)&&(f=null)));var p=s.getFont(),g=e.get("nameTruncate",!0)||{},v=g.ellipsis,m=D(t.nameTruncateMaxWidth,g.maxWidth,f),y=null!=v&&null!=m?gy(n,m,p,v,{minChar:2,placeholder:g.placeholder}):n,_=e.get("tooltip",!0),x=e.mainType,w={componentType:x,name:n,$vars:["name"]};w[x+"Index"]=e.componentIndex;var b=new gm({anid:"name",__fullText:n,__truncatedText:y,position:c,rotation:i.rotation,silent:wb(e),z2:1,tooltip:_&&_.show?o({content:n,formatter:function(){return n},formatterParams:w},_):null});Va(b.style,s,{text:y,textFont:p,textFill:s.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:s.get("align")||i.textAlign,textVerticalAlign:s.get("verticalAlign")||i.textVerticalAlign}),e.get("triggerEvent")&&(b.eventData=_b(e),b.eventData.targetType="axisName",b.eventData.name=n),this._dumbGroup.add(b),b.updateTransform(),this.group.add(b),b.decomposeTransform()}}},_b=mb.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},xb=mb.innerTextLayout=function(t,e,n){var i,r,a=Io(e-t);return To(a)?(r=n>0?"top":"bottom",i="center"):To(a-vb)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=a>0&&vb>a?n>0?"right":"left":n>0?"left":"right"),{rotation:a,textAlign:i,textVerticalAlign:r}},wb=mb.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},bb=f,Sb=_,Mb=Iu({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,n,i){this.axisPointerClass&&Jc(t),Mb.superApply(this,"render",arguments),rd(this,t,e,n,i,!0)},updateAxisPointer:function(t,e,n,i){rd(this,t,e,n,i,!1)},remove:function(t,e){var n=this._axisPointer;n&&n.remove(e),Mb.superApply(this,"remove",arguments)},dispose:function(t,e){ad(this,e),Mb.superApply(this,"dispose",arguments)}}),Ib=[];Mb.registerAxisPointerClass=function(t,e){Ib[t]=e},Mb.getAxisPointerClass=function(t){return t&&Ib[t]};var Tb=["axisLine","axisTickLabel","axisName"],Cb=["splitArea","splitLine","minorSplitLine"],Db=Mb.extend({type:"cartesianAxis",axisPointerClass:"CartesianAxisPointer",render:function(t,e,n,i){this.group.removeAll();var r=this._axisGroup;if(this._axisGroup=new tg,this.group.add(this._axisGroup),t.get("show")){var a=t.getCoordSysModel(),o=od(a,t),s=new mb(t,o);f(Tb,s.add,s),this._axisGroup.add(s.getGroup()),f(Cb,function(e){t.get(e+".show")&&this["_"+e](t,a)},this),eo(r,this._axisGroup,t),Db.superCall(this,"render",t,e,n,i)}},remove:function(){this._splitAreaColors=null},_splitLine:function(t,e){var n=t.axis;if(!n.scale.isBlank()){var i=t.getModel("splitLine"),r=i.getModel("lineStyle"),a=r.get("color");a=x(a)?a:[a];for(var o=e.coordinateSystem.getRect(),l=n.isHorizontal(),u=0,h=n.getTicksCoords({tickModel:i}),c=[],d=[],f=r.getLineStyle(),p=0;p<h.length;p++){var g=n.toGlobalCoord(h[p].coord);l?(c[0]=g,c[1]=o.y,d[0]=g,d[1]=o.y+o.height):(c[0]=o.x,c[1]=g,d[0]=o.x+o.width,d[1]=g);var v=u++%a.length,m=h[p].tickValue;this._axisGroup.add(new Am({anid:null!=m?"line_"+h[p].tickValue:null,subPixelOptimize:!0,shape:{x1:c[0],y1:c[1],x2:d[0],y2:d[1]},style:s({stroke:a[v]},f),silent:!0}))}}},_minorSplitLine:function(t,e){var n=t.axis,i=t.getModel("minorSplitLine"),r=i.getModel("lineStyle"),a=e.coordinateSystem.getRect(),o=n.isHorizontal(),s=n.getMinorTicksCoords();if(s.length)for(var l=[],u=[],h=r.getLineStyle(),c=0;c<s.length;c++)for(var d=0;d<s[c].length;d++){var f=n.toGlobalCoord(s[c][d].coord);o?(l[0]=f,l[1]=a.y,u[0]=f,u[1]=a.y+a.height):(l[0]=a.x,l[1]=f,u[0]=a.x+a.width,u[1]=f),this._axisGroup.add(new Am({anid:"minor_line_"+s[c][d].tickValue,subPixelOptimize:!0,shape:{x1:l[0],y1:l[1],x2:u[0],y2:u[1]},style:h,silent:!0}))}},_splitArea:function(t,e){var n=t.axis;if(!n.scale.isBlank()){var i=t.getModel("splitArea"),r=i.getModel("areaStyle"),a=r.get("color"),o=e.coordinateSystem.getRect(),l=n.getTicksCoords({tickModel:i,clamp:!0});if(l.length){var u=a.length,h=this._splitAreaColors,c=N(),d=0;if(h)for(var f=0;f<l.length;f++){var p=h.get(l[f].tickValue);if(null!=p){d=(p+(u-1)*f)%u;break}}var g=n.toGlobalCoord(l[0].coord),v=r.getAreaStyle();a=x(a)?a:[a];for(var f=1;f<l.length;f++){var m,y,_,w,b=n.toGlobalCoord(l[f].coord);n.isHorizontal()?(m=g,y=o.y,_=b-m,w=o.height,g=m+_):(m=o.x,y=g,_=o.width,w=b-y,g=y+w);var S=l[f-1].tickValue;null!=S&&c.set(S,d),this._axisGroup.add(new Cm({anid:null!=S?"area_"+S:null,shape:{x:m,y:y,width:_,height:w},style:s({fill:a[d]},v),silent:!0})),d=(d+1)%u}this._splitAreaColors=c}}}});Db.extend({type:"xAxis"}),Db.extend({type:"yAxis"}),Iu({type:"grid",render:function(t){this.group.removeAll(),t.get("show")&&this.group.add(new Cm({shape:t.coordinateSystem.getRect(),style:s({fill:t.get("backgroundColor")},t.getItemStyle()),silent:!0,z2:-1}))}}),pu(function(t){t.xAxis&&t.yAxis&&!t.grid&&(t.grid={})}),xu(px.VISUAL.LAYOUT,_(Ih,"bar")),xu(px.VISUAL.PROGRESSIVE_LAYOUT,lw),wu({seriesType:"bar",reset:function(t){t.getData().setVisual("legendSymbol","roundRect")}}),h_.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(){return sh(this.getSource(),this,{useEncodeDefaulter:!0})},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clip:!0,label:{position:"top"},lineStyle:{width:2,type:"solid"},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});var Ab=sd.prototype,kb=sd.getSymbolSize=function(t,e){var n=t.getItemVisual(e,"symbolSize");return n instanceof Array?n.slice():[+n,+n]};Ab._createSymbol=function(t,e,n,i,r){this.removeAll();var a=e.getItemVisual(n,"color"),o=Gh(t,-1,-1,2,2,a,r);o.attr({z2:100,culling:!0,scale:ld(i)}),o.drift=ud,this._symbolType=t,this.add(o)},Ab.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},Ab.getSymbolPath=function(){return this.childAt(0)},Ab.getScale=function(){return this.childAt(0).scale},Ab.highlight=function(){this.childAt(0).trigger("emphasis")},Ab.downplay=function(){this.childAt(0).trigger("normal")},Ab.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},Ab.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":e.cursor},Ab.updateData=function(t,e,n){this.silent=!1;var i=t.getItemVisual(e,"symbol")||"circle",r=t.hostModel,a=kb(t,e),o=i!==this._symbolType;if(o){var s=t.getItemVisual(e,"symbolKeepAspect");this._createSymbol(i,t,e,a,s)}else{var l=this.childAt(0); +l.silent=!1,Ka(l,{scale:ld(a)},r,e)}if(this._updateCommon(t,e,a,n),o){var l=this.childAt(0),u=n&&n.fadeIn,h={scale:l.scale.slice()};u&&(h.style={opacity:l.style.opacity}),l.scale=[0,0],u&&(l.style.opacity=0),$a(l,h,r,e)}this._seriesModel=r};var Pb=["itemStyle"],Lb=["emphasis","itemStyle"],Ob=["label"],Bb=["emphasis","label"];Ab._updateCommon=function(t,e,n,i){function r(e){return b?t.getName(e):Sc(t,e)}var a=this.childAt(0),s=t.hostModel,l=t.getItemVisual(e,"color");"image"!==a.type?a.useStyle({strokeNoScale:!0}):a.setStyle({opacity:null,shadowBlur:null,shadowOffsetX:null,shadowOffsetY:null,shadowColor:null});var u=i&&i.itemStyle,h=i&&i.hoverItemStyle,c=i&&i.symbolRotate,d=i&&i.symbolOffset,f=i&&i.labelModel,p=i&&i.hoverLabelModel,g=i&&i.hoverAnimation,v=i&&i.cursorStyle;if(!i||t.hasItemOption){var m=i&&i.itemModel?i.itemModel:t.getItemModel(e);u=m.getModel(Pb).getItemStyle(["color"]),h=m.getModel(Lb).getItemStyle(),c=m.getShallow("symbolRotate"),d=m.getShallow("symbolOffset"),f=m.getModel(Ob),p=m.getModel(Bb),g=m.getShallow("hoverAnimation"),v=m.getShallow("cursor")}else h=o({},h);var y=a.style;a.attr("rotation",(c||0)*Math.PI/180||0),d&&a.attr("position",[yo(d[0],n[0]),yo(d[1],n[1])]),v&&a.attr("cursor",v),a.setColor(l,i&&i.symbolInnerColor),a.setStyle(u);var _=t.getItemVisual(e,"opacity");null!=_&&(y.opacity=_);var x=t.getItemVisual(e,"liftZ"),w=a.__z2Origin;null!=x?null==w&&(a.__z2Origin=a.z2,a.z2+=x):null!=w&&(a.z2=w,a.__z2Origin=null);var b=i&&i.useNameLabel;Na(y,h,f,p,{labelFetcher:s,labelDataIndex:e,defaultText:r,isRectText:!0,autoColor:l}),a.__symbolOriginalScale=ld(n),a.hoverStyle=h,a.highDownOnUpdate=g&&s.isAnimationEnabled()?hd:null,Ba(a)},Ab.fadeOut=function(t,e){var n=this.childAt(0);this.silent=n.silent=!0,!(e&&e.keepLabel)&&(n.style.text=null),Ka(n,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},h(sd,tg);var Eb=cd.prototype;Eb.updateData=function(t,e){e=fd(e);var n=this.group,i=t.hostModel,r=this._data,a=this._symbolCtor,o=pd(t);r||n.removeAll(),t.diff(r).add(function(i){var r=t.getItemLayout(i);if(dd(t,r,i,e)){var s=new a(t,i,o);s.attr("position",r),t.setItemGraphicEl(i,s),n.add(s)}}).update(function(s,l){var u=r.getItemGraphicEl(l),h=t.getItemLayout(s);return dd(t,h,s,e)?(u?(u.updateData(t,s,o),Ka(u,{position:h},i)):(u=new a(t,s),u.attr("position",h)),n.add(u),void t.setItemGraphicEl(s,u)):void n.remove(u)}).remove(function(t){var e=r.getItemGraphicEl(t);e&&e.fadeOut(function(){n.remove(e)})}).execute(),this._data=t},Eb.isPersistent=function(){return!0},Eb.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,n){var i=t.getItemLayout(n);e.attr("position",i)})},Eb.incrementalPrepareUpdate=function(t){this._seriesScope=pd(t),this._data=null,this.group.removeAll()},Eb.incrementalUpdate=function(t,e,n){function i(t){t.isGroup||(t.incremental=t.useHoverLayer=!0)}n=fd(n);for(var r=t.start;r<t.end;r++){var a=e.getItemLayout(r);if(dd(e,a,r,n)){var o=new this._symbolCtor(e,r,this._seriesScope);o.traverse(i),o.attr("position",a),this.group.add(o),e.setItemGraphicEl(r,o)}}},Eb.remove=function(t){var e=this.group,n=this._data;n&&t?n.eachItemGraphicEl(function(t){t.fadeOut(function(){e.remove(t)})}):e.removeAll()};var zb=function(t,e,n,i,r,a,o,s){for(var l=yd(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],v=gd(r,e,o),m=gd(a,t,s),y=0;y<l.length;y++){var _=l[y],x=!0;switch(_.cmd){case"=":var w=t.getItemLayout(_.idx),b=e.getItemLayout(_.idx1);(isNaN(w[0])||isNaN(w[1]))&&(w=b.slice()),u.push(w),h.push(b),c.push(n[_.idx]),d.push(i[_.idx1]),g.push(e.getRawIndex(_.idx1));break;case"+":var S=_.idx;u.push(r.dataToPoint([e.get(v.dataDimsForPoint[0],S),e.get(v.dataDimsForPoint[1],S)])),h.push(e.getItemLayout(S).slice()),c.push(md(v,r,e,S)),d.push(i[S]),g.push(e.getRawIndex(S));break;case"-":var S=_.idx,M=t.getRawIndex(S);M!==S?(u.push(t.getItemLayout(S)),h.push(a.dataToPoint([t.get(m.dataDimsForPoint[0],S),t.get(m.dataDimsForPoint[1],S)])),c.push(n[S]),d.push(md(m,a,t,S)),g.push(M)):x=!1}x&&(f.push(_),p.push(p.length))}p.sort(function(t,e){return g[t]-g[e]});for(var I=[],T=[],C=[],D=[],A=[],y=0;y<p.length;y++){var S=p[y];I[y]=u[S],T[y]=h[S],C[y]=c[S],D[y]=d[S],A[y]=f[S]}return{current:I,next:T,stackedOnCurrent:C,stackedOnNext:D,status:A}},Rb=oe,Nb=se,Fb=U,Vb=G,Hb=[],Gb=[],Wb=[],Xb=$r.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:ym($r.prototype.brush),buildPath:function(t,e){var n=e.points,i=0,r=n.length,a=Sd(n,e.smoothConstraint);if(e.connectNulls){for(;r>0&&_d(n[r-1]);r--);for(;r>i&&_d(n[i]);i++);}for(;r>i;)i+=xd(t,n,i,r,r,1,a.min,a.max,e.smooth,e.smoothMonotone,e.connectNulls)+1}}),Yb=$r.extend({type:"ec-polygon",shape:{points:[],stackedOnPoints:[],smooth:0,stackedOnSmooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},brush:ym($r.prototype.brush),buildPath:function(t,e){var n=e.points,i=e.stackedOnPoints,r=0,a=n.length,o=e.smoothMonotone,s=Sd(n,e.smoothConstraint),l=Sd(i,e.smoothConstraint);if(e.connectNulls){for(;a>0&&_d(n[a-1]);a--);for(;a>r&&_d(n[r]);r++);}for(;a>r;){var u=xd(t,n,r,a,a,1,s.min,s.max,e.smooth,o,e.connectNulls);xd(t,i,r+u-1,u,a,-1,l.min,l.max,e.stackedOnSmooth,o,e.connectNulls),r+=u+1,t.closePath()}}});ol.extend({type:"line",init:function(){var t=new tg,e=new cd;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,n){var i=t.coordinateSystem,r=this.group,a=t.getData(),o=t.getModel("lineStyle"),l=t.getModel("areaStyle"),u=a.mapArray(a.getItemLayout),h="polar"===i.type,c=this._coordSys,d=this._symbolDraw,f=this._polyline,p=this._polygon,g=this._lineGroup,v=t.get("animation"),m=!l.isEmpty(),y=l.get("origin"),_=gd(i,a,y),x=Td(i,a,_),w=t.get("showSymbol"),b=w&&!h&&Ad(t,a,i),S=this._data;S&&S.eachItemGraphicEl(function(t,e){t.__temp&&(r.remove(t),S.setItemGraphicEl(e,null))}),w||d.remove(),r.add(g);var M,I=!h&&t.get("step");i&&i.getArea&&t.get("clip",!0)&&(M=i.getArea(),null!=M.width?(M.x-=.1,M.y-=.1,M.width+=.2,M.height+=.2):M.r0&&(M.r0-=.5,M.r1+=.5)),this._clipShapeForSymbol=M,f&&c.type===i.type&&I===this._step?(m&&!p?p=this._newPolygon(u,x,i,v):p&&!m&&(g.remove(p),p=this._polygon=null),g.setClipPath(Pd(i,!1,t)),w&&d.updateData(a,{isIgnore:b,clipShape:M}),a.eachItemGraphicEl(function(t){t.stopAnimation(!0)}),Md(this._stackedOnPoints,x)&&Md(this._points,u)||(v?this._updateAnimation(a,x,i,n,I,y):(I&&(u=Cd(u,i,I),x=Cd(x,i,I)),f.setShape({points:u}),p&&p.setShape({points:u,stackedOnPoints:x})))):(w&&d.updateData(a,{isIgnore:b,clipShape:M}),I&&(u=Cd(u,i,I),x=Cd(x,i,I)),f=this._newPolyline(u,i,v),m&&(p=this._newPolygon(u,x,i,v)),g.setClipPath(Pd(i,!0,t)));var T=Dd(a,i)||a.getVisual("color");f.useStyle(s(o.getLineStyle(),{fill:"none",stroke:T,lineJoin:"bevel"}));var C=t.get("smooth");if(C=Id(t.get("smooth")),f.setShape({smooth:C,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),p){var D=a.getCalculationInfo("stackedOnSeries"),A=0;p.useStyle(s(l.getAreaStyle(),{fill:T,opacity:.7,lineJoin:"bevel"})),D&&(A=Id(D.get("smooth"))),p.setShape({smooth:C,stackedOnSmooth:A,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=a,this._coordSys=i,this._stackedOnPoints=x,this._points=u,this._step=I,this._valueOrigin=y},dispose:function(){},highlight:function(t,e,n,i){var r=t.getData(),a=rr(r,i);if(!(a instanceof Array)&&null!=a&&a>=0){var o=r.getItemGraphicEl(a);if(!o){var s=r.getItemLayout(a);if(!s)return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(s[0],s[1]))return;o=new sd(r,a),o.position=s,o.setZ(t.get("zlevel"),t.get("z")),o.ignore=isNaN(s[0])||isNaN(s[1]),o.__temp=!0,r.setItemGraphicEl(a,o),o.stopSymbolAnimation(!0),this.group.add(o)}o.highlight()}else ol.prototype.highlight.call(this,t,e,n,i)},downplay:function(t,e,n,i){var r=t.getData(),a=rr(r,i);if(null!=a&&a>=0){var o=r.getItemGraphicEl(a);o&&(o.__temp?(r.setItemGraphicEl(a,null),this.group.remove(o)):o.downplay())}else ol.prototype.downplay.call(this,t,e,n,i)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new Xb({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new Yb({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(n),this._polygon=n,n},_updateAnimation:function(t,e,n,i,r,a){var o=this._polyline,s=this._polygon,l=t.hostModel,u=zb(this._data,t,this._stackedOnPoints,e,this._coordSys,n,this._valueOrigin,a),h=u.current,c=u.stackedOnCurrent,d=u.next,f=u.stackedOnNext;r&&(h=Cd(u.current,n,r),c=Cd(u.stackedOnCurrent,n,r),d=Cd(u.next,n,r),f=Cd(u.stackedOnNext,n,r)),o.shape.__points=u.current,o.shape.points=h,Ka(o,{shape:{points:d}},l),s&&(s.setShape({points:h,stackedOnPoints:c}),Ka(s,{shape:{points:d,stackedOnPoints:f}},l));for(var p=[],g=u.status,v=0;v<g.length;v++){var m=g[v].cmd;if("="===m){var y=t.getItemGraphicEl(g[v].idx1);y&&p.push({el:y,ptIdx:v})}}o.animators&&o.animators.length&&o.animators[0].during(function(){for(var t=0;t<p.length;t++){var e=p[t].el;e.attr("position",o.shape.__points[p[t].ptIdx])}})},remove:function(){var t=this.group,e=this._data;this._lineGroup.removeAll(),this._symbolDraw.remove(!0),e&&e.eachItemGraphicEl(function(n,i){n.__temp&&(t.remove(n),e.setItemGraphicEl(i,null))}),this._polyline=this._polygon=this._coordSys=this._points=this._stackedOnPoints=this._data=null}});var Ub=function(t,e,n){return{seriesType:t,performRawSeries:!0,reset:function(t,i){function r(e,n){if(c){var i=t.getRawValue(n),r=t.getDataParams(n);u&&e.setItemVisual(n,"symbol",o(i,r)),h&&e.setItemVisual(n,"symbolSize",s(i,r))}if(e.hasItemOption){var a=e.getItemModel(n),l=a.getShallow("symbol",!0),d=a.getShallow("symbolSize",!0),f=a.getShallow("symbolKeepAspect",!0);null!=l&&e.setItemVisual(n,"symbol",l),null!=d&&e.setItemVisual(n,"symbolSize",d),null!=f&&e.setItemVisual(n,"symbolKeepAspect",f)}}var a=t.getData(),o=t.get("symbol"),s=t.get("symbolSize"),l=t.get("symbolKeepAspect"),u=w(o),h=w(s),c=u||h,d=!u&&o?o:e,f=h?null:s;return a.setVisual({legendSymbol:n||d,symbol:d,symbolSize:f,symbolKeepAspect:l}),i.isSeriesFiltered(t)?void 0:{dataEach:a.hasItemOption||c?r:null}}}},qb=function(t){return{seriesType:t,plan:f_(),reset:function(t){function e(t,e){for(var n=t.end-t.start,r=a&&new Float32Array(n*s),l=t.start,u=0,h=[],c=[];l<t.end;l++){var d;if(1===s){var f=e.get(o[0],l);d=!isNaN(f)&&i.dataToPoint(f,null,c)}else{var f=h[0]=e.get(o[0],l),p=h[1]=e.get(o[1],l);d=!isNaN(f)&&!isNaN(p)&&i.dataToPoint(h,null,c)}a?(r[u++]=d?d[0]:0/0,r[u++]=d?d[1]:0/0):e.setItemLayout(l,d&&d.slice()||[0/0,0/0])}a&&e.setLayout("symbolPoints",r)}var n=t.getData(),i=t.coordinateSystem,r=t.pipelineContext,a=r.large;if(i){var o=p(i.dimensions,function(t){return n.mapDimension(t)}).slice(0,2),s=o.length,l=n.getCalculationInfo("stackResultDimension");return ah(n,o[0])&&(o[0]=l),ah(n,o[1])&&(o[1]=l),s&&{progress:e}}}}},jb={average:function(t){for(var e=0,n=0,i=0;i<t.length;i++)isNaN(t[i])||(e+=t[i],n++);return 0===n?0/0:e/n},sum:function(t){for(var e=0,n=0;n<t.length;n++)e+=t[n]||0;return e},max:function(t){for(var e=-1/0,n=0;n<t.length;n++)t[n]>e&&(e=t[n]);return isFinite(e)?e:0/0},min:function(t){for(var e=1/0,n=0;n<t.length;n++)t[n]<e&&(e=t[n]);return isFinite(e)?e:0/0},nearest:function(t){return t[0]}},Zb=function(t){return Math.round(t.length/2)},Kb=function(t){return{seriesType:t,modifyOutputEnd:!0,reset:function(t){var e=t.getData(),n=t.get("sampling"),i=t.coordinateSystem;if("cartesian2d"===i.type&&n){var r=i.getBaseAxis(),a=i.getOtherAxis(r),o=r.getExtent(),s=o[1]-o[0],l=Math.round(e.count()/s);if(l>1){var u;"string"==typeof n?u=jb[n]:"function"==typeof n&&(u=n),u&&t.setData(e.downSample(e.mapDimension(a.dim),1/l,u,Zb))}}}}};wu(Ub("line","circle","line")),xu(qb("line")),gu(px.PROCESSOR.STATISTIC,Kb("line"));var $b=function(t,e,n){e=x(e)&&{coordDimensions:e}||o({},e);var i=t.getSource(),r=$x(i,e),a=new jx(r,t);return a.initData(i,n),a},Qb={updateSelectedMap:function(t){this._targetList=x(t)?t.slice():[],this._selectTargetMap=g(t||[],function(t,e){return t.set(e.name,e),t},N())},select:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t),i=this.get("selectedMode");"single"===i&&this._selectTargetMap.each(function(t){t.selected=!1}),n&&(n.selected=!0)},unSelect:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t);n&&(n.selected=!1)},toggleSelected:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return null!=n?(this[n.selected?"unSelect":"select"](t,e),n.selected):void 0},isSelected:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return n&&n.selected}},Jb=Tu({type:"series.pie",init:function(t){Jb.superApply(this,"init",arguments),this.legendVisualProvider=new Ld(y(this.getData,this),y(this.getRawData,this)),this.updateSelectedMap(this._createSelectableList()),this._defaultLabelLine(t)},mergeOption:function(t){Jb.superCall(this,"mergeOption",t),this.updateSelectedMap(this._createSelectableList())},getInitialData:function(){return $b(this,{coordDimensions:["value"],encodeDefaulter:_(ls,this)})},_createSelectableList:function(){for(var t=this.getRawData(),e=t.mapDimension("value"),n=[],i=0,r=t.count();r>i;i++)n.push({name:t.getName(i),value:t.get(e,i),selected:qs(t,i,"selected")});return n},getDataParams:function(t){var e=this.getData(),n=Jb.superCall(this,"getDataParams",t),i=[];return e.each(e.mapDimension("value"),function(t){i.push(t)}),n.percent=Mo(i,t,e.hostModel.get("percentPrecision")),n.$vars.push("percent"),n},_defaultLabelLine:function(t){$i(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,hoverOffset:10,avoidLabelOverlap:!0,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:!1,show:!0,position:"outer",alignTo:"none",margin:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1},animationType:"expansion",animationTypeUpdate:"transition",animationEasing:"cubicOut"}});c(Jb,Qb);var tS=Ed.prototype;tS.updateData=function(t,e,n){var i=this.childAt(0),r=this.childAt(1),a=this.childAt(2),l=t.hostModel,u=t.getItemModel(e),h=t.getItemLayout(e),c=o({},h);c.label=null;var d=l.getShallow("animationTypeUpdate");if(n){i.setShape(c);var f=l.getShallow("animationType");"scale"===f?(i.shape.r=h.r0,$a(i,{shape:{r:h.r}},l,e)):(i.shape.endAngle=h.startAngle,Ka(i,{shape:{endAngle:h.endAngle}},l,e))}else"expansion"===d?i.setShape(c):Ka(i,{shape:c},l,e);var p=t.getItemVisual(e,"color");i.useStyle(s({lineJoin:"bevel",fill:p},u.getModel("itemStyle").getItemStyle())),i.hoverStyle=u.getModel("emphasis.itemStyle").getItemStyle();var g=u.getShallow("cursor");g&&i.attr("cursor",g),Bd(this,t.getItemLayout(e),l.isSelected(null,e),l.get("selectedOffset"),l.get("animation"));var v=!n&&"transition"===d;this._updateLabel(t,e,v),this.highDownOnUpdate=u.get("hoverAnimation")&&l.isAnimationEnabled()?function(t,e){"emphasis"===e?(r.ignore=r.hoverIgnore,a.ignore=a.hoverIgnore,i.stopAnimation(!0),i.animateTo({shape:{r:h.r+l.get("hoverOffset")}},300,"elasticOut")):(r.ignore=r.normalIgnore,a.ignore=a.normalIgnore,i.stopAnimation(!0),i.animateTo({shape:{r:h.r}},300,"elasticOut"))}:null,Ba(this)},tS._updateLabel=function(t,e,n){var i=this.childAt(1),r=this.childAt(2),a=t.hostModel,o=t.getItemModel(e),s=t.getItemLayout(e),l=s.label,u=t.getItemVisual(e,"color");if(!l||isNaN(l.x)||isNaN(l.y))return void(r.ignore=r.normalIgnore=r.hoverIgnore=i.ignore=i.normalIgnore=i.hoverIgnore=!0);var h={points:l.linePoints||[[l.x,l.y],[l.x,l.y],[l.x,l.y]]},c={x:l.x,y:l.y};n?(Ka(i,{shape:h},a,e),Ka(r,{style:c},a,e)):(i.attr({shape:h}),r.attr({style:c})),r.attr({rotation:l.rotation,origin:[l.x,l.y],z2:10});var d=o.getModel("label"),f=o.getModel("emphasis.label"),p=o.getModel("labelLine"),g=o.getModel("emphasis.labelLine"),u=t.getItemVisual(e,"color");Na(r.style,r.hoverStyle={},d,f,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:l.text,autoColor:u,useInsideStyle:!!l.inside},{textAlign:l.textAlign,textVerticalAlign:l.verticalAlign,opacity:t.getItemVisual(e,"opacity")}),r.ignore=r.normalIgnore=!d.get("show"),r.hoverIgnore=!f.get("show"),i.ignore=i.normalIgnore=!p.get("show"),i.hoverIgnore=!g.get("show"),i.setStyle({stroke:u,opacity:t.getItemVisual(e,"opacity")}),i.setStyle(p.getModel("lineStyle").getLineStyle()),i.hoverStyle=g.getModel("lineStyle").getLineStyle();var v=p.get("smooth");v&&v===!0&&(v=.4),i.setShape({smooth:v})},h(Ed,tg);var eS=(ol.extend({type:"pie",init:function(){var t=new tg;this._sectorGroup=t},render:function(t,e,n,i){if(!i||i.from!==this.uid){var r=t.getData(),a=this._data,o=this.group,s=e.get("animation"),l=!a,u=t.get("animationType"),h=t.get("animationTypeUpdate"),c=_(Od,this.uid,t,s,n),d=t.get("selectedMode");if(r.diff(a).add(function(t){var e=new Ed(r,t);l&&"scale"!==u&&e.eachChild(function(t){t.stopAnimation(!0)}),d&&e.on("click",c),r.setItemGraphicEl(t,e),o.add(e)}).update(function(t,e){var n=a.getItemGraphicEl(e);l||"transition"===h||n.eachChild(function(t){t.stopAnimation(!0)}),n.updateData(r,t),n.off("click"),d&&n.on("click",c),o.add(n),r.setItemGraphicEl(t,n)}).remove(function(t){var e=a.getItemGraphicEl(t);o.remove(e)}).execute(),s&&r.count()>0&&(l?"scale"!==u:"transition"!==h)){for(var f=r.getItemLayout(0),p=1;isNaN(f.startAngle)&&p<r.count();++p)f=r.getItemLayout(p);var g=Math.max(n.getWidth(),n.getHeight())/2,v=y(o.removeClipPath,o);o.setClipPath(this._createClipPath(f.cx,f.cy,g,f.startAngle,f.clockwise,v,t,l))}else o.removeClipPath();this._data=r}},dispose:function(){},_createClipPath:function(t,e,n,i,r,a,o,s){var l=new _m({shape:{cx:t,cy:e,r0:0,r:n,startAngle:i,endAngle:i,clockwise:r}}),u=s?$a:Ka;return u(l,{shape:{endAngle:i+(r?1:-1)*Math.PI*2}},o,a),l},containPoint:function(t,e){var n=e.getData(),i=n.getItemLayout(0);if(i){var r=t[0]-i.cx,a=t[1]-i.cy,o=Math.sqrt(r*r+a*a);return o<=i.r&&o>=i.r0}}}),function(t,e){f(e,function(e){e.update="updateView",mu(e,function(n,i){var r={};return i.eachComponent({mainType:"series",subType:t,query:n},function(t){t[e.method]&&t[e.method](n.name,n.dataIndex);var i=t.getData();i.each(function(e){var n=i.getName(e);r[n]=t.isSelected(n)||!1})}),{name:n.name,selected:r,seriesId:n.seriesId}})})}),nS=function(t){return{getTargetSeries:function(e){var n={},i=N();return e.eachSeriesByType(t,function(t){t.__paletteScope=n,i.set(t.uid,t)}),i},reset:function(t){var e=t.getRawData(),n={},i=t.getData();i.each(function(t){var e=i.getRawIndex(t);n[e]=t}),e.each(function(r){var a,o=n[r],s=null!=o&&i.getItemVisual(o,"color",!0),l=null!=o&&i.getItemVisual(o,"borderColor",!0);if(s&&l||(a=e.getItemModel(r)),!s){var u=a.get("itemStyle.color")||t.getColorFromPalette(e.getName(r)||r+"",t.__paletteScope,e.count());null!=o&&i.setItemVisual(o,"color",u)}if(!l){var h=a.get("itemStyle.borderColor");null!=o&&i.setItemVisual(o,"borderColor",h)}})}}},iS=Math.PI/180,rS=function(t,e,n,i,r,a){var o,s,l=t.getData(),u=[],h=!1,c=(t.get("minShowLabelAngle")||0)*iS;l.each(function(i){var a=l.getItemLayout(i),d=l.getItemModel(i),f=d.getModel("label"),p=f.get("position")||d.get("emphasis.label.position"),g=f.get("distanceToLabelLine"),v=f.get("alignTo"),m=yo(f.get("margin"),n),y=f.get("bleedMargin"),_=f.getFont(),x=d.getModel("labelLine"),w=x.get("length");w=yo(w,n);var b=x.get("length2");if(b=yo(b,n),!(a.angle<c)){var S,M,I,T,C=(a.startAngle+a.endAngle)/2,D=Math.cos(C),A=Math.sin(C);o=a.cx,s=a.cy;var k=t.getFormattedLabel(i,"normal")||l.getName(i),P=Gn(k,_,T,"top"),L="inside"===p||"inner"===p;if("center"===p)S=a.cx,M=a.cy,T="center";else{var O=(L?(a.r+a.r0)/2*D:a.r*D)+o,B=(L?(a.r+a.r0)/2*A:a.r*A)+s;if(S=O+3*D,M=B+3*A,!L){var E=O+D*(w+e-a.r),z=B+A*(w+e-a.r),R=E+(0>D?-1:1)*b,N=z;S="edge"===v?0>D?r+m:r+n-m:R+(0>D?-g:g),M=N,I=[[O,B],[E,z],[R,N]]}T=L?"center":"edge"===v?D>0?"right":"left":D>0?"left":"right"}var F,V=f.get("rotate");F="number"==typeof V?V*(Math.PI/180):V?0>D?-C+Math.PI:-C:0,h=!!F,a.label={x:S,y:M,position:p,height:P.height,len:w,len2:b,linePoints:I,textAlign:T,verticalAlign:"middle",rotation:F,inside:L,labelDistance:g,labelAlignTo:v,labelMargin:m,bleedMargin:y,textRect:P,text:k,font:_},L||u.push(a.label)}}),!h&&t.get("avoidLabelOverlap")&&Rd(u,o,s,e,n,i,r,a)},aS=2*Math.PI,oS=Math.PI/180,sS=function(t,e,n){e.eachSeriesByType(t,function(t){var e=t.getData(),i=e.mapDimension("value"),r=Fd(t,n),a=t.get("center"),o=t.get("radius");x(o)||(o=[0,o]),x(a)||(a=[a,a]);var s=yo(r.width,n.getWidth()),l=yo(r.height,n.getHeight()),u=Math.min(s,l),h=yo(a[0],s)+r.x,c=yo(a[1],l)+r.y,d=yo(o[0],u/2),f=yo(o[1],u/2),p=-t.get("startAngle")*oS,g=t.get("minAngle")*oS,v=0;e.each(i,function(t){!isNaN(t)&&v++});var m=e.getSum(i),y=Math.PI/(m||v)*2,_=t.get("clockwise"),w=t.get("roseType"),b=t.get("stillShowZeroSum"),S=e.getDataExtent(i);S[0]=0;var M=aS,I=0,T=p,C=_?1:-1;if(e.each(i,function(t,n){var i;if(isNaN(t))return void e.setItemLayout(n,{angle:0/0,startAngle:0/0,endAngle:0/0,clockwise:_,cx:h,cy:c,r0:d,r:w?0/0:f,viewRect:r});i="area"!==w?0===m&&b?y:t*y:aS/v,g>i?(i=g,M-=g):I+=t;var a=T+C*i;e.setItemLayout(n,{angle:i,startAngle:T,endAngle:a,clockwise:_,cx:h,cy:c,r0:d,r:w?mo(t,S,[d,f]):f,viewRect:r}),T=a}),aS>M&&v)if(.001>=M){var D=aS/v;e.each(i,function(t,n){if(!isNaN(t)){var i=e.getItemLayout(n);i.angle=D,i.startAngle=p+C*n*D,i.endAngle=p+C*(n+1)*D}})}else y=M/I,T=p,e.each(i,function(t,n){if(!isNaN(t)){var i=e.getItemLayout(n),r=i.angle===g?g:t*y;i.startAngle=T,i.endAngle=T+C*r,T+=C*r}});rS(t,f,r.width,r.height,r.x,r.y)})},lS=function(t){return{seriesType:t,reset:function(t,e){var n=e.findComponents({mainType:"legend"});if(n&&n.length){var i=t.getData();i.filterSelf(function(t){for(var e=i.getName(t),r=0;r<n.length;r++)if(!n[r].isSelected(e))return!1;return!0})}}}};eS("pie",[{type:"pieToggleSelect",event:"pieselectchanged",method:"toggleSelected"},{type:"pieSelect",event:"pieselected",method:"select"},{type:"pieUnSelect",event:"pieunselected",method:"unSelect"}]),wu(nS("pie")),xu(_(sS,"pie")),gu(lS("pie")),Mu({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),Iu({type:"title",render:function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),a=t.getModel("subtextStyle"),o=t.get("textAlign"),s=A(t.get("textBaseline"),t.get("textVerticalAlign")),l=new gm({style:Va({},r,{text:t.get("text"),textFill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new gm({style:Va({},a,{text:h,textFill:a.getTextColor(),y:u.height+t.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),d=t.get("link"),f=t.get("sublink"),p=t.get("triggerEvent",!0);l.silent=!d&&!p,c.silent=!f&&!p,d&&l.on("click",function(){window.open(d,"_"+t.get("target"))}),f&&c.on("click",function(){window.open(f,"_"+t.get("subtarget"))}),l.eventData=c.eventData=p?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),h&&i.add(c);var g=i.getBoundingRect(),v=t.getBoxLayoutParams();v.width=g.width,v.height=g.height;var m=Uo(v,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));o||(o=t.get("left")||t.get("right"),"middle"===o&&(o="center"),"right"===o?m.x+=m.width:"center"===o&&(m.x+=m.width/2)),s||(s=t.get("top")||t.get("bottom"),"center"===s&&(s="middle"),"bottom"===s?m.y+=m.height:"middle"===s&&(m.y+=m.height/2),s=s||"top"),i.attr("position",[m.x,m.y]);var y={textAlign:o,textVerticalAlign:s};l.setStyle(y),c.setStyle(y),g=i.getBoundingRect();var _=m.margin,x=t.getItemStyle(["color","opacity"]);x.fill=t.get("backgroundColor");var w=new Cm({shape:{x:g.x-_[3],y:g.y-_[0],width:g.width+_[1]+_[3],height:g.height+_[0]+_[2],r:t.get("borderRadius")},style:x,subPixelOptimize:!0,silent:!0});i.add(w)}}});var uS=b_.legend.selector,hS={all:{type:"all",title:i(uS.all)},inverse:{type:"inverse",title:i(uS.inverse)}},cS=Mu({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,n){this.mergeDefaultAndTheme(t,n),t.selected=t.selected||{},this._updateSelector(t)},mergeOption:function(t){cS.superCall(this,"mergeOption",t),this._updateSelector(t)},_updateSelector:function(t){var e=t.selector;e===!0&&(e=t.selector=["all","inverse"]),x(e)&&f(e,function(t,n){b(t)&&(t={type:t}),e[n]=r(t,hS[t.type])})},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,n=0;n<t.length;n++){var i=t[n].get("name");if(this.isSelected(i)){this.select(i),e=!0;break}}!e&&this.select(t[0].get("name"))}},_updateData:function(t){var e=[],n=[];t.eachRawSeries(function(i){var r=i.name;n.push(r);var a;if(i.legendVisualProvider){var o=i.legendVisualProvider,s=o.getAllNames();t.isSeriesFiltered(i)||(n=n.concat(s)),s.length?e=e.concat(s):a=!0}else a=!0;a&&nr(i)&&e.push(i.name)}),this._availableNames=n;var i=this.get("data")||e,r=p(i,function(t){return("string"==typeof t||"number"==typeof t)&&(t={name:t}),new uo(t,this,this.ecModel)},this);this._data=r},getData:function(){return this._data},select:function(t){var e=this.option.selected,n=this.get("selectedMode");if("single"===n){var i=this._data;f(i,function(t){e[t.get("name")]=!1})}e[t]=!0},unSelect:function(t){"single"!==this.get("selectedMode")&&(this.option.selected[t]=!1)},toggleSelected:function(t){var e=this.option.selected;e.hasOwnProperty(t)||(e[t]=!0),this[e[t]?"unSelect":"select"](t)},allSelect:function(){var t=this._data,e=this.option.selected;f(t,function(t){e[t.get("name",!0)]=!0})},inverseSelect:function(){var t=this._data,e=this.option.selected;f(t,function(t){var n=t.get("name",!0);e.hasOwnProperty(n)||(e[n]=!0),e[n]=!e[n]})},isSelected:function(t){var e=this.option.selected;return!(e.hasOwnProperty(t)&&!e[t])&&u(this._availableNames,t)>=0},getOrient:function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",itemStyle:{borderWidth:0},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:" sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}}});mu("legendToggleSelect","legendselectchanged",_(Vd,"toggleSelected")),mu("legendAllSelect","legendselectall",_(Vd,"allSelect")),mu("legendInverseSelect","legendinverseselect",_(Vd,"inverseSelect")),mu("legendSelect","legendselected",_(Vd,"select")),mu("legendUnSelect","legendunselected",_(Vd,"unSelect"));var dS=_,fS=f,pS=tg,gS=Iu({type:"legend.plain",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new pS),this._backgroundEl,this.group.add(this._selectorGroup=new pS),this._isFirstRender=!0},getContentGroup:function(){return this._contentGroup},getSelectorGroup:function(){return this._selectorGroup},render:function(t,e,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var r=t.get("align"),a=t.get("orient");r&&"auto"!==r||(r="right"===t.get("left")&&"vertical"===a?"right":"left");var o=t.get("selector",!0),l=t.get("selectorPosition",!0);!o||l&&"auto"!==l||(l="horizontal"===a?"end":"start"),this.renderInner(r,t,e,n,o,a,l);var u=t.getBoxLayoutParams(),h={width:n.getWidth(),height:n.getHeight()},c=t.get("padding"),d=Uo(u,h,c),f=this.layoutInner(t,r,d,i,o,l),p=Uo(s({width:f.width,height:f.height},u),h,c);this.group.attr("position",[p.x-f.x,p.y-f.y]),this.group.add(this._backgroundEl=Hd(f,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},renderInner:function(t,e,n,i,r,a,o){var s=this.getContentGroup(),l=N(),u=e.get("selectedMode"),h=[];n.eachRawSeries(function(t){!t.get("legendHoverLink")&&h.push(t.id)}),fS(e.getData(),function(r,a){var o=r.get("name");if(!this.newlineDisabled&&(""===o||"\n"===o))return void s.add(new pS({newline:!0}));var c=n.getSeriesByName(o)[0];if(!l.get(o))if(c){var d=c.getData(),f=d.getVisual("color"),p=d.getVisual("borderColor");"function"==typeof f&&(f=f(c.getDataParams(0))),"function"==typeof p&&(p=p(c.getDataParams(0)));var g=d.getVisual("legendSymbol")||"roundRect",v=d.getVisual("symbol"),m=this._createItem(o,a,r,e,g,v,t,f,p,u);m.on("click",dS(Wd,o,null,i,h)).on("mouseover",dS(Xd,c.name,null,i,h)).on("mouseout",dS(Yd,c.name,null,i,h)),l.set(o,!0)}else n.eachRawSeries(function(n){if(!l.get(o)&&n.legendVisualProvider){var s=n.legendVisualProvider;if(!s.containName(o))return;var c=s.indexOfName(o),d=s.getItemVisual(c,"color"),f=s.getItemVisual(c,"borderColor"),p="roundRect",g=this._createItem(o,a,r,e,p,null,t,d,f,u);g.on("click",dS(Wd,null,o,i,h)).on("mouseover",dS(Xd,null,o,i,h)).on("mouseout",dS(Yd,null,o,i,h)),l.set(o,!0)}},this)},this),r&&this._createSelector(r,e,i,a,o)},_createSelector:function(t,e,n){function i(t){var i=t.type,a=new gm({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===i?"legendAllSelect":"legendInverseSelect"})}});r.add(a);var o=e.getModel("selectorLabel"),s=e.getModel("emphasis.selectorLabel");Na(a.style,a.hoverStyle={},o,s,{defaultText:t.title,isRectText:!1}),Ba(a)}var r=this.getSelectorGroup();fS(t,function(t){i(t)})},_createItem:function(t,e,n,i,r,a,s,l,u,h){var c=i.get("itemWidth"),d=i.get("itemHeight"),f=i.get("inactiveColor"),p=i.get("inactiveBorderColor"),g=i.get("symbolKeepAspect"),v=i.getModel("itemStyle"),m=i.isSelected(t),y=new pS,_=n.getModel("textStyle"),x=n.get("icon"),w=n.getModel("tooltip"),b=w.parentModel;r=x||r;var S=Gh(r,0,0,c,d,m?l:f,null==g?!0:g);if(y.add(Gd(S,r,v,u,p,m)),!x&&a&&(a!==r||"none"===a)){var M=.8*d;"none"===a&&(a="circle");var I=Gh(a,(c-M)/2,(d-M)/2,M,M,m?l:f,null==g?!0:g);y.add(Gd(I,a,v,u,p,m))}var T="left"===s?c+5:-5,C=s,D=i.get("formatter"),A=t;"string"==typeof D&&D?A=D.replace("{name}",null!=t?t:""):"function"==typeof D&&(A=D(t)),y.add(new gm({style:Va({},_,{text:A,x:T,y:d/2,textFill:m?_.getTextColor():f,textAlign:C,textVerticalAlign:"middle"})}));var k=new Cm({shape:y.getBoundingRect(),invisible:!0,tooltip:w.get("show")?o({content:t,formatter:b.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:i.componentIndex,name:t,$vars:["name"]}},w.option):null});return y.add(k),y.eachChild(function(t){t.silent=!0}),k.silent=!h,this.getContentGroup().add(y),Ba(y),y.__legendDataIndex=e,y},layoutInner:function(t,e,n,i,r,a){var o=this.getContentGroup(),s=this.getSelectorGroup();xy(t.get("orient"),o,t.get("itemGap"),n.width,n.height);var l=o.getBoundingRect(),u=[-l.x,-l.y];if(r){xy("horizontal",s,t.get("selectorItemGap",!0));var h=s.getBoundingRect(),c=[-h.x,-h.y],d=t.get("selectorButtonGap",!0),f=t.getOrient().index,p=0===f?"width":"height",g=0===f?"height":"width",v=0===f?"y":"x";"end"===a?c[f]+=l[p]+d:u[f]+=h[p]+d,c[1-f]+=l[g]/2-h[g]/2,s.attr("position",c),o.attr("position",u);var m={x:0,y:0};return m[p]=l[p]+d+h[p],m[g]=Math.max(l[g],h[g]),m[v]=Math.min(0,h[v]+c[1-f]),m}return o.attr("position",u),this.group.getBoundingRect()},remove:function(){this.getContentGroup().removeAll(),this._isFirstRender=!0}}),vS=function(t){var e=t.findComponents({mainType:"legend"}); +e&&e.length&&t.filterSeries(function(t){for(var n=0;n<e.length;n++)if(!e[n].isSelected(t.name))return!1;return!0})};gu(px.PROCESSOR.SERIES_FILTER,vS),Sy.registerSubTypeDefaulter("legend",function(){return"plain"});var mS=cS.extend({type:"legend.scroll",setScrollDataIndex:function(t){this.option.scrollDataIndex=t},defaultOption:{scrollDataIndex:0,pageButtonItemGap:5,pageButtonGap:null,pageButtonPosition:"end",pageFormatter:"{current}/{total}",pageIcons:{horizontal:["M0,0L12,-10L12,10z","M0,0L-12,-10L-12,10z"],vertical:["M0,0L20,0L10,-20z","M0,0L20,0L10,20z"]},pageIconColor:"#2f4554",pageIconInactiveColor:"#aaa",pageIconSize:15,pageTextStyle:{color:"#333"},animationDurationUpdate:800},init:function(t,e,n,i){var r=jo(t);mS.superCall(this,"init",t,e,n,i),Ud(this,t,r)},mergeOption:function(t,e){mS.superCall(this,"mergeOption",t,e),Ud(this,this.option,t)}}),yS=tg,_S=["width","height"],xS=["x","y"],wS=gS.extend({type:"legend.scroll",newlineDisabled:!0,init:function(){wS.superCall(this,"init"),this._currentIndex=0,this.group.add(this._containerGroup=new yS),this._containerGroup.add(this.getContentGroup()),this.group.add(this._controllerGroup=new yS),this._showController},resetInner:function(){wS.superCall(this,"resetInner"),this._controllerGroup.removeAll(),this._containerGroup.removeClipPath(),this._containerGroup.__rectSize=null},renderInner:function(t,e,n,i,r,a,o){function s(t,n){var r=t+"DataIndex",a=ro(e.get("pageIcons",!0)[e.getOrient().name][n],{onclick:y(l._pageGo,l,r,e,i)},{x:-h[0]/2,y:-h[1]/2,width:h[0],height:h[1]});a.name=t,u.add(a)}var l=this;wS.superCall(this,"renderInner",t,e,n,i,r,a,o);var u=this._controllerGroup,h=e.get("pageIconSize",!0);x(h)||(h=[h,h]),s("pagePrev",0);var c=e.getModel("pageTextStyle");u.add(new gm({name:"pageText",style:{textFill:c.getTextColor(),font:c.getFont(),textVerticalAlign:"middle",textAlign:"center"},silent:!0})),s("pageNext",1)},layoutInner:function(t,e,n,r,a,o){var s=this.getSelectorGroup(),l=t.getOrient().index,u=_S[l],h=xS[l],c=_S[1-l],d=xS[1-l];a&&xy("horizontal",s,t.get("selectorItemGap",!0));var f=t.get("selectorButtonGap",!0),p=s.getBoundingRect(),g=[-p.x,-p.y],v=i(n);a&&(v[u]=n[u]-p[u]-f);var m=this._layoutContentAndController(t,r,v,l,u,c,d);if(a){if("end"===o)g[l]+=m[u]+f;else{var y=p[u]+f;g[l]-=y,m[h]-=y}m[u]+=p[u]+f,g[1-l]+=m[d]+m[c]/2-p[c]/2,m[c]=Math.max(m[c],p[c]),m[d]=Math.min(m[d],p[d]+g[1-l]),s.attr("position",g)}return m},_layoutContentAndController:function(t,e,n,i,r,a,o){var s=this.getContentGroup(),l=this._containerGroup,u=this._controllerGroup;xy(t.get("orient"),s,t.get("itemGap"),i?n.width:null,i?null:n.height),xy("horizontal",u,t.get("pageButtonItemGap",!0));var h=s.getBoundingRect(),c=u.getBoundingRect(),d=this._showController=h[r]>n[r],f=[-h.x,-h.y];e||(f[i]=s.position[i]);var p=[0,0],g=[-c.x,-c.y],v=A(t.get("pageButtonGap",!0),t.get("itemGap",!0));if(d){var m=t.get("pageButtonPosition",!0);"end"===m?g[i]+=n[r]-c[r]:p[i]+=c[r]+v}g[1-i]+=h[a]/2-c[a]/2,s.attr("position",f),l.attr("position",p),u.attr("position",g);var y={x:0,y:0};if(y[r]=d?n[r]:h[r],y[a]=Math.max(h[a],c[a]),y[o]=Math.min(0,c[o]+g[1-i]),l.__rectSize=n[r],d){var _={x:0,y:0};_[r]=Math.max(n[r]-c[r]-v,0),_[a]=y[a],l.setClipPath(new Cm({shape:_})),l.__rectSize=_[r]}else u.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(t);return null!=x.pageIndex&&Ka(s,{position:x.contentPosition},d?t:!1),this._updatePageInfoView(t,x),y},_pageGo:function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},_updatePageInfoView:function(t,e){var n=this._controllerGroup;f(["pagePrev","pageNext"],function(i){var r=null!=e[i+"DataIndex"],a=n.childOfName(i);a&&(a.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=r?"pointer":"default")});var i=n.childOfName("pageText"),r=t.get("pageFormatter"),a=e.pageIndex,o=null!=a?a+1:0,s=e.pageCount;i&&r&&i.setStyle("text",b(r)?r.replace("{current}",o).replace("{total}",s):r({current:o,total:s}))},_getPageInfo:function(t){function e(t){if(t){var e=t.getBoundingRect(),n=e[l]+t.position[o];return{s:n,e:n+e[s],i:t.__legendDataIndex}}}function n(t,e){return t.e>=e&&t.s<=e+a}var i=t.get("scrollDataIndex",!0),r=this.getContentGroup(),a=this._containerGroup.__rectSize,o=t.getOrient().index,s=_S[o],l=xS[o],u=this._findTargetItemIndex(i),h=r.children(),c=h[u],d=h.length,f=d?1:0,p={contentPosition:r.position.slice(),pageCount:f,pageIndex:f-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!c)return p;var g=e(c);p.contentPosition[o]=-g.s;for(var v=u+1,m=g,y=g,_=null;d>=v;++v)_=e(h[v]),(!_&&y.e>m.s+a||_&&!n(_,m.s))&&(m=y.i>m.i?y:_,m&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=m.i),++p.pageCount)),y=_;for(var v=u-1,m=g,y=g,_=null;v>=-1;--v)_=e(h[v]),_&&n(y,_.s)||!(m.i<y.i)||(y=m,null==p.pagePrevDataIndex&&(p.pagePrevDataIndex=m.i),++p.pageCount,++p.pageIndex),m=_;return p},_findTargetItemIndex:function(t){var e,n,i=this.getContentGroup();return this._showController&&i.eachChild(function(i,r){var a=i.__legendDataIndex;null==n&&null!=a&&(n=r),a===t&&(e=r)}),null!=e?e:n}});mu("legendScroll","legendscroll",function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(n)})});var bS=function(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesByIndex(r)))return{point:[]};var a=n.getData(),o=rr(a,t);if(null==o||0>o||x(o))return{point:[]};var s=a.getItemGraphicEl(o),l=n.coordinateSystem;if(n.getTooltipPosition)i=n.getTooltipPosition(o)||[];else if(l&&l.dataToPoint)i=l.dataToPoint(a.getValues(p(l.dimensions,function(t){return a.mapDimension(t)}),o,!0))||[];else if(s){var u=s.getBoundingRect().clone();u.applyTransform(s.transform),i=[u.x+u.width/2,u.y+u.height/2]}return{point:i,el:s}},SS=f,MS=_,IS=ar(),TS=function(t,e,n){var i=t.currTrigger,r=[t.x,t.y],a=t,o=t.dispatchAction||y(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){nf(r)&&(r=bS({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=nf(r),u=a.axesInfo,h=s.axesInfo,c="leave"===i||nf(r),d={},f={},p={list:[],map:{}},g={showPointer:MS(Zd,f),showTooltip:MS(Kd,p)};SS(s.coordSysMap,function(t,e){var n=l||t.containPoint(r);SS(s.coordSysAxesInfo[e],function(t){var e=t.axis,i=tf(u,t);if(!c&&n&&(!u||i)){var a=i&&i.value;null!=a||l||(a=e.pointToData(r)),null!=a&&qd(t,a,g,!1,d)}})});var v={};return SS(h,function(t,e){var n=t.linkGroup;n&&!f[e]&&SS(n.axesInfo,function(e,i){var r=f[i];if(e!==t&&r){var a=r.value;n.mapper&&(a=t.axis.scale.parse(n.mapper(a,ef(e),ef(t)))),v[t.key]=a}})}),SS(v,function(t,e){qd(h[e],t,g,!0,d)}),$d(f,h,d),Qd(p,r,t,o),Jd(h,o,n),d}},CS=(Mu({type:"axisPointer",coordSysAxesInfo:null,defaultOption:{show:"auto",triggerOn:null,zlevel:0,z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#aaa",width:1,type:"solid"},shadowStyle:{color:"rgba(150,150,150,0.3)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,shadowBlur:3,shadowColor:"#aaa"},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}}}),ar()),DS=f,AS=Iu({type:"axisPointer",render:function(t,e,n){var i=e.getComponent("tooltip"),r=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";rf("axisPointer",n,function(t,e,n){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){hf(e.getZr(),"axisPointer"),AS.superApply(this._model,"remove",arguments)},dispose:function(t,e){hf("axisPointer",e),AS.superApply(this._model,"dispose",arguments)}}),kS=ar(),PS=i,LS=y;cf.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,n,i){var r=e.get("value"),a=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=n,i||this._lastValue!==r||this._lastStatus!==a){this._lastValue=r,this._lastStatus=a;var o=this._group,s=this._handle;if(!a||"hide"===a)return o&&o.hide(),void(s&&s.hide());o&&o.show(),s&&s.show();var l={};this.makeElOption(l,r,t,e,n);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(n),this._lastGraphicKey=u;var h=this._moveAnimation=this.determineAnimation(t,e);if(o){var c=_(df,e,h);this.updatePointerEl(o,l,c,e),this.updateLabelEl(o,l,c,e)}else o=this._group=new tg,this.createPointerEl(o,l,t,e),this.createLabelEl(o,l,t,e),n.getZr().add(o);vf(o,e,!0),this._renderHandle(r)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var n=e.get("animation"),i=t.axis,r="category"===i.type,a=e.get("snap");if(!a&&!r)return!1;if("auto"===n||null==n){var o=this.animationThreshold;if(r&&i.getBandWidth()>o)return!0;if(a){var s=td(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>o}return!1}return n===!0},makeElOption:function(){},createPointerEl:function(t,e){var n=e.pointer;if(n){var i=kS(t).pointerEl=new Qm[n.type](PS(e.pointer));t.add(i)}},createLabelEl:function(t,e,n,i){if(e.label){var r=kS(t).labelEl=new Cm(PS(e.label));t.add(r),pf(r,i)}},updatePointerEl:function(t,e,n){var i=kS(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,n,i){var r=kS(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{shape:e.label.shape,position:e.label.position}),pf(r,i))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,n=this._api.getZr(),i=this._handle,r=e.getModel("handle"),a=e.get("status");if(!r.get("show")||!a||"hide"===a)return i&&n.remove(i),void(this._handle=null);var o;this._handle||(o=!0,i=this._handle=ro(r.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){gp(t.event)},onmousedown:LS(this._onHandleDragMove,this,0,0),drift:LS(this._onHandleDragMove,this),ondragend:LS(this._onHandleDragEnd,this)}),n.add(i)),vf(i,e,!1);var s=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];i.setStyle(r.getItemStyle(null,s));var l=r.get("size");x(l)||(l=[l,l]),i.attr("scale",[l[0]/2,l[1]/2]),dl(this,"_doDispatchAxisPointer",r.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,o)}},_moveHandleToValue:function(t,e){df(this._axisPointerModel,!e&&this._moveAnimation,this._handle,gf(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(gf(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(gf(i)),kS(n).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){var t=this._handle;if(t){var e=this._payloadInfo,n=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:e.cursorPoint[0],y:e.cursorPoint[1],tooltipOption:e.tooltipOption,axesInfo:[{axisDim:n.axis.dim,axisIndex:n.componentIndex}]})}},_onHandleDragEnd:function(){this._dragging=!1;var t=this._handle;if(t){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,n){return n=n||0,{x:t[n],y:t[1-n],width:e[n],height:e[1-n]}}},cf.prototype.constructor=cf,fr(cf);var OS=cf.extend({makeElOption:function(t,e,n,i,r){var a=n.axis,o=a.grid,s=i.get("type"),l=If(o,a).getOtherAxis(a).getGlobalExtent(),u=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var h=mf(i),c=BS[s](a,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}var d=od(o.model,n);bf(e,t,d,n,i,r)},getHandleTransform:function(t,e,n){var i=od(e.axis.grid.model,e,{labelInside:!1});return i.labelMargin=n.get("handle.margin"),{position:wf(e.axis,t,i),rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,n){var i=n.axis,r=i.grid,a=i.getGlobalExtent(!0),o=If(r,i).getOtherAxis(i).getGlobalExtent(),s="x"===i.dim?0:1,l=t.position;l[s]+=e[s],l[s]=Math.min(a[1],l[s]),l[s]=Math.max(a[0],l[s]);var u=(o[1]+o[0])/2,h=[u,u];h[s]=l[s];var c=[{verticalAlign:"middle"},{align:"center"}];return{position:l,rotation:t.rotation,cursorPoint:h,tooltipOption:c[s]}}}),BS={line:function(t,e,n){var i=Sf([e,n[0]],[e,n[1]],Tf(t));return{type:"Line",subPixelOptimize:!0,shape:i}},shadow:function(t,e,n){var i=Math.max(1,t.getBandWidth()),r=n[1]-n[0];return{type:"Rect",shape:Mf([e-i/2,n[0]],[i,r],Tf(t))}}};Mb.registerAxisPointerClass("CartesianAxisPointer",OS),pu(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!x(e)&&(t.axisPointer.link=[e])}}),gu(px.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=qc(t,e)}),mu({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},TS),Mu({type:"tooltip",dependencies:["axisPointer"],defaultOption:{zlevel:0,z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#fff",fontSize:14}}});var ES=f,zS=Eo,RS=["","-webkit-","-moz-","-o-"],NS="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";kf.prototype={constructor:kf,_enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),n=t.style;"absolute"!==n.position&&"absolute"!==e.position&&(n.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText=NS+Af(t)+";left:"+this._x+"px;top:"+this._y+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",e.style.pointerEvents=this._enterable?"auto":"none",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?"":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var n,i=this._zr;i&&i.painter&&(n=i.painter.getViewportRootOffset())&&(t+=n.offsetLeft,e+=n.offsetTop);var r=this.el.style;r.left=t+"px",r.top=e+"px",this._x=t,this._y=e},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(y(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){var t=this.el.clientWidth,e=this.el.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var n=document.defaultView.getComputedStyle(this.el);n&&(t+=parseInt(n.borderLeftWidth,10)+parseInt(n.borderRightWidth,10),e+=parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10))}return{width:t,height:e}}},Pf.prototype={constructor:Pf,_enterable:!0,update:function(){},show:function(){this._hideTimeout&&clearTimeout(this._hideTimeout),this.el.attr("show",!0),this._show=!0},setContent:function(t,e,n){this.el&&this._zr.remove(this.el);for(var i={},r=t,a="{marker",o="|}",s=r.indexOf(a);s>=0;){var l=r.indexOf(o),u=r.substr(s+a.length,l-s-a.length);i["marker"+u]=u.indexOf("sub")>-1?{textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:e[u],textOffset:[3,0]}:{textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:e[u]},r=r.substr(l+1),s=r.indexOf("{marker")}this.el=new gm({style:{rich:i,text:t,textLineHeight:20,textBackgroundColor:n.get("backgroundColor"),textBorderRadius:n.get("borderRadius"),textFill:n.get("textStyle.color"),textPadding:n.get("padding")},z:n.get("z")}),this._zr.add(this.el);var h=this;this.el.on("mouseover",function(){h._enterable&&(clearTimeout(h._hideTimeout),h._show=!0),h._inContent=!0}),this.el.on("mouseout",function(){h._enterable&&h._show&&h.hideLater(h._hideDelay),h._inContent=!1})},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el.getBoundingRect();return[t.width,t.height]},moveTo:function(t,e){this.el&&this.el.attr("position",[t,e])},hide:function(){this.el&&this.el.hide(),this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(y(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){var t=this.getSize();return{width:t[0],height:t[1]}}};var FS=y,VS=f,HS=yo,GS=new Cm({shape:{x:-1,y:-1,width:2,height:2}});Iu({type:"tooltip",init:function(t,e){if(!Hf.node){var n=t.getComponent("tooltip"),i=n.get("renderMode");this._renderMode=hr(i);var r;"html"===this._renderMode?(r=new kf(e.getDom(),e),this._newLine="<br/>"):(r=new Pf(e),this._newLine="\n"),this._tooltipContent=r}},render:function(t,e,n){if(!Hf.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=n,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var i=this._tooltipContent;i.update(),i.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel,e=t.get("triggerOn");rf("itemTooltip",this._api,FS(function(t,n,i){"none"!==e&&(e.indexOf(t)>=0?this._tryShow(n,i):"leave"===t&&this._hide(i))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,n=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var i=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!n.isDisposed()&&i.manuallyShowTip(t,e,n,{x:i._lastX,y:i._lastY})})}},manuallyShowTip:function(t,e,n,i){if(i.from!==this.uid&&!Hf.node){var r=Of(i,n);this._ticket="";var a=i.dataByCoordSys;if(i.tooltip&&null!=i.x&&null!=i.y){var o=GS;o.position=[i.x,i.y],o.update(),o.tooltip=i.tooltip,this._tryShow({offsetX:i.x,offsetY:i.y,target:o},r)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,event:{},dataByCoordSys:i.dataByCoordSys,tooltipOption:i.tooltipOption},r);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var s=bS(i,e),l=s.point[0],u=s.point[1];null!=l&&null!=u&&this._tryShow({offsetX:l,offsetY:u,position:i.position,target:s.el,event:{}},r)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target,event:{}},r))}},manuallyHideTip:function(t,e,n,i){var r=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,i.from!==this.uid&&this._hide(Of(i,n))},_manuallyAxisShowTip:function(t,e,n,i){var r=i.seriesIndex,a=i.dataIndex,o=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=a&&null!=o){var s=e.getSeriesByIndex(r);if(s){var l=s.getData(),t=Lf([l.getItemModel(a),s,(s.coordinateSystem||{}).model,t]);if("axis"===t.get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:a,position:i.position}),!0}}},_tryShow:function(t,e){var n=t.target,i=this._tooltipModel;if(i){this._lastX=t.offsetX,this._lastY=t.offsetY;var r=t.dataByCoordSys;r&&r.length?this._showAxisTooltip(r,t):n&&null!=n.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,n,e)):n&&n.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,n,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var n=t.get("showDelay");e=y(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},_showAxisTooltip:function(t,e){var n=this._ecModel,i=this._tooltipModel,a=[e.offsetX,e.offsetY],o=[],s=[],l=Lf([e.tooltipOption,i]),u=this._renderMode,h=this._newLine,c={};VS(t,function(t){VS(t.dataByAxis,function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),i=t.value,a=[];if(e&&null!=i){var l=xf(i,e.axis,n,t.seriesDataIndices,t.valueLabelOpt);f(t.seriesDataIndices,function(o){var h=n.getSeriesByIndex(o.seriesIndex),d=o.dataIndexInside,f=h&&h.getDataParams(d);if(f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=zh(e.axis,i),f.axisValueLabel=l,f){s.push(f);var p,g=h.formatTooltip(d,!0,null,u);if(S(g)){p=g.html;var v=g.markers;r(c,v)}else p=g;a.push(p)}});var d=l;o.push("html"!==u?a.join(h):(d?zo(d)+h:"")+a.join(h))}})},this),o.reverse(),o=o.join(this._newLine+this._newLine);var d=e.position;this._showOrMove(l,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(l,d,a[0],a[1],this._tooltipContent,s):this._showTooltipContent(l,o,s,Math.random(),a[0],a[1],d,void 0,c)})},_showSeriesItemTooltip:function(t,e,n){var i=this._ecModel,r=e.seriesIndex,a=i.getSeriesByIndex(r),o=e.dataModel||a,s=e.dataIndex,l=e.dataType,u=o.getData(),h=Lf([u.getItemModel(s),o,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=h.get("trigger");if(null==c||"item"===c){var d,f,p=o.getDataParams(s,l),g=o.formatTooltip(s,!1,l,this._renderMode);S(g)?(d=g.html,f=g.markers):(d=g,f=null);var v="item_"+o.name+"_"+s;this._showOrMove(h,function(){this._showTooltipContent(h,d,p,v,t.offsetX,t.offsetY,t.position,t.target,f)}),n({type:"showTip",dataIndexInside:s,dataIndex:u.getRawIndex(s),seriesIndex:r,from:this.uid})}},_showComponentItemTooltip:function(t,e,n){var i=e.tooltip;if("string"==typeof i){var r=i;i={content:r,formatter:r}}var a=new uo(i,this._tooltipModel,this._ecModel),o=a.get("content"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,o,a.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)}),n({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,n,i,r,a,o,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent,h=t.get("formatter");o=o||t.get("position");var c=e;if(h&&"string"==typeof h)c=Ro(h,n,!0);else if("function"==typeof h){var d=FS(function(e,i){e===this._ticket&&(u.setContent(i,l,t),this._updatePosition(t,o,r,a,u,n,s))},this);this._ticket=i,c=h(n,i,d)}u.setContent(c,l,t),u.show(t),this._updatePosition(t,o,r,a,u,n,s)}},_updatePosition:function(t,e,n,i,r,a,o){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=r.getSize(),h=t.get("align"),c=t.get("verticalAlign"),d=o&&o.getBoundingRect().clone();if(o&&d.applyTransform(o.transform),"function"==typeof e&&(e=e([n,i],a,r.el,d,{viewSize:[s,l],contentSize:u.slice()})),x(e))n=HS(e[0],s),i=HS(e[1],l);else if(S(e)){e.width=u[0],e.height=u[1];var f=Uo(e,{width:s,height:l});n=f.x,i=f.y,h=null,c=null}else if("string"==typeof e&&o){var p=zf(e,d,u);n=p[0],i=p[1]}else{var p=Bf(n,i,r,s,l,h?null:20,c?null:20);n=p[0],i=p[1]}if(h&&(n-=Rf(h)?u[0]/2:"right"===h?u[0]:0),c&&(i-=Rf(c)?u[1]/2:"bottom"===c?u[1]:0),t.get("confine")){var p=Ef(n,i,r,s,l);n=p[0],i=p[1]}r.moveTo(n,i)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,n=!!e&&e.length===t.length;return n&&VS(e,function(e,i){var r=e.dataByAxis||{},a=t[i]||{},o=a.dataByAxis||[];n&=r.length===o.length,n&&VS(r,function(t,e){var i=o[e]||{},r=t.seriesDataIndices||[],a=i.seriesDataIndices||[];n&=t.value===i.value&&t.axisType===i.axisType&&t.axisId===i.axisId&&r.length===a.length,n&&VS(r,function(t,e){var i=a[e];n&=t.seriesIndex===i.seriesIndex&&t.dataIndex===i.dataIndex})})}),this._lastDataByCoordSys=t,!!n},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){Hf.node||(this._tooltipContent.hide(),hf("itemTooltip",e))}}),mu({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},function(){}),mu({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},function(){}),t.version=tx,t.dependencies=ex,t.PRIORITY=px,t.init=su,t.connect=lu,t.disConnect=uu,t.disconnect=Ex,t.dispose=hu,t.getInstanceByDom=cu,t.getInstanceById=du,t.registerTheme=fu,t.registerPreprocessor=pu,t.registerProcessor=gu,t.registerPostUpdate=vu,t.registerAction=mu,t.registerCoordinateSystem=yu,t.getCoordinateSystemDimensions=_u,t.registerLayout=xu,t.registerVisual=wu,t.registerLoading=Su,t.extendComponentModel=Mu,t.extendComponentView=Iu,t.extendSeriesModel=Tu,t.extendChartView=Cu,t.setCanvasCreator=Du,t.registerMap=Au,t.getMap=ku,t.dataTool=zx,t.zrender=Qg,t.number=uy,t.format=vy,t.throttle=cl,t.helper=Nw,t.matrix=bp,t.vector=sp,t.color=Hp,t.parseGeoJSON=Vw,t.parseGeoJson=Xw,t.util=Yw,t.graphic=Uw,t.List=jx,t.Model=uo,t.Axis=Ww,t.env=Hf}); \ No newline at end of file diff --git a/src/main/resources/static/lib/layui/css/layui.css b/src/main/resources/static/lib/layui/css/layui.css new file mode 100644 index 0000000..ed0c509 --- /dev/null +++ b/src/main/resources/static/lib/layui/css/layui.css @@ -0,0 +1 @@ +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{display:inline-block;border:none;vertical-align:middle}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3,h4{font-weight:700}h5,h6{font-weight:500;font-size:100%}button,input,select,textarea{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:1.6;color:#333;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:0;line-height:0;margin:10px 0;padding:0;border:none;border-bottom:1px solid #eee;clear:both;overflow:hidden;background:0 0}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-clear-space{word-spacing:-5px}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.layui-edge{position:relative;display:inline-block;vertical-align:middle;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent;overflow:hidden}.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-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.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}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=282);src:url(../font/iconfont.eot?v=282#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=282) format('woff2'),url(../font/iconfont.woff?v=282) format('woff'),url(../font/iconfont.ttf?v=282) format('truetype'),url(../font/iconfont.svg?v=282#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-leaf:before{content:"\e701"}.layui-icon-folder:before{content:"\eabe"}.layui-icon-folder-open:before{content:"\eac1"}.layui-icon-gitee:before{content:"\e69b"}.layui-icon-github:before{content:"\e6a7"}.layui-icon-disabled:before{content:"\e6cc"}.layui-icon-moon:before{content:"\e6c2"}.layui-icon-error:before{content:"\e693"}.layui-icon-success:before{content:"\e697"}.layui-icon-question:before{content:"\e699"}.layui-icon-lock:before{content:"\e69a"}.layui-icon-eye:before{content:"\e695"}.layui-icon-eye-invisible:before{content:"\e696"}.layui-icon-backspace:before{content:"\e694"}.layui-icon-tips-fill:before{content:"\eb2e"}.layui-icon-test:before{content:"\e692"}.layui-icon-clear:before{content:"\e788"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-light:before{content:"\e748"}.layui-icon-music:before{content:"\e690"}.layui-icon-time:before{content:"\e68d"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-at:before{content:"\e687"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-key:before{content:"\e683"}.layui-icon-android:before{content:"\e684"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-mute:before{content:"\e685"}.layui-icon-gift:before{content:"\e627"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-ios:before{content:"\e680"}.layui-icon-logout:before{content:"\e682"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-rss:before{content:"\e808"}.layui-icon-email:before{content:"\e618"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-service:before{content:"\e626"}.layui-icon-addition:before{content:"\e624"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-slider:before{content:"\e714"}.layui-icon-print:before{content:"\e66d"}.layui-icon-export:before{content:"\e67d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-username:before{content:"\e66f"}.layui-icon-password:before{content:"\e673"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-auz:before{content:"\e672"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-tips:before{content:"\e702"}.layui-icon-note:before{content:"\e66e"}.layui-icon-senior:before{content:"\e674"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-notice:before{content:"\e667"}.layui-icon-console:before{content:"\e665"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-set:before{content:"\e716"}.layui-icon-template:before{content:"\e663"}.layui-icon-app:before{content:"\e653"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-home:before{content:"\e68e"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-more:before{content:"\e65f"}.layui-icon-camera:before{content:"\e660"}.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-read:before{content:"\e705"}.layui-icon-location:before{content:"\e715"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-return:before{content:"\e65c"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-fire:before{content:"\e756"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-cart:before{content:"\e657"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-next:before{content:"\e65b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-user:before{content:"\e770"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-component:before{content:"\e857"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-pause:before{content:"\e651"}.layui-icon-play:before{content:"\e652"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-voice:before{content:"\e688"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-link:before{content:"\e64c"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-share:before{content:"\e641"}.layui-icon-edit:before{content:"\e642"}.layui-icon-delete:before{content:"\e640"}.layui-icon-engine:before{content:"\e628"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-table:before{content:"\e62d"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-date:before{content:"\e637"}.layui-icon-layer:before{content:"\e638"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-file:before{content:"\e621"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-404:before{content:"\e61c"}.layui-icon-about:before{content:"\e60b"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-down:before{content:"\e61a"}.layui-icon-up:before{content:"\e619"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-search:before{content:"\e615"}.layui-icon-friends:before{content:"\e612"}.layui-icon-group:before{content:"\e613"}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-log:before{content:"\e60e"}.layui-icon-list:before{content:"\e60a"}.layui-icon-release:before{content:"\e609"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-ok:before{content:"\e605"}.layui-icon-help:before{content:"\e607"}.layui-icon-chat:before{content:"\e606"}.layui-icon-top:before{content:"\e604"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-star:before{content:"\e600"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-ok-circle:before{content:"\1005"}.layui-main{position:relative;width:1160px;margin:0 auto}.layui-header{position:relative;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:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-body{overflow-x:hidden}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23292e}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-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;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#fafafa}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#16baaa;font-size:16px;box-shadow:0 1px 2px 0 rgb(0 0 0 / 15%)}.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;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-xl1,.layui-col-xl10,.layui-col-xl11,.layui-col-xl12,.layui-col-xl2,.layui-col-xl3,.layui-col-xl4,.layui-col-xl5,.layui-col-xl6,.layui-col-xl7,.layui-col-xl8,.layui-col-xl9,.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:767.98px){.layui-container{padding:0 15px}.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:720px}.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:960px}.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:1150px}.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%}}@media screen and (min-width:1400px){.layui-container{width:1330px}.layui-hide-xl{display:none!important}.layui-show-xl-block{display:block!important}.layui-show-xl-inline{display:inline!important}.layui-show-xl-inline-block{display:inline-block!important}.layui-col-xl1,.layui-col-xl10,.layui-col-xl11,.layui-col-xl12,.layui-col-xl2,.layui-col-xl3,.layui-col-xl4,.layui-col-xl5,.layui-col-xl6,.layui-col-xl7,.layui-col-xl8,.layui-col-xl9{float:left}.layui-col-xl1{width:8.33333333%}.layui-col-xl2{width:16.66666667%}.layui-col-xl3{width:25%}.layui-col-xl4{width:33.33333333%}.layui-col-xl5{width:41.66666667%}.layui-col-xl6{width:50%}.layui-col-xl7{width:58.33333333%}.layui-col-xl8{width:66.66666667%}.layui-col-xl9{width:75%}.layui-col-xl10{width:83.33333333%}.layui-col-xl11{width:91.66666667%}.layui-col-xl12{width:100%}.layui-col-xl-offset1{margin-left:8.33333333%}.layui-col-xl-offset2{margin-left:16.66666667%}.layui-col-xl-offset3{margin-left:25%}.layui-col-xl-offset4{margin-left:33.33333333%}.layui-col-xl-offset5{margin-left:41.66666667%}.layui-col-xl-offset6{margin-left:50%}.layui-col-xl-offset7{margin-left:58.33333333%}.layui-col-xl-offset8{margin-left:66.66666667%}.layui-col-xl-offset9{margin-left:75%}.layui-col-xl-offset10{margin-left:83.33333333%}.layui-col-xl-offset11{margin-left:91.66666667%}.layui-col-xl-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.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-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-col-space32{margin:-16px}.layui-col-space32>*{padding:16px}.layui-padding-1{padding:4px!important}.layui-padding-2{padding:8px!important}.layui-padding-3{padding:16px!important}.layui-padding-4{padding:32px!important}.layui-padding-5{padding:48px!important}.layui-margin-1{margin:4px!important}.layui-margin-2{margin:8px!important}.layui-margin-3{margin:16px!important}.layui-margin-4{margin:32px!important}.layui-margin-5{margin:48px!important}.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:1.8;border-left:5px solid #16b777;border-radius:0 2px 2px 0;background-color:#fafafa}.layui-quote-nm{border-style:solid;border-width:1px;border-left-width: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}.layui-field-title{margin:16px 0;border-width:0;border-top-width:1px}.layui-field-box{padding:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#16b777;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:#5f5f5f}.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:#fafafa;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;color:#5f5f5f}.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 #f8f8f8;color:#333;border-radius:2px 2px 0 0;font-size:14px}.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{position:relative;border-width:1px;border-style:solid;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);background-color:#fff;color:#5f5f5f}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.layui-scrollbar-hide{overflow:hidden!important}.layui-bg-red{background-color:#ff5722!important;color:#fff!important}.layui-bg-orange{background-color:#ffb800!important;color:#fff!important}.layui-bg-green{background-color:#16baaa!important;color:#fff!important}.layui-bg-cyan{background-color:#2f4056!important;color:#fff!important}.layui-bg-blue{background-color:#1e9fff!important;color:#fff!important}.layui-bg-purple{background-color:#a233c6!important;color:#fff!important}.layui-bg-black{background-color:#2f363c!important;color:#fff!important}.layui-bg-gray{background-color:#fafafa!important;color:#5f5f5f!important}.layui-badge-rim,.layui-border,.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-input-split,.layui-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border{border-width:1px;border-style:solid;color:#5f5f5f!important}.layui-border-red{border-width:1px;border-style:solid;border-color:#ff5722!important;color:#ff5722!important}.layui-border-orange{border-width:1px;border-style:solid;border-color:#ffb800!important;color:#ffb800!important}.layui-border-green{border-width:1px;border-style:solid;border-color:#16baaa!important;color:#16baaa!important}.layui-border-cyan{border-width:1px;border-style:solid;border-color:#2f4056!important;color:#2f4056!important}.layui-border-blue{border-width:1px;border-style:solid;border-color:#1e9fff!important;color:#1e9fff!important}.layui-border-purple{border-width:1px;border-style:solid;border-color:#a233c6!important;color:#a233c6!important}.layui-border-black{border-width:1px;border-style:solid;border-color:#2f363c!important;color:#2f363c!important}hr.layui-border-black,hr.layui-border-blue,hr.layui-border-cyan,hr.layui-border-green,hr.layui-border-orange,hr.layui-border-purple,hr.layui-border-red{border-width:0 0 1px}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.8;font-size:14px}.layui-text h1,.layui-text h2,.layui-text h3,.layui-text h4,.layui-text h5,.layui-text h6{color:#3a3a3a}.layui-text h1{font-size:32px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text h4{font-size:16px}.layui-text h5{font-size:14px}.layui-text h6{font-size:13px}.layui-text ol,.layui-text ul{padding-left:15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text ol li{margin-top:5px;list-style-type:decimal}.layui-text-em,.layui-word-aux{color:#999!important;padding-left:5px!important;padding-right:5px!important}.layui-text p{margin:15px 0}.layui-text p:first-child{margin-top:0}.layui-text p:last-child{margin-bottom:0}.layui-text a:not(.layui-btn){color:#01aaed}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text blockquote:not(.layui-elem-quote){padding:5px 15px;border-left:5px solid #eee}.layui-text pre>code:not(.layui-code){padding:15px;font-family:"Courier New",Consolas,"Lucida Console"}.layui-font-12{font-size:12px!important}.layui-font-13{font-size:13px!important}.layui-font-14{font-size:14px!important}.layui-font-16{font-size:16px!important}.layui-font-18{font-size:18px!important}.layui-font-20{font-size:20px!important}.layui-font-22{font-size:22px!important}.layui-font-24{font-size:24px!important}.layui-font-26{font-size:26px!important}.layui-font-28{font-size:28px!important}.layui-font-30{font-size:30px!important}.layui-font-32{font-size:32px!important}.layui-font-red{color:#ff5722!important}.layui-font-orange{color:#ffb800!important}.layui-font-green{color:#16baaa!important}.layui-font-cyan{color:#2f4056!important}.layui-font-blue{color:#01aaed!important}.layui-font-purple{color:#a233c6!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{display:inline-block;vertical-align:middle;height:38px;line-height:38px;border:1px solid transparent;padding:0 18px;background-color:#16baaa;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border-radius:2px;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.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{word-spacing:-5px}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px;word-spacing:normal}.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{padding:0 2px;vertical-align:middle\0;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#5f5f5f}.layui-btn-primary:hover{border-color:#16baaa;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:#16b777}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border-color:#eee!important;background-color:#fbfbfb!important;color:#d2d2d2!important;cursor:not-allowed!important;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-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!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:#d2d2d2;color:#16baaa}.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 #d2d2d2}.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;color:rgba(0,0,0,.85);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:#16b777!important;box-shadow:0 0 0 3px rgba(22,183,119,.08)}.layui-textarea{position:relative;min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-input[disabled],.layui-textarea[disabled]{background-color:#fafafa}.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{position:relative;margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{position:relative;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,.layui-input-inline{position:relative}.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{position:relative;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;box-shadow:0 0 0 3px rgba(255,87,34,.08)}.layui-input-prefix,.layui-input-split,.layui-input-suffix,.layui-input-suffix .layui-input-affix{position:absolute;right:0;top:0;padding:0 10px;width:35px;height:100%;text-align:center;transition:all .3s;box-sizing:border-box}.layui-input-prefix{left:0;border-radius:2px 0 0 2px}.layui-input-suffix{right:0;border-radius:0 2px 2px 0}.layui-input-split{border-width:1px;border-style:solid}.layui-input-prefix .layui-icon,.layui-input-split .layui-icon,.layui-input-suffix .layui-icon{position:relative;font-size:16px;color:#5f5f5f;transition:all .3s}.layui-input-group{position:relative;display:table;box-sizing:border-box}.layui-input-group>*{display:table-cell;vertical-align:middle;position:relative}.layui-input-group .layui-input{padding-right:15px}.layui-input-group>.layui-input-prefix{width:auto;border-right:0}.layui-input-group>.layui-input-suffix{width:auto;border-left:0}.layui-input-group .layui-input-split{white-space:nowrap}.layui-input-wrap{position:relative;line-height:38px}.layui-input-wrap .layui-input{padding-right:35px}.layui-input-wrap .layui-input::-ms-clear,.layui-input-wrap .layui-input::-ms-reveal{display:none}.layui-input-wrap .layui-input-prefix+.layui-input,.layui-input-wrap .layui-input-prefix~* .layui-input{padding-left:35px}.layui-input-wrap .layui-input-split+.layui-input,.layui-input-wrap .layui-input-split~* .layui-input{padding-left:45px}.layui-input-wrap .layui-input-prefix~.layui-form-select{position:static}.layui-input-wrap .layui-input-prefix,.layui-input-wrap .layui-input-split,.layui-input-wrap .layui-input-suffix{pointer-events:none}.layui-input-wrap .layui-input:hover+.layui-input-split{border-color:#d2d2d2}.layui-input-wrap .layui-input:focus+.layui-input-split{border-color:#16b777}.layui-input-wrap .layui-input.layui-form-danger:focus+.layui-input-split{border-color:#ff5722}.layui-input-wrap .layui-input-prefix.layui-input-split{border-width:0;border-right-width:1px}.layui-input-wrap .layui-input-suffix.layui-input-split{border-width:0;border-left-width:1px}.layui-input-affix{line-height:38px}.layui-input-suffix .layui-input-affix{right:auto;left:-35px}.layui-input-affix .layui-icon{color:rgba(0,0,0,.8);pointer-events:auto!important;cursor:pointer}.layui-input-affix .layui-icon-clear{color:rgba(0,0,0,.3)}.layui-input-affix .layui-icon:hover{color:rgba(0,0,0,.6)}.layui-input-wrap .layui-input-number{width:24px;padding:0}.layui-input-wrap .layui-input-number .layui-icon{position:absolute;right:0;width:100%;height:50%;line-height:normal;font-size:12px}.layui-input-wrap .layui-input-number .layui-icon:before{position:absolute;left:50%;top:50%;margin-top:-6px;margin-left:-6px}.layui-input-wrap .layui-input-number .layui-icon-up{top:0;border-bottom:1px solid #eee}.layui-input-wrap .layui-input-number .layui-icon-down{bottom:0}.layui-input-wrap .layui-input-number .layui-icon:hover{font-weight:700}.layui-input-wrap .layui-input[type=number]::-webkit-inner-spin-button,.layui-input-wrap .layui-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none!important}.layui-input-wrap .layui-input[type=number]{-moz-appearance:textfield}.layui-input-wrap .layui-input[type=number].layui-input-number-out-of-range{color:#ff5722}.layui-form-select{position:relative;color:#5f5f5f}.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 #eee;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);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:#f8f8f8;-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:#f8f8f8;color:#16b777;font-weight:700}.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.layui-form-selected .layui-edge{margin-top:-3px\0}: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;display:inline-block;vertical-align:middle;height:30px;line-height:30px;margin-right:10px;padding-right:30px;background-color:#fff;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox>*{display:inline-block;vertical-align:middle}.layui-form-checkbox>div{padding:0 11px;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox>div>.layui-icon{line-height:normal}.layui-form-checkbox:hover>div{background-color:#c2c2c2}.layui-form-checkbox>i{position:absolute;right:0;top:0;width:30px;height:100%;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;color:rgba(255,255,255,0);font-size:20px;text-align:center;box-sizing:border-box}.layui-form-checkbox:hover>i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#16b777}.layui-form-checked:hover>div,.layui-form-checked>div{background-color:#16b777}.layui-form-checked:hover>i,.layui-form-checked>i{color:#16b777}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox.layui-checkbox-disabled>div{background-color:#eee!important}.layui-form [lay-checkbox]{display:none}.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:24px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary]>div{margin-top:-1px;padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#5f5f5f}.layui-form-checkbox[lay-skin=primary]>i{right:auto;left:0;width:16px;height:16px;line-height:14px;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:#16b777;color:#fff}.layui-form-checked[lay-skin=primary]>i{border-color:#16b777!important;background-color:#16b777;color:#fff}.layui-checkbox-disabled[lay-skin=primary]>div{background:0 0!important}.layui-form-checked.layui-checkbox-disabled[lay-skin=primary]>i{background:#eee!important;border-color:#eee!important}.layui-checkbox-disabled[lay-skin=primary]:hover>i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-checkbox[lay-skin=primary]>.layui-icon-indeterminate{border-color:#16b777}.layui-form-checkbox[lay-skin=primary]>.layui-icon-indeterminate:before{content:'';display:inline-block;vertical-align:middle;position:relative;width:50%;height:1px;margin:-1px auto 0;background-color:#16b777}.layui-form-switch{position:relative;display:inline-block;vertical-align:middle;height:24px;line-height:22px;min-width:44px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;box-sizing:border-box;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>div{position:relative;top:0;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:#16b777;background-color:#16b777}.layui-form-onswitch>i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch>div{margin-left:0;margin-right:21px;color:#fff!important}.layui-form-checkbox[lay-skin=none] *,.layui-form-radio[lay-skin=none] *{box-sizing:border-box}.layui-form-checkbox[lay-skin=none],.layui-form-radio[lay-skin=none]{position:relative;min-height:20px;margin:0;padding:0;height:auto;line-height:normal}.layui-form-checkbox[lay-skin=none]>div,.layui-form-radio[lay-skin=none]>div{position:relative;top:0;left:0;cursor:pointer;z-index:10;color:inherit;background-color:inherit}.layui-form-checkbox[lay-skin=none]>i,.layui-form-radio[lay-skin=none]>i{display:none}.layui-form-checkbox[lay-skin=none].layui-checkbox-disabled>div,.layui-form-radio[lay-skin=none].layui-radio-disabled>div{cursor:not-allowed}.layui-checkbox-disabled{border-color:#eee!important}.layui-checkbox-disabled>div{color:#c2c2c2!important}.layui-checkbox-disabled>i{border-color:#eee!important}.layui-checkbox-disabled:hover>i{color:#fff!important}.layui-form-radio{display:inline-block;vertical-align:middle;line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio>*{display:inline-block;vertical-align:middle;font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio:hover>*,.layui-form-radioed,.layui-form-radioed>i{color:#16b777}.layui-radio-disabled>i{color:#eee!important}.layui-radio-disabled>*{color:#c2c2c2!important}.layui-form [lay-radio]{display:none}.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:#fafafa;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;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;border-right-width:1px}.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!important;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-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 #eee}.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-laypage a[data-page]{color:#333}.layui-laypage a{text-decoration:none!important;cursor:pointer}.layui-laypage a:hover{color:#16baaa}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.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:#16baaa}.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{display:inline-block;width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#16baaa!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px;clear:both}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{display:inline-block;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%;margin:10px 0;background-color:#fff;color:#5f5f5f}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:600}.layui-table-mend{background-color:#fff}.layui-table-click,.layui-table-hover,.layui-table[lay-even] tbody tr:nth-child(even){background-color:#f8f8f8}.layui-table-checked{background-color:#dbfbf0}.layui-table-checked.layui-table-click,.layui-table-checked.layui-table-hover{background-color:#abf8dd}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-mend,.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:#eee}.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;border-bottom-width:1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0;border-right-width:1px}.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-top:15px;padding-right:30px;padding-bottom:15px;padding-left:30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:50px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{padding-top:5px;padding-right:10px;padding-bottom:5px;padding-left:10px;font-size:12px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:30px;line-height:20px;padding-top:5px;padding-left:11px;padding-right:11px}.layui-table[lay-data],.layui-table[lay-options]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view{clear:both}.layui-table-view .layui-table{position:relative;width:auto;margin:0;border:0;border-collapse:separate}.layui-table-view .layui-table[lay-skin=line]{border-width:0;border-right-width:1px}.layui-table-view .layui-table[lay-skin=row]{border-width:0;border-bottom-width:1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:0;border-top:none;border-left:none}.layui-table-view .layui-table th [lay-event],.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td,.layui-table-view .layui-table th span{cursor:default}.layui-table-view .layui-table td[data-edit]{cursor:text}.layui-table-view .layui-table td[data-edit]:hover:after{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;border:1px solid #16b777;pointer-events:none;content:""}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px;line-height:16px}.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:199}.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;border-bottom-width:1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-column{position:relative;width:100%;min-height:41px;padding:8px 16px;border-width:0;border-bottom-width:1px}.layui-table-column .layui-btn-container{margin-bottom:-8px}.layui-table-column .layui-btn-container .layui-btn{margin-right:8px;margin-bottom:8px}.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;z-index:399;padding:5px 0!important;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-tool-panel li{padding:0 10px;margin:0!important;line-height:30px;list-style-type:none!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%}.layui-table-tool-panel li:hover{background-color:#f8f8f8}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{padding-left:28px}.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;border-left-width: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:#5f5f5f}.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:#5f5f5f}.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:38px;line-height:28px;padding:6px 15px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-form-checkbox[lay-skin=primary]>div{padding-left:24px}.layui-table-cell .layui-table-link{color:#01aaed}.layui-table-cell .layui-btn{vertical-align:inherit}.layui-table-cell[align=center]{-webkit-box-pack:center}.layui-table-cell[align=right]{-webkit-box-pack:end}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{text-align:center;-webkit-box-pack:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:30px 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:1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0;border-left-width: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;border-width:0;border-left-width:1px}.layui-table-tool{position:relative;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0;border-bottom-width:1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-total{margin-bottom:-1px;border-width:0;border-top-width:1px;overflow:hidden}.layui-table-page{border-width:0;border-top-width:1px;margin-bottom:-1px;white-space:nowrap;overflow:hidden}.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:-11px!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-pagebar{float:right;line-height:23px}.layui-table-pagebar .layui-btn-sm{margin-top:-1px}.layui-table-pagebar .layui-btn-xs{margin-top:2px}.layui-table-view select[lay-ignore]{display:inline-block}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;z-index:189;min-width:100%;min-height:100%;padding:5px 14px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15);background-color:#fff}.layui-table-edit:focus{border-color:#16b777!important}input.layui-input.layui-table-edit{height:100%}select.layui-table-edit{padding:0 0 0 10px;border-color:#d2d2d2}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0}.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:24px;height:100%;padding:5px 0;border-width:0;border-left-width: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;font-size:14px}.layui-table-grid-down:hover{background-color:#fbfbfb}.layui-table-expanded{height:95px}.layui-table-expanded .layui-table-cell,.layui-table-view .layui-table[lay-size=lg] .layui-table-expanded .layui-table-cell,.layui-table-view .layui-table[lay-size=sm] .layui-table-expanded .layui-table-cell{height:auto;max-height:94px;white-space:normal;text-overflow:clip}.layui-table-cell-c{position:absolute;bottom:-10px;right:50%;margin-right:-9px;width:20px;height:20px;line-height:18px;cursor:pointer;text-align:center;background-color:#fff;border:1px solid #eee;border-radius:50%;z-index:1000;transition:.3s all;font-size:14px}.layui-table-cell-c:hover{border-color:#16b777}.layui-table-expanded td:hover .layui-table-cell{overflow:auto}.layui-table-main>.layui-table>tbody>tr:last-child>td>.layui-table-cell-c{bottom:0}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:-49px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#5f5f5f}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#5f5f5f;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-table-tree-nodeIcon{max-width:20px}.layui-table-tree-nodeIcon>*{width:100%}.layui-table-tree-flexIcon,.layui-table-tree-nodeIcon{margin-right:2px}.layui-table-tree-flexIcon{cursor:pointer}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-list{margin:11px 0}.layui-upload-choose{max-width:200px;padding:0 10px;color:#999;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-upload-drag{position:relative;display:inline-block;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:#16baaa}.layui-upload-drag[lay-over]{border-color:#16baaa}.layui-upload-form{display:inline-block}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;display:inline-block;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-btn-container .layui-upload-choose{padding-left:0}.layui-menu{position:relative;margin:5px 0;background-color:#fff;box-sizing:border-box}.layui-menu *{box-sizing:border-box}.layui-menu li,.layui-menu-body-title,.layui-menu-body-title a{padding:5px 15px;color:initial}.layui-menu li{position:relative;margin:0 0 1px;line-height:26px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer;transition:all .3s}.layui-menu li:hover{background-color:#f8f8f8}.layui-menu li.layui-disabled,.layui-menu li.layui-disabled *{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group>.layui-menu-body-title,.layui-menu-item-parent>.layui-menu-body-title{padding-right:38px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default}.layui-menu .layui-menu-item-none{text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down>.layui-menu-body-title>.layui-icon-down{transform:rotate(180deg)}.layui-menu .layui-menu-item-up>.layui-menu-body-title>.layui-icon-up{transform:rotate(-180deg)}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:#000}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#f8f8f8!important;color:#16b777}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#16b777}.layui-menu .layui-menu-item-checked:after{position:absolute;right:-1px;top:0;bottom:0;border-right:3px solid #16b777;content:""}.layui-menu-body-title{position:relative;margin:-5px -15px;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title a:hover{transition:all .3s}.layui-menu-body-title>.layui-icon{position:absolute;right:15px;top:50%;margin-top:-6px;line-height:normal;font-size:14px;transition:all .2s;-webkit-transition:all .2s}.layui-menu-body-title>.layui-icon:hover{transition:all .3s}.layui-menu-body-title>.layui-icon-right{right:14px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px 0}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#16b777}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px 0}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:77777777;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-dropdown-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");position:fixed;_position:absolute;pointer-events:auto}.layui-nav{position:relative;padding:0 15px;background-color:#2f363c;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;margin-top:0;list-style:none;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{content:"";position:absolute;left:0;top:0;width:0;height:3px;background-color:#16b777;transition:all .2s;-webkit-transition:all .2s;pointer-events:none}.layui-nav-bar{z-index:1000}.layui-nav[lay-bar=disabled] .layui-nav-bar{display:none}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff;text-decoration:none}.layui-nav .layui-this:after{top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{position:absolute;top:0;right:3px;left:auto!important;margin-top:0;font-size:12px;cursor:pointer;transition:all .2s;-webkit-transition:all .2s}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{transform:rotate(180deg)}.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 #eee;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap;box-sizing:border-box}.layui-nav .layui-nav-child a{color:#5f5f5f;color:rgba(0,0,0,.8)}.layui-nav .layui-nav-child a:hover{background-color:#f8f8f8;color:rgba(0,0,0,.8)}.layui-nav-child dd{margin:1px 0;position:relative}.layui-nav-child dd.layui-this{background-color:#f8f8f8;color:#000}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-child-r{left:auto;right:0}.layui-nav-child-c{text-align:center}.layui-nav.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:40px}.layui-nav-tree .layui-nav-item a{position:relative;height:40px;line-height:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item>a{padding-top:5px;padding-bottom:5px}.layui-nav-tree .layui-nav-more{right:15px}.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding:5px 0}.layui-nav-tree .layui-nav-bar{width:5px;height:0}.layui-side .layui-nav-tree .layui-nav-bar{width:2px}.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:#16baaa;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-bar{background-color:#16baaa}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;background:0 0;background-color:rgba(0,0,0,.3);box-shadow:none}.layui-nav-tree .layui-nav-child dd{margin:0}.layui-nav-tree .layui-nav-child a{color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child,.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-nav-tree.layui-bg-gray a,.layui-nav.layui-bg-gray .layui-nav-item a{color:#373737;color:rgba(0,0,0,.8)}.layui-nav-tree.layui-bg-gray .layui-nav-itemed>a{color:#000!important}.layui-nav.layui-bg-gray .layui-this a{color:#16b777}.layui-nav-tree.layui-bg-gray .layui-nav-child{padding-left:11px;background:0 0}.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this,.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this a,.layui-nav-tree.layui-bg-gray .layui-this,.layui-nav-tree.layui-bg-gray .layui-this>a{background:0 0!important;color:#16b777!important;font-weight:700}.layui-nav-tree.layui-bg-gray .layui-nav-bar{background-color:#16b777}.layui-breadcrumb{visibility:hidden;font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#16b777!important}.layui-breadcrumb a cite{color:#5f5f5f;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 .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 .layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s}.layui-tab .layui-tab-title li{position:relative;line-height:40px;min-width:65px;margin:0;padding:0 15px;text-align:center;cursor:pointer}.layui-tab .layui-tab-title li a{display:block;padding:0 15px;margin:0 -15px}.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:#eee;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:15px 0}.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:#16baaa}.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 #16b777}.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:#fafafa}.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:#16b777}.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:#16b777;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:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.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:#5f5f5f}.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:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.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\0;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:none 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[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right: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\0;opacity:1;left:20px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add]{right: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 ul li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#eee;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind ul li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind ul 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] .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]>*{left:0!important}.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]>*{left:0!important}.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:16px;bottom:16px;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:#5f5f5f;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{display:block;position:relative;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#fff;color:#333;font-family:"Courier New",Consolas,"Lucida Console";font-size:12px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.layui-transfer-box{position:relative;display:inline-block;vertical-align:middle;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 11px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:11px;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%;line-height:normal;margin-top:-8px;color:#5f5f5f}.layui-transfer-active{margin:0 15px;display:inline-block;vertical-align:middle}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#16b777;border-color:#16b777;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#fbfbfb;border-color:#eee;color:#d2d2d2}.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;margin-top:0!important;padding:0 11px;list-style-type:none!important}.layui-transfer-data li:hover{background-color:#f8f8f8;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 11px;text-align:center;color:#999}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:11px 6px 11px 0;font-size:0}.layui-rate li{margin-top:0!important}.layui-rate li i.layui-icon{font-size:20px;color:#ffb800}.layui-rate li i.layui-icon{margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover,.layui-rate-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:38px;height:38px;border:1px solid #eee;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:44px;height:44px;line-height:30px}.layui-colorpicker.layui-colorpicker-sm{width:30px;height:30px;line-height:20px;padding:3px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:16px;padding:1px}.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;left:-999999px;top:-999999px;z-index:77777777;width:280px;margin:5px 0;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;position:relative;z-index:10}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:168px;height:30px;color:#5f5f5f;padding-left:5px}.layui-slider{height:4px;background:#eee;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:77777777;white-space:nowrap;-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 transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px;box-sizing:border-box}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.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 #eee}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none;padding-right:21px}.layui-slider-input-btn i:hover{color:#16baaa}.layui-slider-vertical{width:4px;margin-left:33px}.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-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:26px;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{display:inline-block;vertical-align:middle;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{display:inline-block;vertical-align:middle;position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:14px;line-height:12px;width:14px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#5f5f5f}.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-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:#5f5f5f}.layui-tree-btnGroup{visibility:hidden;display:inline-block;vertical-align:middle;position:relative}.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{position:relative;display:inline-block;vertical-align:middle;height:20px;line-height:20px;padding:0;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:both;animation-duration:.3s;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 .2s;-webkit-transition:all .2s}@-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,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-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}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-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}html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-wrap{font-size:13px;font-family:"Courier New",Consolas,"Lucida Console"}.layui-code-view{display:block;position:relative;padding:0!important;border:1px solid #eee;border-left-width:6px;background-color:#fff;color:#333}.layui-code-view pre{margin:0!important}.layui-code-header{position:relative;z-index:3;padding:0 11px;height:40px;line-height:40px;border-bottom:1px solid #eee;background-color:#fafafa;font-size:12px}.layui-code-header>.layui-code-header-about{position:absolute;right:11px;top:0;color:#b7b7b7}.layui-code-header-about>a{padding-left:10px}.layui-code-wrap{position:relative;display:block;z-index:1;margin:0!important;padding:11px 0!important;overflow-x:hidden;overflow-y:auto}.layui-code-line{position:relative;line-height:19px;margin:0!important}.layui-code-line-number{position:absolute;left:0;top:0;padding:0 8px;min-width:45px;height:100%;text-align:right;user-select:none;white-space:nowrap;overflow:hidden}.layui-code-line-content{padding:0 11px;word-wrap:break-word;white-space:pre-wrap}.layui-code-ln-mode>.layui-code-wrap>.layui-code-line{padding-left:45px}.layui-code-ln-side{position:absolute;left:0;top:0;bottom:0;z-index:0;width:45px;border-right:1px solid #eee;border-color:rgb(126 122 122 / 15%);background-color:#fafafa;pointer-events:none}.layui-code-nowrap>.layui-code-wrap{overflow:auto}.layui-code-nowrap>.layui-code-wrap>.layui-code-line>.layui-code-line-content{white-space:pre;word-wrap:normal}.layui-code-nowrap>.layui-code-ln-side{border-right-width:0!important;background:0 0!important}.layui-code-fixbar{position:absolute;top:8px;right:11px;padding-right:45px;z-index:5}.layui-code-fixbar>span{position:absolute;right:0;top:0;padding:0 8px;color:#777;transition:all .3s}.layui-code-fixbar>span:hover{color:#16b777}.layui-code-copy{display:none;cursor:pointer}.layui-code-preview>.layui-code-view>.layui-code-fixbar .layui-code-copy{display:none!important}.layui-code-view:hover>.layui-code-fixbar .layui-code-copy{display:block}.layui-code-view:hover>.layui-code-fixbar .layui-code-lang-marker{display:none}.layui-code-theme-dark,.layui-code-theme-dark>.layui-code-header{border-color:rgb(126 122 122 / 15%);background-color:#1f1f1f}.layui-code-theme-dark{border-width:1px;color:#ccc}.layui-code-theme-dark>.layui-code-ln-side{border-right-color:#2a2a2a;background:0 0;color:#6e7681}.layui-code textarea{display:none}.layui-code-preview>.layui-code,.layui-code-preview>.layui-code-view{margin:0}.layui-code-preview>.layui-tab{position:relative;z-index:1;margin-bottom:0}.layui-code-preview>.layui-tab>.layui-tab-title{border-width:0}.layui-code-preview .layui-code-item{display:none}.layui-code-item-preview{position:relative;padding:16px}.layui-code-item-preview>iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.layui-code-tools{position:absolute;right:11px;top:8px;line-height:normal}.layui-code-tools>i{display:inline-block;margin-left:6px;padding:3px;cursor:pointer}.layui-code-tools>i.layui-icon-file-b{color:#999}.layui-code-tools>i:hover{color:#16b777}.layui-code-full{position:fixed;left:0;top:0;z-index:1111111;width:100%;height:100%;background-color:#fff}.layui-code-full .layui-code-item{width:100%!important;border-width:0!important;border-top-width:1px!important}.layui-code-full .layui-code-item,.layui-code-full .layui-code-view,.layui-code-full .layui-code-wrap{height:calc(100vh - 51px)!important;box-sizing:border-box}.layui-code-full .layui-code-item-preview{overflow:auto}.layui-code-view.layui-code-hl{line-height:20px!important;border-left-width:1px}.layui-code-view.layui-code-hl>.layui-code-ln-side{background-color:transparent}.layui-code-theme-dark.layui-code-hl,.layui-code-theme-dark.layui-code-hl>.layui-code-ln-side{border-color:rgb(126 122 122 / 15%)}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate,.layui-laydate *{box-sizing:border-box}.layui-laydate{position:absolute;z-index:99999999;margin:5px 0;border-radius:2px;font-size:14px;line-height:normal;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}.layui-laydate-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");position:fixed;_position:absolute;pointer-events:auto}@keyframes laydate-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-laydate{animation-name:laydate-downbit}.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-ym-show .laydate-set-ym span[lay-type=month]{display:none!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{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;padding:0 5px;color:#999;font-size:18px;cursor:pointer}.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;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-set-ym span{padding:0 10px;cursor:pointer}.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:0;text-align:center}.layui-laydate-content th{font-weight:400}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width: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%}.laydate-day-holidays:before{position:absolute;left:0;top:0;font-size:12px;transform:scale(.7)}.laydate-day-holidays:before{content:'\4F11';color:#ff5722}.laydate-day-holidays[type=workdays]:before{content:'\73ED';color:inherit}.layui-laydate .layui-this .laydate-day-holidays:before{color:#fff}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px}.layui-laydate-footer span{display:inline-block;vertical-align:top;height:26px;line-height:24px;padding:0 10px;border:1px solid #c9c9c9;border-radius:2px;background-color:#fff;font-size:12px;cursor:pointer;white-space:nowrap;transition:all .3s}.layui-laydate-footer span:hover{color:#16b777}.layui-laydate-footer span.layui-laydate-preview{cursor:default;border-color:transparent!important}.layui-laydate-footer span.layui-laydate-preview:hover{color:#777}.layui-laydate-footer span:first-child.layui-laydate-preview{padding-left:0}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{margin:0 0 0 -1px;border-radius:0}.laydate-footer-btns span:first-child{border-radius:2px 0 0 2px}.laydate-footer-btns span:last-child{border-radius:0 2px 2px 0}.layui-laydate-shortcut{width:80px;padding:6px 0;display:inline-block;vertical-align:top;overflow:auto;max-height:276px;text-align:center}.layui-laydate-shortcut+.layui-laydate-main{display:inline-block;border-left:1px solid #e2e2e2}.layui-laydate-shortcut>li{padding:5px 8px;cursor:pointer;line-height:18px}.layui-laydate .layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;box-sizing:border-box;background-color:#fff}.layui-laydate .layui-laydate-list>li{position:relative;display:inline-block;width:33.3%;height:36px;line-height:36px;margin:3px 0;vertical-align:middle;text-align:center;cursor:pointer;list-style:none}.layui-laydate .laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list{display:table}.layui-laydate .laydate-time-list>li{display:table-cell;height:100%;margin:0;line-height:normal;cursor:default}.layui-laydate .laydate-time-list p{position:relative;top:-4px;margin:0;line-height:29px}.layui-laydate .laydate-time-list ol{height:181px;overflow:hidden}.layui-laydate .laydate-time-list>li:hover ol{overflow-y:auto}.layui-laydate .laydate-time-list ol li{width:130%;padding-left:33px;height:30px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate .laydate-time-list-hide-1 ol li{padding-left:53px}.layui-laydate .laydate-time-list-hide-2 ol li{padding-left:117px}.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;color:#ff5722}.layui-laydate-range{width:546px}.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle;max-width:50%}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content,.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-left:1px solid #e2e2e2}.layui-laydate-range.layui-laydate-linkage .laydate-main-list-0 .laydate-next-m,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-0 .laydate-next-y,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#777}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#16b777}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{color:#333}.layui-laydate-content td{color:#777}.layui-laydate-content td.laydate-day-now{color:#16b777}.layui-laydate-content td.laydate-day-now:after{content:'';position:absolute;width:100%;height:30px;left:0;top:0;border:1px solid #16b777;box-sizing:border-box}.layui-laydate-linkage .layui-laydate-content td.laydate-selected>div{background-color:#00f7de}.layui-laydate-linkage .laydate-selected:hover>div{background-color:#00f7de!important}.layui-laydate-content td.laydate-selected:after,.layui-laydate-content td:hover:after{content:none}.layui-laydate-content td>div:hover,.layui-laydate-list li:hover,.layui-laydate-shortcut>li:hover{background-color:#eee;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}.layui-laydate-linkage .laydate-selected.laydate-day-next>div,.layui-laydate-linkage .laydate-selected.laydate-day-prev>div{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#ff5722}.laydate-day-mark::after{background-color:#16b777}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#16b777}.layui-laydate .layui-this,.layui-laydate .layui-this>div{background-color:#16baaa!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}.layui-laydate .layui-this.laydate-disabled,.layui-laydate .layui-this.laydate-disabled>div{background-color:#eee!important}.layui-laydate-content td>div{padding:7px 0;height:100%}.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:#16baaa}.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-molv .layui-laydate-footer{border:1px solid #e2e2e2}.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{border:1px solid #e2e2e2}.layui-laydate-linkage.laydate-theme-grid .laydate-selected,.layui-laydate-linkage.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#16baaa!important}.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-next,.layui-laydate-linkage.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}.laydate-theme-grid .layui-laydate-content td>div{height:29px;margin-top:-1px}.laydate-theme-circle .layui-laydate-content td.layui-this>div,.laydate-theme-circle .layui-laydate-content td>div{width:28px;height:28px;line-height:28px;border-radius:14px;margin:0 4px;padding:0}.layui-laydate.laydate-theme-circle .layui-laydate-content table td.layui-this{background-color:transparent!important}.laydate-theme-grid.laydate-theme-circle .layui-laydate-content td>div{margin:0 3.5px}.laydate-theme-fullpanel .layui-laydate-main{width:526px}.laydate-theme-fullpanel .layui-laydate-list{width:252px;left:272px}.laydate-theme-fullpanel .laydate-set-ym span{display:none}.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-theme-fullpanel .laydate-time-show .layui-laydate-header .layui-icon{display:inline-block!important}.laydate-theme-fullpanel .laydate-btns-time{display:none}.laydate-theme-fullpanel .laydate-time-list-hide-1 ol li{padding-left:49px}.laydate-theme-fullpanel .laydate-time-list-hide-2 ol li{padding-left:107px}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{opacity:0;transition:opacity .35s cubic-bezier(.34,.69,.1,1);top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch}.layui-layer{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-btn a,.layui-layer-setwin span{display:inline-block;vertical-align:middle;*display:inline;*zoom:1}.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}}@keyframes layer-slide-down{from{transform:translate3d(0,-100%,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-down-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,-100%,0)}}.layer-anim-slide-down{animation-name:layer-slide-down}.layer-anim-slide-down-out{animation-name:layer-slide-down-out}@keyframes layer-slide-left{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-left-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}.layer-anim-slide-left{animation-name:layer-slide-left}.layer-anim-slide-left-out{animation-name:layer-slide-left-out}@keyframes layer-slide-up{from{transform:translate3d(0,100%,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-up-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,100%,0)}}.layer-anim-slide-up{animation-name:layer-slide-up}.layer-anim-slide-up-out{animation-name:layer-slide-up-out}@keyframes layer-slide-right{from{transform:translate3d(-100%,0,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-right-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(-100%,0,0)}}.layer-anim-slide-right{animation-name:layer-slide-right}.layer-anim-slide-right-out{animation-name:layer-slide-right-out}.layui-layer-title{padding:0 81px 0 16px;height:50px;line-height:50px;border-bottom:1px solid #f0f0f0;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:16px;font-size:0;line-height:initial}.layui-layer-setwin span{position:relative;width:16px;height:16px;line-height:18px;margin-left:10px;text-align:center;font-size:16px;cursor:pointer;color:#000;_overflow:hidden;box-sizing:border-box}.layui-layer-setwin .layui-layer-min:before{content:'';position:absolute;width:12px;border-bottom:1px solid #2e2d3c;left:50%;top:50%;margin:-.5px 0 0 -6px;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover:before{background-color:#2d93ca}.layui-layer-setwin .layui-layer-max:after,.layui-layer-setwin .layui-layer-max:before{content:'';position:absolute;left:50%;top:50%;z-index:1;width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid #2e2d3c}.layui-layer-setwin .layui-layer-max:hover:after,.layui-layer-setwin .layui-layer-max:hover:before{border-color:#2d93ca}.layui-layer-setwin .layui-layer-min:hover:before{background-color:#2d93ca}.layui-layer-setwin .layui-layer-maxmin:after,.layui-layer-setwin .layui-layer-maxmin:before{width:7px;height:7px;margin:-3px 0 0 -3px;background-color:#fff}.layui-layer-setwin .layui-layer-maxmin:after{z-index:0;margin:-5px 0 0 -1px}.layui-layer-setwin .layui-layer-close{cursor:pointer}.layui-layer-setwin .layui-layer-close:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;color:#fff;background-color:#787878;padding:3px;border:3px solid;width:28px;height:28px;font-size:16px;font-weight:bolder;border-radius:50%;margin-left:0;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{opacity:unset;background-color:#3888f6}.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:30px;line-height:30px;margin:5px 5px 0;padding:0 16px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none;box-sizing:border-box}.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:transparent;background-color:#1e9fff;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:240px}.layui-layer-dialog .layui-layer-content{position:relative;padding:16px;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-face{position:absolute;top:18px;left:16px;color:#959595;font-size:32px;_left:-40px}.layui-layer-dialog .layui-layer-content .layui-icon-tips{color:#f39b12}.layui-layer-dialog .layui-layer-content .layui-icon-success{color:#16b777}.layui-layer-dialog .layui-layer-content .layui-icon-error{top:19px;color:#ff5722}.layui-layer-dialog .layui-layer-content .layui-icon-question{color:#ffb800}.layui-layer-dialog .layui-layer-content .layui-icon-lock{color:#787878}.layui-layer-dialog .layui-layer-content .layui-icon-face-cry{color:#ff5722}.layui-layer-dialog .layui-layer-content .layui-icon-face-smile{color:#16b777}.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-close{color:#fff}.layui-layer-hui .layui-layer-content{padding:11px 24px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:18px 24px 18px 58px;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:76px;height:38px;line-height:38px;text-align:center}.layui-layer-loading-icon{font-size:38px;color:#959595}.layui-layer-loading2{text-align:center}.layui-layer-loading-2{position:relative;height:38px}.layui-layer-loading-2:after,.layui-layer-loading-2:before{content:'';position:absolute;left:50%;top:50%;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;border:3px solid #d2d2d2;box-sizing:border-box}.layui-layer-loading-2:after{border-color:transparent;border-left-color:#1e9fff}.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 .layui-layer-title{background:#4476a7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;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-lan .layui-layer-setwin .layui-icon,.layui-layer-molv .layui-layer-setwin .layui-icon{color:#fff}.layui-layer-win10{border:1px solid #aaa;box-shadow:1px 1px 6px rgba(0,0,0,.3);border-radius:none}.layui-layer-win10 .layui-layer-title{height:32px;line-height:32px;padding-left:8px;border-bottom:none;font-size:12px}.layui-layer-win10 .layui-layer-setwin{right:0;top:0}.layui-layer-win10 .layui-layer-setwin span{margin-left:0;width:32px;height:32px;padding:8px}.layui-layer-win10.layui-layer-page .layui-layer-setwin span{width:38px}.layui-layer-win10 .layui-layer-setwin span:hover{background-color:#e5e5e5}.layui-layer-win10 .layui-layer-setwin span.layui-icon-close:hover{background-color:#e81123;color:#fff}.layui-layer-win10.layui-layer-dialog .layui-layer-content{padding:8px 16px 32px;color:#0033bc}.layui-layer-win10.layui-layer-dialog .layui-layer-padding{padding-top:18px;padding-left:58px}.layui-layer-win10 .layui-layer-btn{padding:5px 5px 10px;border-top:1px solid #dfdfdf;background-color:#f0f0f0}.layui-layer-win10 .layui-layer-btn a{height:20px;line-height:18px;background-color:#e1e1e1;border-color:#adadad;color:#000;font-size:12px;transition:all .3s}.layui-layer-win10 .layui-layer-btn a:hover{border-color:#2a8edd;background-color:#e5f1fb}.layui-layer-win10 .layui-layer-btn .layui-layer-btn0{border-color:#0078d7}.layui-layer-prompt .layui-layer-input{display:block;width:260px;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:16px}.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;display:inline-block;vertical-align:top;border-left:1px solid transparent;border-right:1px solid transparent;min-width:80px;max-width:300px;padding:0 16px;text-align:center;cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:51px;border-left-color:#eee;border-right-color:#eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left-color:transparent}.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{background:0 0;box-shadow:none}.layui-layer-photos .layui-layer-content{overflow:visible;text-align:center}.layui-layer-photos .layer-layer-photos-main img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-photos-next,.layui-layer-photos-prev{position:fixed;top:50%;width:52px;height:52px;line-height:52px;margin-top:-26px;cursor:pointer;font-size:52px;color:#717171}.layui-layer-photos-prev{left:32px}.layui-layer-photos-next{right:32px}.layui-layer-photos-next:hover,.layui-layer-photos-prev:hover{color:#959595}.layui-layer-photos-toolbar{position:fixed;left:0;right:0;bottom:0;width:100%;height:52px;line-height:52px;background-color:#000\9;filter:Alpha(opacity=60);background-color:rgba(0,0,0,.32);color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:0}.layui-layer-photos-toolbar>*{display:inline-block;vertical-align:top;padding:0 16px;font-size:12px;color:#fff;*display:inline;*zoom:1}.layui-layer-photos-toolbar *{font-size:12px}.layui-layer-photos-header{top:0;bottom:auto}.layui-layer-photos-header>span{cursor:pointer}.layui-layer-photos-header>span:hover{background-color:rgba(51,51,51,.32)}.layui-layer-photos-header .layui-icon{font-size:18px}.layui-layer-photos-footer>h3{max-width:65%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-layer-photos-footer a:hover{text-decoration:underline}.layui-layer-photos-footer em{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} \ No newline at end of file diff --git a/src/main/resources/static/lib/layui/exts/xmSelect/index.html b/src/main/resources/static/lib/layui/exts/xmSelect/index.html new file mode 100644 index 0000000..4d0f7a1 --- /dev/null +++ b/src/main/resources/static/lib/layui/exts/xmSelect/index.html @@ -0,0 +1,7 @@ +<!DOCTYPE html><html><head><script>var _hmt = _hmt || []; + (function() { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?758a90d7d534804ddd66137da7c9ee69"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); + })();</script><link rel="preload" href="./xm-select.js" as="script"><link rel="preload" href="./static/docs.js" as="script"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><title>xm-select
\ No newline at end of file diff --git a/src/main/resources/static/lib/layui/exts/xmSelect/static/2.js b/src/main/resources/static/lib/layui/exts/xmSelect/static/2.js new file mode 100644 index 0000000..53877eb --- /dev/null +++ b/src/main/resources/static/lib/layui/exts/xmSelect/static/2.js @@ -0,0 +1,9 @@ +/*! + * @Title: xm-select + * @Version: 1.2.4 + * @Description:基于layui的多选解决方案 + * @Site: https://gitee.com/maplemei/xm-select + * @Author: maplemei + * @License:Apache License 2.0 + */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{694:function(t,e,n){t.exports=n.p+"static/wx.b556b2e.jpg"},695:function(t,e){t.exports="data:image/png;base64,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"},697:function(t,e,n){"use strict";n.r(e);var a=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"content element-doc"},[t._m(0),t._m(1),t._m(2),n("demo-block",[n("div",[n("p",[n("code",[t._v("el")]),t._v("绑定的不一定是id, 也可以是其他css选择器")])]),n("template",{slot:"source"},[n("element-demo0")],1),n("template",{slot:"highlight"},[n("pre",{pre:!0},[n("code",{pre:!0,attrs:{class:"html"}},[t._v("
\n\n + + +
+ +
+
+
+ + +
+
+
+
  • setting 配置详解
+
    +
    +
    +
    • zTree 方法详解
    +
      +
      • treeNode 节点数据详解
      +
        +
        +
        +
        +
        +
        +
        + + +
        +
        +
        + + + +
        + +
        +
        +
        +
        + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/API_en.html b/src/main/resources/static/lib/ztree/api/API_en.html new file mode 100644 index 0000000..796fe72 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/API_en.html @@ -0,0 +1,102 @@ + + + + + API Document [zTree -- jQuery tree plug-ins.] + + + + + +
        + +
        +
        +
        + + +
        +
        +
        +
        • setting details
        +
          +
          +
          +
          • zTree method details
          +
            +
            • treeNode data details
            +
              +
              +
              +
              +
              +
              +
              + + +
              +
              +
              + + + +
              + +
              +
              +
              +
              + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/apiCss/api.js b/src/main/resources/static/lib/ztree/api/apiCss/api.js new file mode 100644 index 0000000..dbf6e01 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/apiCss/api.js @@ -0,0 +1,599 @@ +var apiContent = { + zTree_Setting: null, + zTree_Node: null, + zTree_Function: null, + overlayDiv : null, + overlayContent : null, + overlayDetailDiv : null, + overlayCloseBtn: null, + overlayArrow: null, + contentBoxDiv : null, + settingDiv : null, + functionDiv : null, + overlaySearch: null, + searchKey: null, + searchResultInput: null, + searchPrevBtn: null, + searchNextBtn: null, + apiCache: {}, + lastValue: "", + searchNodes: [], + searchNodesCur: 0, + + _init: function() { + this.overlayDiv = $("#overlayDiv"); + this.overlayContent = $("#overlayContent"); + this.overlayDetailDiv = $("#overlayDetailDiv"); + this.overlayCloseBtn = $("#overlayDivCloseBtn"); + this.overlayArrow = $("#overlayDivArrow"); + this.contentBoxDiv = $("#contentBox"); + this.settingDiv = $("#api_setting"); + this.functionDiv = $("#api_function"); + this.searchKey = $(".searchKey"); + this.overlaySearch = $(".overlaySearch"); + this.searchResultInput = $(".searchResult"); + this.searchPrevBtn = $(".searchPrev"); + this.searchNextBtn = $(".searchNext"); + var setting = { + view: { + fontCss: this.getFontCss, + showLine: false, + showIcon: this.showIcon, + showTitle: this.getTitle, + selectedMulti: false, + dblClickExpand: false + }, + data: { + key: { + title: "tt" + }, + simpleData: { + enable:true, + idKey: "id", + pIdKey: "pId", + rootPId: "" + } + }, + callback: { + onNodeCreated: this.onNodeCreated, + beforeClick: this.beforeClick + } + }; + var setting_nodes =[ + {id:1, pId:0, t:"setting", name:"var setting = {", open:true}, + {id:11, pId:1, t:"treeId", name:"treeId : \"\",", iconSkin:"core", showAPI:true}, + {id:12, pId:1, t:"treeObj", name:"treeObj : null,", iconSkin:"core", showAPI:true}, + {id:121, pId:1, name:""}, + + {id:20, pId:1, t:"async", name:"async : {", open:true}, + {id:201, pId:20, t:"autoParam", name:"autoParam : [],", iconSkin:"core", showAPI:true}, + {id:208, pId:20, t:"contentType", name:"contentType : \"application...\",", iconSkin:"core", showAPI:true}, + {id:202, pId:20, t:"dataFilter", name:"dataFilter : null,", iconSkin:"core", showAPI:true}, + {id:203, pId:20, t:"dataType", name:"dataType : \"text\",", iconSkin:"core", showAPI:true}, + {id:204, pId:20, t:"enable", name:"enable : false,", iconSkin:"core", showAPI:true}, + {id:205, pId:20, t:"otherParam", name:"otherParam : [],", iconSkin:"core", showAPI:true}, + {id:206, pId:20, t:"type", name:"type : \"post\",", iconSkin:"core", showAPI:true}, + {id:209, pId:20, t:"headers", name:"headers : {},", iconSkin:"core", showAPI:true}, + {id:210, pId:20, t:"xhrFields", name:"xhrFields : {},", iconSkin:"core", showAPI:true}, + {id:207, pId:20, t:"url", name:"url : \"\"", iconSkin:"core", showAPI:true}, + {id:21, pId:1, name:"},"}, + {id:22, pId:1, name:""}, + + {id:30, pId:1, t:"callback", name:"callback : {", open:true}, + {id:3001, pId:30, t:"beforeAsync", name:"beforeAsync : null,", iconSkin:"core", showAPI:true}, + {id:3002, pId:30, t:"beforeCheck", name:"beforeCheck : null,", iconSkin:"check", showAPI:true}, + {id:3003, pId:30, t:"beforeClick", name:"beforeClick : null,", iconSkin:"core", showAPI:true}, + {id:3004, pId:30, t:"beforeCollapse", name:"beforeCollapse : null,", iconSkin:"core", showAPI:true}, + {id:3004, pId:30, t:"beforeDblClick", name:"beforeDblClick : null,", iconSkin:"core", showAPI:true}, + {id:3005, pId:30, t:"beforeDrag", name:"beforeDrag : null,", iconSkin:"edit", showAPI:true}, + {id:3006, pId:30, t:"beforeDragOpen", name:"beforeDragOpen : null,", iconSkin:"edit", showAPI:true}, + {id:3007, pId:30, t:"beforeDrop", name:"beforeDrop : null,", iconSkin:"edit", showAPI:true}, + {id:3029, pId:30, t:"beforeEditName", name:"beforeEditName : null,", iconSkin:"edit", showAPI:true}, + {id:3008, pId:30, t:"beforeExpand", name:"beforeExpand : null,", iconSkin:"core", showAPI:true}, + {id:3009, pId:30, t:"beforeMouseDown", name:"beforeMouseDown : null,", iconSkin:"core", showAPI:true}, + {id:3010, pId:30, t:"beforeMouseUp", name:"beforeMouseUp : null,", iconSkin:"core", showAPI:true}, + {id:3011, pId:30, t:"beforeRemove", name:"beforeRemove : null,", iconSkin:"edit", showAPI:true}, + {id:3012, pId:30, t:"beforeRename", name:"beforeRename : null,", iconSkin:"edit", showAPI:true}, + {id:3013, pId:30, t:"beforeRightClick", name:"beforeRightClick : null,", iconSkin:"core", showAPI:true}, + {id:3014, pId:30, name:""}, + {id:3015, pId:30, t:"onAsyncError", name:"onAsyncError : null,", iconSkin:"core", showAPI:true}, + {id:3016, pId:30, t:"onAsyncSuccess", name:"onAsyncSuccess : null,", iconSkin:"core", showAPI:true}, + {id:3017, pId:30, t:"onCheck", name:"onCheck : null,", iconSkin:"check", showAPI:true}, + {id:3018, pId:30, t:"onClick", name:"onClick : null,", iconSkin:"core", showAPI:true}, + {id:3019, pId:30, t:"onCollapse", name:"onCollapse : null,", iconSkin:"core", showAPI:true}, + {id:3029, pId:30, t:"onDblClick", name:"onDblClick : null,", iconSkin:"core", showAPI:true}, + {id:3020, pId:30, t:"onDrag", name:"onDrag : null,", iconSkin:"edit", showAPI:true}, + {id:3030, pId:30, t:"onDragMove", name:"onDragMove : null,", iconSkin:"edit", showAPI:true}, + {id:3021, pId:30, t:"onDrop", name:"onDrop : null,", iconSkin:"edit", showAPI:true}, + {id:3022, pId:30, t:"onExpand", name:"onExpand : null,", iconSkin:"core", showAPI:true}, + {id:3023, pId:30, t:"onMouseDown", name:"onMouseDown : null,", iconSkin:"core", showAPI:true}, + {id:3024, pId:30, t:"onMouseUp", name:"onMouseUp : null,", iconSkin:"core", showAPI:true}, + {id:3025, pId:30, t:"onNodeCreated", name:"onNodeCreated : null,", iconSkin:"core", showAPI:true}, + {id:3026, pId:30, t:"onRemove", name:"onRemove : null,", iconSkin:"edit", showAPI:true}, + {id:3027, pId:30, t:"onRename", name:"onRename : null,", iconSkin:"edit", showAPI:true}, + {id:3028, pId:30, t:"onRightClick", name:"onRightClick : null", iconSkin:"core", showAPI:true}, + {id:31, pId:1, name:"},"}, + {id:32, pId:1, name:""}, + + {id:40, pId:1, t:"check", name:"check : {", open:true}, + {id:405, pId:40, t:"autoCheckTrigger", name:"autoCheckTrigger : false,", iconSkin:"check", showAPI:true}, + {id:401, pId:40, t:"chkboxType", name:"chkboxType : {\"Y\": \"ps\", \"N\": \"ps\"},", iconSkin:"check", showAPI:true}, + {id:402, pId:40, t:"chkStyle", name:"chkStyle : \"checkbox\",", iconSkin:"check", showAPI:true}, + {id:403, pId:40, t:"enable", name:"enable : false,", iconSkin:"check", showAPI:true}, + {id:406, pId:40, t:"nocheckInherit", name:"nocheckInherit : false", iconSkin:"check", showAPI:true}, + {id:407, pId:40, t:"chkDisabledInherit", name:"chkDisabledInherit : false", iconSkin:"check", showAPI:true}, + {id:404, pId:40, t:"radioType", name:"radioType : \"level\"", iconSkin:"check", showAPI:true}, + {id:41, pId:1, name:"},"}, + {id:42, pId:1, name:""}, + + {id:50, pId:1, t:"data", name:"data : {", open:true}, + {id:500, pId:50, t:"keep", name:"keep : {", open:true}, + {id:5001, pId:500, t:"leaf", name:"leaf : false,", iconSkin:"core", showAPI:true}, + {id:5002, pId:500, t:"parent", name:"parent : false", iconSkin:"core", showAPI:true}, + {id:501, pId:50, name:"},"}, + + {id:510, pId:50, t:"key", name:"key : {", open:true}, + {id:5101, pId:510, t:"checked", name:"checked : \"checked\",", iconSkin:"check", showAPI:true}, + {id:5102, pId:510, t:"children", name:"children : \"children\",", iconSkin:"core", showAPI:true}, + {id:5106, pId:510, t:"isParent", name:"isParent : \"isParent\",", iconSkin:"core", showAPI:true}, + {id:5107, pId:510, t:"isHidden", name:"isHidden : \"isHidden\",", iconSkin:"hide", showAPI:true}, + {id:5103, pId:510, t:"name", name:"name : \"name\",", iconSkin:"core", showAPI:true}, + {id:5104, pId:510, t:"title", name:"title : \"\"", iconSkin:"core", showAPI:true}, + {id:5105, pId:510, t:"url", name:"url : \"url\"", iconSkin:"core", showAPI:true}, + {id:511, pId:50, name:"},"}, + + {id:520, pId:50, t:"simpleData", name:"simpleData : {", open:true}, + {id:5201, pId:520, t:"enable", name:"enable : false,", iconSkin:"core", showAPI:true}, + {id:5202, pId:520, t:"idKey", name:"idKey : \"id\",", iconSkin:"core", showAPI:true}, + {id:5203, pId:520, t:"pIdKey", name:"pIdKey : \"pId\",", iconSkin:"core", showAPI:true}, + {id:5204, pId:520, t:"rootPId", name:"rootPId : null", iconSkin:"core", showAPI:true}, + {id:521, pId:50, name:"}"}, + {id:51, pId:1, name:"},"}, + {id:52, pId:1, name:""}, + + {id:60, pId:1, t:"edit", name:"edit : {", open:true}, + {id:601, pId:60, t:"drag", name:"drag : {", open:true}, + {id:60111, pId:601, t:"autoExpandTrigger", name:"autoExpandTrigger : true,", iconSkin:"edit", showAPI:true}, + {id:60101, pId:601, t:"isCopy", name:"isCopy : true,", iconSkin:"edit", showAPI:true}, + {id:60102, pId:601, t:"isMove", name:"isMove : true,", iconSkin:"edit", showAPI:true}, + {id:60103, pId:601, t:"prev", name:"prev : true,", iconSkin:"edit", showAPI:true}, + {id:60104, pId:601, t:"next", name:"next : true,", iconSkin:"edit", showAPI:true}, + {id:60105, pId:601, t:"inner", name:"inner : true,", iconSkin:"edit", showAPI:true}, + {id:60107, pId:601, t:"borderMax", name:"borderMax : 10,", iconSkin:"edit", showAPI:true}, + {id:60108, pId:601, t:"borderMin", name:"borderMin : -5,", iconSkin:"edit", showAPI:true}, + {id:60106, pId:601, t:"minMoveSize", name:"minMoveSize : 5,", iconSkin:"edit", showAPI:true}, + {id:60109, pId:601, t:"maxShowNodeNum", name:"maxShowNodeNum : 5,", iconSkin:"edit", showAPI:true}, + {id:60110, pId:601, t:"autoOpenTime", name:"autoOpenTime : 500", iconSkin:"edit", showAPI:true}, + {id:602, pId:60, name:"},"}, + {id:608, pId:60, t:"editNameSelectAll", name:"editNameSelectAll : false,", iconSkin:"edit", showAPI:true}, + {id:603, pId:60, t:"enable", name:"enable : false,", iconSkin:"edit", showAPI:true}, + {id:604, pId:60, t:"removeTitle", name:"removeTitle : \"remove\",", iconSkin:"edit", showAPI:true}, + {id:605, pId:60, t:"renameTitle", name:"renameTitle : \"rename\",", iconSkin:"edit", showAPI:true}, + {id:606, pId:60, t:"showRemoveBtn", name:"showRemoveBtn : true,", iconSkin:"edit", showAPI:true}, + {id:607, pId:60, t:"showRenameBtn", name:"showRenameBtn : true", iconSkin:"edit", showAPI:true}, + {id:61, pId:1, name:"},"}, + {id:62, pId:1, name:""}, + + {id:70, pId:1, t:"view", name:"view : {", open:true}, + {id:7001, pId:70, t:"addDiyDom", name:"addDiyDom : null,", iconSkin:"core", showAPI:true}, + {id:7002, pId:70, t:"addHoverDom", name:"addHoverDom : null,", iconSkin:"edit", showAPI:true}, + {id:7003, pId:70, t:"autoCancelSelected", name:"autoCancelSelected : true,", iconSkin:"core", showAPI:true}, + {id:7004, pId:70, t:"dblClickExpand", name:"dblClickExpand : true,", iconSkin:"core", showAPI:true}, + {id:7005, pId:70, t:"expandSpeed", name:"expandSpeed : \"fast\",", iconSkin:"core", showAPI:true}, + {id:7006, pId:70, t:"fontCss", name:"fontCss : {},", iconSkin:"core", showAPI:true}, + {id:7012, pId:70, t:"nameIsHTML", name:"nameIsHTML : false,", iconSkin:"core", showAPI:true}, + {id:7007, pId:70, t:"removeHoverDom", name:"removeHoverDom : null,", iconSkin:"edit", showAPI:true}, + {id:7008, pId:70, t:"selectedMulti", name:"selectedMulti : true,", iconSkin:"core", showAPI:true}, + {id:7009, pId:70, t:"showIcon", name:"showIcon : true,", iconSkin:"core", showAPI:true}, + {id:7010, pId:70, t:"showLine", name:"showLine : true,", iconSkin:"core", showAPI:true}, + {id:7011, pId:70, t:"showTitle", name:"showTitle : true,", iconSkin:"core", showAPI:true}, + {id:7012, pId:70, t:"txtSelectedEnable", name:"txtSelectedEnable : false", iconSkin:"core", showAPI:true}, + {id:71, pId:1, name:"}"}, + + {id:2, pId:0, name:"}"} + ]; + + var treenode_nodes =[ + {id:1, pId:0, t:"treeNode", name:"treeNode : {", open:true}, + {id:101, pId:1, t:"checked", name:"checked", iconSkin:"check", showAPI:true}, + {id:102, pId:1, t:"children", name:"children", iconSkin:"core", showAPI:true}, + {id:128, pId:1, t:"chkDisabled", name:"chkDisabled", iconSkin:"check", showAPI:true}, + {id:127, pId:1, t:"click", name:"click", iconSkin:"core", showAPI:true}, + {id:103, pId:1, t:"getCheckStatus", name:"getCheckStatus ()", iconSkin:"check", showAPI:true}, + {id:135, pId:1, t:"getIndex", name:"getIndex ()", iconSkin:"core", showAPI:true}, + {id:104, pId:1, t:"getNextNode", name:"getNextNode ()", iconSkin:"core", showAPI:true}, + {id:105, pId:1, t:"getParentNode", name:"getParentNode ()", iconSkin:"core", showAPI:true}, + {id:136, pId:1, t:"getPath", name:"getPath ()", iconSkin:"core", showAPI:true}, + {id:106, pId:1, t:"getPreNode", name:"getPreNode ()", iconSkin:"core", showAPI:true}, + {id:129, pId:1, t:"halfCheck", name:"halfCheck", iconSkin:"check", showAPI:true}, + {id:107, pId:1, t:"icon", name:"icon", iconSkin:"core", showAPI:true}, + {id:108, pId:1, t:"iconClose", name:"iconClose", iconSkin:"core", showAPI:true}, + {id:109, pId:1, t:"iconOpen", name:"iconOpen", iconSkin:"core", showAPI:true}, + {id:110, pId:1, t:"iconSkin", name:"iconSkin", iconSkin:"core", showAPI:true}, + {id:131, pId:1, t:"isHidden", name:"isHidden", iconSkin:"hide", showAPI:true}, + {id:111, pId:1, t:"isParent", name:"isParent", iconSkin:"core", showAPI:true}, + {id:132, pId:1, t:"name", name:"name", iconSkin:"core", showAPI:true}, + {id:112, pId:1, t:"nocheck", name:"nocheck", iconSkin:"check", showAPI:true}, + {id:113, pId:1, t:"open", name:"open", iconSkin:"core", showAPI:true}, + {id:133, pId:1, t:"target", name:"target", iconSkin:"core", showAPI:true}, + {id:134, pId:1, t:"url", name:"url", iconSkin:"core", showAPI:true}, + {id:114, pId:1, t:"diy", name:"*DIY*", iconSkin:"core", showAPI:true}, + {id:115, pId:1, name:""}, + {id:116, pId:1, t:"check_Child_State", name:"[check_Child_State]", iconSkin:"check", showAPI:true}, + {id:117, pId:1, t:"check_Focus", name:"[check_Focus]", iconSkin:"check", showAPI:true}, + {id:118, pId:1, t:"checkedOld", name:"[checkedOld]", iconSkin:"check", showAPI:true}, + {id:119, pId:1, t:"editNameFlag", name:"[editNameFlag]", iconSkin:"edit", showAPI:true}, + {id:120, pId:1, t:"isAjaxing", name:"[isAjaxing]", iconSkin:"core", showAPI:true}, + {id:121, pId:1, t:"isFirstNode", name:"[isFirstNode]", iconSkin:"core", showAPI:true}, + {id:122, pId:1, t:"isHover", name:"[isHover]", iconSkin:"edit", showAPI:true}, + {id:123, pId:1, t:"isLastNode", name:"[isLastNode]", iconSkin:"core", showAPI:true}, + {id:124, pId:1, t:"level", name:"[level]", iconSkin:"core", showAPI:true}, + {id:125, pId:1, t:"parentTId", name:"[parentTId]", iconSkin:"core", showAPI:true}, + {id:126, pId:1, t:"tId", name:"[tId]", iconSkin:"core", showAPI:true}, + {id:130, pId:1, t:"zAsync", name:"[zAsync]", iconSkin:"core", showAPI:true}, + {id:2, pId:0, name:"}"} + ]; + + var function_nodes =[ + {id:1, pId:0, t:"$.fn.zTree", name:"$.fn.zTree : {", open:true}, + {id:11, pId:1, t:"init", name:"init (obj, zSetting, zNodes)", iconSkin:"core", showAPI:true}, + {id:12, pId:1, t:"getZTreeObj", name:"getZTreeObj (treeId)", iconSkin:"core", showAPI:true}, + {id:14, pId:1, t:"destroy", name:"destroy (treeId)", iconSkin:"core", showAPI:true}, + {id:13, pId:1, t:"_z", name:"_z : {tools, view, event, data}", iconSkin:"core", showAPI:true}, + {id:2, pId:0, name:"}"}, + {id:3, pId:0, name:""}, + {id:4, pId:0, t:"zTreeObj", name:"zTreeObj : {", open:true}, + {id:401, pId:4, t:"setting", name:"setting", iconSkin:"core", showAPI:true}, + {id:402, pId:4, t:"addNodes", name:"addNodes (parentNode, index, newNodes, isSilent)", iconSkin:"core", showAPI:true}, + {id:403, pId:4, t:"cancelEditName", name:"cancelEditName (newName)", iconSkin:"edit", showAPI:true}, + {id:404, pId:4, t:"cancelSelectedNode", name:"cancelSelectedNode (node)", iconSkin:"core", showAPI:true}, + {id:405, pId:4, t:"checkAllNodes", name:"checkAllNodes (checked)", iconSkin:"check", showAPI:true}, + {id:406, pId:4, t:"checkNode", name:"checkNode (node, checked, checkTypeFlag, callbackFlag)", iconSkin:"check", showAPI:true}, + {id:407, pId:4, t:"copyNode", name:"copyNode (targetNode, node, moveType, isSilent)", iconSkin:"edit", showAPI:true}, + {id:436, pId:4, t:"destroy", name:"destroy ()", iconSkin:"core", showAPI:true}, + {id:408, pId:4, t:"editName", name:"editName (node)", iconSkin:"edit", showAPI:true}, + {id:409, pId:4, t:"expandAll", name:"expandAll (expandFlag)", iconSkin:"core", showAPI:true}, + {id:410, pId:4, t:"expandNode", name:"expandNode (node, expandFlag, sonSign, focus, callbackFlag)", iconSkin:"core", showAPI:true}, + {id:411, pId:4, t:"getChangeCheckedNodes", name:"getChangeCheckedNodes ()", iconSkin:"check", showAPI:true}, + {id:412, pId:4, t:"getCheckedNodes", name:"getCheckedNodes (checked)", iconSkin:"check", showAPI:true}, + {id:413, pId:4, t:"getNodeByParam", name:"getNodeByParam (key, value, parentNode)", iconSkin:"core", showAPI:true}, + {id:414, pId:4, t:"getNodeByTId", name:"getNodeByTId (tId)", iconSkin:"core", showAPI:true}, + {id:415, pId:4, t:"getNodeIndex", name:"getNodeIndex (node)", iconSkin:"core", showAPI:true}, + {id:416, pId:4, t:"getNodes", name:"getNodes ()", iconSkin:"core", showAPI:true}, + {id:431, pId:4, t:"getNodesByFilter", name:"getNodesByFilter (filter, isSingle, parentNode, invokeParam)", iconSkin:"core", showAPI:true}, + {id:417, pId:4, t:"getNodesByParam", name:"getNodesByParam (key, value, parentNode)", iconSkin:"core", showAPI:true}, + {id:418, pId:4, t:"getNodesByParamFuzzy", name:"getNodesByParamFuzzy (key, value, parentNode)", iconSkin:"core", showAPI:true}, + {id:419, pId:4, t:"getSelectedNodes", name:"getSelectedNodes ()", iconSkin:"core", showAPI:true}, + {id:432, pId:4, t:"hideNode", name:"hideNode (node)", iconSkin:"hide", showAPI:true}, + {id:433, pId:4, t:"hideNodes", name:"hideNodes (nodes)", iconSkin:"hide", showAPI:true}, + {id:420, pId:4, t:"moveNode", name:"moveNode (targetNode, node, moveType, isSilent)", iconSkin:"edit", showAPI:true}, + {id:421, pId:4, t:"reAsyncChildNodes", name:"reAsyncChildNodes (parentNode, reloadType, isSilent, callback)", iconSkin:"core", showAPI:true}, + {id:437, pId:4, t:"reAsyncChildNodesPromise", name:"reAsyncChildNodesPromise(parentNode, reloadType, isSilent)", iconSkin:"core", showAPI:true}, + {id:422, pId:4, t:"refresh", name:"refresh ()", iconSkin:"core", showAPI:true}, + {id:423, pId:4, t:"removeChildNodes", name:"removeChildNodes (parentNode)", iconSkin:"core", showAPI:true}, + {id:424, pId:4, t:"removeNode", name:"removeNode (node, callbackFlag)", iconSkin:"core", showAPI:true}, + {id:425, pId:4, t:"selectNode", name:"selectNode (node, addFlag, isSilent)", iconSkin:"core", showAPI:true}, + {id:430, pId:4, t:"setChkDisabled", name:"setChkDisabled (node, disabled, inheritParent, inheritChildren)", iconSkin:"check", showAPI:true}, + {id:426, pId:4, t:"setEditable", name:"setEditable (editable)", iconSkin:"edit", showAPI:true}, + {id:434, pId:4, t:"showNode", name:"showNode (node)", iconSkin:"hide", showAPI:true}, + {id:435, pId:4, t:"showNodes", name:"showNodes (nodes)", iconSkin:"hide", showAPI:true}, + {id:427, pId:4, t:"transformToArray", name:"transformToArray (nodes)", iconSkin:"core", showAPI:true}, + {id:428, pId:4, t:"transformTozTreeNodes", name:"transformTozTreeNodes (simpleNodes)", iconSkin:"core", showAPI:true}, + {id:429, pId:4, t:"updateNode", name:"updateNode (node, checkTypeFlag)", iconSkin:"core", showAPI:true}, + {id:5, pId:0, name:"}"} + ]; + + apiContent.zTree_Setting = $.fn.zTree.init($("#settingTree"), $.fn.zTree._z.tools.clone(setting), setting_nodes); + apiContent.zTree_Node = $.fn.zTree.init($("#treenodeTree"), $.fn.zTree._z.tools.clone(setting), treenode_nodes); + apiContent.zTree_Function = $.fn.zTree.init($("#functionTree"), $.fn.zTree._z.tools.clone(setting), function_nodes); + this.bindEvent(); + + }, + bindEvent: function() { + $(document).bind("keydown", this.listenKeyDown) + this.overlayCloseBtn.bind("click", apiContent.overlayClose); + this.searchResultInput.bind("click", function(e) { + $(this).prev().get(0).focus(); + this.blur(); + }).bind("focus", function(e) { + this.blur(); + }); + this.searchKey.bind("focus", this.focusKey) + .bind("blur", this.blurKey) + .bind("propertychange", this.searchNode) + .bind("input", this.searchNode); + this.searchPrevBtn.bind("click", this.searchPrev); + this.searchNextBtn.bind("click", this.searchNext); + }, + setSameKey: function(value) { + apiContent.searchKey.attr("value", value); + }, + focusKey: function(e) { + if (apiContent.searchKey.hasClass("empty")) { + apiContent.searchKey.removeClass("empty"); + } + }, + blurKey: function(e) { + apiContent.setSameKey(e.target.value); + if (e.target.value === "") { + apiContent.searchKey.addClass("empty"); + } + }, + listenKeyDown: function(e) { + if (e.keyCode=="13" && apiContent.overlayDiv.is(":hidden")) { + apiContent.openAPI(); + } else if (e.keyCode=="37") { + apiContent.searchPrev(); + } else if (e.keyCode=="13" || e.keyCode=="39") { + apiContent.searchNext(); + } + }, + openAPI: function() { + if (apiContent.searchNodes.length > 0) { + var setting_zTree = $.fn.zTree.getZTreeObj("settingTree"), + treenode_zTree = $.fn.zTree.getZTreeObj("treenodeTree"), + function_zTree = $.fn.zTree.getZTreeObj("functionTree"); + if (apiContent.searchNodesCur < 0 || apiContent.searchNodesCur > apiContent.searchNodes.length -1) { + apiContent.searchNodesCur = 0; + } + var node = apiContent.searchNodes[apiContent.searchNodesCur]; + + if (node.tId.indexOf("setting") > -1) { + setting_zTree.selectNode(node); + } else if (node.tId.indexOf("treenode") > -1) { + treenode_zTree.selectNode(node); + } else { + function_zTree.selectNode(node); + } + apiContent.beforeClick(node.tId.substring(0, node.tId.indexOf("_")), node, true); + apiContent.searchCur(); + } + }, + searchNode: function(e) { + var setting_zTree = $.fn.zTree.getZTreeObj("settingTree"), + treenode_zTree = $.fn.zTree.getZTreeObj("treenodeTree"), + function_zTree = $.fn.zTree.getZTreeObj("functionTree"); + if (apiContent.curKey == e.target.value) return; + apiContent.curKey = e.target.value; + var value = $.trim(apiContent.curKey); + apiContent.setSameKey(apiContent.curKey); + if (apiContent.searchKey.hasClass("empty")) { + value = ""; + apiContent.searchResultInput.removeClass("noResult").attr("value",""); + } + if (apiContent.lastValue === value) return; + + apiContent.updateNodes(false); + apiContent.lastValue = value; + if (value === "" || value.length < 2) { + apiContent.searchNodes = []; + apiContent.searchNodesCur = -1; + apiContent.searchCur(true); + return; + } + + var settingNodeList = setting_zTree.getNodesByFilter(apiContent.searchFilter); + var functionNodeList = function_zTree.getNodesByFilter(apiContent.searchFilter); + var treenodeNodeList = treenode_zTree.getNodesByFilter(apiContent.searchFilter); + apiContent.searchNodes = settingNodeList.concat(functionNodeList).concat(treenodeNodeList); + apiContent.searchNodesCur = -1; + apiContent.searchCur(); + apiContent.updateNodes(true); + }, + searchFilter: function(node) { + var value = $.trim(apiContent.searchKey.get(0).value).toLowerCase(); + return (node.showAPI && node.name.toLowerCase().indexOf(value) > -1); + }, + searchPrev: function(e) { + if (apiContent.searchPrevBtn.hasClass("disabled")) return; + apiContent.searchNodesCur--; + if (apiContent.searchNodesCur < 0 || apiContent.searchNodesCur > apiContent.searchNodes.length -1) { + apiContent.searchNodesCur = apiContent.searchNodes.length -1; + } + apiContent.openAPI(); + }, + searchNext: function(e) { + if (apiContent.searchNextBtn.hasClass("disabled")) return; + apiContent.searchNodesCur++; + apiContent.openAPI(); + }, + searchCur: function(init) { + var result = apiContent.searchNodes; + if (init) { + apiContent.searchResultInput.removeClass("noResult").attr("value",""); + } else if (result.length == 0) { + apiContent.searchResultInput.addClass("noResult").attr("value"," [ 0 / 0 ] "); + } else { + apiContent.searchResultInput.removeClass("noResult").attr("value"," [ " + (apiContent.searchNodesCur > -1 ? apiContent.searchNodesCur+1 : "?")+ " / " + result.length + " ] "); + } + if (result.length > 0) { + apiContent.searchPrevBtn.removeClass("disabled"); + apiContent.searchNextBtn.removeClass("disabled"); + } else { + apiContent.searchPrevBtn.addClass("disabled"); + apiContent.searchNextBtn.addClass("disabled"); + } + }, + updateNodes: function(highlight) { + var setting_zTree = $.fn.zTree.getZTreeObj("settingTree"), + treenode_zTree = $.fn.zTree.getZTreeObj("treenodeTree"), + function_zTree = $.fn.zTree.getZTreeObj("functionTree"), + node = null; + for( var i=0, l=apiContent.searchNodes.length; i 0) { + node.highlight = highlight; + if (node.tId.indexOf("setting") > -1) { + setting_zTree.updateNode(node); + } else if (node.tId.indexOf("treenode") > -1) { + treenode_zTree.updateNode(node); + } else { + function_zTree.updateNode(node); + } + } + } + }, + getFontCss: function(treeId, treeNode) { + return (!!treeNode.highlight) ? {color:"#A60000", "font-weight":"bold"} : {color:"#333", "font-weight":"normal"}; + }, + getTitle: function(treeId, node) { + var t = [], n = node; + while (n && !!n.t) { + t.push(n.t); + n = n.getParentNode(); + } + t = t.reverse(); + node.tt = t.join('.'); + return true; + }, + showIcon: function(treeId, node) { + return (!!node.iconSkin); + }, + onNodeCreated: function (e, treeId, node) { + var a = $("#" + node.tId + "_a"); + if (node.showAPI) { + a.attr("rel", "#overlayDiv"); + } else { + a.css({cursor: "default"}); + } + }, + beforeClick: function (treeId, node, noClear) { + if (!node.showAPI) return false; + var o = $("#" + node.tId + "_a"); + if (!!apiContent.apiCache[node.tId]) { + apiContent.tmpDiv.html(apiContent.apiCache[node.tId]); + apiContent.overlayShow(o, (apiContent.lastNode === node)); + } else { + apiContent.overlayAjax(treeId, node); + } + apiContent.lastNode = node; + if (node.tId.indexOf("settingTree")>-1) { + apiContent.settingDiv.removeClass("right").addClass("left"); + apiContent.functionDiv.removeClass("left").addClass("right"); + } else { + apiContent.settingDiv.removeClass("left").addClass("right"); + apiContent.functionDiv.removeClass("right").addClass("left"); + } + + if (!noClear) { + apiContent.clearSelectedNode(); + } + return true; + }, + clearSelectedNode: function() { + apiContent.zTree_Setting.cancelSelectedNode(); + apiContent.zTree_Node.cancelSelectedNode(); + apiContent.zTree_Function.cancelSelectedNode(); + }, + overlayAutoClose: function(e) { + var eId = e.target.id, eRel = e.target.getAttribute("rel"), eClass = e.target.className; + if (eId === "overlayDiv" || eId === "overlayDivArrow" || eClass.indexOf("searchPrev") > -1 || eClass.indexOf("searchNext") > -1 || !!eRel) return; + if (!$(e.target).parents("[rel]").length && !$(e.target).parents("#overlayDiv").length) { + apiContent.overlayClose(); + } + }, + overlayClose: function() { + var o = apiContent.overlayDiv; + o.stop(); + apiContent.clearSelectedNode(); + if (ie) { + o.hide(); + } else { + setTimeout(function() {o.fadeTo("fast", 0, function(){o.hide();})}, 200); + } + $(document).unbind("click", apiContent.overlayAutoClose); + }, + overlayShow: function(target, isSameNode) { + var w = $(window), o = apiContent.overlayDiv, a = apiContent.overlayArrow, + oc = apiContent.overlayContent, c = apiContent.contentBoxDiv, + t = target.offset().top - 30, + cMaxLeft = c.offset().left + c.outerWidth({margin:true}) - o.outerWidth({margin:true}) - 10, + l = Math.min(cMaxLeft, target.offset().left + target.width() + 40), + arrowT = target.offset().top + 16, + wMinTop = 100, footerHeight = 50, onlyFade = false, + wHeight = w.height(), wScrollTop=w.scrollTop(), wMaxTop = wHeight + wScrollTop - footerHeight; + if (!apiContent.overlayMaxTop) { + apiContent.overlayMaxTop = apiContent.contentBoxDiv.offset().top + apiContent.contentBoxDiv.height(); + } + o.stop(); + if (o.css("display") !== "block") { + o.css({top: t, left: l}); + a.css({top:arrowT - t}); + $(document).bind("click", apiContent.overlayAutoClose); + } + if (ie) { + onlyFade = true; + o.show(); + } else { + o.fadeTo("fast", 1); + } + + var h = apiContent.tmpDiv.outerHeight({margin:true}) + apiContent.overlaySearch.outerHeight(); + if ((t + h) > wMaxTop) { + t = wMaxTop - h; + } + if ((t + h) > apiContent.overlayMaxTop) { + t = apiContent.overlayMaxTop - h; + } + t = Math.max(t, wScrollTop, wMinTop); + if ((t + h) > ($("body").height()-footerHeight-20)) { + o.css("padding-bottom", footerHeight + "px"); + } else { + o.css("padding-bottom", "0"); + } + apiContent.overlayDetailDiv.empty(); + apiContent.overlayDetailDiv.append(apiContent.tmpDiv.children()); + if (!onlyFade) { + onlyFade = (isSameNode && t === parseInt(o.css("top").replace("px", ""))); + } + + a.removeClass("reverse"); + if ( (arrowT - t) > (h-55) ) { + a.addClass("reverse"); + arrowT -= 55; + } + + if (onlyFade) { + o.css({top: t, left: l}); + oc.css({height: h}); + a.css({top:arrowT - t}); + } else { + o.animate({top: t, left: l}, {duration: "normal",easing: "swing", complete:null}); + oc.animate({height: h}, {duration: "fast",easing: "swing", complete:null}); + a.animate({top:arrowT - t}, {duration: "normal",easing: "linear", complete:null}); + } + }, + overlayAjax: function(treeId, node) { + var o = $("#" + node.tId + "_a"); + if (node.isAjax) return; + node.isAjax = true; + $.ajax({ + type: "get", + url: "" + lang + "/" + node.tt.replace("$.", "") + ".html", + data: null, + dataType: "text", + success: function(msg) { + if (!apiContent.tmpDiv) { + var tmpDiv = $(document.createElement("div")); + tmpDiv.addClass("baby_overlay_tmp"); + $("body").append(tmpDiv) + apiContent.tmpDiv = $(document.createElement("div")); + apiContent.tmpDiv.addClass("details"); + tmpDiv.append(apiContent.tmpDiv); + + } else { + apiContent.tmpDiv.empty(); + } + apiContent.tmpDiv.html(msg); + apiContent.overlayShow(o, false); + apiContent.apiCache[node.tId] = msg; + node.isAjax = false; + }, + error: function(XMLHttpRequest, textStatus, errorThrown) { + alert(ajaxMsg) + if (apiContent.tmpDiv) apiContent.tmpDiv.empty(); + node.isAjax = false; + } + }); + } +} \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/apiCss/common.css b/src/main/resources/static/lib/ztree/api/apiCss/common.css new file mode 100644 index 0000000..bc26d59 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/apiCss/common.css @@ -0,0 +1,218 @@ +/* Resets */ +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 { + margin: 0;padding: 0;border: 0;outline: 0;font-weight: inherit;font-style: inherit;font-size: 100%;font-family: inherit;vertical-align: baseline;} +:focus {outline: 0;} +body {color: #2f332a;font: 15px/21px Arial, Helvetica, simsun, sans-serif;background: #528036 url(img/background.jpg) no-repeat fixed 0 0;} +p {padding-bottom: 20px;} +ol, ul {list-style: none;} +table {border-collapse: separate;border-spacing: 0;} +caption, th, td {text-align: left;font-weight: normal;} +strong {font-weight: bold;} +em {font-style: italic;} +hr {display: none;} +.font1 {color: white;background-color: #528036;} +.right {float: right;} +.left {float: left;} +.hide {display: none;} +.round {-moz-border-radius: 15px;-webkit-border-radius: 15px;-khtml-border-radius: 15px;border-radius: 15px;} +.clear {clear: both;} +.clearfix {display: block;} +.clearfix:after {content: ".";display: block;clear: both;visibility: hidden;line-height: 0;height: 0;} +html[xmlns] .clearfix {display: block;} +* html .clearfix {height: 1%;} + +/* Link Styles */ +a {color: #528036;} +a:link, a:visited {text-decoration: none;} +a:hover {color: #000;text-decoration: none;} +a:active {text-decoration: none;} + +/* Headings */ +h1, h2, h3, h4, h5, h6 {color: #2f332a;font-weight: bold;font-family: Helvetica, Arial, simsun, sans-serif;padding-bottom: 5px;} +h1 {font-size: 36px;line-height: 44px;} +h2 {font-size: 20px;line-height: 20px;} +h3 {font-size: 14px;line-height: 14px;} +h4 {font-size: 14px;font-weight: normal;line-height: 25px;} + +/* Wraps */ +.header_wrap {position: relative;min-width: 940px;padding: 100px 30px 0 30px;} +.content_wrap {position: relative;min-width: 940px;padding: 0 30px 50px 30px;} +.footer_wrap {bottom: 0;height: 47px;width: 100%;background-color: #1b1b1b;border-top: 1px solid #749e58;} + +/* Header */ +.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;} +.header-text {padding: 40px 25px 15px 120px;font-size: 18px;line-height: 24px;color: #747d67;font-family: Helvetica, sans-serif;} +.header-text img {padding-bottom: 5px;} +.shortcuts {white-space: nowrap;text-align: right;position: absolute;top: -45px;right: 5px;} +.shortcuts.language {top: -85px;right:0px;} +.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;} +.shortcuts li button {cursor: pointer;} +.shortcuts li span {border-bottom: 1px dotted white;} +.shortcuts li span.selected {padding: 2px;background-color: #528036;} +.shortcuts li a {color: #fff;} +.ieSuggest {display:none;font-size: 12px;color: silver;position: absolute;left: 10px;top: 2px;} +.light-bulb {position: absolute;left: -20px;bottom: -35px;width:116px;height:180px;background-image:url(img/lightbulb.png);background-repeat: no-repeat;} + +/* Content */ +.content {position: relative;width: 940px;margin: 0 auto;} +.nav_section {position: relative;height: 20px;font-family: "Myriad Pro", "Trebuchet MS", sans-serif;font-size: 15px;color: #253;padding: 20px 0;} +.nav_section ul {position: absolute;right: 10px;} +.nav_section ul li {display: inline;line-height: 20px;margin: 0 5px 0 20px;border-bottom: 1px dotted white;} +.nav_section ul li.noline {border-bottom: 0;} +.nav_section ul li a {color: #fff;} +.nav_section ul li a.selected {padding: 2px;background-color: #528036;} +.nav_section ul li.first {border: none;} +.content .title {margin: 50px 30px 20px 70px;} +.content li {margin-bottom: 5px;} +.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;} + +.zTreeInfo {display:none;width: 940px;position: absolute;} +.zTreeInfo p {padding-bottom: 50px;} +.zTreeInfo-left {float: left;width: 280px;height:300px;padding: 0 50px 60px 75px;background:url(img/zTreeIntroduction.jpg) no-repeat 30px 30px;} +.zTreeInfo-right {position: relative;float: right;width: 475px;padding: 0 50px 60px 0;} +.zTreeInfo-right li {font-size: 12px;list-style-type: disc;} + +.license {display:none;width: 940px;position: absolute;} + +.donateInfo {display:block;width: 940px;position: absolute;} + +.links {display:none;width: 940px;position: absolute;} +.links .content {float: left;width: 160px;height:200px;padding: 0 10px 10px 2px;text-align: center;} +.links .content.first {margin-left: 30px;} + +.contact {display:none;width: 940px;position: absolute;} +.contact .myhome { position: absolute; top:10px; left:620px; width:300px; height:266px; background: transparent url(img/myhome.gif) scroll no-repeat 0 0;} + +.siteTag {position: absolute;left: -16px;top: 109px;z-index: 10;width: 65px;height: 46px;padding:0;margin:0 10px 0 0; + vertical-align:middle;border:0 none;background: transparent url(img/siteTag.png) scroll no-repeat 0 0;} +.siteTag.tag_zTreeInfo {background-position: 0 0} +.siteTag.tag_license {background-position: 0 -46px} +.siteTag.tag_donate {background-position: 0 -92px} +.siteTag.tag_contact {background-position: 0 -138px} + +.apiContent {width: 940px;} +.apiContent .right {float: right;padding-right: 100px;} +.apiContent .left {float: left;padding-right: 20px;border-right: 1px dotted silver;} +.api_setting {position: relative;margin:20px 0 20px 20px;} +.api_function {position: relative;margin:20px 0 20px 30px;padding-right: 10px;} +.api_content_title {text-align: center;font-weight: bold;} + +.demoContent {width: 940px;} +.demoContent .right {float: right;padding: 20px;width: 600px;} +.demoContent .left {float: left;padding: 20px;} +.demoContent iframe {width:600px;min-height: 530px;} + +.faqContent {width: 940px;} +.faqContent .right {float: right;padding: 20px;width: 600px;} +.faqContent .left {float: left;padding: 20px;} +.faqContent iframe {width:600px;min-height: 300px;} + +.baby_overlay_tmp {position: absolute;top:0; left:-5000px;display:block;visibility: hidden;width:640px;font-size:11px;} +.baby_overlay_tmp .details {padding: 20px;} +.baby_overlay {display:none;position:absolute;z-index:99;left:0; top:0;width:640px;color:#fff;font-size:11px;} +.baby_overlay .content {width:100%; height:100px;overflow: hidden;background: transparent url(img/overlay_bg.png) scroll repeat 0 0;} +.baby_overlay .details {padding:0 20px 20px 20px;} +.baby_overlay .close {background-image:url(img/close.png);position:absolute; right:5px; top:5px;cursor:pointer;height:36px;width:36px;} +.baby_overlay_arrow {background-image:url(img/overlay_arrow.png);background-position:0 0;position:absolute;height:40px;width:40px;left: -40px;} +.baby_overlay_arrow.reverse {background-position:0 -40px;} + +/* Footer */ +.footer {position: relative;min-width: 1000px;font: 14px/24px arial, helvetica, sans-serif;} +.footer ul {position:absolute;left: 0px;border:1px solid #393939;background:#262626;padding:12px 0px;line-height: 18px;display: none;list-style: none;} +.footer ul li a {display:block;padding: 2px 15px;color: #9c9c9c;text-indent: 0;} +.footer ul li a:hover {text-decoration:none;color: #fff;} +.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;} +.footer_mii {position: absolute;right: 558px;top: 8px;z-index: 10;padding: 4px 0;} +.footer_mii a {font-size:10px;color:#649140} +.footer_mii a:hover {color:#B6D76F} +.footer_siteMap {position: absolute;right: 358px;top: 8px;width: 155px;z-index: 10;padding: 4px 0;} +.footer_siteMap .footer_siteMap_header {width:155px;text-indent: -9999px;background: transparent url(img/footer_siteMap.gif) no-repeat 0 0;} +.footer_siteMap ul {top:-202px;width:180px;} +.footer_siteMap:hover ul {left: 0} +.footer_contact {position: absolute;right: 193px;top: 8px;width: 155px;z-index: 10;padding: 4px 0;} +.footer_contact .footer_contact_header {width:155px;text-indent: -9999px;background: transparent url(img/footer_contact.gif) no-repeat 0px 0px;} +.footer_contact ul {top:-113px;width:153px;} +.footer_contact:hover ul {left: 0} +.footer_download {position: absolute;right: 60px;top: 8px;width: 123px;z-index: 10;padding: 4px 0;} +.footer_download .footer_download_header {width:123px;text-indent: -9999px;background: transparent url(img/footer_download.png) no-repeat 0px 0px;} +.footer_download ul {top:-113px;width:140px;} +.footer_download:hover ul {left: 0} + +/* button icon */ +button {vertical-align:middle;border:0 none;background: transparent no-repeat 0 0 scroll;} + +.shortcuts button.ico {width:24px; height:24px;padding:0; margin:0 10px 0 0;background-image:url(img/menuIcon.png)} +.shortcuts button.home {background-position: 0 0} +.shortcuts button.demo {background-position: 0 -24px} +.shortcuts button.api {background-position: 0 -48px} +.shortcuts button.faq {background-position: 0 -72px} +.shortcuts button.donate {background-position: 0 -144px} +.shortcuts button.download {background-position: 0 -96px} +.shortcuts button.face {background-position: 0 -120px} +.shortcuts button.cn {width:48px; height:24px;padding:0; margin:0 10px 0 0;background-image:url(img/chinese.png)} +.shortcuts button.en {width:48px; height:24px;padding:0; margin:0 10px 0 0;background-image:url(img/english.png)} + +.content button.ico {width:24px; height:24px;padding:0; margin:0 10px 0 0;} + +.content button.ico16 {width:16px; height:16px;padding:0; margin:0 5px 0 0;background-image:url("img/apiMenu.png");} +button.z_core {margin-top: -4px;background-position:0 0;} +button.z_check {margin-top: -4px;background-position:0 -16px;} +button.z_edit {margin-top: -4px;background-position:0 -32px;} +button.z_hide {margin-top: -4px;background-position:0 -64px;} +button.z_search {margin-top: -4px;background-position:0 -48px;} +button.searchPrev {margin-top: -4px;background-position:-16px 0;cursor:pointer} +button.searchNext {margin-top: -4px;background-position:-16px -16px;cursor:pointer} +button.searchPrev.disabled {margin-top: -4px;background-position:-16px -32px;cursor:auto} +button.searchNext.disabled {margin-top: -4px;background-position:-16px -48px;cursor:auto} +input.search {margin:0;padding:2px 0; border:0;} +input.searchKey {width:150px;} +input.searchResult {margin-left:-3px;width:65px;text-align:right;background-color:white;color:#707070} +input.searchResult.noResult {background-color:#ff6666;color:black} +.baby_overlay div.overlaySearch {text-align:right;padding-right:50px;padding-top:12px;} + +/* api overlay*/ +.apiDetail .topLine {border-top: 1px dashed #376B29;margin-top: 5px;padding-top: 5px;} +.apiDetail .highlight_red {color:#A60000;} +.apiDetail .highlight_green {color:#A7F43D;} +.apiDetail h1, .apiDetail h2, .apiDetail h3, .apiDetail h4, .apiDetail h5, .apiDetail h6 {color: white;padding: 0;} +.apiDetail h2 {color: #A7F43D;margin: 5px auto;padding: 5px;font-size: 20px;} +.apiDetail h2 span {font-size: 14px;float: right;font-weight: normal;margin: 2px 20px 0 0;vertical-align: bottom;} +.apiDetail h2 span.path {float: left;margin: 2px 0 0 0;vertical-align: bottom;} +.apiDetail h3 {margin: 5px auto;padding: 5px;font-size: 14px;font-weight: normal;} +.apiDetail h3 span.h3_info {margin-left: 20px;font-size: 12px;} +.apiDetail h4 {margin: 0 auto;padding: 0 5px;font-size: 12px;font-weight: normal;line-height: 16px;} +.apiDetail .desc h4 {color: black;} +.apiDetail h4 b{width: 150px;display:inline-block;} +.apiDetail h4 span{width: 230px;display:inline-block;} + +.apiDetail pre, .apiDetail .desc {background: #E8FCD6;color: black;margin: 10px;padding: 10px;display: block;} +.apiDetail pre {word-wrap: break-word;} +.apiDetail p{margin-left: 5px;padding: 0;} +.apiDetail .longdesc {margin-top: 5px;} +.apiDetail .longdesc p{font-size: 12px;line-height:1.5;margin:3px 0;} +.apiDetail .longdesc b{font-size: 14px;} +.apiDetail table {border-collapse:collapse;} +.apiDetail table td {border:1px solid silver;text-align: center;vertical-align: middle;} +.apiDetail table thead td {font-weight: bold} + +.apiDetail button {width:16px; height:16px; vertical-align:middle; border:0 none; cursor: pointer; + background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; + background-image:url("zTreeStyle/img/zTreeStandard.png");} + +.apiDetail button.chk {width:13px; height:13px; margin:0 3px 2px 0; cursor: auto} +.apiDetail button.chk.checkbox_false_full {background-position:0 0} +.apiDetail button.chk.checkbox_false_full_focus {background-position:0 -14px} +.apiDetail button.chk.checkbox_false_part {background-position:0 -28px} +.apiDetail button.chk.checkbox_false_part_focus {background-position:0 -42px} +.apiDetail button.chk.checkbox_true_full {background-position:-14px 0} +.apiDetail button.chk.checkbox_true_full_focus {background-position:-14px -14px} +.apiDetail button.chk.checkbox_true_part {background-position:-14px -28px} +.apiDetail button.chk.checkbox_true_part_focus {background-position:-14px -42px} +.apiDetail button.chk.radio_false_full {background-position:-28px 0} +.apiDetail button.chk.radio_false_full_focus {background-position:-28px -14px} +.apiDetail button.chk.radio_false_part {background-position:-28px -28px} +.apiDetail button.chk.radio_false_part_focus {background-position:-28px -42px} +.apiDetail button.chk.radio_true_full {background-position:-42px 0} +.apiDetail button.chk.radio_true_full_focus {background-position:-42px -14px} +.apiDetail button.chk.radio_true_part {background-position:-42px -28px} +.apiDetail button.chk.radio_true_part_focus {background-position:-42px -42px} \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/apiCss/common_ie6.css b/src/main/resources/static/lib/ztree/api/apiCss/common_ie6.css new file mode 100644 index 0000000..aacaf59 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/apiCss/common_ie6.css @@ -0,0 +1,23 @@ +* html{ +/* background-image:url(about:blank);*/ + background-attachment:fixed; +} +html pre {word-wrap: break-word} +.header {background-image: none;background-color: #F0F6E4;} + +.ieSuggest {display:block;} +.shortcuts button.cn {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/chinese.png');background-image: none;} +.shortcuts button.en {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/english.png');background-image: none;} + +.light-bulb {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/lightbulb.png');background-image: none;} +.contentBox {background-image: none;background-color: #F0F6E4;} +.zTreeInfo {background-image: none;background-color: #F0F6E4;} + +.content button.ico16 {*background-image:url("img/apiMenu.gif")} +.siteTag {background-image: none;} +.apiContent .right {float: right;padding-right: 50px;} + +div.baby_overlay {background-color: #3C6E31;background-image:none;color:#fff;} +div.baby_overlay .close {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='apiCss/img/overlay_close_IE6.gif');background-image: none;} +.baby_overlay_arrow {background-image:url(img/overlay_arrow.gif);} +.apiDetail button {background-image:url("img/zTreeStandard.gif")} \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/apiMenu.gif b/src/main/resources/static/lib/ztree/api/apiCss/img/apiMenu.gif new file mode 100644 index 0000000000000000000000000000000000000000..066fc8e4d323888e61319185945c31dad3643ec5 GIT binary patch literal 1736 zcmV;(1~>UfNk%w1VITld0Oo%HsP~MC)ocCg%Q&6Y`TF|rmtyCLP58@DjphG`-2bGc zq>=G#`r$lAspt5~BD1rzuGZ}B!UXri8Pn6#Tevc!=Kq|Va^m9R|EYBLycB)iSXQ|7 z_PjZ%sj2kz^q=U2be^`mySwe}?U&pB=Ai<{#>Q&L{`98>?$iYJwGC;sNUg1{>$wB_ z-l>kb&xX$VX}9C_)|Bz-3GJeG{=Jj-x=Zxt8Be3ra?k%wn8IVf_VxZD-rn9>wCiK7 z*SGoqeaBt@!kl)*^zOdrz z$NSf94@|J{xlk5#)lvMSZ2tWDprD|H$gAkurvSv|NsC0A^8LW004ggEC2ui z03ZNR000O7fPaF6goTEOh-XSmL_|wUXNZCV2L}R@N<=e3dU`=KL`sNR2Mi1ch)P#c zQ8Z+)tXHCiX9rccsD@`mtyW}yz+^O0M3IC{Ny$kqhkG+LR#w2$epWOydxTmJN!%PQ zS}iSEgG*3p$&iX0cu+E=SjloFhf9B?6qsSaKrmniW)zU34G&8w z;KY#=REG%2n!x-RC_sfsokC1bNX5g<5CJJyj@DdC<%$#nv}#B_Q3H_&IF4qhoxuo> zheKKa`baHnc7g>kjlfu#@D`DPK7C*!A|Qgtgb6%EfR)6!vE#=CAov(Czz2lIk|^0b z1Yy9I5qIv4*fIbD<5H)F5`u7}LIng3V!OU!8j&qr#sm=<@H#<*qzy(?7=XD@3uQ@| z5X#eJgb^dap!+d0qDdY?S;U3o(5;)6K|Y-0zyXZB9~{(uz&k*%y#ts7Muah80vLVz zVMYuX)Wx8G2@bsUM|?UI2#gM~6{sJ78#O544KL`h!3Mxk=*I>+yl?|N9JJI@22jA{ z0t`a*Fa|Kc`O$+AFt~u7b}c}`5+2_PGRFXN^zcTCe!S6x90SaONDFw3rQ9F{xPT-7 z3_CXP1`I&DP#hs*&6S%V9w-Sz6I*Q21PlYX(AObV_MsXf9!vm24wU5p0$+^%6__N1 z8HSi*kL9Uno@X2Z1O*fTam1B|h!8>uLLzbm1pxry=m!B%aD-WhhERf{6gUbfpeg_$ zsV*fvAZiGQoRKL23nT@Mri4x)s;E31!bYPDr0PelwE_?T8-!dS>Iy47z{3SR@GvG2 zAK(hirnP*K+yMh7)7hLcI*Z#2v5CM4M#j=2U0q`2V8oa{)u*Hr^ z2cuZ%aOD7YAfUq&z&xSD-FE102oJA5FaaTeC-B4*u1%i6 z<%y$NEV0rC`@jW*@CIE1&m}P3bHhO!0=29oEC_Gp&1XUw=Z%-TASKXyuIurc@B|V< z=zxSDW6-xC?z)@HdjdMt*XC@%|x06Mdx*FHnOJ21vjGs^JCd*;~mTu(Uj|X=@P7 z!F3KXhhT{fNf$Vb1~)i?I#A7OAY{xLV!#Iykbn;{Ae7Z&K!OO^U6eAYMh=L-vQ4D0n0tu{Egdx~*2t~xB815Lxs!f3fLx?~G zia1CyL|_Okn1a>nK!QNBpoot&kl&TS63XO~a3pUAuLy}-63LkWg2dF@TP6|?! eB%s35_LQaqe8GfYC;*&n_=h@44No8p1OPkbFgk7k literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/apiMenu.png b/src/main/resources/static/lib/ztree/api/apiCss/img/apiMenu.png new file mode 100644 index 0000000000000000000000000000000000000000..9acec5057306867f42393ce18d9166d13d152633 GIT binary patch literal 3954 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 F{|`9`0Ez$r literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/chinese.png b/src/main/resources/static/lib/ztree/api/apiCss/img/chinese.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b57fc12cb718404a1116cf5f1e414bd10b2ce4 GIT binary patch literal 1556 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 O0000m literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/header-bg.png b/src/main/resources/static/lib/ztree/api/apiCss/img/header-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a2baacf2a8a302de4575a88a04e98f98546f30a3 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^j6kHr!3Jb81>C#}q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6`6UuIEGZ*O8Upo;=|+M5dFwrQz)hDVvF}it6Q227j0`a uZ#d?)VsT%R-qEBVs&1WuOpXjJ5)8Zg+{AoBQ=S4%VDNPHb6Mw<&;$UeKrO}q literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/lightbulb.png b/src/main/resources/static/lib/ztree/api/apiCss/img/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..c99357a35221d96943f4bf05354611e4c398ac9a GIT binary patch literal 27355 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 S9Tmj@0000hS4nkz;k3ZEllhM07eoa5Zw4YeI53 zcbagArhvxP!(ND1#ni$&Z7|W@&*13aHEAl5u8f4Fez(fAldq1};MAeHoGW4=C}15p zYb{)cQXpdlUm1$;qr0CbUK;=Z{{R300000000000 z00000A^8LW0024wEC2ui04M-Z000L6K%Fi}Bqd6)f^f-fI-ksdEhi&dF&dQ!%I)d` z7OU9GGMHuvullPQyR9t<3Pe~x1GTr_da&S9c1r;ldxb;9Ho12#qp^#kyq@{&k0tu>nY5=aUZfgKHv}1MvAGub604}~cfjR&SzQxAK zw8}aU2F=dUug*dQF{;+r6Q$eSq2EFU5u)Nc{I0T>Dz6f$5#t%VF7ih;O9L57JGg;@NRQ3wJDL^>|{NKB-V5e`hMT=@j0 zN|Gi?mdv;@B+ZK)AvV;dQzAx=g9sH0B=`{Dzku-ct)kapA5wAh?yZX|Rb0Av->zb{ zMxdKHu3oP)3k$#2As7o^5(;$|m+xe^n&*Q%aPwR7=c=R(i-7BSvJ57!MOsPoK|xK6cFA?S47; zocH1Fd474W*FHP?$kjx4OAqLliR33U5<9DAVUFNqtSMYwAmg4=t|9I$FzyNEI^xy`;~r6Ngm}s*3mg>Obf{-Ei;OD+R9rjs z`oI>%t;E1_OA6wm9dOJ8>S5auxKodaCOJ6RL$+EuU$|Pwl#>h`AM~zzhT8i<@8krI zkIEN4g&yRny!*1jV{`nnLDujSmHp0BF@lSvO0FMmM)gXg(!2kdN07*qo IM6N<$f-P!#uK)l5 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/overlay_bg.png b/src/main/resources/static/lib/ztree/api/apiCss/img/overlay_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..5f81ee69d530a8760630eccb3771f5f15091e9dd GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}bl$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G{GKk3Ar-fhCU8Cd%_5M%z*NOp@bwaR8&HbD)78&qol`;+ E07Hcx5C8xG literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/overlay_close_IE6.gif b/src/main/resources/static/lib/ztree/api/apiCss/img/overlay_close_IE6.gif new file mode 100644 index 0000000000000000000000000000000000000000..42cb8d83498f922fb6005864738917cab2eeb66c GIT binary patch literal 441 zcmZ?wbhEHbRAEqIxT?+&-I`ZEt9$DDCE?B4MblbJXLMA}?wzo9@r1Ptr9uT{BV~7; zKKl0Khob3ir87DM>Qf4)Hp@pT+<*Qwx;6jXk8jP3rkZEFz5o1CAxe45`Xwp7l^O{K znGAZ{f|Ey^VUr^6Rj+h5i6@M@-0!}6jzq46i^nCP-(9%lg(x-XUS%5t0~SZXPBij zS9$(|4xg?i*-F`b71I{gElF0aTG+X`f-RY2_ZshYW%AkF*@w!v?%mFqt)L>D&3<;z z+I_s)Y~{??R!>(EQf91tz#};I=FxpzQcWuSa*wus`f={o_8(i`dX?PcNcpVqDPhcU bT7db*(nMz+0cEc_9vc@O?RIZsV6X-NX7Qsr literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/zTreeStandard.gif b/src/main/resources/static/lib/ztree/api/apiCss/img/zTreeStandard.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f69a5b1d370c02c65395f6a91f46b94cfeae7d9 GIT binary patch literal 6851 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/api/apiCss/img/zTreeStandard.png b/src/main/resources/static/lib/ztree/api/apiCss/img/zTreeStandard.png new file mode 100644 index 0000000000000000000000000000000000000000..33c9e8441e33300cbf10b56b065a4b8fcc997841 GIT binary patch literal 12573 zcmaKTbzIZm+c$`SNC`-HOS4g9bc1wv52P8RTWKUmcPOQFhjb1BLAo214(alN?=SBA zkLPvowe3^q>g!zRywBMp)l}rLUy{8F9r>sUJ$vvG5Sg1NXnJv})+c{rV6@3;Vhf`U&xfIyDN796hLPHyI298RwE|KT8Q%X1#=r%4db0`;plbZ|nPn#$E z{zIj#{C`t8I{vq{tDA<^|0w_eFhgm*G(VG5$iTb|8GxiD zNI*(fPyhr1f`GgL-v7`lIJvr+J6T%&ht~FgXa)aITCfz%%G}KvrseGH@SkK*vvGEF zcC~Sa(nx9Y(CFGaL7Y8ZpW^hW)svo9Fk25Rh%C(6k>($lfo=bnba(eh(Gmb|kbpD* z#3#cmEdu}m1Od{IMsQ0?O9}|^3JL<~{!Iw^Unc)U$SWx+DZvNi;T8Bdp$teyk{cih zoEzRPXC+zj~D;#KUPkU?uI?~j&{YRzeq?NZxy5^ zw7ll`jWPVRrl!PdRe^KFlKd~8(~5^wg~_1yhN7{Q2hFZ)7-FKP>Xd#mox0J#VX+IG zqNA&uvY65-)v$ugh(nlZ?B$;^gg|N%lp5yVEw>)!+-@r`XL|FbD*^E>aXN-ty^kJ_ zl&l|)T3tu)J9uiMsl`SmiOY8ZHfe!`~J4$fm~zU3E6jE(3v<=tlIu}Qe8=S$8qK1JGZYBfLcbT z{D}cV_V!>}Z>2;KjvHws+N~fve2{Pt$o%7d2rWGlenL}QSU+i)Vj<7h*aPE{mb5}A zNkuZ+6Z}x6YEA)qYP4c&DI*KvrIqnX;SHGMTy*UXed*DS#ju8?b%*6Ed@kB76JmHd z@>IN6e6h^LeMQCvX{_Q154%;vRKci*Up=i_thP3*$B*`rm%4s(Ff3&NS1NQY*P7Yde43RLzST&RXaG&%$Vz|~)?7Dhw# z8~D?k!yR#c`B?9p2|ex(Sw>F`AAS+alLT-i`8AklH}~Zwv28m0#JT+1Uffd8NaJf% zVo>1?L&hY@C&~~^V6>wVIw3<)C7}q#`nNj$OtDX<{voo#BYVDL-c0vwT6#nUUEb}3 zijLGJ`J7(FTW3_7Z`y*SW{cWwv1i&vf1e3kBECslIFEkcc=cK9tDpSvIo<|$Ltj-V zHR<&O&j5C?_k`@v2Mti`)qdlCxGB+JeEt~+WODn|-g9?XfQp&%I0qdIsR38O3+#cM zccJC?r$lRavgK-DK=_7ONV;Fm2JG3^Qew_?8aDpsvUp&a}Mco#Zk+O@0G0i6Gp%r?HKIc)~qSl?JK0(*{$y_+H~K4 ze_VYaW~P&2Hr1Tk>D1V>4)?rW?Y7E25E`Nq)!n(gN>UFtdpK{dfyVWK4myDzI~Zyq zLf0C48 zr^v)=p_JAJl`gURbd>c?xvVEx!m=so!b-Zd94@2tH`}ba87>%s;h(9m8g`CHaN{E7 z{SJT7QBzoxLW78g_ssd%yTqK6dfRl*snT9Vj#%^PIpTPo|7L@Z{`U2Ut^pZVq7*UT z(^A1*z+DP2wyG97cdFot-_Zi+G(JAZx&=i~pm7%0D;`k-f)u8WPe`SZ=E;yKh+O2t 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").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
              a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
              ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
              t
              ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. +shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

              ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
              ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
              ","
              "],thead:[1,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],col:[2,"","
              "],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
              ","
              "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j +)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
              ").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
              ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/apiCss/jquery.ztree.core.js b/src/main/resources/static/lib/ztree/api/apiCss/jquery.ztree.core.js new file mode 100644 index 0000000..b8a472a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/apiCss/jquery.ztree.core.js @@ -0,0 +1,75 @@ +/* + * JQuery zTree core v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(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", +dataType:"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, +function(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, +[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= +e.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)&&!(b===!1||typeof b=="string"&&h.eqs(b,"false"))?(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)};c.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,i="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,"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=(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,b){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)||c.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-1&& +f.push(k);k=e.nodeChildren(a,k);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 +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&&a.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&&d0},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+1,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;s0&&(l=j.appendNodes(a,b+1,I,p,-1,i,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)&&f.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);for(f=0,i=k.length;b&&f1&&(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-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,xhrFields: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,[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,[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),n.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=l(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,[])):c.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=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,"&").replace(//g,">");a.push("", +d,"")},makeDOMNodeLine:function(a,b,c){a.push("")},makeDOMNodeMainAfter:function(a){a.push("")},makeDOMNodeMainBefore:function(a,b,c){a.push("
            • ")},makeDOMNodeNameAfter:function(a){a.push("")},makeDOMNodeNameBefore:function(a,b,c){var d=e.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("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,"'").replace(//g,">"),"'");a.push(">")},makeNodeFontCss:function(a,b){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(",d,") 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("_")},makeNodeLineClassEx: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("
                ");c.push(d);c.push("
              ")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c= +e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;dc.bottom||d.right>c.right||d.left0)c[0].isFirstNode=!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;i0){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,h,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)+c;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,a),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,[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",LEVEL:"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",CLOSE:"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)?c:[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,a)},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(),b,!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,b,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;c0?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); diff --git a/src/main/resources/static/lib/ztree/api/apiCss/zTreeStyleForApi.css b/src/main/resources/static/lib/ztree/api/apiCss/zTreeStyleForApi.css new file mode 100644 index 0000000..bb4717b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/apiCss/zTreeStyleForApi.css @@ -0,0 +1,49 @@ +/*------------------------------------- +zTree Style + +version: 3.0 +author: Hunter.z +email: hunter.z@263.net +website: http://code.google.com/p/jquerytree/ + +-------------------------------------*/ + +.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif} +.ztree {margin:0; padding:5px; color:#333} +.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap} +.ztree li ul{ margin:0; padding:0 0 0 18px} +.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;} + +.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} +.ztree li a:hover {text-decoration:none} +.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid;} +.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)} +.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)} +.ztree li a.tmpTargetNode_prev {} +.ztree li a.tmpTargetNode_next {} +.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; + font-size:12px; border:1px #7EC4CC solid; *border:0px} +.ztree li span {line-height:16px; margin-right: 2px} +.ztree li span.button {line-height:0; margin:0;width:16px; height:16px; display: inline-block; vertical-align:middle; + border:0 none; cursor: pointer; + background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; + background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} + +.ztree li span.button.switch {width:1px; height:18px; visibility: hidden} + +.zTreeDragUL {margin:0; padding:0; position:absolute; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)} +.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} + +/* level 等级样式*/ +/*.ztree li button.level0 { + display:none; +} +.ztree li ul.level0 { + padding:0; + background:none; +}*/ + +.ztree li span.button.core_ico_docu{margin-right:2px; background-position:-126px 0; vertical-align:top; *vertical-align:middle} +.ztree li span.button.check_ico_docu{margin-right:2px; background-position:-126px -16px; vertical-align:top; *vertical-align:middle} +.ztree li span.button.edit_ico_docu{margin-right:2px; background-position:-126px -32px; vertical-align:top; *vertical-align:middle} +.ztree li span.button.hide_ico_docu{margin-right:2px; background-position:-160px 0; vertical-align:top; *vertical-align:middle} diff --git a/src/main/resources/static/lib/ztree/api/cn/fn.zTree._z.html b/src/main/resources/static/lib/ztree/api/cn/fn.zTree._z.html new file mode 100644 index 0000000..7af3e40 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/fn.zTree._z.html @@ -0,0 +1,13 @@ +
              +
              +

              JSON$.fn.zTree._z

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree v3.x 内部的全部方法都可以通过 $.fn.zTree._z 进行调用,开放出来是为了更便于大家开发制作自己的 zTree 插件。

              +

              如无特殊需求请勿使用此对象,以及修改此对象内部的各个函数。

              +
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/fn.zTree.destroy.html b/src/main/resources/static/lib/ztree/api/cn/fn.zTree.destroy.html new file mode 100644 index 0000000..7105807 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/fn.zTree.destroy.html @@ -0,0 +1,28 @@ +
              +
              +

              Function(treeId)$.fn.zTree.destroy

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              从 zTree v3.4 开始提供销毁 zTree 的方法。

              +

              1、用此方法可以销毁指定 treeId 的 zTree,也可以销毁当前页面全部的 zTree。

              +

              2、销毁指定 treeId 的 zTree 也可以使用 zTreeObj.destroy() 方法。

              +

              3、重新使用已经被销毁的树,必须要使用 init 方法进行初始化。

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              zTree 的 DOM 容器的 id

              +

              省略 treeId,表示销毁当前页面全部的 zTree

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 销毁 id 为 "treeDemo" 的 zTree

              +
              $.fn.zTree.destroy("treeDemo");
              +

              2. 销毁全部 的 zTree

              +
              $.fn.zTree.destroy();
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/fn.zTree.getZTreeObj.html b/src/main/resources/static/lib/ztree/api/cn/fn.zTree.getZTreeObj.html new file mode 100644 index 0000000..b1d1db4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/fn.zTree.getZTreeObj.html @@ -0,0 +1,24 @@ +
              +
              +

              Function(treeId)$.fn.zTree.getZTreeObj

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree v3.x 专门提供的根据 treeId 获取 zTree 对象的方法。

              +

              必须在初始化 zTree 以后才可以使用此方法。

              +

              有了这个方法,用户不再需要自己设定全局变量来保存 zTree 初始化后得到的对象了,而且在所有回调函数中全都会返回 treeId 属性,用户可以随时使用此方法获取需要进行操作的 zTree 对象

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              zTree 的 DOM 容器的 id

              +

              返回值JSON

              +

              zTree 对象,提供操作 zTree 的各种方法,对于通过 js 操作 zTree 来说必须通过此对象

              +
              +

              function 举例

              +

              1. 获取 id 为 tree 的 zTree 对象

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/fn.zTree.init.html b/src/main/resources/static/lib/ztree/api/cn/fn.zTree.init.html new file mode 100644 index 0000000..61da41a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/fn.zTree.init.html @@ -0,0 +1,74 @@ +
              +
              +

              Function(obj, zSetting, zNodes)$.fn.zTree.init

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 初始化方法,创建 zTree 必须使用此方法

              +

              1、页面需要进行 W3C 申明,例如:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">。

              +

              2、需要首先加载 jquery-1.4.2.js 或其他更高版本的 jQuery 。

              +

              3、需要加载 jquery-ztree.core-3.0.js,如果需要用到 编辑功能 或 checkbox / radio 还需要分别加载 jquery-ztree.exedit-3.0.js 和 jquery-ztree.excheck-3.0.js 。

              +

              4、需要加载 zTreeStyle.css 以及 zTreeStyle 目录下的 img 文件。

              +

              5、如果需要使用自定义图标请参考相应的Demo。

              +

              6、请注意设置 zTree 的容器样式 class="ztree",其中 "ztree" 这个 className,可以根据需要随意修改,别忘了修改 css 中对应名字就是了,对于容器如果需要增加其他特殊样式,可根据自己的需要进行修改。

              +
              +
              +

              Function 参数说明

              +
              +

              objjQuery Object

              +

              用于展现 zTree 的 DOM 容器

              +

              zSettingJSON

              +

              zTree 的配置数据,具体请参考 “setting 配置详解”中的各个属性详细说明

              +

              zNodesArray(JSON) / JSON

              +

              zTree 的节点数据,具体请参考 “treeNode 节点数据详解”中的各个属性详细说明

              +

              1、v3.x 支持单独添加一个节点,即如果只新增一个节点,不用必须包在数组中

              +

              2、如果需要异步加载根节点,可以设置为 null 或 [ ]

              +

              3、使用简单数据模式,请参考 setting.data.simpleData 内的属性说明

              +

              返回值JSON

              +

              zTree 对象,提供操作 zTree 的各种方法,对于通过 js 操作 zTree 来说必须通过此对象

              +

              如果不需要自行设定全局变量保存,可以利用 $.fn.zTree.getZTreeObj 方法随时获取

              +
              +

              setting & function 举例

              +

              1. 简单创建 zTree 演示

              +
              <!DOCTYPE html>
              +<HTML>
              + <HEAD>
              +  <TITLE> ZTREE DEMO </TITLE>
              +  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
              +  <link rel="stylesheet" href="zTreeStyle/zTreeStyle.css" type="text/css">
              +  <script type="text/javascript" src="jquery-1.4.2.js"></script>
              +  <script type="text/javascript" src="jquery.ztree.core.js"></script>
              +<!--
              +  <script type="text/javascript" src="jquery.ztree.excheck.js"></script>
              +  <script type="text/javascript" src="jquery.ztree.exedit.js"></script>
              +-->
              +  <SCRIPT type="text/javascript" >
              +	var zTreeObj,
              +	setting = {
              +		view: {
              +			selectedMulti: false
              +		}
              +	},
              +	zTreeNodes = [
              +		{"name":"网站导航", open:true, children: [
              +			{ "name":"google", "url":"http://g.cn", "target":"_blank"},
              +			{ "name":"baidu", "url":"http://baidu.com", "target":"_blank"},
              +			{ "name":"sina", "url":"http://www.sina.com.cn", "target":"_blank"}
              +			]
              +		}
              +	];
              +
              +	$(document).ready(function(){
              +		zTreeObj = $.fn.zTree.init($("#tree"), setting, zTreeNodes);
              +
              +	});
              +  </SCRIPT>
              + </HEAD>
              +
              +<BODY>
              +<ul id="tree" class="ztree" style="width:230px; overflow:auto;"></ul>
              + </BODY>
              +</HTML>
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.autoParam.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.autoParam.html new file mode 100644 index 0000000..6ce1dd7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.autoParam.html @@ -0,0 +1,49 @@ +
              +
              +

              Array(String) / Function(treeId, treeNode)setting.async.autoParam

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              异步加载时需要自动提交父节点属性的参数。[setting.async.enable = true 时生效]

              +

              默认值:[ ]

              +
              +
              +

              Array(String) 格式说明

              +
              +

              1、将需要作为参数提交的属性名称,制作成 Array 即可,例如:["id", "name"]

              +

              2、可以设置提交时的参数名称,例如 server 只接受 zId : ["id=zId"]

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要异步加载子节点的的父节点 JSON 数据对象

              +

              针对根进行异步加载时,treeNode = null

              +

              返回值Array(String)

              +

              返回值同 Array(String) 格式的数据

              +
              +

              setting 举例

              +

              1. 设置 id 属性为自动提交的参数

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		autoParam: ["id"]
              +	}
              +};
              +假设 异步加载 父节点(node = {id:1, name:"test"}) 的子节点时,将提交参数 id=1
              +......
              +

              2. 设置 id 属性作为 zId 成为自动提交的参数

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		autoParam: ["id=zId"]
              +	}
              +};
              +假设 对父节点 node = {id:1, name:"test"},进行异步加载时,将提交参数 zId=1
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.contentType.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.contentType.html new file mode 100644 index 0000000..db0c92f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.contentType.html @@ -0,0 +1,29 @@ +
              +
              +

              Stringsetting.async.contentType

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              Ajax 提交参数的数据类型。[setting.async.enable = true 时生效]

              +

              默认值:"application/x-www-form-urlencoded"

              +
              +
              +

              String 格式说明

              +
              +

              contentType = "application/x-www-form-urlencoded" 可以满足绝大部分请求,按照标准的 Form 格式提交参数

              +

              contentType = "application/json" 可以满足 .Net 的编程需要,按照 JSON 格式提交参数

              +
              +

              setting 举例

              +

              1. 设置 Ajax 提交参数的数据类型为 JSON 格式

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		contentType: "application/json",
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.dataFilter.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.dataFilter.html new file mode 100644 index 0000000..f174bf0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.dataFilter.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(treeId, parentNode, responseData)setting.async.dataFilter

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于对 Ajax 返回数据进行预处理的函数。[setting.async.enable = true 时生效]

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              parentNodeJSON

              +

              进行异步加载的父节点 JSON 数据对象

              +

              对根进行异步加载时,parentNode = null

              +

              responseDataArray(JSON) / JSON / String

              +

              异步加载获取到的数据转换后的 Array(JSON) / JSON / String 数据对象

              +

              v3.4开始 支持 XML 数据格式的 String

              +

              返回值Array(JSON) / JSON

              +

              返回值是 zTree 支持的JSON 数据结构即可。

              +

              v3.x 支持单个 JSON 节点数据进行加载

              +
              +

              setting & function 举例

              +

              1. 修改异步获取到的节点name属性

              +
              function ajaxDataFilter(treeId, parentNode, responseData) {
              +    if (responseData) {
              +      for(var i =0; i < responseData.length; i++) {
              +        responseData[i].name += "_filter";
              +      }
              +    }
              +    return responseData;
              +};
              +var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		dataFilter: ajaxDataFilter
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.dataType.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.dataType.html new file mode 100644 index 0000000..6d639b7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.dataType.html @@ -0,0 +1,29 @@ +
              +
              +

              Stringsetting.async.dataType

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              Ajax 获取的数据类型。[setting.async.enable = true 时生效]

              +

              默认值:"text"

              +
              +
              +

              String 格式说明

              +
              +

              dataType = "text" 可以满足绝大部分请求

              +

              其余 dataType 类型请参考 jQuery ajax 中的 dataType 参数

              +
              +

              setting 举例

              +

              1. 设置 Ajax 获取的数据类型为 纯文本

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		dataType: "text",
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.enable.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.enable.html new file mode 100644 index 0000000..9079ae1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.enable.html @@ -0,0 +1,30 @@ +
              +
              +

              Booleansetting.async.enable

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置 zTree 是否开启异步加载模式

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示 开启 异步加载模式

              +

              false 表示 关闭 异步加载模式

              +

              如果设置为 true,请务必设置 setting.async 内的其它参数。

              +

              如果需要根节点也异步加载,初始化时 treeNodes 参数设置为 null 即可。

              +
              +

              setting 举例

              +

              1. 需要开启异步加载模式

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.headers.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.headers.html new file mode 100644 index 0000000..222b9f8 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.headers.html @@ -0,0 +1,18 @@ +
              +
              +

              Objectsetting.async.headers

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              [setting.async.enable = true 时生效]

              +

              默认值:"{}"

              +

              v3.5.36+

              +
              +
              +

              Object 格式说明

              +
              +

              请参考 jQuery ajax 中的 headers 参数

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.otherParam.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.otherParam.html new file mode 100644 index 0000000..bfb44c2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.otherParam.html @@ -0,0 +1,50 @@ +
              +
              +

              Array(String) / JSON / Function(treeId, treeNode)setting.async.otherParam

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              Ajax 请求提交的静态参数键值对。[setting.async.enable = true 时生效]

              +

              默认值:[ ]

              +
              +
              +

              Array(String) 格式说明

              +
              +

              可以为空[ ],如果有 key,则必须存在 value。 例如:[key, value]

              +
              +

              JSON 格式说明

              +
              +

              直接用 JSON 格式制作键值对,例如:{ key1:value1, key2:value2 }

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要异步加载子节点的的父节点 JSON 数据对象

              +

              针对根进行异步加载时,treeNode = null

              +

              返回值Array(String) || JSON

              +

              返回值同 Array(String) || JSON 格式的数据

              +
              +

              setting 举例

              +

              1. 设置 Array(String) 格式的参数

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		otherParam: ["id", "1", "name", "test"]
              +	}
              +};
              +进行异步加载时,将提交参数 id=1&name=test
              +

              2. 设置 JSON 格式的参数

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		otherParam: { "id":"1", "name":"test"}
              +	}
              +};
              +进行异步加载时,将提交参数 id=1&name=test
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.type.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.type.html new file mode 100644 index 0000000..20d9a6b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.type.html @@ -0,0 +1,30 @@ +
              +
              +

              Stringsetting.async.type

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              Ajax 的 http 请求模式。[setting.async.enable = true 时生效]

              +

              默认值:"post"

              +
              +
              +

              String 格式说明

              +
              +

              type = "post" 表示异步加载采用 post 方法请求

              +

              type = "get" 表示异步加载采用 get 方法请求

              +

              对应于 jQuery ajax 中的 type 参数

              +
              +

              setting 举例

              +

              1. 设置使用 get 方式请求数据

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		type: "get",
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.url.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.url.html new file mode 100644 index 0000000..a5209af --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.url.html @@ -0,0 +1,50 @@ +
              +
              +

              String / Function(treeId, treeNode)setting.async.url

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              Ajax 获取数据的 URL 地址。[setting.async.enable = true 时生效]

              +

              默认值:""

              +
              +
              +

              String 格式说明

              +
              +

              设置固定的异步加载 url 字符串,请注意地址的路径,确保页面能正常加载

              +

              url 内也可以带参数,这些参数就只能是通过 get 方式提交了,并且请注意进行转码

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要异步加载子节点的的父节点 JSON 数据对象

              +

              针对根进行异步加载时,treeNode = null

              +

              返回值String

              +

              返回值同 String 格式的数据

              +
              +

              setting & function 举例

              +

              1. 设置异步获取节点的 URL 为 nodes.php

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "nodes.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +

              2. 设置异步获取节点的 URL 为 function 动态获取

              +
              function getAsyncUrl(treeId, treeNode) {
              +    return treeNode.isParent ? "nodes1.php" : "nodes2.php";
              +};
              +var setting = {
              +	async: {
              +		enable: true,
              +		url: getAsyncUrl,
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.async.xhrFields.html b/src/main/resources/static/lib/ztree/api/cn/setting.async.xhrFields.html new file mode 100644 index 0000000..ed2079e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.async.xhrFields.html @@ -0,0 +1,18 @@ +
              +
              +

              Objectsetting.async.xhrFields

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              [setting.async.enable = true 时生效]

              +

              默认值:"{}"

              +

              v3.5.36+

              +
              +
              +

              Object 格式说明

              +
              +

              请参考 jQuery ajax 中的 xhrFields 参数

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeAsync.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeAsync.html new file mode 100644 index 0000000..70ba0fc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeAsync.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeAsync

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获异步加载之前的事件回调函数,zTree 根据返回值确定是否允许进行异步加载

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              进行异步加载的父节点 JSON 数据对象

              +

              针对根进行异步加载时,treeNode = null

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将不进行异步加载,也无法触发 onAsyncSuccess / onAsyncError 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止 id 为 1 的父节点进行异步加载操作

              +
              function zTreeBeforeAsync(treeId, treeNode) {
              +    return (treeNode.id !== 1);
              +};
              +var setting = {
              +	callback: {
              +		beforeAsync: zTreeBeforeAsync
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCheck.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCheck.html new file mode 100644 index 0000000..a0e1f42 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCheck.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeCheck

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              用于捕获 勾选 或 取消勾选 之前的事件回调函数,并且根据返回值确定是否允许 勾选 或 取消勾选

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              进行 勾选 或 取消勾选 的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,将不会改变勾选状态,并且无法触发 onCheck 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止所有勾选操作,保持初始化的勾选状态

              +
              function zTreeBeforeCheck(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeCheck: zTreeBeforeCheck
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeClick.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeClick.html new file mode 100644 index 0000000..6efe928 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeClick.html @@ -0,0 +1,49 @@ +
              +
              +

              Function(treeId, treeNode, clickFlag)setting.callback.beforeClick

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获单击节点之前的事件回调函数,并且根据返回值确定是否允许单击操作

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              被单击的节点 JSON 数据对象

              +

              clickFlagNumber

              +

              节点被点击后的选中操作类型,详细看下表

              + + + + + + + + + + + + +
              clickFlagselectedMultiautoCancelSelected
              &&
              event.ctrlKey / metaKey
              isSelected选中操作
              1truefalsefalse普通选中
              1truefalsetrue普通选中
              2truetruefalse追加选中
              0truetruetrue取消选中
              1falsefalsefalse普通选中
              1falsefalsetrue普通选中
              1falsetruefalse普通选中
              0falsetruetrue取消选中
              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将不会选中节点,也无法触发 onClick 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止节点被选中

              +
              function zTreeBeforeClick(treeId, treeNode, clickFlag) {
              +    return (treeNode.id !== 1);
              +};
              +var setting = {
              +	callback: {
              +		beforeClick: zTreeBeforeClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCollapse.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCollapse.html new file mode 100644 index 0000000..d778e9c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeCollapse.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeCollapse

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获父节点折叠之前的事件回调函数,并且根据返回值确定是否允许折叠操作

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              要折叠的父节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将不会折叠节点,也无法触发 onCollapse 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止所有已展开的父节点折叠

              +
              function zTreeBeforeCollapse(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeCollapse: zTreeBeforeCollapse
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDblClick.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDblClick.html new file mode 100644 index 0000000..ed7e4dc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDblClick.html @@ -0,0 +1,36 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeDblClick

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标双击之前的事件回调函数,并且根据返回值确定触发 onDblClick 事件回调函数

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标双击时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,将仅仅无法触发 onDblClick 事件回调函数,对其他操作无任何影响

              +

              此事件回调函数对双击节点展开功能无任何影响,如果需要设置请参考 setting.view.dblClickExpand 属性

              +
              +

              setting & function 举例

              +

              1. 禁止 onDblClick 事件

              +
              function zTreeBeforeDblClick(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeDblClick: zTreeBeforeDblClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrag.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrag.html new file mode 100644 index 0000000..1e783a3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrag.html @@ -0,0 +1,39 @@ +
              +
              +

              Function(treeId, treeNodes)setting.callback.beforeDrag

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点被拖拽之前的事件回调函数,并且根据返回值确定是否允许开启拖拽操作

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              被拖拽的节点 treeNodes 所在 zTree 的 treeId,便于用户操控

              +

              treeNodesArray(JSON)

              +

              要被拖拽的节点 JSON 数据集合

              +

              v3.x 允许多个同级节点同时被拖拽,因此将此参数修改为 Array(JSON)

              +

              如果拖拽时多个被选择的节点不是同级关系,则只能拖拽鼠标当前所在位置的节点

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将终止拖拽,也无法触发 onDrag / beforeDrop / onDrop 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止全部拖拽操作

              +
              function zTreeBeforeDrag(treeId, treeNodes) {
              +    return false;
              +};
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeDrag: zTreeBeforeDrag
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDragOpen.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDragOpen.html new file mode 100644 index 0000000..ceab2d3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDragOpen.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeDragOpen

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获拖拽节点移动到折叠状态的父节点后,即将自动展开该父节点之前的事件回调函数,并且根据返回值确定是否允许自动展开操作

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              需要被展开的父节点 treeNode 所在 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              要被自动展开的父节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将无法进行自动展开操作

              +
              +

              setting & function 举例

              +

              1. 禁止全部拖拽时的自动展开操作

              +
              function zTreeBeforeDragOpen(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeDragOpen: zTreeBeforeDragOpen
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrop.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrop.html new file mode 100644 index 0000000..4123743 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeDrop.html @@ -0,0 +1,48 @@ +
              +
              +

              Function(treeId, treeNodes, targetNode, moveType, isCopy)setting.callback.beforeDrop

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点拖拽操作结束之前的事件回调函数,并且根据返回值确定是否允许此拖拽操作

              +

              默认值:null

              +

              如未拖拽到有效位置,则不触发此回调函数,直接将节点恢复原位置

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              目标节点 targetNode 所在 zTree 的 treeId,便于用户操控

              +

              treeNodesArray(JSON)

              +

              被拖拽的节点 JSON 数据集合

              +

              无论拖拽操作为 复制 还是 移动,treeNodes 都是当前被拖拽节点的数据集合。

              +

              targetNodeJSON

              +

              treeNodes 被拖拽放开的目标节点 JSON 数据对象。

              +

              如果拖拽成为根节点,则 targetNode = null

              +

              moveTypeString

              +

              指定移动到目标节点的相对位置

              +

              "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点

              +

              isCopyBoolean

              +

              拖拽节点操作是 复制 或 移动

              +

              true:复制;false:移动

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将恢复被拖拽的节点,也无法触发 onDrop 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止将节点拖拽成为根节点

              +
              function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) {
              +    return !(targetNode == null || (moveType != "inner" && !targetNode.parentTId));
              +};
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeDrop: zTreeBeforeDrop
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeEditName.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeEditName.html new file mode 100644 index 0000000..9df3ca2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeEditName.html @@ -0,0 +1,38 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeEditName

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态

              +

              此事件回调函数最主要是用于捕获编辑按钮的点击事件,然后触发自定义的编辑界面操作。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              将要进入编辑名称状态的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,节点将无法进入 zTree 默认的编辑名称状态

              +
              +

              setting & function 举例

              +

              1. 禁止修改父节点的名称

              +
              function zTreeBeforeEditName(treeId, treeNode) {
              +	return !treeNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeEditName: zTreeBeforeEditName
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeExpand.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeExpand.html new file mode 100644 index 0000000..350972b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeExpand.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeExpand

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获父节点展开之前的事件回调函数,并且根据返回值确定是否允许展开操作

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              要展开的父节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将不会展开节点,也无法触发 onExpand 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止所有已折叠的父节点展开

              +
              function zTreeBeforeExpand(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeExpand: zTreeBeforeExpand
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseDown.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseDown.html new file mode 100644 index 0000000..2c3f28d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseDown.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeMouseDown

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标按键按下之前的事件回调函数,并且根据返回值确定触发 onMouseDown 事件回调函数

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标按键按下时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,将仅仅无法触发 onMouseDown 事件回调函数,对其他操作无任何影响

              +
              +

              setting & function 举例

              +

              1. 禁止 onMouseDown 事件

              +
              function zTreeBeforeMouseDown(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeMouseDown: zTreeBeforeMouseDown
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseUp.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseUp.html new file mode 100644 index 0000000..f0b01b9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeMouseUp.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeMouseUp

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标按键松开之前的事件回调函数,并且根据返回值确定触发 onMouseUp 事件回调函数

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标按键松开时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,将仅仅无法触发 onMouseUp 事件回调函数,对其他操作无任何影响

              +
              +

              setting & function 举例

              +

              1. 禁止 onMouseUp 事件

              +
              function zTreeBeforeMouseUp(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeMouseUp: zTreeBeforeMouseUp
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRemove.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRemove.html new file mode 100644 index 0000000..0edb3fd --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRemove.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeRemove

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点被删除之前的事件回调函数,并且根据返回值确定是否允许删除操作

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              将要删除的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将不删除节点,也无法触发 onRemove 事件回调函数

              +
              +

              setting & function 举例

              +

              1. 禁止全部删除操作

              +
              function zTreeBeforeRemove(treeId, treeNode) {
              +	return false;
              +}
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeRemove: zTreeBeforeRemove
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRename.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRename.html new file mode 100644 index 0000000..0709961 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRename.html @@ -0,0 +1,46 @@ +
              +
              +

              Function(treeId, treeNode, newName, isCancel)setting.callback.beforeRename

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点编辑名称结束(Input 失去焦点 或 按下 Enter 键)之后,更新节点名称数据之前的事件回调函数,并且根据返回值确定是否允许更改名称的操作

              +

              节点进入编辑名称状态后,按 ESC 键可以放弃当前修改,恢复原名称,取消编辑名称状态

              +

              从 v3.5.13 开始,取消编辑状态也会触发此回调,根据 isCancel 参数判断

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              将要更改名称的节点 JSON 数据对象

              +

              newNameString

              +

              修改后的新名称

              +

              isCancelBoolean

              +

              是否取消操作 (v3.5.13+)

              +

              isCancel = true 表示取消编辑操作(按下 ESC 或 使用 cancelEditName 方法)

              +

              isCancel = false 表示确认修改操作

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,zTree 将保持名称编辑状态,无法触发 onRename 事件回调函数,并且会导致屏蔽其它事件,直到修改名称使得 beforeRename 返回 true

              +

              如果返回 false,不会让 input 输入框获取焦点,避免由于警告信息而导致反复触发 beforeRename。 请在关闭提示警告信息后,利用 editName 方法让 input 重新获取焦点。

              +
              +

              setting & function 举例

              +

              1. 禁止修改的名称的长度小于 5

              +
              function zTreeBeforeRename(treeId, treeNode, newName, isCancel) {
              +	return newName.length > 5;
              +}
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeRename: zTreeBeforeRename
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRightClick.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRightClick.html new file mode 100644 index 0000000..1a5bdaa --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.beforeRightClick.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeRightClick

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标右键点击之前的事件回调函数,并且根据返回值确定触发 onRightClick 事件回调函数

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标右键点击时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +

              返回值Boolean

              +

              返回值是 true / false

              +

              如果返回 false,将仅仅无法触发 onRightClick 事件回调函数,对其他操作无任何影响

              +
              +

              setting & function 举例

              +

              1. 禁止 onRightClick 事件

              +
              function zTreeBeforeRightClick(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeRightClick: zTreeBeforeRightClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncError.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncError.html new file mode 100644 index 0000000..c469e11 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncError.html @@ -0,0 +1,42 @@ +
              +
              +

              setting.callback.onAsyncError

              +

              Function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) 

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获异步加载出现异常错误的事件回调函数

              +

              如果设置了 setting.callback.beforeAsync 方法,且返回 false,将无法触发 onAsyncSuccess / onAsyncError 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              进行异步加载的父节点 JSON 数据对象

              +

              针对根进行异步加载时,treeNode = null

              +

              XMLHttpRequestString

              +

              标准 XMLHttpRequest 对象,请参考 JQuery API 文档。

              +

              textStatusString

              +

              请求状态:success,error,请参考 JQuery API 文档。

              +

              errorThrownString

              +

              errorThrown 只有当异常发生时才会被传递,请参考 JQuery API 文档。

              +
              +

              setting & function 举例

              +

              1. 异步加载出现异常后,弹出错误信息

              +
              function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
              +    alert(XMLHttpRequest);
              +};
              +var setting = {
              +	callback: {
              +		onAsyncError: zTreeOnAsyncError
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncSuccess.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncSuccess.html new file mode 100644 index 0000000..081e9d7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onAsyncSuccess.html @@ -0,0 +1,38 @@ +
              +
              +

              Function(event, treeId, treeNode, msg)setting.callback.onAsyncSuccess

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获异步加载正常结束的事件回调函数

              +

              如果设置了 setting.callback.beforeAsync 方法,且返回 false,将无法触发 onAsyncSuccess / onAsyncError 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              进行异步加载的父节点 JSON 数据对象

              +

              针对根进行异步加载时,treeNode = null

              +

              msgString / Object

              +

              异步获取的节点数据字符串,主要便于用户调试使用。

              +

              实际数据类型会受 setting.async.dataType 的设置影响,请参考 JQuery API 文档。

              +
              +

              setting & function 举例

              +

              1. 异步加载成功后,弹出提示信息

              +
              function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
              +    alert(msg);
              +};
              +var setting = {
              +	callback: {
              +		onAsyncSuccess: zTreeOnAsyncSuccess
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onCheck.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onCheck.html new file mode 100644 index 0000000..113eee9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onCheck.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onCheck

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              用于捕获 checkbox / radio 被勾选 或 取消勾选的事件回调函数

              +

              如果设置了 setting.callback.beforeCheck 方法,且返回 false,将无法触发 onCheck 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              被勾选 或 取消勾选的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 每次点击 checkbox 或 radio 后, 弹出该节点的 tId、name 以及当前勾选状态的信息

              +
              function zTreeOnCheck(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name + "," + treeNode.checked);
              +};
              +var setting = {
              +	callback: {
              +		onCheck: zTreeOnCheck
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onClick.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onClick.html new file mode 100644 index 0000000..1f7a266 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onClick.html @@ -0,0 +1,49 @@ +
              +
              +

              Function(event, treeId, treeNode, clickFlag)setting.callback.onClick

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获节点被点击的事件回调函数

              +

              如果设置了 setting.callback.beforeClick 方法,且返回 false,将无法触发 onClick 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              被点击的节点 JSON 数据对象

              +

              clickFlagNumber

              +

              节点被点击后的选中操作类型,详细看下表

              + + + + + + + + + + + + +
              clickFlagselectedMultiautoCancelSelected
              &&
              event.ctrlKey / metaKey
              isSelected选中操作
              1truefalsefalse普通选中
              1truefalsetrue普通选中
              2truetruefalse追加选中
              0truetruetrue取消选中
              1falsefalsefalse普通选中
              1falsefalsetrue普通选中
              1falsetruefalse普通选中
              0falsetruetrue取消选中
              +
              +

              setting & function 举例

              +

              1. 每次点击节点后, 弹出该节点的 tId、name 的信息

              +
              function zTreeOnClick(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onClick: zTreeOnClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onCollapse.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onCollapse.html new file mode 100644 index 0000000..1c816c2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onCollapse.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onCollapse

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获节点被折叠的事件回调函数

              +

              如果设置了 setting.callback.beforeCollapse 方法,且返回 false,将无法触发 onCollapse 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              被折叠的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 每次折叠节点后, 弹出该节点的 tId、name 的信息

              +
              function zTreeOnCollapse(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onCollapse: zTreeOnCollapse
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDblClick.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDblClick.html new file mode 100644 index 0000000..deb8e62 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDblClick.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onDblClick

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标双击之后的事件回调函数

              +

              如果设置了 setting.callback.beforeDblClick 方法,且返回 false,将无法触发 onDblClick 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标双击时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +
              +

              setting & function 举例

              +

              1. 每次鼠标双击后, 弹出鼠标所在节点的 tId、name 的信息

              +
              function zTreeOnDblClick(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onDblClick: zTreeOnDblClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrag.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrag.html new file mode 100644 index 0000000..efd115b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrag.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNodes)setting.callback.onDrag

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点被拖拽的事件回调函数

              +

              如果设置了 setting.callback.beforeDrag 方法,且返回 false,将无法触发 onDragMove 和 onDrag 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              被拖拽的节点 treeNodes 所在 zTree 的 treeId,便于用户操控

              +

              treeNodesArray(JSON)

              +

              要被拖拽的节点 JSON 数据集合

              +
              +

              setting & function 举例

              +

              1. 每次开始进行拖拽节点后, 弹出被拖拽节点的个数信息

              +
              function zTreeOnDrag(event, treeId, treeNodes) {
              +    alert(treeNodes.length);
              +};
              +var setting = {
              +	callback: {
              +		onDrag: zTreeOnDrag
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDragMove.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDragMove.html new file mode 100644 index 0000000..e6a8dd9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDragMove.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNodes)setting.callback.onDragMove

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点被拖拽过程中移动的事件回调函数

              +

              主要用于捕获 zTree 节点拖拽到的 DOM,从而操作对应的 DOM。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              被拖拽的节点 treeNodes 所在 zTree 的 treeId,便于用户操控

              +

              treeNodesArray(JSON)

              +

              要被拖拽的节点 JSON 数据集合

              +
              +

              setting & function 举例

              +

              1. 拖拽节点时,随时输出 当前拖拽到的目标 DOM

              +
              function zTreeOnDragMove(event, treeId, treeNodes) {
              +    console.log(event.target);
              +};
              +var setting = {
              +	callback: {
              +		onDragMove: zTreeOnDragMove
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrop.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrop.html new file mode 100644 index 0000000..c6773a8 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onDrop.html @@ -0,0 +1,46 @@ +
              +
              +

              Function(event, treeId, treeNodes, targetNode, moveType, isCopy)setting.callback.onDrop

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点拖拽操作结束的事件回调函数

              +

              如果设置了 setting.callback.beforeDrop 方法,且返回 false,将无法触发 onDrop 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              目标节点 targetNode 所在 zTree 的 treeId,便于用户操控

              +

              treeNodesArray(JSON)

              +

              被拖拽的节点 JSON 数据集合

              +

              如果拖拽操作为 移动,treeNodes 是当前被拖拽节点的数据集合。

              +

              如果拖拽操作为 复制,treeNodes 是复制后 clone 得到的新节点数据。

              +

              targetNodeJSON

              +

              成为 treeNodes 拖拽结束的目标节点 JSON 数据对象。

              +

              如果拖拽成为根节点,则 targetNode = null

              +

              moveTypeString

              +

              指定移动到目标节点的相对位置

              +

              "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点

              +

              如果 moveType = null,表明拖拽无效

              +

              isCopyBoolean

              +

              拖拽节点操作是 复制 或 移动

              +

              true:复制;false:移动

              +
              +

              setting & function 举例

              +

              1. 每次拖拽操作结束后, 弹出该被拖拽节点的个数以及目标节点的 tId、name 的信息

              +
              function zTreeOnDrop(event, treeId, treeNodes, targetNode, moveType) {
              +    alert(treeNodes.length + "," + (targetNode ? (targetNode.tId + ", " + targetNode.name) : "isRoot" ));
              +};
              +var setting = {
              +	callback: {
              +		onDrop: zTreeOnDrop
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onExpand.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onExpand.html new file mode 100644 index 0000000..791c5f6 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onExpand.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onExpand

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获节点被展开的事件回调函数

              +

              如果设置了 setting.callback.beforeExpand 方法,且返回 false,将无法触发 onExpand 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              被展开的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 每次展开节点后, 弹出该节点的 tId、name 的信息

              +
              function zTreeOnExpand(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onExpand: zTreeOnExpand
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseDown.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseDown.html new file mode 100644 index 0000000..bc9d0ea --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseDown.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onMouseDown

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标按键按下后的事件回调函数

              +

              如果设置了 setting.callback.beforeMouseDown 方法,且返回 false,将无法触发 onMouseDown 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标按键按下时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +
              +

              setting & function 举例

              +

              1. 每次鼠标按键按下后, 弹出鼠标所在节点的 tId、name 的信息

              +
              function zTreeOnMouseDown(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onMouseDown: zTreeOnMouseDown
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseUp.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseUp.html new file mode 100644 index 0000000..a969fef --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onMouseUp.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onMouseUp

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标按键松开后的事件回调函数

              +

              如果设置了 setting.callback.beforeMouseUp 方法,且返回 false,将无法触发 onMouseUp 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标按键松开时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +
              +

              setting & function 举例

              +

              1. 每次鼠标按键松开后, 弹出鼠标所在节点的 tId、name 的信息

              +
              function zTreeOnMouseUp(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onMouseUp: zTreeOnMouseUp
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onNodeCreated.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onNodeCreated.html new file mode 100644 index 0000000..2ebaee6 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onNodeCreated.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onNodeCreated

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获节点生成 DOM 后的事件回调函数

              +

              v3.x 采用了延迟加载技术,因此对于父节点未展开的子节点来说,初始化后是不会触发此回调函数,直到其父节点被展开

              +

              大数据量的节点加载请注意:不设置 onNodeCreated,可以提升一部分初始化性能

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              生成 DOM 完毕的节点的 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 创建节点 DOM 后, 弹出该节点的 tId、name 的信息

              +
              function zTreeOnNodeCreated(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onNodeCreated: zTreeOnNodeCreated
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRemove.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRemove.html new file mode 100644 index 0000000..e7e625d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRemove.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onRemove

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获删除节点之后的事件回调函数。

              +

              如果用户设置了 beforeRemove 回调函数,并返回 false,将无法触发 onRemove 事件回调函数。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              将要删除的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 删除节点时,弹出被删除的节点的 tId 以及 name 信息

              +
              function zTreeOnRemove(event, treeId, treeNode) {
              +	alert(treeNode.tId + ", " + treeNode.name);
              +}
              +var setting = {
              +	callback: {
              +		onRemove: zTreeOnRemove
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRename.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRename.html new file mode 100644 index 0000000..f225463 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRename.html @@ -0,0 +1,40 @@ +
              +
              +

              Function(event, treeId, treeNode, isCancel)setting.callback.onRename

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于捕获节点编辑名称结束之后的事件回调函数。

              +

              1、节点进入编辑名称状态,并且修改节点名称后触发此回调函数。如果用户设置了 beforeRename 回调函数,并返回 false,将无法触发 onRename 事件回调函数。

              +

              2、如果通过直接修改 treeNode 的数据,并且利用 updateNode 方法更新,是不会触发此回调函数的。

              +

              3、从 v3.5.13 开始,取消编辑状态也会触发此回调,根据 isCancel 参数判断

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              被修改名称的节点 JSON 数据对象

              +

              isCancelBoolean

              +

              是否取消操作 (v3.5.13+)

              +

              isCancel = true 表示取消编辑操作(按下 ESC 或 使用 cancelEditName 方法)

              +

              isCancel = false 表示确认修改操作

              +
              +

              setting & function 举例

              +

              1. 修改名称后,弹出被修改名称的节点的 tId 以及 name 信息

              +
              function zTreeOnRename(event, treeId, treeNode, isCancel) {
              +	alert(treeNode.tId + ", " + treeNode.name);
              +}
              +var setting = {
              +	callback: {
              +		onRename: zTreeOnRename
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRightClick.html b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRightClick.html new file mode 100644 index 0000000..d51c68d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.callback.onRightClick.html @@ -0,0 +1,36 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onRightClick

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于捕获 zTree 上鼠标右键点击之后的事件回调函数

              +

              1、如果设置了 setting.callback.beforeRightClick 方法,且返回 false,将无法触发 onRightClick 事件回调函数。

              +

              2、只要将 function 的引用赋给 onRightClick 属性,则右键点击 zTree 时,将屏蔽浏览器的右键菜单。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              eventjs event 对象

              +

              标准的 js event 对象

              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              鼠标右键点击时所在节点的 JSON 数据对象

              +

              如果不在节点上,则返回 null

              +
              +

              setting & function 举例

              +

              1. 每次鼠标右键点击后, 弹出鼠标所在节点的 tId、name 的信息

              +
              function zTreeOnRightClick(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onRightClick: zTreeOnRightClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.autoCheckTrigger.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.autoCheckTrigger.html new file mode 100644 index 0000000..d1efd77 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.autoCheckTrigger.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.check.autoCheckTrigger

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              设置自动关联勾选时是否触发 beforeCheck / onCheck 事件回调函数。[setting.check.enable = true 且 setting.check.chkStyle = "checkbox" 时生效]

              +

              1、如果设置 setting.check.chkboxType = { "Y": "", "N": "" },将不会有任何自动关联勾选的操作。

              +

              2、如果开启触发,对于节点较多的树将会影响性能,因为所有被联动勾选的操作都会触发事件回调函数,请根据需要决定是否使用此功能。

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 触发 / 不触发 事件回调函数

              +
              +

              setting 举例

              +

              1. 需要触发自动关联勾选操作

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		autoCheckTrigger: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.chkDisabledInherit.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.chkDisabledInherit.html new file mode 100644 index 0000000..8af1c2c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.chkDisabledInherit.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.check.chkDisabledInherit

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              当父节点设置 chkDisabled = true 时,设置子节点是否自动继承 chkDisabled = true 。[setting.check.enable = true 时生效]

              +

              1、只使用于初始化节点时,便于批量操作。 对于已存在的节点请利用 setChkDisabled 方法单个节点设置。

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示 新加入子节点时,自动继承父节点 chkDisabled = true 的属性。

              +

              false 表示 新加入子节点时,不继承父节点 chkDisabled 的属性。

              +
              +

              setting 举例

              +

              1. 需要子节点自动继承 chkDisabled = true

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkDisabledInherit: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.chkStyle.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.chkStyle.html new file mode 100644 index 0000000..9706c13 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.chkStyle.html @@ -0,0 +1,48 @@ +
              +
              +

              Stringsetting.check.chkStyle

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              勾选框类型(checkbox 或 radio)[setting.check.enable = true 时生效]

              +

              默认值:"checkbox"

              +
              +
              +

              String 格式说明

              +
              +

              chkStyle = "checkbox" 时,显示 checkbox 选择框,setting.check.chkboxType 属性有效。 +
              chkStyle = "radio" 时,显示 radio 选择框, setting.check.radioType 属性有效。

              +

              请注意大小写,不要改变

              +
              +

              checkbox 状态说明

              +
              +

              +
              +

              未勾选;如果是父节点,则无子节点被勾选。鼠标移到该节点上显示为:

              +

              未勾选;(只有父节点存在此状态)存在被勾选的子节点。鼠标移到该节点上显示为:

              +

              被勾选;如果是父节点,则全部子节点都被勾选。鼠标移到该节点上显示为:

              +

              被勾选;(只有父节点存在此状态)且部分或无子节点被勾选。鼠标移到该节点上显示为:

              +
              +
              +

              radio 状态说明

              +
              +

              +
              +

              未勾选;如果是父节点,则没有子节点被勾选。鼠标移到该节点上显示为:

              +

              未勾选;(只有父节点存在此状态)且存在被勾选的子节点。鼠标移到该节点上显示为:

              +

              被勾选;如果是父节点,则没有子节点被勾选。鼠标移到该节点上显示为:

              +

              被勾选;(只有父节点存在此状态)且存在被勾选的子节点。鼠标移到该节点上显示为:

              +
              +
              +

              setting 举例

              +

              1. 设置选择框为 radio

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkStyle: "radio"
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.chkboxType.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.chkboxType.html new file mode 100644 index 0000000..da06b6c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.chkboxType.html @@ -0,0 +1,31 @@ +
              +
              +

              JSONsetting.check.chkboxType

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              勾选 checkbox 对于父子节点的关联关系。[setting.check.enable = true 且 setting.check.chkStyle = "checkbox" 时生效]

              +

              默认值:{ "Y": "ps", "N": "ps" }

              +
              +
              +

              JSON 格式说明

              +
              +

              Y 属性定义 checkbox 被勾选后的情况; +
              N 属性定义 checkbox 取消勾选后的情况; +
              "p" 表示操作会影响父级节点; +
              "s" 表示操作会影响子级节点。

              +

              请注意大小写,不要改变

              +
              +

              setting 举例

              +

              1. checkbox 勾选操作,只影响父级节点;取消勾选操作,只影响子级节点

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkStyle: "checkbox",
              +		chkboxType: { "Y": "p", "N": "s" }
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.enable.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.enable.html new file mode 100644 index 0000000..8b1387e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.enable.html @@ -0,0 +1,25 @@ +
              +
              +

              Booleansetting.check.enable

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              设置 zTree 的节点上是否显示 checkbox / radio

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 显示 / 不显示 复选框或单选框

              +
              +

              setting 举例

              +

              1. 需要显示 checkbox

              +
              var setting = {
              +	check: {
              +		enable: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.nocheckInherit.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.nocheckInherit.html new file mode 100644 index 0000000..caf9902 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.nocheckInherit.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.check.nocheckInherit

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              当父节点设置 nocheck = true 时,设置子节点是否自动继承 nocheck = true 。[setting.check.enable = true 时生效]

              +

              1、只使用于初始化节点时,便于批量操作。 对于已存在的节点请利用 updateNode 方法单个节点设置。

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示 新加入子节点时,自动继承父节点 nocheck = true 的属性。

              +

              false 表示 新加入子节点时,不继承父节点 nocheck 的属性。

              +
              +

              setting 举例

              +

              1. 需要子节点自动继承 nocheck = true

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		nocheckInherit: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.check.radioType.html b/src/main/resources/static/lib/ztree/api/cn/setting.check.radioType.html new file mode 100644 index 0000000..19f84ca --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.check.radioType.html @@ -0,0 +1,29 @@ +
              +
              +

              Stringsetting.check.radioType

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              radio 的分组范围。[setting.check.enable = true 且 setting.check.chkStyle = "radio" 时生效]

              +

              默认值:"level"

              +
              +
              +

              String 格式说明

              +
              +

              radioType = "level" 时,在每一级节点范围内当做一个分组。 +
              radioType = "all" 时,在整棵树范围内当做一个分组。

              +

              请注意大小写,不要改变

              +
              +

              setting 举例

              +

              1. 设置 radio 的判别规则为整棵树内

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkStyle: "radio",
              +		radioType: "all"
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.keep.leaf.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.keep.leaf.html new file mode 100644 index 0000000..af3a721 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.keep.leaf.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.data.keep.leaf

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 的节点叶子节点属性锁,是否始终保持 isParent = false

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 锁定 / 不锁定 叶子节点属性

              +

              如果设置为 true,则所有 isParent = false 的节点,都无法添加子节点。

              +
              +

              setting 举例

              +

              1. 需要锁定叶子节点状态

              +
              var setting = {
              +	data: {
              +		keep: {
              +			leaf: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.keep.parent.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.keep.parent.html new file mode 100644 index 0000000..c4975df --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.keep.parent.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.data.keep.parent

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 的节点父节点属性锁,是否始终保持 isParent = true

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 锁定 / 不锁定 父节点属性

              +

              如果设置为 true,则所有 isParent = true 的节点,即使该节点的子节点被全部删除或移走,依旧保持父节点状态。

              +
              +

              setting 举例

              +

              1. 需要锁定父节点状态

              +
              var setting = {
              +	data: {
              +		keep: {
              +			parent: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.checked.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.checked.html new file mode 100644 index 0000000..ac9fdc1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.checked.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.checked

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              zTree 节点数据中保存 check 状态的属性名称。

              +

              默认值:"checked"

              +

              请勿与 zTree 节点数据的其他参数冲突,例如:checkedOld

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 isChecked 属性当做节点名称

              +
              var setting = {
              +	data: {
              +		key: {
              +			checked: "isChecked"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.children.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.children.html new file mode 100644 index 0000000..66a49a7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.children.html @@ -0,0 +1,23 @@ +
              +
              +

              Stringsetting.data.key.children

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 节点数据中保存子节点数据的属性名称。

              +

              默认值:"children"

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 nodes 属性当做节点名称

              +
              var setting = {
              +	data: {
              +		key: {
              +			children: "nodes"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.isHidden.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.isHidden.html new file mode 100644 index 0000000..0ea26bc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.isHidden.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.isHidden

              +

              概述[ 依赖 jquery.ztree.exhide js ]

              +
              +

              +
              +

              zTree 节点数据保存节点是否隐藏的属性名称。

              +

              默认值:"isHidden"

              +

              v3.5.32+

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 hidden 属性当做节点是否隐藏的属性名称

              +
              var setting = {
              +	data: {
              +		key: {
              +			isHidden: "hidden"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.isParent.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.isParent.html new file mode 100644 index 0000000..d9476c3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.isParent.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.isParent

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 节点数据保存节点是否为父节点的属性名称。

              +

              默认值:"isParent"

              +

              v3.5.32+

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 parent 属性当做节点是否为父节点的属性名称

              +
              var setting = {
              +	data: {
              +		key: {
              +			isParent: "parent"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.name.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.name.html new file mode 100644 index 0000000..c25d250 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.name.html @@ -0,0 +1,23 @@ +
              +
              +

              Stringsetting.data.key.name

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 节点数据保存节点名称的属性名称。

              +

              默认值:"name"

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 ename 属性当做节点名称

              +
              var setting = {
              +	data: {
              +		key: {
              +			name: "ename"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.title.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.title.html new file mode 100644 index 0000000..43e6855 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.title.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.title

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 节点数据保存节点提示信息的属性名称。[setting.view.showTitle = true 时生效]

              +

              如果设置为 "" ,则自动与 setting.data.key.name 保持一致,避免用户反复设置

              +

              默认值:""

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 fullName 属性当做节点名称

              +
              var setting = {
              +	data: {
              +		key: {
              +			title: "fullName"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.key.url.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.url.html new file mode 100644 index 0000000..e534d98 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.key.url.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.url

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 节点数据保存节点链接的目标 URL 的属性名称。

              +

              特殊用途:当后台数据只能生成 url 属性,又不想实现点击节点跳转的功能时,可以直接修改此属性为其他不存在的属性名称

              +

              默认值:"url"

              +
              +
              +

              setting 举例

              +

              1. 设置 zTree 显示节点时,将 treeNode 的 xUrl 属性当做节点链接的目标 URL

              +
              var setting = {
              +	data: {
              +		key: {
              +			url: "xUrl"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.enable.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.enable.html new file mode 100644 index 0000000..5d7bd42 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.enable.html @@ -0,0 +1,38 @@ +
              +
              +

              Booleansetting.data.simpleData.enable

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              确定 zTree 初始化时的节点数据、异步加载时的节点数据、或 addNodes 方法中输入的 newNodes 数据是否采用简单数据模式 (Array)

              +

              不需要用户再把数据库中取出的 List 强行转换为复杂的 JSON 嵌套格式

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 使用 / 不使用 简单数据模式

              +

              如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。

              +
              +

              setting 举例

              +

              1. 使用简单 Array 格式的数据

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.idKey.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.idKey.html new file mode 100644 index 0000000..5b3ffd4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.idKey.html @@ -0,0 +1,32 @@ +
              +
              +

              Stringsetting.data.simpleData.idKey

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点数据中保存唯一标识的属性名称。[setting.data.simpleData.enable = true 时生效]

              +

              默认值:"id"

              +
              +
              +

              setting 举例

              +

              1. 使用简单 Array 格式的数据

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.pIdKey.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.pIdKey.html new file mode 100644 index 0000000..d434bc3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.pIdKey.html @@ -0,0 +1,32 @@ +
              +
              +

              Stringsetting.data.simpleData.pIdKey

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点数据中保存其父节点唯一标识的属性名称。[setting.data.simpleData.enable = true 时生效]

              +

              默认值:"pId"

              +
              +
              +

              setting 举例

              +

              1. 使用简单 Array 格式的数据

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.rootPId.html b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.rootPId.html new file mode 100644 index 0000000..8cff82d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.data.simpleData.rootPId.html @@ -0,0 +1,32 @@ +
              +
              +

              String / Numbersetting.data.simpleData.rootPId

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于修正根节点父节点数据,即 pIdKey 指定的属性值。[setting.data.simpleData.enable = true 时生效]

              +

              默认值:null

              +
              +
              +

              setting 举例

              +

              1. 使用简单 Array 格式的数据

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoExpandTrigger.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoExpandTrigger.html new file mode 100644 index 0000000..126b8a8 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoExpandTrigger.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.edit.drag.autoExpandTrigger

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽时父节点自动展开是否触发 onExpand 事件回调函数。[setting.edit.enable = true 时生效]

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 触发 / 不触发 onExpand 事件回调函数。

              +
              +

              setting 举例

              +

              1. 设置拖拽时父节点自动展开触发 onExpand 事件回调函数

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			autoExpandTrigger: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoOpenTime.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoOpenTime.html new file mode 100644 index 0000000..df78339 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.autoOpenTime.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.autoOpenTime

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽时父节点自动展开的延时间隔。 (单位:ms)[setting.edit.enable = true 时生效]

              +

              默认值:500

              +

              请根据自己的需求适当调整此值

              +
              +
              +

              setting 举例

              +

              1. 设置拖拽到父节点上立刻自动展开

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			autoOpenTime: 0
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMax.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMax.html new file mode 100644 index 0000000..1d4dd68 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMax.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.borderMax

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽节点成为根节点时的 Tree 内边界范围 (单位:px)。[setting.edit.enable = true 时生效]

              +

              默认值:10

              +

              请根据自己的需求适当调整此值

              +
              +
              +

              setting 举例

              +

              1. 更改拖拽操作节点成为根节点时的 Tree 内边界范围为20px

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			borderMax: 20
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMin.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMin.html new file mode 100644 index 0000000..463eb2b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.borderMin.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.borderMin

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽节点成为根节点时的 Tree 外边界范围 (单位:px)。[setting.edit.enable = true 时生效]

              +

              默认值:-5

              +

              请根据自己的需求适当调整此值

              +
              +
              +

              setting 举例

              +

              1. 更改拖拽操作节点成为根节点时的 Tree 外边界范围为10px

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			borderMin: -10
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.inner.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.inner.html new file mode 100644 index 0000000..06679e1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.inner.html @@ -0,0 +1,59 @@ +
              +
              +

              Boolean / Function(treeId, treeNodes, targetNode)setting.edit.drag.inner

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽到目标节点时,设置是否允许成为目标节点的子节点。[setting.edit.enable = true 时生效]

              +

              拖拽目标是 根 的时候,不触发 prev 和 next,只会触发 inner

              +

              此功能主要作用是对拖拽进行适当限制(辅助箭头),需要结合 prev、next 一起使用,才能实现完整功能。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 允许 / 不允许 成为目标节点的子节点

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控(多棵树拖拽时,是目标节点所在树的 treeId)

              +

              treeNodesArray(JSON)

              +

              被拖拽的节点 JSON 数据集合

              +

              targetNodeJSON

              +

              拖拽时的目标节点 JSON 数据对象

              +

              如果拖拽的节点要成为根节点,则 targetNode = null

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 禁止拖拽成为目标节点的子节点

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: true,
              +			inner: false
              +		}
              +	}
              +};
              +......
              +

              2. 禁止拖拽成为根节点的子节点

              +
              function canInner(treeId, nodes, targetNode) {
              +	return !(targetNode && targetNode.level === 0);
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: true,
              +			inner: canInner
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isCopy.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isCopy.html new file mode 100644 index 0000000..cff17af --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isCopy.html @@ -0,0 +1,32 @@ +
              +
              +

              Booleansetting.edit.drag.isCopy

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽时, 设置是否允许复制节点。[setting.edit.enable = true 时生效]

              +

              默认值:true

              +
              +
              +

              规则说明

              +
              +

              1、isCopy = true; isMove = true 时,拖拽节点按下 Ctrl 或 Cmd 键表示 copy; 否则为 move

              +

              2、isCopy = true; isMove = false 时,所有拖拽操作都是 copy

              +

              3、isCopy = false; isMove = true 时,所有拖拽操作都是 move

              +

              4、isCopy = false; isMove = false 时,禁止拖拽操作

              +
              +

              setting 举例

              +

              1. 设置所有拖拽操作都是 copy

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			isCopy: true,
              +			isMove: false
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isMove.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isMove.html new file mode 100644 index 0000000..7fdadd1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.isMove.html @@ -0,0 +1,32 @@ +
              +
              +

              Booleansetting.edit.drag.isMove

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽时, 设置是否允许移动节点。[setting.edit.enable = true 时生效]

              +

              默认值:true

              +
              +
              +

              规则说明

              +
              +

              1、isCopy = true; isMove = true 时,拖拽节点按下 Ctrl 或 Cmd 键表示 copy; 否则为 move

              +

              2、isCopy = true; isMove = false 时,所有拖拽操作都是 copy

              +

              3、isCopy = false; isMove = true 时,所有拖拽操作都是 move

              +

              4、isCopy = false; isMove = false 时,禁止拖拽操作

              +
              +

              setting 举例

              +

              1. 设置所有拖拽操作都是 move

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			isCopy: false,
              +			isMove: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.maxShowNodeNum.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.maxShowNodeNum.html new file mode 100644 index 0000000..3e7a3d2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.maxShowNodeNum.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.maxShowNodeNum

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽多个兄弟节点时,浮动图层中显示的最大节点数。 多余的节点用...代替。[setting.edit.enable = true 时生效]

              +

              默认值:5

              +

              请根据自己的需求适当调整此值

              +
              +
              +

              setting 举例

              +

              1. 设置拖拽时最多可显示10个节点

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			maxShowNodeNum: 10
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.minMoveSize.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.minMoveSize.html new file mode 100644 index 0000000..904be41 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.minMoveSize.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.minMoveSize

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              判定是否拖拽操作的最小位移值 (单位:px)。[setting.edit.enable = true 时生效]

              +

              根据自己的需求可适当调整此值,如果太小容易导致点击鼠标时误操作进行拖拽

              +

              默认值:5

              +
              +
              +

              setting 举例

              +

              1. 更改拖拽操作启动位移值为10px

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			minMoveSize: 10
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.next.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.next.html new file mode 100644 index 0000000..ffc874a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.next.html @@ -0,0 +1,58 @@ +
              +
              +

              Boolean / Function(treeId, treeNodes, targetNode)setting.edit.drag.next

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽到目标节点时,设置是否允许移动到目标节点后面的操作。[setting.edit.enable = true 时生效]

              +

              拖拽目标是 根 的时候,不触发 prev 和 next,只会触发 inner

              +

              此功能主要作用是对拖拽进行适当限制(辅助箭头),需要结合 prev、inner 一起使用,才能实现完整功能。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 允许 / 不允许 移动到目标节点后面

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控(多棵树拖拽时,是目标节点所在树的 treeId)

              +

              treeNodesArray(JSON)

              +

              被拖拽的节点 JSON 数据集合

              +

              targetNodeJSON

              +

              拖拽时的目标节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 禁止拖拽到节点后面的操作

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: false,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +

              2. 禁止拖拽到父节点后面的操作

              +
              function canNext(treeId, nodes, targetNode) {
              +	return !targetNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: canNext,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.prev.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.prev.html new file mode 100644 index 0000000..bd05361 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.drag.prev.html @@ -0,0 +1,58 @@ +
              +
              +

              Boolean / Function(treeId, treeNodes, targetNode)setting.edit.drag.prev

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              拖拽到目标节点时,设置是否允许移动到目标节点前面的操作。[setting.edit.enable = true 时生效]

              +

              拖拽目标是 根 的时候,不触发 prev 和 next,只会触发 inner

              +

              此功能主要作用是对拖拽进行适当限制(辅助箭头),需要结合 next、inner 一起使用,才能实现完整功能。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 允许 / 不允许 移动到目标节点前面

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控(多棵树拖拽时,是目标节点所在树的 treeId)

              +

              treeNodesArray(JSON)

              +

              被拖拽的节点 JSON 数据集合

              +

              targetNodeJSON

              +

              拖拽时的目标节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 禁止拖拽到节点前面的操作

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: false,
              +			next: true,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +

              2. 禁止拖拽到父节点前面的操作

              +
              function canPrev(treeId, nodes, targetNode) {
              +	return !targetNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: canPrev,
              +			next: true,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.editNameSelectAll.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.editNameSelectAll.html new file mode 100644 index 0000000..30784f3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.editNameSelectAll.html @@ -0,0 +1,27 @@ +
              +
              +

              Booleansetting.edit.editNameSelectAll

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              节点编辑名称 input 初次显示时,设置 txt 内容是否为全选状态。 [setting.edit.enable = true 时生效]

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示 全选状态

              +

              false 表示 不是全选状态,光标默认在最后

              +
              +

              setting 举例

              +

              1. 设置节点编辑名称 input 初次显示时,txt内容为全选状态

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		editNameSelectAll: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.enable.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.enable.html new file mode 100644 index 0000000..de1afea --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.enable.html @@ -0,0 +1,38 @@ +
              +
              +

              Booleansetting.edit.enable

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              设置 zTree 是否处于编辑状态

              +

              请在初始化之前设置,初始化后需要改变编辑状态请使用 zTreeObj.setEditable() 方法

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 可以 / 不可以 编辑

              +
              +

              编辑状态规则说明

              +
              +

              1、点击节点时,不会打开 node.url 指定的 URL。 +
              2、全面支持 编辑 与 异步加载 状态共存。 +
              3、可以对节点进行拖拽,且支持多棵树之间进行拖拽。 +
              4、支持拖拽时 复制/移动 节点。(参考: setting.edit.drag.isCopy / setting.edit.drag.isMove) +
              5、可以通过编辑按钮修改 name 属性。 +
              6、可以通过删除按钮删除节点。 +
              +

              +

              请注意大小写,不要改变

              +
              +

              setting 举例

              +

              1. 设置 zTree 进入编辑状态

              +
              var setting = {
              +	edit: {
              +		enable: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.removeTitle.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.removeTitle.html new file mode 100644 index 0000000..55257da --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.removeTitle.html @@ -0,0 +1,48 @@ +
              +
              +

              String / Function(treeId, treeNode)setting.edit.removeTitle

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              删除按钮的 Title 辅助信息。[setting.edit.enable = true & setting.edit.showRemoveBtn = true 时生效]

              +

              默认值:"remove"

              +
              +
              +

              String 格式说明

              +
              +

              鼠标移动到 删除按钮 上时,浏览器自动弹出的辅助信息内容,可根据用户需要自行修改

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置删除按钮 Title 信息的节点 JSON 数据对象

              +

              返回值String

              +

              返回值同 String 格式的数据

              +
              +

              setting & function 举例

              +

              1. 设置删除按钮的 Title 辅助信息为: "删除节点"

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: true,
              +		removeTitle: "删除节点"
              +	}
              +};
              +......
              +

              2. 设置父节点删除按钮的 Title 辅助信息为: "删除父节点"

              +
              function setRemoveTitle(treeId, treeNode) {
              +	return treeNode.isParent ? "删除父节点":"删除叶子节点";
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: true,
              +		removeTitle: setRemoveTitle
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.renameTitle.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.renameTitle.html new file mode 100644 index 0000000..2dfbcca --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.renameTitle.html @@ -0,0 +1,48 @@ +
              +
              +

              String / Function(treeId, treeNode)setting.edit.renameTitle

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              编辑名称按钮的 Title 辅助信息。[setting.edit.enable = true & setting.edit.showRenameBtn = true 时生效]

              +

              默认值:"rename"

              +
              +
              +

              String 格式说明

              +
              +

              设置鼠标移动到 编辑名称按钮 上时,浏览器自动弹出的辅助信息内容,可根据用户需要自行修改

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置编辑名称按钮 Title 信息的节点 JSON 数据对象

              +

              返回值String

              +

              返回值同 String 格式的数据

              +
              +

              setting & function 举例

              +

              1. 设置编辑名称按钮的 Title 辅助信息为: "编辑节点名称"

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: true,
              +		renameTitle: "编辑节点名称"
              +	}
              +};
              +......
              +

              2. 设置父节点编辑名称按钮的 Title 辅助信息为: "编辑父节点名称"

              +
              function setRenameTitle(treeId, treeNode) {
              +	return treeNode.isParent ? "编辑父节点名称":"编辑叶子节点名称";
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: true,
              +		renameTitle: setRenameTitle
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.showRemoveBtn.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.showRemoveBtn.html new file mode 100644 index 0000000..db62053 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.showRemoveBtn.html @@ -0,0 +1,49 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.edit.showRemoveBtn

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              设置是否显示删除按钮。[setting.edit.enable = true 时生效]

              +

              当点击某节点的删除按钮时:

              +

              1、首先触发 setting.callback.beforeRemove 回调函数,用户可判定是否进行删除操作。

              +

              2、如果未设置 beforeRemove 或 beforeRemove 返回 true,则删除节点并触发 setting.callback.onRemove 回调函数。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 显示 / 隐藏 删除按钮

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置是否显示删除按钮的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 不显示删除按钮

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: false
              +	}
              +};
              +......
              +

              2. 设置所有的父节点不显示删除按钮

              +
              function setRemoveBtn(treeId, treeNode) {
              +	return !treeNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: setRemoveBtn
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.edit.showRenameBtn.html b/src/main/resources/static/lib/ztree/api/cn/setting.edit.showRenameBtn.html new file mode 100644 index 0000000..33dd37a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.edit.showRenameBtn.html @@ -0,0 +1,51 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.edit.showRenameBtn

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              设置是否显示编辑名称按钮。[setting.edit.enable = true 时生效]

              +

              当点击某节点的编辑名称按钮时:

              +

              1、进入节点编辑名称状态。

              +

              2、编辑名称完毕(Input 失去焦点 或 按下 Enter 键),会触发 setting.callback.beforeRename 回调函数,用户可根据自己的规则判定是否允许修改名称。

              +

              3、如果 beforeRename 返回 false,则继续保持编辑名称状态,直到名称符合规则位置 (按下 ESC 键可取消编辑名称状态,恢复原名称)。

              +

              4、如果未设置 beforeRename 或 beforeRename 返回 true,则结束节点编辑名称状态,更新节点名称,并触发 setting.callback.onRename 回调函数。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 显示 / 隐藏 编辑名称按钮

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置是否显示编辑名称按钮的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 不显示编辑名称按钮

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: false
              +	}
              +};
              +......
              +

              2. 设置所有的父节点不显示编辑名称按钮

              +
              function setRenameBtn(treeId, treeNode) {
              +	return !treeNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: setRenameBtn
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.treeId.html b/src/main/resources/static/lib/ztree/api/cn/setting.treeId.html new file mode 100644 index 0000000..819743e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.treeId.html @@ -0,0 +1,14 @@ +
              +
              +

              Stringsetting.treeId

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 的唯一标识,初始化后,等于 用户定义的 zTree 容器的 id 属性值。

              +

              请勿进行初始化 或 修改,属于内部参数。

              +
              +
              + +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.treeObj.html b/src/main/resources/static/lib/ztree/api/cn/setting.treeObj.html new file mode 100644 index 0000000..37684a1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.treeObj.html @@ -0,0 +1,14 @@ +
              +
              +

              Objectsetting.treeObj

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 容器的 jQuery 对象,主要功能:便于操作。

              +

              请勿进行初始化 或 修改,属于内部参数。

              +
              +
              + +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.addDiyDom.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.addDiyDom.html new file mode 100644 index 0000000..0a508ac --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.addDiyDom.html @@ -0,0 +1,40 @@ +
              +
              +

              Function(treeId, treeNode)setting.view.addDiyDom

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于在节点上固定显示用户自定义控件

              +

              1. 大数据量的节点加载请注意:在 addDiyDom 中针对每个节点 查找 DOM 对象并且添加新 DOM 控件,肯定会影响初始化性能;如果不是必须使用,建议不使用此功能

              +

              2. 属于高级应用,使用时请确保对 zTree 比较了解。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要显示自定义控件的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 设置节点后面显示一个按钮

              +
              var setting = {
              +	view: {
              +		addDiyDom: addDiyDom
              +	}
              +};
              +function addDiyDom(treeId, treeNode) {
              +	var aObj = $("#" + treeNode.tId + "_a");
              +	if ($("#diyBtn_"+treeNode.id).length>0) return;
              +	var editStr = "<span id='diyBtn_space_" +treeNode.id+ "' > </span>"
              +		+ "<button type='button' class='diyBtn1' id='diyBtn_" + treeNode.id
              +		+ "' title='"+treeNode.name+"' onfocus='this.blur();'></button>";
              +	aObj.append(editStr);
              +	var btn = $("#diyBtn_"+treeNode.id);
              +	if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.addHoverDom.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.addHoverDom.html new file mode 100644 index 0000000..f073e79 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.addHoverDom.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(treeId, treeNode)setting.view.addHoverDom

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于当鼠标移动到节点上时,显示用户自定义控件,显示隐藏状态同 zTree 内部的编辑、删除按钮

              +

              请务必与 setting.view.removeHoverDom 同时使用;属于高级应用,使用时请确保对 zTree 比较了解。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要显示自定义控件的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 设置鼠标移到节点上,在后面显示一个按钮

              +
              var setting = {
              +	view: {
              +		addHoverDom: addHoverDom,
              +		removeHoverDom: removeHoverDom,
              +		......
              +	}
              +};
              +function addHoverDom(treeId, treeNode) {
              +	var aObj = $("#" + treeNode.tId + "_a");
              +	if ($("#diyBtn_"+treeNode.id).length>0) return;
              +	var editStr = "<span id='diyBtn_space_" +treeNode.id+ "' > </span>"
              +		+ "<button type='button' class='diyBtn1' id='diyBtn_" + treeNode.id
              +		+ "' title='"+treeNode.name+"' onfocus='this.blur();'></button>";
              +	aObj.append(editStr);
              +	var btn = $("#diyBtn_"+treeNode.id);
              +	if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
              +};
              +function removeHoverDom(treeId, treeNode) {
              +	$("#diyBtn_"+treeNode.id).unbind().remove();
              +	$("#diyBtn_space_" +treeNode.id).unbind().remove();
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.autoCancelSelected.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.autoCancelSelected.html new file mode 100644 index 0000000..4890f78 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.autoCancelSelected.html @@ -0,0 +1,26 @@ +
              +
              +

              Booleansetting.view.autoCancelSelected

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              点击节点时,按下 Ctrl 或 Cmd 键是否允许取消选择操作。

              +

              如果不需要此功能,请设置为 false。

              +

              默认值: true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 支持 / 不支持 配合 Ctrl 或 Cmd 键进行取消节点选择的操作

              +
              +

              setting 举例

              +

              1. 禁止配合 Ctrl 或 Cmd 键进行取消节点选择的操作

              +
              var setting = {
              +	view: {
              +		autoCancelSelected: false
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.dblClickExpand.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.dblClickExpand.html new file mode 100644 index 0000000..5f3db96 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.dblClickExpand.html @@ -0,0 +1,44 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.view.dblClickExpand

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              双击节点时,是否自动展开父节点的标识

              +

              默认值: true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示双击节点 切换 / 不切换 展开状态

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置是否双击切换展开状态的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting 举例

              +

              1. 取消默认双击展开父节点的功能

              +
              var setting = {
              +	view: {
              +		dblClickExpand: false
              +	}
              +};
              +......
              +

              2. 设置 zTree 仅仅 level=0 的父节点取消双击展开的功能

              +
              function dblClickExpand(treeId, treeNode) {
              +	return treeNode.level > 0;
              +};
              +var setting = {
              +	view: {
              +		dblClickExpand: dblClickExpand
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.expandSpeed.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.expandSpeed.html new file mode 100644 index 0000000..3b799c3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.expandSpeed.html @@ -0,0 +1,31 @@ +
              +
              +

              String / Numbersetting.view.expandSpeed

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 节点展开、折叠时的动画速度,设置方法同 JQuery 动画效果中 speed 参数。

              +

              IE6 下会自动关闭动画效果,以保证 zTree 的操作速度

              +

              默认值:"fast"

              +
              +
              +

              String 格式说明

              +
              +

              三种预定速度之一的字符串("slow", "normal", or "fast")

              +

              设置为 "" 时,不显示动画效果

              +
              +

              Number 格式说明

              +
              +

              表示动画时长的毫秒数值 (如:1000)

              +
              +

              setting 举例

              +

              1. 设置为慢速显示动画效果

              +
              var setting = {
              +	view: {
              +		expandSpeed: "slow"
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.fontCss.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.fontCss.html new file mode 100644 index 0000000..54efb1b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.fontCss.html @@ -0,0 +1,42 @@ +
              +
              +

              JSON / Function(treeId, treeNode)setting.view.fontCss

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              个性化文字样式,只针对 zTree 在节点上显示的<A>对象。

              +

              默认值:{}

              +
              +
              +

              JSON 格式说明

              +
              +

              JSON 格式为 JQuery css方法中的 JSON 对象格式,例如:{color:"#ff0011", background:"blue"}

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置自定义样式的节点 JSON 数据对象

              +

              返回值JSON

              +

              返回值同 JSON 格式的数据,例如:{color:"#ff0011", background:"blue"}

              +
              +

              setting & function 举例

              +

              1. 不修改CSS,设置全部节点 name 显示为红色

              +
              var setting = {
              +	view: {
              +		fontCss : {color:"red"}
              +	}
              +};
              +

              2. 设置 level=0 的节点 name 显示为红色

              +
              function setFontCss(treeId, treeNode) {
              +	return treeNode.level == 0 ? {color:"red"} : {};
              +};
              +var setting = {
              +	view: {
              +		fontCss: setFontCss
              +	}
              +};
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.nameIsHTML.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.nameIsHTML.html new file mode 100644 index 0000000..a1d916c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.nameIsHTML.html @@ -0,0 +1,27 @@ +
              +
              +

              Booleansetting.view.nameIsHTML

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置 name 属性是否支持 HTML 脚本

              +

              如果允许 HTML 脚本,请根据自己的需求做校验,避免出现 js 注入等安全问题。

              +

              默认值: false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 支持 / 不支持 HTML 脚本

              +
              +

              setting 举例

              +

              1. 设置 name 属性支持 HTML 脚本

              +
              var setting = {
              +	view: {
              +		nameIsHTML: true
              +	}
              +};
              +var node = {"name":"<font color='red'>test</font>"};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.removeHoverDom.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.removeHoverDom.html new file mode 100644 index 0000000..bb1a9aa --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.removeHoverDom.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(treeId, treeNode)setting.view.removeHoverDom

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于当鼠标移出节点时,隐藏用户自定义控件,显示隐藏状态同 zTree 内部的编辑、删除按钮

              +

              请务必与 addHoverDom 同时使用;属于高级应用,使用时请确保对 zTree 比较了解。

              +

              默认值:null

              +
              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要隐藏自定义控件的节点 JSON 数据对象

              +
              +

              setting & function 举例

              +

              1. 设置鼠标移到节点上,在后面显示一个按钮

              +
              var setting = {
              +	view: {
              +		addHoverDom: addHoverDom,
              +		removeHoverDom: removeHoverDom,
              +		......
              +	}
              +};
              +function addHoverDom(treeId, treeNode) {
              +	var aObj = $("#" + treeNode.tId + "_a");
              +	if ($("#diyBtn_"+treeNode.id).length>0) return;
              +	var editStr = "<span id='diyBtn_space_" +treeNode.id+ "' > </span>"
              +		+ "<button type='button' class='diyBtn1' id='diyBtn_" + treeNode.id
              +		+ "' title='"+treeNode.name+"' onfocus='this.blur();'></button>";
              +	aObj.append(editStr);
              +	var btn = $("#diyBtn_"+treeNode.id);
              +	if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
              +};
              +function removeHoverDom(treeId, treeNode) {
              +	$("#diyBtn_"+treeNode.id).unbind().remove();
              +	$("#diyBtn_space_" +treeNode.id).unbind().remove();
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.selectedMulti.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.selectedMulti.html new file mode 100644 index 0000000..2cc65a2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.selectedMulti.html @@ -0,0 +1,27 @@ +
              +
              +

              Booleansetting.view.selectedMulti

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置是否允许同时选中多个节点。

              +

              默认值: true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 支持 / 不支持 同时选中多个节点

              +

              1、设置为 true时,按下 Ctrl 或 Cmd 键可以选中多个节点

              +

              2、设置为 true / false 都不影响按下 Ctrl 或 Cmd 键可以让已选中的节点取消选中状态( 取消选中状态可以参考 setting.view.autoCancelSelected )

              +
              +

              setting 举例

              +

              1. 禁止多点同时选中的功能

              +
              var setting = {
              +	view: {
              +		selectedMulti: false
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.showIcon.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.showIcon.html new file mode 100644 index 0000000..ebe423c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.showIcon.html @@ -0,0 +1,44 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.view.showIcon

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置 zTree 是否显示节点的图标。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 显示 / 隐藏 图标

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置是否显示图标的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 设置 zTree 不显示图标

              +
              var setting = {
              +	view: {
              +		showIcon: false
              +	}
              +};
              +......
              +

              2. 设置 zTree 仅仅 level=2 的节点不显示图标

              +
              function showIconForTree(treeId, treeNode) {
              +	return treeNode.level != 2;
              +};
              +var setting = {
              +	view: {
              +		showIcon: showIconForTree
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.showLine.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.showLine.html new file mode 100644 index 0000000..02ab5eb --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.showLine.html @@ -0,0 +1,25 @@ +
              +
              +

              Booleansetting.view.showLine

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置 zTree 是否显示节点之间的连线。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 显示 / 不显示 连线

              +
              +

              setting 举例

              +

              1. 设置 zTree 不显示节点之间的连线

              +
              var setting = {
              +	view: {
              +		showLine: false
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.showTitle.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.showTitle.html new file mode 100644 index 0000000..5bcb860 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.showTitle.html @@ -0,0 +1,46 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.view.showTitle

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置 zTree 是否显示节点的 title 提示信息(即节点 DOM 的 title 属性)。

              +

              请务必与 setting.data.key.title 同时使用。

              +

              默认值:true

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 显示 / 隐藏 提示信息

              +

              如果 setting.view.showTitle = true & setting.data.key.title = '',zTree 会自动使用 setting.data.key.name 指定的节点名称当做 title

              +
              +

              Function 参数说明

              +
              +

              treeIdString

              +

              对应 zTree 的 treeId,便于用户操控

              +

              treeNodeJSON

              +

              需要设置是否显示提示信息的节点 JSON 数据对象

              +

              返回值Boolean

              +

              返回值同 Boolean 格式的数据

              +
              +

              setting & function 举例

              +

              1. 设置 zTree 不显示提示信息

              +
              var setting = {
              +	view: {
              +		showTitle: false
              +	}
              +};
              +......
              +

              2. 设置 zTree 仅仅 level=2 的节点不显示提示信息

              +
              function showTitleForTree(treeId, treeNode) {
              +	return treeNode.level != 2;
              +};
              +var setting = {
              +	view: {
              +		showTitle: showTitleForTree
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/setting.view.txtSelectedEnable.html b/src/main/resources/static/lib/ztree/api/cn/setting.view.txtSelectedEnable.html new file mode 100644 index 0000000..c22a8c0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/setting.view.txtSelectedEnable.html @@ -0,0 +1,25 @@ +
              +
              +

              Booleansetting.view.txtSelectedEnable

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置 zTree 是否允许可以选择 zTree DOM 内的文本。

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true / false 分别表示 允许 / 不允许 选择 zTree Dom 内的文本

              +
              +

              setting & function 举例

              +

              1. 设置 zTree 允许选择文本

              +
              var setting = {
              +	view: {
              +		txtSelectedEnable: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.check_Child_State.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.check_Child_State.html new file mode 100644 index 0000000..fa37899 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.check_Child_State.html @@ -0,0 +1,43 @@ +
              +
              +

              NumbertreeNode.check_Child_State

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              用于设置节点的子节点的 checkBox / radio 的半选状态。[setting.check.enable = true 时有效]

              +

              v3.x 针对节点数据对象提供 treeNode.getCheckStatus() 方法获取标准的半选状态

              +

              zTree 内部使用,请勿进行初始化 或 随意修改

              +

              默认值:true

              +
              +
              +

              Number 格式说明

              +
              +

              规则如下:

              + + + + + + + + + + + +
              setting.check.checkType = "checkbox"
              treeNode.check_Child_State勾选状态说明
              -1不存在子节点 或 子节点全部设置为 nocheck = true
              0无 子节点被勾选
              1部分 子节点被勾选
              2全部 子节点被勾选
              +
              + + + + + + + + + + +
              setting.check.checkType = "radio"
              treeNode.check_Child_State勾选状态说明
              -1不存在子节点 或 子节点全部设置为 nocheck = true
              0无 子节点被勾选
              2有 子节点被勾选
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.check_Focus.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.check_Focus.html new file mode 100644 index 0000000..785aec9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.check_Focus.html @@ -0,0 +1,19 @@ +
              +
              +

              BooleantreeNode.check_Focus

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              用于设置节点的 checkBox / radio 的 focus 状态。[setting.check.enable = true 时有效]

              +

              zTree 内部使用,请勿进行初始化 或 随意修改

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示当前鼠标移动到输入框内

              +

              false 表示当前鼠标移动到输入框外

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.checked.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.checked.html new file mode 100644 index 0000000..049d6ba --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.checked.html @@ -0,0 +1,32 @@ +
              +
              +

              BooleantreeNode.checked

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              节点的 checkBox / radio 的 勾选状态。[setting.check.enable = true & treeNode.nocheck = false 时有效]

              +

              1、如果不使用 checked 属性设置勾选状态,请修改 setting.data.key.checked

              +

              2、建立 treeNode 数据时设置 treeNode.checked = true 可以让节点的输入框默认为勾选状态

              +

              3、修改节点勾选状态,可以使用 treeObj.checkNode / checkAllNodes / updateNode 方法,具体使用哪种请根据自己的需求而定

              +

              4、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 "false","true" 字符串格式的数据

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点的输入框被勾选

              +

              false 表示节点的输入框未勾选

              +
              +

              treeNode 举例

              +

              1. 初始化的数据设置 默认为勾选状态

              +
              var nodes = [
              +{ "id":1, "name":"test1", checked:true },
              +{ "id":2, "name":"test2", checked:true }
              +]
              +

              2. 获取第一个根节点的勾选状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var checked = treeObj.getNodes()[0].checked;
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.checkedOld.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.checkedOld.html new file mode 100644 index 0000000..cab717e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.checkedOld.html @@ -0,0 +1,25 @@ +
              +
              +

              BooleantreeNode.checkedOld

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              节点的 checkBox / radio 在初始化时的 勾选状态。[setting.check.enable = true & treeNode.nocheck = false 时有效]

              +

              1、zTree 初始化节点数据时会对此属性进行赋值,因此请勿对此属性初始化

              +

              2、如需配合 zTreeObj.getChangeCheckedNodes 方法实现特殊功能,可以根据需求在使用中自行修改 checkedOld 数据

              +

              默认值:checked的初始化值

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点初始化时 输入框被勾选

              +

              false 表示节点初始化时 输入框未勾选

              +
              +

              treeNode 举例

              +

              1. 获取第一个根节点的初始勾选状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var checkedOld = treeObj.getNodes()[0].checkedOld;
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.children.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.children.html new file mode 100644 index 0000000..4bab835 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.children.html @@ -0,0 +1,35 @@ +
              +
              +

              Array(JSON)treeNode.children

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点的子节点数据集合。

              +

              1、如果不使用 children 属性保存子节点数据,请修改 setting.data.key.children

              +

              2、异步加载时,对于设置了 isParent = true 的节点,在展开时将进行异步加载

              +

              默认值:无

              +
              +
              +

              Array(JSON) 格式说明

              +
              +

              标准的 JSON 数据对象

              +
              +

              treeNode 举例

              +

              1. 初始化的标准嵌套格式的 JSON 数据对象

              +
              var nodes = [
              +{ "id":1, "name":"test1",
              +	children: [
              +	{ "id":3, "name":"test3"},
              +	{ "id":4, "name":"test4"},
              +	{ "id":5, "name":"test5"}
              +	]
              +},
              +{ "id":2, "name":"test2"  }
              +]
              +

              2. 获取第一个根节点的子节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes()[0].children;
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.chkDisabled.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.chkDisabled.html new file mode 100644 index 0000000..e6bb032 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.chkDisabled.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.chkDisabled

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              1、设置节点的 checkbox / radio 是否禁用 [setting.check.enable = true 时有效]

              +

              2、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 "false","true" 字符串格式的数据

              +

              3、请勿对已加载的节点修改此属性,禁止 或 取消禁止 请使用 setChkDisabled() 方法

              +

              4、初始化时,如果需要子孙节点继承父节点的 chkDisabled 属性,请设置 setting.check.chkDisabledInherit 属性

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示此节点的 checkbox / radio 被禁用。

              +

              false 表示此节点的 checkbox / radio 可以使用。

              +
              +

              treeNode 举例

              +

              1. 禁用节点 checkbox / radio

              +
              var nodes = [
              +	{ "id":1, "name":"test1", "checked":true, "chkDisabled":true},
              +	{ "id":2, "name":"test2", "chkDisabled":true},
              +	{ "id":3, "name":"test3"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.click.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.click.html new file mode 100644 index 0000000..833c678 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.click.html @@ -0,0 +1,24 @@ +
              +
              +

              StringtreeNode.click

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              最简单的 click 事件操作。相当于 onclick="..." 的内容。 如果操作较复杂,请使用 onClick 事件回调函数。

              +

              由于 IE 对于 onclick 和 click事件共存时的处理与其他浏览器不同,所以请不要利用此参数控制是否允许跳转的操作(例如:treeNode.click = "return false;")。如有类似需求,请不要使用 url 属性设置网址,同时利用 onClick 回调函数控制跳转。

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              标准 javascript 语法, 例如:alert("test"); 等

              +
              +

              treeNode 举例

              +

              1. 设置某节点点击时,弹出信息框

              +
              var nodes = [
              +	{ "id":1, "name":"Google CN", "url":"http://g.cn", "click":"alert('test');"},
              +	......
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.diy.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.diy.html new file mode 100644 index 0000000..b2fb0d9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.diy.html @@ -0,0 +1,15 @@ +
              +
              +

              ?treeNode.* DIY *

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              用于保存节点的其他自定义数据信息,不要与 zTree 使用的属性相同即可,用户可随意设定。

              +
              +
              +

              treeNode 举例

              +

              1. 设置节点的备用英文名称

              +
              var node = { "id":1, "name":"test1", "ename":"test eName"};
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.editNameFlag.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.editNameFlag.html new file mode 100644 index 0000000..51162b8 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.editNameFlag.html @@ -0,0 +1,19 @@ +
              +
              +

              BooleantreeNode.editNameFlag

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              用于记录节点是否处于编辑名称状态。[setting.edit.enable = true 时有效]

              +

              zTree 内部使用,请勿进行初始化 或 随意修改

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点处于编辑名称状态

              +

              false 表示节点未处于编辑名称状态

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.getCheckStatus.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.getCheckStatus.html new file mode 100644 index 0000000..fc20eac --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.getCheckStatus.html @@ -0,0 +1,63 @@ +
              +
              +

              Function()treeNode.getCheckStatus

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              获取节点 checkbox / radio 半勾选状态。[setting.check.enable = true 时有效]

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Function 参数说明

              +
              +

              返回值JSON

              +
              {
              +	checked: true, //等同于 treeNode.checked
              +	half: true  //规则见下表
              +}
              + + + + + + + + + + + + + + + + + + +
              setting.check.checkType = "checkbox"
              treeNode.checkedtreeNode.check_Child_StatetreeNode.halfCheck half
              --truetrue
               
              true-1falsefalse
              true0falsetrue
              true1falsetrue
              true2falsefalse
               
              false-1falsefalse
              false0falsefalse
              false1falsetrue
              false2falsetrue
              +
              + + + + + + + + + + + + + + + + +
              setting.check.checkType = "radio"
              treeNode.checkedtreeNode.check_Child_StatetreeNode.halfCheck half
              --truetrue
               
              true-1falsefalse
              true0falsefalse
              true2falsetrue
               
              false-1falsefalse
              false0falsefalse
              false2falsetrue
              +
              +

              treeNode 举例

              +

              1. 获取第一个根节点的半选状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var halfCheck = treeObj.getNodes()[0].getCheckStatus();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.getIndex.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.getIndex.html new file mode 100644 index 0000000..babdc2e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.getIndex.html @@ -0,0 +1,26 @@ +
              +
              +

              Function()treeNode.getIndex

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取 treeNode 节点在同级节点中的位置。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Function 参数说明

              +
              +

              返回值Number

              +

              treeNode 节点在同级节点中的位置。(从 0 开始)

              +
              +

              treeNode 举例

              +

              1. 获取当前被选中的节点在同级节点中的位置

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getIndex();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.getNextNode.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.getNextNode.html new file mode 100644 index 0000000..7a0fa5c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.getNextNode.html @@ -0,0 +1,27 @@ +
              +
              +

              Function()treeNode.getNextNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取与 treeNode 节点相邻的后一个节点。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Function 参数说明

              +
              +

              返回值JSON

              +

              与 treeNode 节点相邻的后一个节点。

              +

              如果 treeNode 是最后一个节点,返回 null 。

              +
              +

              treeNode 举例

              +

              1. 获取当前被选中的节点的下一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getNextNode();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.getParentNode.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.getParentNode.html new file mode 100644 index 0000000..31309a6 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.getParentNode.html @@ -0,0 +1,27 @@ +
              +
              +

              Function()treeNode.getParentNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取 treeNode 节点的父节点。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Function 参数说明

              +
              +

              返回值JSON

              +

              treeNode 节点的父节点 JSON 数据对象。

              +

              如果 treeNode 是根节点,返回 null 。

              +
              +

              treeNode 举例

              +

              1. 获取当前被选中的节点的父节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getParentNode();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.getPath.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.getPath.html new file mode 100644 index 0000000..46318f0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.getPath.html @@ -0,0 +1,26 @@ +
              +
              +

              Function()treeNode.getPath

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取 treeNode 节点的所有父节点(包括自己)。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Function 参数说明

              +
              +

              返回值Array (JSON)

              +

              treeNode 节点的所有父节点的数据集合(包括自己)

              +
              +

              treeNode 举例

              +

              1. 获取当前被选中的节点的所有父节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getPath();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.getPreNode.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.getPreNode.html new file mode 100644 index 0000000..9d84184 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.getPreNode.html @@ -0,0 +1,27 @@ +
              +
              +

              Function()treeNode.getPreNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取与 treeNode 节点相邻的前一个节点。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Function 参数说明

              +
              +

              返回值JSON

              +

              与 treeNode 节点相邻的前一个节点。

              +

              如果 treeNode 是第一个节点,返回 null 。

              +
              +

              treeNode 举例

              +

              1. 获取当前被选中的节点的前一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getPreNode();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.halfCheck.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.halfCheck.html new file mode 100644 index 0000000..23ac744 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.halfCheck.html @@ -0,0 +1,29 @@ +
              +
              +

              BooleantreeNode.halfCheck

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              强制节点的 checkBox / radio 的 半勾选状态。[setting.check.enable = true & treeNode.nocheck = false 时有效]

              +

              1、强制为半勾选状态后,不再进行自动计算半勾选状态

              +

              2、设置 treeNode.halfCheck = false 或 null 才能恢复自动计算半勾选状态

              +

              3、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 "false","true" 字符串格式的数据

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点的输入框 强行设置为半勾选

              +

              false 表示节点的输入框 根据 zTree 的规则自动计算半勾选状态

              +
              +

              treeNode 举例

              +

              1. 初始化的数据设置 默认为半勾选状态

              +
              var nodes = [
              +{ "id":1, "name":"test1", isParent:true, checked:true, halfCheck:true },
              +{ "id":2, "name":"test2", isParent:true, checked:false, halfCheck:true },
              +{ "id":3, "name":"test3", isParent:true, checked:true },
              +{ "id":4, "name":"test4", isParent:true, checked:false }
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.icon.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.icon.html new file mode 100644 index 0000000..69c5db1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.icon.html @@ -0,0 +1,33 @@ +
              +
              +

              StringtreeNode.icon

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点自定义图标的 URL 路径。

              +

              1、父节点如果只设置 icon ,会导致展开、折叠时都使用同一个图标

              +

              2、父节点展开、折叠使用不同的个性化图标需要同时设置 treeNode.iconOpen / treeNode.iconClose 两个属性

              +

              3、如果想利用 className 设置个性化图标,需要设置 treeNode.iconSkin 属性

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              图标图片的 url 可以是相对路径也可以是绝对路径

              +

              设置相对路径请注意页面与图片之间的关系,确保图片能够正常加载

              +
              +

              treeNode 举例

              +

              1. 设置节点的个性化图标

              +
              var nodes = [
              +	//父节点展开 折叠时使用相同的图标
              +	{ name:"父节点1", icon:"/img/parent.gif"},
              +
              +	//父节点展开 折叠时分别使用不同的图标
              +	{ name:"父节点2", iconOpen:"/img/open.gif", iconClose:"/img/close.gif"}, 
              +
              +	//叶子节点个性化图标
              +	{ name:"叶子节点", icon:"/img/leaf.gif"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.iconClose.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.iconClose.html new file mode 100644 index 0000000..f51da9c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.iconClose.html @@ -0,0 +1,33 @@ +
              +
              +

              StringtreeNode.iconClose

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              父节点自定义折叠时图标的 URL 路径。

              +

              1、此属性只针对父节点有效

              +

              2、此属性必须与 iconOpen 同时使用

              +

              3、如果想利用 className 设置个性化图标,需要设置 treeNode.iconSkin 属性

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              图标图片的 url 可以是相对路径也可以是绝对路径

              +

              设置相对路径请注意页面与图片之间的关系,确保图片能够正常加载

              +
              +

              treeNode 举例

              +

              1. 设置节点的个性化图标

              +
              var nodes = [
              +	//父节点展开 折叠时使用相同的图标
              +	{ name:"父节点1", icon:"/img/parent.gif"},
              +
              +	//父节点展开 折叠时分别使用不同的图标
              +	{ name:"父节点2", iconOpen:"/img/open.gif", iconClose:"/img/close.gif"}, 
              +
              +	//叶子节点个性化图标
              +	{ name:"叶子节点", icon:"/img/leaf.gif"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.iconOpen.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.iconOpen.html new file mode 100644 index 0000000..29c9baa --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.iconOpen.html @@ -0,0 +1,33 @@ +
              +
              +

              StringtreeNode.iconOpen

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              父节点自定义展开时图标的 URL 路径。

              +

              1、此属性只针对父节点有效

              +

              2、此属性必须与 iconClose 同时使用

              +

              3、如果想利用 className 设置个性化图标,需要设置 treeNode.iconSkin 属性

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              图标图片的 url 可以是相对路径也可以是绝对路径

              +

              设置相对路径请注意页面与图片之间的关系,确保图片能够正常加载

              +
              +

              treeNode 举例

              +

              1. 设置节点的个性化图标

              +
              var nodes = [
              +	//父节点展开 折叠时使用相同的图标
              +	{ name:"父节点1", icon:"/img/parent.gif"},
              +
              +	//父节点展开 折叠时分别使用不同的图标
              +	{ name:"父节点2", iconOpen:"/img/open.gif", iconClose:"/img/close.gif"}, 
              +
              +	//叶子节点个性化图标
              +	{ name:"叶子节点", icon:"/img/leaf.gif"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.iconSkin.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.iconSkin.html new file mode 100644 index 0000000..d5d9726 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.iconSkin.html @@ -0,0 +1,43 @@ +
              +
              +

              StringtreeNode.iconSkin

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点自定义图标的 className

              +

              1、需要修改 css,增加相应 className 的设置

              +

              2、css 方式简单、方便,并且同时支持父节点展开、折叠状态切换图片

              +

              3、css 建议采用图片分割渲染的方式以减少反复加载图片,并且避免图片闪动

              +

              4、zTree v3.x 的 iconSkin 同样支持 IE6

              +

              5、如果想直接使用 图片的Url路径 设置节点的个性化图标,需要设置 treeNode.icon / treeNode.iconOpen / treeNode.iconClose 属性

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              设置个性图标的 className

              +
              +

              css & treeNode 举例

              +

              1. 设置节点的个性化图标

              +
              css 内容:
              +.ztree li span.button.diy01_ico_open, .ztree li span.button.diy01_ico_close{...}
              +
              +.ztree li span.button.diy02_ico_open{...}
              +.ztree li span.button.diy02_ico_close{...}
              +
              +.ztree li span.button.diy03_ico_docu{...}
              +
              +js中节点数据:
              +var nodes = [
              +	//父节点展开 折叠时使用相同的图标
              +	{ name:"父节点1", iconSkin:"diy01"},
              +
              +	//父节点展开 折叠时分别使用不同的图标
              +	{ name:"父节点2", iconSkin:"diy02"},
              +
              +	//叶子节点个性化图标
              +	{ name:"叶子节点", iconSkin:"diy03"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.isAjaxing.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.isAjaxing.html new file mode 100644 index 0000000..330c120 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.isAjaxing.html @@ -0,0 +1,26 @@ +
              +
              +

              BooleantreeNode.isAjaxing

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录 treeNode 节点是否正在进行异步加载。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点正在进行异步加载

              +

              false 表示节点没有进行异步加载

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点是否节点正在进行异步加载

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isAjaxing = sNodes[0].isAjaxing;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.isFirstNode.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.isFirstNode.html new file mode 100644 index 0000000..83b80bd --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.isFirstNode.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isFirstNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录 treeNode 节点是否为同级节点中的第一个节点。

              +

              使用 exhide 扩展后,只针对显示的节点设置此属性

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示是同级节点中的第一个节点

              +

              false 表示不是同级节点中的第一个节点

              +

              节点被隐藏后,isFirstNode = false

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点是否是同级节点中的第一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isFirstNode = sNodes[0].isFirstNode;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.isHidden.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.isHidden.html new file mode 100644 index 0000000..5fb388e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.isHidden.html @@ -0,0 +1,27 @@ +
              +
              +

              BooleantreeNode.isHidden

              +

              概述[ 依赖 jquery.ztree.exhide 扩展 js ]

              +
              +

              +
              +

              判断 treeNode 节点是否被隐藏。

              +

              1、初始化 zTree 时,如果节点设置 isHidden = true,会被自动隐藏

              +

              2、请勿对已加载的节点修改此属性,隐藏 / 显示 请使用 hideNode() / hideNodes() / showNode() / showNodes() 方法

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示被隐藏

              +

              false 表示被显示

              +
              +

              treeNode 举例

              +

              1. 查看第一个根节点是否被隐藏

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getNodes();
              +if (sNodes.length > 0) {
              +	var isHidden = sNodes[0].isHidden;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.isHover.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.isHover.html new file mode 100644 index 0000000..dcef6eb --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.isHover.html @@ -0,0 +1,19 @@ +
              +
              +

              BooleantreeNode.isHover

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              记录节点 的 hover 状态,主要用于 setting.view.addHoverDom / removeHoverDom 。

              +

              zTree 内部使用,请勿进行初始化 或 随意修改

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点处于 hover 状态

              +

              false 表示节点未处于 hover 状态

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.isLastNode.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.isLastNode.html new file mode 100644 index 0000000..5d5ac82 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.isLastNode.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isLastNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录 treeNode 节点是否为同级节点中的最后一个节点。

              +

              使用 exhide 扩展后,只针对显示的节点设置此属性

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示是同级节点中的最后一个节点

              +

              false 表示不是同级节点中的最后一个节点

              +

              节点被隐藏后,isLastNode = false

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点是否是同级节点中的最后一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isLastNode = sNodes[0].isLastNode;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.isParent.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.isParent.html new file mode 100644 index 0000000..bab887e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.isParent.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isParent

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录 treeNode 节点是否为父节点。

              +

              1、初始化节点数据时,根据 treeNode.children 属性判断,有子节点则设置为 true,否则为 false

              +

              2、初始化节点数据时,如果设定 treeNode.isParent = true,即使无子节点数据,也会设置为父节点

              +

              3、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 "false","true" 字符串格式的数据

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示是父节点

              +

              false 表示不是父节点

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点是否是父节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isParent = sNodes[0].isParent;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.level.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.level.html new file mode 100644 index 0000000..aff3254 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.level.html @@ -0,0 +1,25 @@ +
              +
              +

              NumbertreeNode.level

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录节点的层级

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              Number 格式说明

              +
              +

              根节点 level = 0,依次递增

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点的级数

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var level = sNodes[0].level;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.name.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.name.html new file mode 100644 index 0000000..918f2b4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.name.html @@ -0,0 +1,25 @@ +
              +
              +

              StringtreeNode.name

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点名称。

              +

              1、如果不使用 name 属性保存节点名称,请修改 setting.data.key.name

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              节点显示的名称字符串,标准 String 即可,所有特殊字符都会被自动转义

              +
              +

              treeNode 举例

              +

              1. 设置节点的名称为 test1、test2、test3

              +
              var nodes = [
              +	{ "id":1, "name":"test1"},
              +	{ "id":2, "name":"test2"},
              +	{ "id":3, "name":"test3"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.nocheck.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.nocheck.html new file mode 100644 index 0000000..afaa62f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.nocheck.html @@ -0,0 +1,26 @@ +
              +
              +

              BooleantreeNode.nocheck

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              1、设置节点是否隐藏 checkbox / radio [setting.check.enable = true 时有效]

              +

              2、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 "false","true" 字符串格式的数据

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示此节点不显示 checkbox / radio,不影响勾选的关联关系,不影响父节点的半选状态。

              +

              false 表示节点具有正常的勾选功能

              +
              +

              treeNode 举例

              +

              1. 不显示某个节点的 checkbox / radio

              +
              var nodes = [
              +	{ "id":1, "name":"test1", "nocheck":true},
              +	{ "id":2, "name":"test2"},
              +	{ "id":3, "name":"test3"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.open.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.open.html new file mode 100644 index 0000000..1eb9aec --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.open.html @@ -0,0 +1,30 @@ +
              +
              +

              BooleantreeNode.open

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录 treeNode 节点的 展开 / 折叠 状态。

              +

              1、初始化节点数据时,如果设定 treeNode.open = true,则会直接展开此节点

              +

              2、叶子节点 treeNode.open = false

              +

              3、为了解决部分朋友生成 json 数据出现的兼容问题, 支持 "false","true" 字符串格式的数据

              +

              4、非异步加载模式下,无子节点的父节点设置 open=true 后,可显示为展开状态,但异步加载模式下不会生效。(v3.5.15+)

              +

              默认值:false

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示节点为 展开 状态

              +

              false 表示节点为 折叠 状态

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点的 展开 / 折叠 状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isOpen = sNodes[0].open;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.parentTId.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.parentTId.html new file mode 100644 index 0000000..d228a23 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.parentTId.html @@ -0,0 +1,27 @@ +
              +
              +

              StringtreeNode.parentTId

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              treeNode 节点的父节点唯一标识 tId。

              +

              1、v3.x 用 parentTId 替换了原先的 parentNode 属性,同时增加了 getParentNode 方法,以避免原先 parentNode 造成的 clone 死循环

              +

              2、初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              String 格式说明

              +
              +

              zTree 内部生成的节点唯一标识,请参考 treeNode.tId 的说明

              +

              如果 treeNode 是根节点,则 parentTId = null

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点的父节点 tId

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var parentTId = sNodes[0].parentTId;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.tId.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.tId.html new file mode 100644 index 0000000..c32285c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.tId.html @@ -0,0 +1,25 @@ +
              +
              +

              StringtreeNode.tId

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              treeNode 节点的唯一标识 tId。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +
              +
              +

              String 格式说明

              +
              +

              生成规则:setting.treeId + "_" + 内部计数

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点的 tId

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var tId = sNodes[0].tId;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.target.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.target.html new file mode 100644 index 0000000..f7c1b6b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.target.html @@ -0,0 +1,24 @@ +
              +
              +

              StringtreeNode.target

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              设置点击节点后在何处打开 url。[treeNode.url 存在时有效]

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              同超链接 target 属性: "_blank", "_self" 或 其他指定窗口名称

              +

              省略此属性,则默认为 "_blank"

              +
              +

              treeNode 举例

              +

              1. 设置点击某节点时,弹出新页面

              +
              var nodes = [
              +	{ "id":1, "name":"test1", "url":"http://myTest.com", "target":"_blank"},
              +	......
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.url.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.url.html new file mode 100644 index 0000000..0b2e007 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.url.html @@ -0,0 +1,25 @@ +
              +
              +

              StringtreeNode.url

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              节点链接的目标 URL

              +

              1、编辑模式 (setting.edit.enable = true) 下此属性功能失效,如果必须使用类似功能,请利用 onClick 事件回调函数自行控制。

              +

              2、如果需要在 onClick 事件回调函数中进行跳转控制,那么请将 URL 地址保存在其他自定义的属性内,请勿使用 url

              +

              默认值:无

              +
              +
              +

              String 格式说明

              +
              +

              同超链接 href 属性

              +
              +

              treeNode 举例

              +

              1. 设置某节点点击时,跳转到 g.cn

              +
              var nodes = [
              +	{ "id":1, "name":"Google CN", "url":"http://g.cn"},
              +	......
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/treeNode.zAsync.html b/src/main/resources/static/lib/ztree/api/cn/treeNode.zAsync.html new file mode 100644 index 0000000..00e48f3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/treeNode.zAsync.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.zAsync

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              记录 treeNode 节点是否已经进行过异步加载,避免父节点反复异步加载数据。

              +

              初始化节点数据时,由 zTree 增加此属性,请勿提前赋值

              +

              默认值:false (无子节点的父节点); true (有子节点的父节点 & 叶子节点)

              +
              +
              +

              Boolean 格式说明

              +
              +

              true 表示父节点展开时不需要自动异步加载

              +

              false 表示父节点展开时需要自动异步加载

              +

              此参数不会对 reAsyncChildNodes 方法造成任何影响

              +
              +

              treeNode 举例

              +

              1. 查看当前被选中的节点是否节点是否需要自动异步加载

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var zAsync = sNodes[0].zAsync;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.addNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.addNodes.html new file mode 100644 index 0000000..0fa52e3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.addNodes.html @@ -0,0 +1,47 @@ +
              +
              +

              Function(parentNode, [index], newNodes, isSilent)zTreeObj.addNodes

              +

              概述[ 依赖 jquery.ztree.core 扩展 js ]

              +
              +

              +
              +

              添加节点。

              +

              v3.x 为了避免原先反复初始化造成的数据重复问题,在 初始化 和 添加节点 时内部进行 clone 操作。如果需要获取数据在 zTree 内的对象,请获取此方法的返回值。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              parentNodeJSON

              +

              指定的父节点,如果增加根节点,请设置 parentNode 为 null 即可。

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              [index]Number

              +

              新节点插入的位置(从 0 开始)

              +

              index = -1 时,插入到最后

              +

              此参数可忽略

              +

              v3.5.19+

              +

              newNodesJSON / Array(JSON)

              +

              需要增加的节点数据 JSON 对象集合,数据只需要满足 zTree 的节点数据必需的属性即可,详细请参考“treeNode 节点数据详解”

              +

              1、v3.x 支持单独添加一个节点,即如果只新增一个节点,不用必须包在数组中

              +

              2、使用简单数据模式,请参考 setting.data.simpleData 内的属性说明

              +

              isSilentBoolean

              +

              设定增加节点后是否自动展开父节点。

              +

              isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开。

              +

              返回值Array(JSON)

              +

              返回值是 zTree 最终添加的节点数据集合

              +

              如果 newNodes 是单个节点数据 JSON,返回值也是将其包在 Array 内

              +

              请务必记住:返回值中的数据对象 是 newNodes 被 clone 后的,所以绝对不相等!

              +
              +

              function 举例

              +

              1. 对于 id = "tree" 的 zTree 增加 1 个根节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var newNode = {name:"newNode1"};
              +newNode = treeObj.addNodes(null, newNode);
              +
              +

              2. 对于 id = "tree" 的 zTree 增加 3 个根节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var newNodes = [{name:"newNode1"}, {name:"newNode2"}, {name:"newNode3"}];
              +newNodes = treeObj.addNodes(null, newNodes);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelEditName.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelEditName.html new file mode 100644 index 0000000..9df098f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelEditName.html @@ -0,0 +1,30 @@ +
              +
              +

              Function(newName)zTreeObj.cancelEditName

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              取消节点的编辑名称状态,可以恢复原名称,也可以强行赋给新的名称。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              newNameString

              +

              重新给定的新名称。

              +

              如果省略此参数,则恢复原名称。

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 取消 zTree 的编辑名称状态,恢复该节点原有名称

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.cancelEditName();
              +
              +

              2. 取消 zTree 的编辑名称状态,并且重新设定该节点名称

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.cancelEditName("test_new_name");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelSelectedNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelSelectedNode.html new file mode 100644 index 0000000..d841768 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.cancelSelectedNode.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeNode)zTreeObj.cancelSelectedNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              取消节点的选中状态。

              +

              v3.x 支持多点同时选中,因此取消选中状态可以全部取消,也可以单独取消某个节点的选中状态。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要取消选中状态的节点。

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              如果省略此参数,则将取消全部被选中节点的选中状态。

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 取消当前所有被选中节点的选中状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.cancelSelectedNode();
              +
              +

              2. 取消当前第一个被选中节点的选中状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) { 
              +	treeObj.cancelSelectedNode(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkAllNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkAllNodes.html new file mode 100644 index 0000000..be51299 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkAllNodes.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(checked)zTreeObj.checkAllNodes

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              勾选 或 取消勾选 全部节点。[setting.check.enable = true 且 setting.check.chkStyle = "checkbox" 时有效]

              +

              此方法不会触发 beforeCheck / onCheck 事件回调函数。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              checkedBoolean

              +

              checked = true 表示勾选全部节点

              +

              checked = false 表示全部节点取消勾选

              +

              不会影响 treeNode.nocheck = true 的节点。

              +

              不会影响未加载的节点。

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 勾选全部节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.checkAllNodes(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkNode.html new file mode 100644 index 0000000..7bc0dbf --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.checkNode.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(treeNode, checked, checkTypeFlag, callbackFlag)zTreeObj.checkNode

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              勾选 或 取消勾选 单个节点。[setting.check.enable = true 时有效]

              +

              v3.x 中 checkNode() 方法可以触发 beforeCheck / onCheck 事件回调函数。便于减少冗余代码

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要勾选 或 取消勾选 的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              checkedBoolean

              +

              checked = true 表示勾选节点

              +

              checked = false 表示节点取消勾选

              +

              省略此参数,则根据对此节点的勾选状态进行 toggle 切换

              +

              不影响 treeNode.nocheck = true 的节点。

              +

              checkTypeFlagBoolean

              +

              checkTypeFlag = true 表示按照 setting.check.chkboxType 属性进行父子节点的勾选联动操作

              +

              checkTypeFlag = false 表示只修改此节点勾选状态,无任何勾选联动操作

              +

              checkTypeFlag = false 且 treeNode.checked = checked 时,不会触发回调函数,直接返回

              +

              不影响父子节点中 treeNode.nocheck = true 的节点。

              +

              callbackFlagBoolean

              +

              callbackFlag = true 表示执行此方法时触发 beforeCheck & onCheck 事件回调函数

              +

              callbackFlag = false 表示执行此方法时不触发事件回调函数

              +

              省略此参数,等同于 false

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 勾选当前选中的节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +for (var i=0, l=nodes.length; i < l; i++) {
              +	treeObj.checkNode(nodes[i], true, true);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.copyNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.copyNode.html new file mode 100644 index 0000000..f1b624b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.copyNode.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(targetNode, treeNode, moveType, isSilent)zTreeObj.copyNode

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              复制节点。

              +

              v3.x 复制节点时进行 clone 操作。如果需要获取数据在 zTree 内的对象,请获取此方法的返回值。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              targetNodeJSON

              +

              要复制到的目标节点 JSON 数据

              +

              如果复制成为根节点,请设置 targetNode 为 null 即可

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              treeNodeJSON

              +

              需要被复制的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              moveTypeString

              +

              复制到目标节点的相对位置

              +

              "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点

              +

              isSilentBoolean

              +

              设定复制节点后是否自动展开父节点。

              +

              isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开。

              +

              返回值JSON

              +

              返回值是最终加入到 zTree 内的节点数据

              +

              请务必记住:返回值中的数据对象 是 treeNode 被 clone 后的,所以绝对不相等!

              +
              +

              function 举例

              +

              1. 将根节点中第二个节点 复制成为 第一个节点的子节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.copyNode(nodes[0], nodes[1], "inner");
              +
              +

              2. 将根节点中第二个节点 复制成为 第一个节点的前一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.copyNode(nodes[0], nodes[1], "before");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.destroy.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.destroy.html new file mode 100644 index 0000000..d9f6da0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.destroy.html @@ -0,0 +1,25 @@ +
              +
              +

              Function(treeId)zTreeObj.destroy

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              从 zTree v3.4 开始提供销毁 zTree 的方法。

              +

              1、用此方法可以销毁 zTreeObj 代表的 zTree。

              +

              2、销毁当前页面全部的 zTree,也可以使用 $.fn.zTree.destroy() 方法。

              +

              3、重新使用已经被销毁的树,必须要使用 init 方法进行初始化。

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 销毁 id 为 "treeDemo" 的 zTree

              +
              var zTreeObj = $.fn.zTree.getZTreeObj("treeDemo");
              +zTreeObj.destroy();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.editName.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.editName.html new file mode 100644 index 0000000..2d4eaf7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.editName.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNode)zTreeObj.editName

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              设置某节点进入编辑名称状态。

              +

              1、如果需要用 js 取消编辑名称状态,请使用 cancelEditName(newName) 方法。

              +

              2、可利用此方法让当前正编辑的节点 input 输入框获取焦点。

              +

              3、请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              指定进入编辑名称状态的节点 JSON 数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 设置根节点第一个节点进入编辑名称状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.editName(nodes[0]);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandAll.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandAll.html new file mode 100644 index 0000000..aaa3e46 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandAll.html @@ -0,0 +1,30 @@ +
              +
              +

              Function(expandFlag)zTreeObj.expandAll

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              展开 / 折叠 全部节点

              +

              此方法不会触发 beforeExpand / onExpand 和 beforeCollapse / onCollapse 事件回调函数。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              expandFlagBoolean

              +

              expandFlag = true 表示 展开 全部节点

              +

              expandFlag = false 表示 折叠 全部节点

              +

              返回值Boolean

              +

              返回值表示最终实际操作情况

              +

              true 表示 展开 全部节点

              +

              false 表示 折叠 全部节点

              +

              null 表示 不存在任何父节点

              +
              +

              function 举例

              +

              1. 展开全部节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.expandAll(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandNode.html new file mode 100644 index 0000000..5d96d3f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.expandNode.html @@ -0,0 +1,50 @@ +
              +
              +

              Function(treeNode, expandFlag, sonSign, focus, callbackFlag)zTreeObj.expandNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              展开 / 折叠 指定的节点

              +

              v3.x 中执行此方法可以触发 beforeExpand / onExpand 或 beforeCollapse / onCollapse 事件回调函数。便于减少冗余代码

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要 展开 / 折叠 的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              expandFlagBoolean

              +

              expandFlag = true 表示 展开 节点

              +

              expandFlag = false 表示 折叠 节点

              +

              省略此参数,则根据对此节点的展开状态进行 toggle 切换

              +

              sonSignBoolean

              +

              sonSign = true 表示 全部子孙节点 进行与 expandFlag 相同的操作

              +

              sonSign = false 表示 只影响此节点,对于其 子孙节点无任何影响

              +

              sonSign = false 且 treeNode.open = expandFlag 时,不会触发回调函数,直接返回

              +

              省略此参数,等同于 false

              +

              focusBoolean

              +

              focus = true 表示 展开 / 折叠 操作后,通过设置焦点保证此焦点进入可视区域内

              +

              focus = false 表示 展开 / 折叠 操作后,不设置任何焦点

              +

              省略此参数,等同于 true

              +

              callbackFlagBoolean

              +

              callbackFlag = true 表示执行此方法时触发 beforeExpand / onExpand 或 beforeCollapse / onCollapse 事件回调函数

              +

              callbackFlag = false 表示执行此方法时不触发事件回调函数

              +

              省略此参数,等同于 false

              +

              返回值Boolean

              +

              返回值表示最终实际操作情况

              +

              true 表示 展开 节点

              +

              false 表示 折叠 节点

              +

              null 表示 不是父节点

              +
              +

              function 举例

              +

              1. 展开当前选择的第一个节点(包括其全部子节点)

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	treeObj.expandNode(nodes[0], true, true, true);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getChangeCheckedNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getChangeCheckedNodes.html new file mode 100644 index 0000000..ba86534 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getChangeCheckedNodes.html @@ -0,0 +1,24 @@ +
              +
              +

              Function()zTreeObj.getChangeCheckedNodes

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              获取输入框勾选状态被改变的节点集合(与原始数据 checkedOld 对比)。[setting.check.enable = true 时有效]

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              返回值Array(JSON)

              +

              返回全部勾选状态被改变的节点集合 Array

              +

              如果需要获取每次操作后全部被改变勾选状态的节点数据,请在每次勾选操作后,遍历所有被改变勾选状态的节点数据,让其 checkedOld = checked 就可以了。

              +
              +

              function 举例

              +

              1. 获取当前勾选状态被改变的节点集合

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getChangeCheckedNodes();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getCheckedNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getCheckedNodes.html new file mode 100644 index 0000000..41a7df3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getCheckedNodes.html @@ -0,0 +1,28 @@ +
              +
              +

              Function(checked)zTreeObj.getCheckedNodes

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              获取输入框被勾选 或 未勾选的节点集合。[setting.check.enable = true 时有效]

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              checkedBoolean

              +

              checked = true 表示获取 被勾选 的节点集合

              +

              checked = false 表示获取 未勾选 的节点集合

              +

              省略此参数,等同于 true。

              +

              对于 treeNode.nocheck = true 的节点不进行获取。

              +

              返回值Array(JSON)

              +

              返回全部符合要求的节点集合 Array

              +
              +

              function 举例

              +

              1. 获取当前被勾选的节点集合

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getCheckedNodes(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByParam.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByParam.html new file mode 100644 index 0000000..89e72c7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByParam.html @@ -0,0 +1,32 @@ +
              +
              +

              Function(key, value, parentNode)zTreeObj.getNodeByParam

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              根据节点数据的属性搜索,获取条件完全匹配的节点数据 JSON 对象

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              keyString

              +

              需要精确匹配的属性名称

              +

              value?

              +

              需要精确匹配的属性值,可以是任何类型,只要保证与 key 指定的属性值保持一致即可

              +

              parentNodeJSON

              +

              搜索范围,指定在某个父节点下的子节点中进行搜索

              +

              忽略此参数,表示在全部节点中搜索

              +

              返回值JSON

              +

              匹配精确搜索的节点数据

              +

              1、如无结果,返回 null

              +

              2、如有多个节点满足查询条件,只返回第一个匹配到的节点

              +
              +

              function 举例

              +

              1. 查找 id = 1 的节点数据

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodeByParam("id", 1, null);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByTId.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByTId.html new file mode 100644 index 0000000..76fcc48 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeByTId.html @@ -0,0 +1,27 @@ +
              +
              +

              Function(tId)zTreeObj.getNodeByTId

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              根据 zTree 的唯一标识 tId 快速获取节点 JSON 数据对象

              +

              通过内部的 cache 获取,不需要遍历节点。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              tIdString

              +

              节点在 zTree 内的唯一标识 tId

              +

              返回值JSON

              +

              tId 对应的节点 JSON 数据对象

              +

              如无结果,返回 null

              +
              +

              function 举例

              +

              1. 获取 tId = "tree_10" 的节点数据

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodeByTId("tree_10");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeIndex.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeIndex.html new file mode 100644 index 0000000..b2c757d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodeIndex.html @@ -0,0 +1,30 @@ +
              +
              +

              Function(treeNode)zTreeObj.getNodeIndex

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取某节点在同级节点中的序号(从0开始)

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要查询顺序的节点 JSON 数据对象

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              返回值Number

              +

              返回值从 0 开始计数

              +

              如果不存在该节点数据,返回 -1

              +
              +

              function 举例

              +

              1. 获取当前选中的第一个节点在同级节点中的序号

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	var index = treeObj.getNodeIndex(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodes.html new file mode 100644 index 0000000..b368535 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodes.html @@ -0,0 +1,26 @@ +
              +
              +

              Function()zTreeObj.getNodes

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取 zTree 的全部节点数据

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              返回值Array(JSON)

              +

              全部节点数据

              +

              1、Array 仅仅是根节点的集合(默认情况子节点都处于 children 属性下);

              +

              2、如需遍历全部节点需要利用递归,或利用 transformToArray 方法 将数据变成简单的 Array 集合

              +

              3、对于异步加载模式下,尚未加载的子节点是无法通过此方法获取的。

              +
              +

              function 举例

              +

              1. 获取全部节点数据

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByFilter.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByFilter.html new file mode 100644 index 0000000..6917425 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByFilter.html @@ -0,0 +1,43 @@ +
              +
              +

              Function(filter, isSingle, parentNode, invokeParam)zTreeObj.getNodesByFilter

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              根据自定义规则搜索节点数据 JSON 对象集合 或 单个节点数据

              +

              可自定义复杂的搜索规则

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              filterFunction

              +

              自定义过滤器函数 function filter(node) {...}

              +

              filter 参数:node (节点数据 JSON)

              +

              filter 返回值:boolean (true 表示符合搜索条件;false 表示不符合搜索条件)

              +

              isSingleBoolean

              +

              isSingle = true 表示只查找单个节点

              +

              isSingle = false 表示查找节点集合

              +

              忽略此参数,表示查找节点集合

              +

              parentNodeJSON

              +

              可以指定在某个父节点下的子节点中搜索

              +

              忽略此参数,表示在全部节点中搜索

              +

              invokeParam任意类型

              +

              用户自定义的数据对象,用于 filter 中进行计算

              +

              返回值Array(JSON) / JSON

              +

              isSingle = true 返回 第一个找到的节点数据 JSON,无结果时返回 null

              +

              isSingle = false 返回 节点数据集合 Array(JSON),无结果时返回 [ ]

              +
              +

              function 举例

              +

              1. 查找 level = 2 & name 中包含 "test" 的节点数据

              +
              function filter(node) {
              +    return (node.level == 2 && node.name.indexOf("test")>-1);
              +}
              +......
              +var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodesByFilter(filter, true); // 仅查找一个节点
              +var nodes = treeObj.getNodesByFilter(filter); // 查找节点集合
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParam.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParam.html new file mode 100644 index 0000000..cf45939 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParam.html @@ -0,0 +1,31 @@ +
              +
              +

              Function(key, value, parentNode)zTreeObj.getNodesByParam

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              根据节点数据的属性搜索,获取条件完全匹配的节点数据 JSON 对象集合

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              keyString

              +

              需要精确匹配的属性名称

              +

              value?

              +

              需要精确匹配的属性值,可以是任何类型,只要保证与 key 指定的属性值保持一致即可

              +

              parentNodeJSON

              +

              可以指定在某个父节点下的子节点中搜索

              +

              忽略此参数,表示在全部节点中搜索

              +

              返回值Array(JSON)

              +

              匹配精确搜索的节点数据集合

              +

              如无结果,返回 [ ]

              +
              +

              function 举例

              +

              1. 查找 name = "test" 的节点数据

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodesByParam("name", "test", null);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParamFuzzy.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParamFuzzy.html new file mode 100644 index 0000000..04d183f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getNodesByParamFuzzy.html @@ -0,0 +1,32 @@ +
              +
              +

              Function(key, value, parentNode)zTreeObj.getNodesByParamFuzzy

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              根据节点数据的属性搜索,获取条件模糊匹配的节点数据 JSON 对象集合

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              keyString

              +

              需要模糊匹配的属性名称

              +

              valueString

              +

              需要模糊匹配的属性值

              +

              模糊匹配只能针对 String 类型的数据

              +

              parentNodeJSON

              +

              可以指定在某个父节点下的子节点中搜索

              +

              忽略此参数,表示在全部节点中搜索

              +

              返回值Array(JSON)

              +

              匹配模糊搜索的节点数据集合

              +

              如无结果,返回 [ ]

              +
              +

              function 举例

              +

              1. 查找 name 包含 "test" 的节点数据

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodesByParamFuzzy("name", "test", null);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getSelectedNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getSelectedNodes.html new file mode 100644 index 0000000..ab36f8e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.getSelectedNodes.html @@ -0,0 +1,23 @@ +
              +
              +

              Function()zTreeObj.getSelectedNodes

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              获取 zTree 当前被选中的节点数据集合

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              返回值Array(JSON)

              +

              当前被选中的节点数据集合

              +
              +

              function 举例

              +

              1. 获取当前被选中的节点数据集合

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNode.html new file mode 100644 index 0000000..a1996b8 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNode.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNode)zTreeObj.hideNode

              +

              概述[ 依赖 jquery.ztree.exhide 扩展 js ]

              +
              +

              +
              +

              隐藏某个节点。

              +

              1、此功能不支持 exedit 扩展,因此不要在编辑状态时使用隐藏节点的方法。

              +

              2、隐藏/显示节点,会影响节点的 isFirstNode 和 isLastNode 属性。

              +

              3、请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              指定被隐藏的节点 JSON 数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 隐藏根节点第一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.hideNode(nodes[0]);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNodes.html new file mode 100644 index 0000000..cf752b5 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.hideNodes.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNodes)zTreeObj.hideNodes

              +

              概述[ 依赖 jquery.ztree.exhide 扩展 js ]

              +
              +

              +
              +

              隐藏一批节点。

              +

              1、此功能不支持 exedit 扩展,因此不要在编辑状态时使用隐藏节点的方法。

              +

              2、隐藏/显示节点,会影响节点的 isFirstNode 和 isLastNode 属性。

              +

              3、请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodesArray(JSON)

              +

              指定被隐藏的节点 JSON 数据集合

              +

              请务必保证这些节点数据对象 是 zTree 内部的数据对象

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 隐藏根节点第一个节点的子节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.hideNodes(nodes[0].children);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.moveNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.moveNode.html new file mode 100644 index 0000000..9c9180b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.moveNode.html @@ -0,0 +1,46 @@ +
              +
              +

              Function(targetNode, treeNode, moveType, isSilent)zTreeObj.moveNode

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              移动节点。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              targetNodeJSON

              +

              要移动到的目标节点 JSON 数据

              +

              如果移动成为根节点,请设置 targetNode 为 null 即可

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              treeNodeJSON

              +

              需要被移动的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              moveTypeString

              +

              指定移动到目标节点的相对位置

              +

              "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点

              +

              isSilentBoolean

              +

              设定移动节点后是否自动展开父节点。

              +

              isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开。

              +

              返回值JSON

              +

              返回值是最终被移动的节点数据,正常情况下与 treeNode 参数完全相同

              +

              如果 返回值 为 null,说明 移动失败,主要原因有:
              +  1、targetNode 是 treeNode 父节点,且 moveType = "inner"
              +  2、targetNode 是 treeNode 子孙节点 +

              +
              +

              function 举例

              +

              1. 将根节点中第二个节点 移动成为 第一个节点的子节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.moveNode(nodes[0], nodes[1], "inner");
              +
              +

              2. 将根节点中第二个节点 移动成为 第一个节点的前一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.moveNode(nodes[0], nodes[1], "prev");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodes.html new file mode 100644 index 0000000..3ca0492 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodes.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(parentNode, reloadType, isSilent, callback)zTreeObj.reAsyncChildNodes +

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              强行异步加载父节点的子节点。[setting.async.enable = true 时有效]

              +

              已经加载过的父节点可反复使用此方法重新加载。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              parentNodeJSON

              +

              指定需要异步加载的父节点 JSON 数据

              +

              1、parentNode = null 时,相当于从根节点 Root 进行异步加载

              +

              2、parentNode.isParent = false 时,不进行异步加载

              +

              3、请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              reloadTypeString

              +

              reloadType = "refresh" 表示清空后重新加载。

              +

              reloadType != "refresh" 时,表示追加子节点处理。

              +

              isSilentBoolean

              +

              设定异步加载后是否自动展开父节点。

              +

              isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开。

              +

              callbackfunction

              +

              刷新完成后的回调函数。

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 重新异步加载 zTree

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.reAsyncChildNodes(null, "refresh");
              +
              +

              2. 重新异步加载当前选中的第一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	treeObj.reAsyncChildNodes(nodes[0], "refresh");
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodesPromise.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodesPromise.html new file mode 100644 index 0000000..b95200a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.reAsyncChildNodesPromise.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(parentNode, reloadType, isSilent)zTreeObj.reAsyncChildNodesPromise +

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              强行异步加载父节点的子节点(ES6 Promise 版)。[setting.async.enable = true 时有效]

              +

              已经加载过的父节点可反复使用此方法重新加载。

              +

              请通过 zTree 对象执行此方法。

              +

              v3.5.29+

              +
              +
              +

              Function 参数说明

              +
              +

              parentNodeJSON

              +

              指定需要异步加载的父节点 JSON 数据

              +

              1、parentNode = null 时,相当于从根节点 Root 进行异步加载

              +

              2、parentNode.isParent = false 时,不进行异步加载

              +

              3、请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              reloadTypeString

              +

              reloadType = "refresh" 表示清空后重新加载。

              +

              reloadType != "refresh" 时,表示追加子节点处理。

              +

              isSilentBoolean

              +

              设定异步加载后是否自动展开父节点。

              +

              isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开。

              +

              返回值ES6 Promise

              +

              ES6 的 Promise 对象,便于异步控制,使用时请注意浏览器兼容问题

              +
              +

              function 举例

              +

              1. 重新异步加载 zTree

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.reAsyncChildNodes(null, "refresh");
              +
              +

              2. 重新异步加载当前选中的第一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	treeObj.reAsyncChildNodes(nodes[0], "refresh");
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.refresh.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.refresh.html new file mode 100644 index 0000000..09a74ca --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.refresh.html @@ -0,0 +1,24 @@ +
              +
              +

              Function()zTreeObj.refresh

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              刷新 zTree 。

              +

              没有特殊必要,尽量不要使用此方法。单个节点更新请使用 updateNode 方法,异步加载模式下请使用 reAsyncChildNodes 方法。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 刷新 zTree

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.refresh();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeChildNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeChildNodes.html new file mode 100644 index 0000000..588639f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeChildNodes.html @@ -0,0 +1,32 @@ +
              +
              +

              Function(parentNode)zTreeObj.removeChildNodes

              +

              概述[ 依赖 jquery.ztree.core 扩展 js ]

              +
              +

              +
              +

              清空某父节点的子节点。

              +

              1、清空子节点后,父节点会自动变为叶子节点,如需要父节点保持父节点状态,请设置 setting.data.keep.parent 属性。

              +

              2、请勿用此方法清空根节点,如果需要清空根节点,直接初始化 zTree,并且设置初始节点为 null 即可。

              +

              3、此方法不会触发任何事件回调函数。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              parentNodeJSON

              +

              需要清空子节点的父节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              返回值Array(JSON)

              +

              将该父节点的子节点数据返回,如果不存在则返回 null

              +
              +

              function 举例

              +

              1. 清空选中的第一个节点的子节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes && nodes.length>0) {
              +	treeObj.removeChildNodes(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeNode.html new file mode 100644 index 0000000..442f5c7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.removeNode.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeNode, callbackFlag)zTreeObj.removeNode

              +

              概述[ 依赖 jquery.ztree.core 扩展 js ]

              +
              +

              +
              +

              删除节点。

              +

              v3.x 中删除节点可以触发 beforeRemove / onRemove 事件回调函数。便于减少冗余代码

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要被删除的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              callbackFlagBoolean

              +

              callbackFlag = true 表示执行此方法时触发 beforeRemove & onRemove 事件回调函数

              +

              callbackFlag = false 表示执行此方法时不触发事件回调函数

              +

              省略此参数,等同于 false

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 删除所有选中的节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +for (var i=0, l=nodes.length; i < l; i++) {
              +	treeObj.removeNode(nodes[i]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.selectNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.selectNode.html new file mode 100644 index 0000000..8d074c4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.selectNode.html @@ -0,0 +1,38 @@ +
              +
              +

              Function(treeNode, addFlag, isSilent)zTreeObj.selectNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              选中指定节点

              +

              v3.x 支持同时选中多个节点。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要被选中的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              addFlagBoolean

              +

              addFlag = true 表示追加选中,会出现多点同时被选中的情况

              +

              addFlag = false (默认)表示单独选中,原先被选中的节点会被取消选中状态

              +

              setting.view.selectedMulti = false 时,此参数无效,始终进行单独选中

              +

              isSilentBoolean

              +

              isSilent = true 选中节点时,不会让节点自动滚到到可视区域内

              +

              isSilent = false (默认)表示选中节点时,会让节点自动滚到到可视区域内

              +

              (v3.5.23+)

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 单独选中根节点中第一个节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +if (nodes.length>0) {
              +	treeObj.selectNode(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setChkDisabled.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setChkDisabled.html new file mode 100644 index 0000000..9540080 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setChkDisabled.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(node, disabled, inheritParent, inheritChildren)zTreeObj.setChkDisabled

              +

              概述[ 依赖 jquery.ztree.excheck 扩展 js ]

              +
              +

              +
              +

              禁用 或 解禁 某个节点的 checkbox / radio [setting.check.enable = true 时有效]

              +

              1、节点的 checkbox / radio 被禁用后,无法勾选或取消勾选,但能够影响父节点的半选状态

              +

              2、请不要直接修改已加载节点的 treeNode.chkDisabled 属性。

              +

              3、请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              需要禁用 或 解禁 checkbox / radio 的节点数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              disabledBoolean

              +

              disabled = true 表示禁用 checkbox / radio

              +

              disabled = false 表示解禁 checkbox / radio

              +

              省略此参数,等同于 disabled = false

              +

              不影响 treeNode.nocheck = true 的节点。

              +

              inheritParentBoolean

              +

              inheritParent = true 表示全部父节点进行同样的操作

              +

              inheritParent = false 表示不影响父节点

              +

              省略此参数,等同于 inheritParent = false

              +

              inheritChildrenBoolean

              +

              inheritChildren = true 表示全部子节点进行同样的操作

              +

              inheritChildren = false 表示不影响子节点

              +

              省略此参数,等同于 inheritChildren = false

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 禁用当前选中的节点的 checkbox / radio

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +for (var i=0, l=nodes.length; i < l; i++) {
              +	treeObj.setChkDisabled(nodes[i], true);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setEditable.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setEditable.html new file mode 100644 index 0000000..c90c8de --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setEditable.html @@ -0,0 +1,27 @@ +
              +
              +

              Function(editable)zTreeObj.setEditable

              +

              概述[ 依赖 jquery.ztree.exedit 扩展 js ]

              +
              +

              +
              +

              设置 zTree 进入 / 取消 编辑状态。

              +

              对于编辑状态的各种功能需要提前设置对应 setting 中的不同属性

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              editableBoolean

              +

              true 表示进入 编辑状态

              +

              false 表示取消 编辑状态

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 设置 zTree 进入编辑状态

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.setEditable(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setting.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setting.html new file mode 100644 index 0000000..61abd53 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.setting.html @@ -0,0 +1,13 @@ +
              +
              +

              JSONzTreeObj.setting

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              zTree 对象使用的 setting 配置数据,详细请参考 “setting 配置详解”中的各个属性详细说明

              +

              v3.x 取消了原先操作 setting 的方法,让用户可以较自由的修改参数,但请注意,对于 zTree 初始化有影响的参数后期修改是不会起作用的,请对各个属性有较深入的了解以后再考虑进行修改。

              +
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNode.html new file mode 100644 index 0000000..ed22d51 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNode.html @@ -0,0 +1,31 @@ +
              +
              +

              Function(treeNode)zTreeObj.showNode

              +

              概述[ 依赖 jquery.ztree.exhide 扩展 js ]

              +
              +

              +
              +

              显示某个被隐藏的节点。

              +

              1、此功能不支持 exedit 扩展,因此不要在编辑状态时使用隐藏节点的方法。

              +

              2、隐藏/显示节点,会影响节点的 isFirstNode 和 isLastNode 属性。

              +

              3、请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              指定被显示的节点 JSON 数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 显示某个隐藏的节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodeByParam("isHidden", true);
              +if (node) {
              +  treeObj.showNode(node);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNodes.html new file mode 100644 index 0000000..b090657 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.showNodes.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNodes)zTreeObj.showNodes

              +

              概述[ 依赖 jquery.ztree.exhide 扩展 js ]

              +
              +

              +
              +

              显示一批已经被隐藏的节点。

              +

              1、此功能不支持 exedit 扩展,因此不要在编辑状态时使用隐藏节点的方法。

              +

              2、隐藏/显示节点,会影响节点的 isFirstNode 和 isLastNode 属性。

              +

              3、请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodesArray(JSON)

              +

              指定被显示的节点 JSON 数据集合

              +

              请务必保证这些节点数据对象 是 zTree 内部的数据对象

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 显示全部隐藏的节点

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodesByParam("isHidden", true);
              +treeObj.showNodes(nodes);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformToArray.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformToArray.html new file mode 100644 index 0000000..a46dc61 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformToArray.html @@ -0,0 +1,25 @@ +
              +
              +

              Function(treeNodes)zTreeObj.transformToArray

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              将 zTree 使用的标准 JSON 嵌套格式的数据转换为简单 Array 格式。(免去用户自行编写递归遍历全部节点的麻烦)

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodesArray(JSON) / JSON

              +

              需要被转换的 zTree 节点数据对象集合 或 某个单独节点的数据对象

              +

              返回值Array(JSON)

              +

              转换后的简单 Array 数据格式

              +
              +

              function 举例

              +

              1. 将 zTree 节点数据转换为简单 Array 格式

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.transformToArray(treeObj.getNodes());
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformTozTreeNodes.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformTozTreeNodes.html new file mode 100644 index 0000000..4b02650 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.transformTozTreeNodes.html @@ -0,0 +1,43 @@ +
              +
              +

              Function(simpleNodes)zTreeObj.transformTozTreeNodes

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              将简单 Array 格式数据转换为 zTree 使用的标准 JSON 嵌套数据格式。

              +

              使用此方法,请务必设置节点唯一标识属性名称 setting.data.simpleData.idKey 和 父节点唯一标识属性名称 setting.data.simpleData.pIdKey,并且让数据满足父子关系。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              simpleNodesArray(JSON) / JSON

              +

              需要被转换的简单 Array 格式数据 或 某个单独的数据对象

              +

              返回值Array(JSON)

              +

              zTree 使用的标准数据,子节点都存在于父节点数据的 children 属性中

              +

              如果 simpleNodes 是一个 JSON 对象,则被简单封装成长度为 1 的数组。

              +
              +

              function 举例

              +

              1. 将简单 Array 格式转换为zTree使用的标准格式

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var simpleNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.transformTozTreeNodes(simpleNodes);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/cn/zTreeObj.updateNode.html b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.updateNode.html new file mode 100644 index 0000000..e13419c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/cn/zTreeObj.updateNode.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeNode, checkTypeFlag)zTreeObj.updateNode

              +

              概述[ 依赖 jquery.ztree.core 核心 js ]

              +
              +

              +
              +

              更新某节点数据,主要用于该节点显示属性的更新。

              +

              1、可针对 name、target、 url、icon、 iconSkin、checked、nocheck 等这几个用于显示效果的参数进行更新,其他用于 zTreeNodes 的参数请不要随意更新,对于展开节点,还请调用 expandNode方法,因此请勿随意修改 open 属性。

              +

              2、用此方法修改 checked 勾选状态不会触发 beforeCheck / onCheck 事件回调函数。

              +

              请通过 zTree 对象执行此方法。

              +
              +
              +

              Function 参数说明

              +
              +

              treeNodeJSON

              +

              指定需要更新的节点 JSON 数据

              +

              请务必保证此节点数据对象 是 zTree 内部的数据对象

              +

              checkTypeFlagBoolean

              +

              checkTypeFlag = true 表示按照 setting.check.chkboxType 属性进行父子节点的勾选联动操作

              +

              checkTypeFlag = false 表示只修改此节点勾选状态,无任何勾选联动操作

              +

              当 setting.check.enable = true 且 setting.check.chkStyle = "checkbox" 时才有效

              +

              不影响父子节点中 treeNode.nocheck = true 的节点。

              +

              返回值

              +

              目前无任何返回值

              +
              +

              function 举例

              +

              1. 更新根节点中第一个节点的名称

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +if (nodes.length>0) {
              +	nodes[0].name = "test";
              +	treeObj.updateNode(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/fn.zTree._z.html b/src/main/resources/static/lib/ztree/api/en/fn.zTree._z.html new file mode 100644 index 0000000..e2ae61d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/fn.zTree._z.html @@ -0,0 +1,15 @@ +
              +
              +

              JSON$.fn.zTree._z

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              All of the internal methods in zTree v3.x are available through '$. fn.zTree._z', + use this if you want to develop your own zTree plug-ins.

              +

              Unless you are writing a plugin, + you should not use this object.

              +
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/fn.zTree.destroy.html b/src/main/resources/static/lib/ztree/api/en/fn.zTree.destroy.html new file mode 100644 index 0000000..c53cb80 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/fn.zTree.destroy.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeId)$.fn.zTree.destroy

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              From zTree v3.4, zTree provides a method for destruction.

              +

              1. This method can destroy a zTree by treeId, or destroy all zTree instances.

              +

              2. If you want to destroy a zTree, you can use the 'zTreeObj.destroy()' method.

              +

              3. If you want to re-use the tree which has been destroyed, + you must first re-initialise it with the 'init()' method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier

              +

              If this parameter is omitted, all zTree instances will be destroyed.

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Destroy the zTree with id === 'treeDemo'

              +
              $.fn.zTree.destroy("treeDemo");
              +

              2. Destroy all zTree instances

              +
              $.fn.zTree.destroy();
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/fn.zTree.getZTreeObj.html b/src/main/resources/static/lib/ztree/api/en/fn.zTree.getZTreeObj.html new file mode 100644 index 0000000..49dadaa --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/fn.zTree.getZTreeObj.html @@ -0,0 +1,27 @@ +
              +
              +

              Function(treeId)$.fn.zTree.getZTreeObj

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              zTree v3.x provides this method to get zTree object from the tree's Id.

              +

              Please initialize zTree first, then you can use this method.

              +

              Users don't need to use a global variable to reference the zTree object, + as all of the callback methods will pass 'treeId' parameters, + and you can always call this method to get the zTree object.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier

              +

              Return JSON

              +

              zTree object

              +

              This is a reference to the zTree object.

              +
              +

              Examples of function

              +

              1. Get the zTree object with id='tree'

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/fn.zTree.init.html b/src/main/resources/static/lib/ztree/api/en/fn.zTree.init.html new file mode 100644 index 0000000..413056c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/fn.zTree.init.html @@ -0,0 +1,81 @@ +
              +
              +

              Function(obj, zSetting, zNodes)$.fn.zTree.init

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              This method is used to create a zTree.

              +

              1. The web page must use the W3C DTD. For example: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

              +

              2. Needs jquery-1.4.2.js or better.

              +

              3. Needs jquery-ztree.core-3.0.js or better. + If you are using edit mode or checkbox / radio mode, + make sure you load jquery-ztree.exedit-3.0.js and jquery-ztree.excheck-3.0.js.

              +

              4. Needs zTreeStyle.css and image files

              +

              5. If you plan to use custom icons, please refer to the Demo, + or see the help on iconSkin.

              +

              6. Note: You need to set zTree container's class name to "ztree". + If you need to change it, don't forget to modify the css file. + If you need other special styles, you can modify the css file.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              objectjQuery Object

              +

              DOM Container for zTree

              +

              zSettingJSON

              +

              zTree's configuration data, please refer to "setting details" in the API Document.

              +

              zNodesArray(JSON) / JSON

              +

              zTree's node data, please refer to "treeNode data details" in the API Document.

              +

              1. zTree v3.x support to add single node, that is, if only to add one node, + you can use JSON without using Array.

              +

              2. If you are planning on using asynchronous loading of root nodes, set it to null or [ ]

              +

              3. If you are using simple data mode, please refer to "setting.data.simpleData" in the API Document.

              +

              Return JSON

              +

              zTree object

              +

              This object can provide the methods of operate the zTree

              +

              You can use $.fn.zTree.getZTreeObj method at any time to obtain.

              +
              +

              Examples of setting & function

              +

              1. create a simple tree

              +
              <!DOCTYPE html>
              +<HTML>
              + <HEAD>
              +  <TITLE> ZTREE DEMO </TITLE>
              +  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
              +  <link rel="stylesheet" href="zTreeStyle/zTreeStyle.css" type="text/css">
              +  <script type="text/javascript" src="jquery-1.4.2.js"></script>
              +  <script type="text/javascript" src="jquery.ztree.core.js"></script>
              +<!--
              +  <script type="text/javascript" src="jquery.ztree.excheck.js"></script>
              +  <script type="text/javascript" src="jquery.ztree.exedit.js"></script>
              +-->
              +  <SCRIPT type="text/javascript" >
              +	var zTreeObj,
              +	setting = {
              +		view: {
              +			selectedMulti: false
              +		}
              +	},
              +	zTreeNodes = [
              +		{"name":"Site Map", open:true, children: [
              +			{ "name":"google", "url":"http://www.google.com", "target":"_blank"},
              +			{ "name":"baidu", "url":"http://baidu.com", "target":"_blank"},
              +			{ "name":"sina", "url":"http://www.sina.com.cn", "target":"_blank"}
              +			]
              +		}
              +	];
              +
              +	$(document).ready(function(){
              +		zTreeObj = $.fn.zTree.init($("#tree"), setting, zTreeNodes);
              +
              +	});
              +  </SCRIPT>
              + </HEAD>
              +
              +<BODY>
              +<ul id="tree" class="ztree" style="width:230px; overflow:auto;"></ul>
              + </BODY>
              +</HTML>
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.autoParam.html b/src/main/resources/static/lib/ztree/api/en/setting.async.autoParam.html new file mode 100644 index 0000000..6c4cbe0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.autoParam.html @@ -0,0 +1,52 @@ +
              +
              +

              Array(String) / Function(treeId, treeNode)setting.async.autoParam

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              During asynchronous loading, a request is sent to the server, which contains the identify of the parent node, + so it can retrieve the children. + This attribute is an array of strings, which is the identity parameter (or parameters). + It applies when [setting.async.enable = true]

              +

              Default:[ ]

              +
              +
              +

              Array(String) Format

              +
              +

              1. Put the attribute name(s) of node to the array. For example: ["id", "name"]

              +

              2. You can rename the parameter name as sent to the server. For example: server only accepts "zId" -- ["id=zId"]

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              Parent node's JSON data object

              +

              When asynchronously loading the root, the treeNode = null

              +

              Return Array(String)

              +

              Return value is same as 'Array(String) Format'

              +
              +

              Examples of setting

              +

              1. set auto commit 'id' attribute

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		autoParam: ["id"]
              +	}
              +};
              +If 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
              +......
              +

              2. set auto commit 'id' attribute, but the parameter name expected by the server is 'zId'

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		autoParam: ["id=zId"]
              +	}
              +};
              +If 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
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.contentType.html b/src/main/resources/static/lib/ztree/api/en/setting.async.contentType.html new file mode 100644 index 0000000..c9e1509 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.contentType.html @@ -0,0 +1,30 @@ +
              +
              +

              Stringsetting.async.contentType

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              When Ajax sends data to the server, it uses this content-type. + It is used when [setting.async.enable = true]

              +

              Default:"application/x-www-form-urlencoded"

              +
              +
              +

              String Format

              +
              +

              contentType = "application/x-www-form-urlencoded", means: the sending data format is "form" format.

              +

              contentType = "application/json", means: the sending data format is "json" format. (for .Net)

              +
              +

              Examples of setting

              +

              1. set the sending data format to "json" format.

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		contentType: "application/json",
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.dataFilter.html b/src/main/resources/static/lib/ztree/api/en/setting.async.dataFilter.html new file mode 100644 index 0000000..4347a08 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.dataFilter.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(treeId, parentNode, responseData)setting.async.dataFilter

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback function to pre-process Ajax return data. It is valid when [setting.async.enable = true]

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId

              +

              parentNodeJSON

              +

              Parent node's JSON data object

              +

              When asynchronously loading the root, the parentNode = null

              +

              responseDataArray(JSON) / JSON / String

              +

              Array (JSON) / JSON / String data objects

              +

              From v3.4, support XML strings.

              +

              Return Array(JSON) / JSON

              +

              The return value should be the JSON data structure which is supported by the zTree.

              +

              v3.x supports to load single node JSON data object.

              +
              +

              Examples of setting & function

              +

              1. Modify the node name attributes returned by an Ajax request.

              +
              function ajaxDataFilter(treeId, parentNode, responseData) {
              +    if (responseData) {
              +      for(var i =0; i < responseData.length; i++) {
              +        responseData[i].name += "_filter";
              +      }
              +    }
              +    return responseData;
              +};
              +var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		dataFilter: ajaxDataFilter
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.dataType.html b/src/main/resources/static/lib/ztree/api/en/setting.async.dataType.html new file mode 100644 index 0000000..41db300 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.dataType.html @@ -0,0 +1,29 @@ +
              +
              +

              Stringsetting.async.dataType

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The data type of Ajax requests. It is valid when [setting.async.enable = true]

              +

              Default:"text"

              +
              +
              +

              String Format

              +
              +

              dataType = "text", There is probably no need to change this.

              +

              The 'dataType' in zTree and jQuery's ajax requests is same.

              +
              +

              Examples of setting

              +

              1. Set the dataType which ajax retrieves to "text".

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		dataType: "text",
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.enable.html b/src/main/resources/static/lib/ztree/api/en/setting.async.enable.html new file mode 100644 index 0000000..c284476 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.enable.html @@ -0,0 +1,30 @@ +
              +
              +

              Booleansetting.async.enable

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set zTree asynchronous loading mode on/off.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true - turn on asynchronous loading mode

              +

              false - turn off asynchronous loading mode

              +

              If set it is true, you must set other attributes in setting.async

              +

              If you don't pass the 'treeNodes' parameter when you initialize zTree, the root nodes will be retrieved using ajax.

              +
              +

              Examples of setting

              +

              1. Turn on asynchronous loading mode

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.headers.html b/src/main/resources/static/lib/ztree/api/en/setting.async.headers.html new file mode 100644 index 0000000..e719583 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.headers.html @@ -0,0 +1,18 @@ +
              +
              +

              Objectsetting.async.headers

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              It is valid when [setting.async.enable = true]

              +

              Default:"{}"

              +

              v3.5.36+

              +
              +
              +

              String Format

              +
              +

              The 'headers' in zTree and jQuery's ajax requests is same.

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.otherParam.html b/src/main/resources/static/lib/ztree/api/en/setting.async.otherParam.html new file mode 100644 index 0000000..cf8faa3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.otherParam.html @@ -0,0 +1,50 @@ +
              +
              +

              Array(String) / JSON / Function(treeId, treeNode)setting.async.otherParam

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The query parameters of the Ajax request. (key - value) It is valid when [setting.async.enable = true]

              +

              Default: [ ]

              +
              +
              +

              Array(String) Format

              +
              +

              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!!)

              +
              +

              JSON Format

              +
              +

              Use JSON hash data to set the key-value pairs. e.g. { key1:value1, key2:value2 }

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              Parent node's JSON data object

              +

              When asynchronously loading the root, the treeNode = null

              +

              Return Array(String) || JSON

              +

              Return value is same as 'Array(String) || JSON Format'

              +
              +

              Examples of setting

              +

              1. Using Array(String) Format

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		otherParam: ["id", "1", "name", "test"]
              +	}
              +};
              +when zTree sends the ajax request, the query string will be like this: id=1&name=test
              +

              2. Using JSON data Format

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "http://host/getNode.php",
              +		otherParam: { "id":"1", "name":"test"}
              +	}
              +};
              +when zTree sends the ajax request, the query string will be like this: id=1&name=test
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.type.html b/src/main/resources/static/lib/ztree/api/en/setting.async.type.html new file mode 100644 index 0000000..c67599a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.type.html @@ -0,0 +1,30 @@ +
              +
              +

              Stringsetting.async.type

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Http request tyoe in ajax. It is valid when [setting.async.enable = true]

              +

              Default: "post"

              +
              +
              +

              String Format

              +
              +

              "post" - http request mode

              +

              "get" - http request mode

              +

              Both zTree and jQuery's this 'type' for ajax requests.

              +
              +

              Examples of setting

              +

              1. Set http request mode is 'get'

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		type: "get",
              +		url: "http://host/getNode.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.url.html b/src/main/resources/static/lib/ztree/api/en/setting.async.url.html new file mode 100644 index 0000000..2384c08 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.url.html @@ -0,0 +1,50 @@ +
              +
              +

              String / Function(treeId, treeNode)setting.async.url

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The URL to which the ajax request is sent. It is valid when [setting.async.enable = true]

              +

              Default: ""

              +
              +
              +

              String Format

              +
              +

              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

              +

              Url can also take parameters, please note that they need to be urlencoded.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              Parent node's JSON data object

              +

              When asynchronously loading the root, the treeNode = null

              +

              Return String

              +

              Return value is same as 'String Format'

              +
              +

              Examples of setting & function

              +

              1. set ajax url is "nodes.php"

              +
              var setting = {
              +	async: {
              +		enable: true,
              +		url: "nodes.php",
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +

              2. set ajax url is "function"

              +
              function getAsyncUrl(treeId, treeNode) {
              +    return treeNode.isParent ? "nodes1.php" : "nodes2.php";
              +};
              +var setting = {
              +	async: {
              +		enable: true,
              +		url: getAsyncUrl,
              +		autoParam: ["id", "name"]
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.async.xhrFields.html b/src/main/resources/static/lib/ztree/api/en/setting.async.xhrFields.html new file mode 100644 index 0000000..d1588cf --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.async.xhrFields.html @@ -0,0 +1,18 @@ +
              +
              +

              Objectsetting.async.xhrFields

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              It is valid when [setting.async.enable = true]

              +

              Default:"{}"

              +

              v3.5.36+

              +
              +
              +

              String Format

              +
              +

              The 'xhrFields' in zTree and jQuery's ajax requests is same.

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeAsync.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeAsync.html new file mode 100644 index 0000000..55f52ee --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeAsync.html @@ -0,0 +1,36 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeAsync

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              This callback is made before zTree makes an ajax request, giving you an opportunity to decide if it should proceed or not. + Return false to prevent zTree from sending the ajax request.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the parent node

              +

              When asynchronously loading the root, treeNode = null

              +

              Return Boolean

              +

              return true or false

              +

              If the function returns false, zTree will not send the ajax request, and will not trigger the 'onAsyncSuccess / onAsyncError' callback.

              +
              +

              Examples of setting & function

              +

              1. If the parent node's attribute 'id' is 1, don't send the ajax request.

              +
              function myBeforeCallBack(treeId, treeNode) {
              +    return (treeNode.id !== 1);
              +};
              +var setting = {
              +	callback: {
              +		beforeAsync: myBeforeCallBack
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCheck.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCheck.html new file mode 100644 index 0000000..b2d71e5 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCheck.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeCheck

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Callback before checking or unchecking a node, A false return value from the callback will prevent any change in the checked state.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is checked or unchecked

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not change the checkbox state, and will not trigger the 'onCheck' callback.

              +
              +

              Examples of setting & function

              +

              1. This example returns false, preventing all checkboxes in the tree from toggling.

              +
              function myBeforeCheckCallBack(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeCheck: myBeforeCheckCallBack
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeClick.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeClick.html new file mode 100644 index 0000000..250416b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeClick.html @@ -0,0 +1,49 @@ +
              +
              +

              Function(treeId, treeNode, clickFlag)setting.callback.beforeClick

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Before click callback, return false to prevent the 'onClick' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is clicked

              +

              clickFlagNumber

              +

              Node is selected or deselected state, please see table below for details

              + + + + + + + + + + + + +
              clickFlagselectedMultiautoCancelSelected
              &&
              event.ctrlKey / metaKey
              isSelectedoperate for selected
              1truefalsefalsenode is selected (single)
              1truefalsetruenode is selected (single)
              2truetruefalsenode is selected (multi)
              0truetruetruenode is deselected
              1falsefalsefalsenode is selected (single)
              1falsefalsetruenode is selected (single)
              1falsetruefalsenode is selected (single)
              0falsetruetruenode is deselected
              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not change selected state, and will not trigger the 'onClick' callback.

              +
              +

              Examples of setting & function

              +

              1. disabled to click the node

              +
              function myBeforeClick(treeId, treeNode, clickFlag) {
              +    return (treeNode.id !== 1);
              +};
              +var setting = {
              +	callback: {
              +		beforeClick: myBeforeClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCollapse.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCollapse.html new file mode 100644 index 0000000..950b728 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeCollapse.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeCollapse

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Specify callback function to be called before collapse node, The return value controls the collapse node.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be collapsed

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not collapse node, and will not trigger the 'onCollapse' callback.

              +
              +

              Examples of setting & function

              +

              1. disabled to collapse node which is expanded

              +
              function myBeforeCollapse(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeCollapse: myBeforeCollapse
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDblClick.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDblClick.html new file mode 100644 index 0000000..3d4ead1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDblClick.html @@ -0,0 +1,36 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeDblClick

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Specify callback function, executed before the 'onDblClick' callback, The return value controls the 'onDblClick' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is double clicked

              +

              If the DOM which dblclicked isn't a node, it will return null.

              +

              Return Boolean

              +

              return true or false

              +

              If return false, ztree will not trigger the 'onDblClick' callback, no effect on other operations.

              +

              This callback function does not affect the auto expand of the parent node , please refer to setting.view.dblClickExpand properties.

              +
              +

              Examples of setting & function

              +

              1. disable to trigger the 'onDblClick' callback

              +
              function myBeforeDblClick(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeDblClick: myBeforeDblClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrag.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrag.html new file mode 100644 index 0000000..fca278d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrag.html @@ -0,0 +1,39 @@ +
              +
              +

              Function(treeId, treeNodes)setting.callback.beforeDrag

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Specify callback function to be called before the drag node callback, The return value controls whether the drag node callback will execute.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId, the id of the containing tree.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes being dragged

              +

              v3.x allows the drag and drop of multiple sibling nodes, so this parameter's type is changed to Array(JSON).

              +

              If the selected nodes aren't sibling nodes, you can only drag one node.

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will abort the drag and drop, and will not trigger the 'onDrag / beforeDrop / onDrop' sequence of callbacks.

              +
              +

              Examples of setting & function

              +

              1. disable drag completely (by returning false)

              +
              function myBeforeDrag(treeId, treeNodes) {
              +    return false;
              +};
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeDrag: myBeforeDrag
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDragOpen.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDragOpen.html new file mode 100644 index 0000000..d28bafe --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDragOpen.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeDragOpen

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Callback executed before drag node to collapsed parent node, The return value controls the auto expand behaviour of the parent node.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId, the tree is what the treeNode(parent node) is belong to.

              +

              treeNodeJSON

              +

              JSON data object of the parent node which will be auto expanded

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not auto expand parent node.

              +
              +

              Examples of setting & function

              +

              1. disable to auto expand parent node.

              +
              function myBeforeDragOpen(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeDragOpen: myBeforeDragOpen
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrop.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrop.html new file mode 100644 index 0000000..9b24475 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeDrop.html @@ -0,0 +1,50 @@ +
              +
              +

              Function(treeId, treeNodes, targetNode, moveType, isCopy)setting.callback.beforeDrop

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Specify callback function to be called before drag-drop of a node, The return value controls the execution of drag-drop callback.

              +

              Default: null

              +

              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.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId, the id of the containing tree.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which has been dragged

              +

              The treeNodes which have been dragged, when copying nodes or moving nodes.

              +

              targetNodeJSON

              +

              JSON data object of the destination node on which treeNodes are being dropped.

              +

              If the treeNodes is the root node, the targetNode = null

              +

              moveTypeString

              +

              the relative position of move to the target node

              +

              "inner": will be child of targetNode

              +

              "prev": will be sibling node, and be in front of targetNode

              +

              "next": will be sibling node, and be behind targetNode

              +

              isCopyBoolean

              +

              the flag used to determine if the drop is to copy or move the node

              +

              true: copy node; false: move node

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will restore the dragged nodes, and will not trigger the 'onDrop' callback.

              +
              +

              Examples of setting & function

              +

              1. disable to drag nodes to root

              +
              function myBeforeDrop(treeId, treeNodes, targetNode, moveType) {
              +    return !(targetNode == null || (moveType != "inner" && !targetNode.parentTId));
              +};
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeDrop: myBeforeDrop
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeEditName.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeEditName.html new file mode 100644 index 0000000..a820080 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeEditName.html @@ -0,0 +1,38 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeEditName

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Specify callback function to be called before click edit button, The return value controls the editing of the name.

              +

              This callback is fired when the edit button is clicked, to control the custom editing operation.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be edited.

              +

              Return Boolean

              +

              return true or false

              +

              If return false, allow editing of the name.

              +
              +

              Examples of setting & function

              +

              1. disable editing of any parent node's name

              +
              function myBeforeEditName(treeId, treeNode) {
              +	return !treeNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeEditName: myBeforeEditName
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeExpand.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeExpand.html new file mode 100644 index 0000000..8b0a6e7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeExpand.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeExpand

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Specify callback function to be called before expanding a node, The return value controls the expand node callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be expanded

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not expand node, and will not trigger the 'onExpand' callback.

              +
              +

              Examples of setting & function

              +

              1. disables expanding of all nodes

              +
              function myBeforeExpand(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeExpand: myBeforeExpand
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseDown.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseDown.html new file mode 100644 index 0000000..d27f431 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseDown.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeMouseDown

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Specify callback function, executed before the 'onMouseDown' callback, The return value controls the 'onMouseDown' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which mouse over

              +

              If the DOM which mouse over isn't a node, it will return null.

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not trigger the 'onMouseDown' callback, no effect on other operations.

              +
              +

              Examples of setting & function

              +

              1. disable to trigger the 'onMouseDown' callback

              +
              function myBeforeMouseDown(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeMouseDown: myBeforeMouseDown
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseUp.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseUp.html new file mode 100644 index 0000000..e7d10de --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeMouseUp.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeMouseUp

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Specify callback function, executed before the 'onMouseUp' callback, The return value controls the 'onMouseUp' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which mouse over

              +

              If the DOM which mouse over isn't a node, it will return null.

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not trigger the 'onMouseUp' callback, no effect on other operations.

              +
              +

              Examples of setting & function

              +

              1. disable to trigger the 'onMouseUp' callback

              +
              function myBeforeMouseUp(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeMouseUp: myBeforeMouseUp
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRemove.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRemove.html new file mode 100644 index 0000000..0e155d4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRemove.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeRemove

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Specify callback function to be called before remove node, The return value controls the allow to remove node.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be removed.

              +

              Return Boolean

              +

              return true or false

              +

              If return false, zTree will not remove node, and will not trigger the 'onRemove' callback.

              +
              +

              Examples of setting & function

              +

              1. disable to remove node

              +
              function myBeforeRemove(treeId, treeNode) {
              +	return false;
              +}
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeRemove: myBeforeRemove
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRename.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRename.html new file mode 100644 index 0000000..bfed144 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRename.html @@ -0,0 +1,46 @@ +
              +
              +

              Function(treeId, treeNode, newName, isCancel)setting.callback.beforeRename

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              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.

              +

              When node is editing name, press the ESC key to restore the original name and stop edit name.

              +

              From v3.5.13, zTree will trigger this callback when user cancel edit name. please see 'isCancel' parameter.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be rename.

              +

              newNameString

              +

              the new name

              +

              isCancelBoolean

              +

              the status about cancel edit name (v3.5.13+)

              +

              isCancel = true means: user cancel edit name. (press ESC or use cancelEditName() function)

              +

              isCancel = false means: user submit edit name.

              +

              Return Boolean

              +

              return true or false

              +

              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.

              +

              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.

              +
              +

              Examples of setting & function

              +

              1. the length of the new name can't less than 5

              +
              function myBeforeRename(treeId, treeNode, newName, isCancel) {
              +	return newName.length > 5;
              +}
              +var setting = {
              +	edit: {
              +		enable: true
              +	},
              +	callback: {
              +		beforeRename: myBeforeRename
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRightClick.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRightClick.html new file mode 100644 index 0000000..9d05a0b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.beforeRightClick.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeId, treeNode)setting.callback.beforeRightClick

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to capture the right click event before the 'onRightClick' callback, The return value controls the 'onRightClick' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is mouse right clicked

              +

              If the DOM which mouse right clicked isn't a node, it will return null.

              +

              ReturnBoolean

              +

              return true or false

              +

              If return false, ztree will not trigger the 'onRightClick' callback, no effect on other operations.

              +
              +

              Examples of setting & function

              +

              1. disable to trigger the 'onRightClick' callback

              +
              function myBeforeRightClick(treeId, treeNode) {
              +    return false;
              +};
              +var setting = {
              +	callback: {
              +		beforeRightClick: myBeforeRightClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncError.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncError.html new file mode 100644 index 0000000..239f3ff --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncError.html @@ -0,0 +1,42 @@ +
              +
              +

              setting.callback.onAsyncError

              +

              Function(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) 

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to capture the error event when execute ajax.

              +

              If you set 'setting.callback.beforeAsync',and return false, zTree will not execute ajax, and will not trigger the 'onAsyncSuccess / onAsyncError' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the parent node

              +

              When load root nodes, treeNode = null

              +

              XMLHttpRequestString

              +

              XMLHttpRequest Object, please refer to JQuery API documentation.

              +

              textStatusString

              +

              a string categorizing the status of the request("success", "error"...), please refer to JQuery API documentation.

              +

              errorThrownString

              +

              eWhen an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, please refer to JQuery API documentation.

              +
              +

              Examples of setting & function

              +

              1. When execute ajax make error, alert message.

              +
              function myOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
              +    alert(XMLHttpRequest);
              +};
              +var setting = {
              +	callback: {
              +		onAsyncError: myOnAsyncError
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncSuccess.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncSuccess.html new file mode 100644 index 0000000..b8deca5 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onAsyncSuccess.html @@ -0,0 +1,38 @@ +
              +
              +

              Function(event, treeId, treeNode, msg)setting.callback.onAsyncSuccess

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to capture the complete success event when execute ajax.

              +

              If you set 'setting.callback.beforeAsync',and return false, zTree will not execute ajax, and will not trigger the 'onAsyncSuccess / onAsyncError' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the parent node

              +

              When load root nodes, treeNode = null

              +

              msgString / Object

              +

              The actualnode data which got by ajax. User-friendly debugging.

              +

              The actual data's type of msg is affected by 'setting.async.dataType', please refer to JQuery API documentation.

              +
              +

              Examples of setting & function

              +

              1. When execute ajax complete success, alert message.

              +
              function myOnAsyncSuccess(event, treeId, treeNode, msg) {
              +    alert(msg);
              +};
              +var setting = {
              +	callback: {
              +		onAsyncSuccess: myOnAsyncSuccess
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onCheck.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onCheck.html new file mode 100644 index 0000000..eadfadc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onCheck.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onCheck

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Used to capture the check or uncheck event when check or uncheck the checkbox and radio.

              +

              If you set 'setting.callback.beforeCheck',and return false, zTree will not change check state, and will not trigger the 'onCheck' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is checked or unchecked

              +
              +

              Examples of setting & function

              +

              1. When check or uncheck the checkbox and radio, alert info about 'tId' and 'name' and 'checked'.

              +
              function myOnCheck(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name + "," + treeNode.checked);
              +};
              +var setting = {
              +	callback: {
              +		onCheck: myOnCheck
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onClick.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onClick.html new file mode 100644 index 0000000..537dbe0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onClick.html @@ -0,0 +1,49 @@ +
              +
              +

              Function(event, treeId, treeNode, clickFlag)setting.callback.onClick

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to capture the click event when click node.

              +

              If you set 'setting.callback.beforeClick',and return false, zTree will not change selected state, and will not trigger the 'onClick' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is clicked

              +

              clickFlagNumber

              +

              Node is selected or deselected state, please see table below for details

              + + + + + + + + + + + + +
              clickFlagselectedMultiautoCancelSelected
              &&
              event.ctrlKey / metaKey
              isSelectedoperate for selected
              1truefalsefalsenode is selected (single)
              1truefalsetruenode is selected (single)
              2truetruefalsenode is selected (multi)
              0truetruetruenode is deselected
              1falsefalsefalsenode is selected (single)
              1falsefalsetruenode is selected (single)
              1falsetruefalsenode is selected (single)
              0falsetruetruenode is deselected
              +
              +

              Examples of setting & function

              +

              1. When click node, alert info about 'tId' and 'name'.

              +
              function myOnClick(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onClick: myOnClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onCollapse.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onCollapse.html new file mode 100644 index 0000000..d62f3fe --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onCollapse.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onCollapse

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback for collapse node.

              +

              If you set 'setting.callback.beforeCollapse',and return false, zTree will not collapse node, and will not trigger the 'onCollapse' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be collapsed

              +
              +

              Examples of setting & function

              +

              1. When collapse node, alert info about 'tId' and 'name'.

              +
              function myOnCollapse(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onCollapse: myOnCollapse
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onDblClick.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDblClick.html new file mode 100644 index 0000000..d59602c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDblClick.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onDblClick

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to capture the dblclick event when double click node.

              +

              If you set 'setting.callback.beforeDblClick',and return false, zTree will not trigger the 'onDblClick' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is double clicked

              +

              If the DOM which dblclicked isn't a node, it will return null.

              +
              +

              Examples of setting & function

              +

              1. When double click node, alert info about 'tId' and 'name'.

              +
              function myOnDblClick(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onDblClick: myOnDblClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onDrag.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDrag.html new file mode 100644 index 0000000..7c975bc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDrag.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNodes)setting.callback.onDrag

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to capture the drag event when drag node.

              +

              If you set 'setting.callback.beforeDrag',and return false, zTree will stop drag, and will not trigger the 'onDragMove' & 'onDrag' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId, the id of the containing tree.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which will be dragged

              +
              +

              Examples of setting & function

              +

              1. When drag nodes, alert the number of dragged nodes.

              +
              function myOnDrag(event, treeId, treeNodes) {
              +    alert(treeNodes.length);
              +};
              +var setting = {
              +	callback: {
              +		onDrag: myOnDrag
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onDragMove.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDragMove.html new file mode 100644 index 0000000..b8596b9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDragMove.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNodes)setting.callback.onDragMove

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to capture the drag-move event when drag & drop node.

              +

              Mainly used to capture the DOM which the nodes was drag in.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId, the id of the containing tree.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which will be dragged

              +
              +

              Examples of setting & function

              +

              1. When drag nodes, output the target dom.

              +
              function myOnDragMove(event, treeId, treeNodes) {
              +	console.log(event.target);
              +};
              +var setting = {
              +	callback: {
              +		onDragMove: myOnDragMove
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onDrop.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDrop.html new file mode 100644 index 0000000..475526d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onDrop.html @@ -0,0 +1,48 @@ +
              +
              +

              Function(event, treeId, treeNodes, targetNode, moveType, isCopy)setting.callback.onDrop

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to capture the drop event when drag-drop node.

              +

              If you set 'setting.callback.beforeDrop',and return false, zTree will restore the dragged nodes, and will not trigger the 'onDrop' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId, the id of the containing tree.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which has been dragged

              +

              The treeNodes are the data of the nodes which be dragged, when move nodes.

              +

              The treeNodes are the clone data of the nodes which be dragged, when copy nodes.

              +

              targetNodeJSON

              +

              JSON data object of the target node which treeNodes are drag-dropped.

              +

              If the treeNodes will be root node, the targetNode = null

              +

              moveTypeString

              +

              the relative position of move to the target node

              +

              "inner": will be child of targetNode

              +

              "prev": will be sibling node, and be in front of targetNode

              +

              "next": will be sibling node, and be behind targetNode

              +

              If moveType is null, means drag & drop is cancel.

              +

              isCopyBoolean

              +

              the flag used to judge copy node or move node

              +

              true: copy node; false: move node

              +
              +

              Examples of setting & function

              +

              1. When drag-drop nodes complete, alert the number of dragged nodes and info about targetNode.

              +
              function myOnDrop(event, treeId, treeNodes, targetNode, moveType) {
              +    alert(treeNodes.length + "," + (targetNode ? (targetNode.tId + ", " + targetNode.name) : "isRoot" ));
              +};
              +var setting = {
              +	callback: {
              +		onDrop: myOnDrop
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onExpand.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onExpand.html new file mode 100644 index 0000000..70024fe --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onExpand.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onExpand

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback for expand node.

              +

              If you set 'setting.callback.beforeExpand',and return false, zTree will not expand node, and will not trigger the 'onExpand' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node to be expanded

              +
              +

              Examples of setting & function

              +

              1. When expand node, alert info about 'tId' and 'name'.

              +
              function myOnExpand(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onExpand: myOnExpand
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseDown.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseDown.html new file mode 100644 index 0000000..255469f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseDown.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onMouseDown

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback for mouse down.

              +

              If you set 'setting.callback.beforeMouseDown',and return false, zTree will not trigger the 'onMouseDown' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which mouse over

              +

              If the DOM which mouse over isn't a node, it will return null.

              +
              +

              Examples of setting & function

              +

              1. When mouse down, alert info about 'tId' and 'name'.

              +
              function myOnMouseDown(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onMouseDown: myOnMouseDown
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseUp.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseUp.html new file mode 100644 index 0000000..84e06a9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onMouseUp.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onMouseUp

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback for mouse up.

              +

              If you set 'setting.callback.beforeMouseUp',and return false, zTree will not trigger the 'onMouseUp' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which mouse over

              +

              If the DOM which mouse over isn't a node, it will return null.

              +
              +

              Examples of setting & function

              +

              1. When mouse up, alert info about 'tId' and 'name'.

              +
              function myOnMouseUp(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onMouseUp: myOnMouseUp
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onNodeCreated.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onNodeCreated.html new file mode 100644 index 0000000..4e5c8ae --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onNodeCreated.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onNodeCreated

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback for node's DOM is created.

              +

              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.

              +

              Large amount of data to load, please note: do not set onNodeCreated, can improve performance as when initialized.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which DOM is created

              +
              +

              Examples of setting & function

              +

              1. When node's DOM is created, alert info about 'tId' and 'name'.

              +
              function myOnNodeCreated(event, treeId, treeNode) {
              +    alert(treeNode.tId + ", " + treeNode.name);
              +};
              +var setting = {
              +	callback: {
              +		onNodeCreated: myOnNodeCreated
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onRemove.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onRemove.html new file mode 100644 index 0000000..37ed1f7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onRemove.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onRemove

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Callback for remove node.

              +

              If you set 'setting.callback.beforeRemove',and return false, zTree will not remove node, and will not trigger the 'onRemove' callback.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which was removed.

              +
              +

              Examples of setting & function

              +

              1. When remove node, alert info about 'tId' and 'name'.

              +
              function myOnRemove(event, treeId, treeNode) {
              +	alert(treeNode.tId + ", " + treeNode.name);
              +}
              +var setting = {
              +	callback: {
              +		onRemove: myOnRemove
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onRename.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onRename.html new file mode 100644 index 0000000..c83206f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onRename.html @@ -0,0 +1,40 @@ +
              +
              +

              Function(event, treeId, treeNode, isCancel)setting.callback.onRename

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Callback for remove node.

              +

              1. If you set 'setting.callback.beforeRename',and return false, zTree will keep the editing name, and will not trigger the 'onRename' callback.

              +

              2. If you modify treeNode data, and use 'updateNode' function, zTree will not trigger the 'onRename' callback.

              +

              3. From v3.5.13, zTree will trigger this callback when user cancel edit name. please see 'isCancel' parameter.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which was rename.

              +

              isCancelBoolean

              +

              the status about cancel edit name (v3.5.13+)

              +

              isCancel = true means: user cancel edit name. (press ESC or use cancelEditName() function)

              +

              isCancel = false means: user submit edit name.

              +
              +

              Examples of setting & function

              +

              1. When rename node, alert info about 'tId' and 'name'.

              +
              function myOnRename(event, treeId, treeNode, isCancel) {
              +	alert(treeNode.tId + ", " + treeNode.name);
              +}
              +var setting = {
              +	callback: {
              +		onRename: myOnRename
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.callback.onRightClick.html b/src/main/resources/static/lib/ztree/api/en/setting.callback.onRightClick.html new file mode 100644 index 0000000..110c952 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.callback.onRightClick.html @@ -0,0 +1,36 @@ +
              +
              +

              Function(event, treeId, treeNode)setting.callback.onRightClick

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Callback for mouse right click node.

              +

              If you set 'setting.callback.beforeRightClick',and return false, zTree will not trigger the 'onRightClick' callback.

              +

              If you set 'setting.callback.onRightClick', zTree will shield the browser context menu when mouse right click on zTree.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              eventjs event Object

              +

              event Object

              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which is mouse right clicked

              +

              If the DOM which mouse right clicked isn't a node, it will return null.

              +
              +

              Examples of setting & function

              +

              1. When mouse right click node, alert info about 'tId' and 'name'.

              +
              function myOnRightClick(event, treeId, treeNode) {
              +    alert(treeNode ? treeNode.tId + ", " + treeNode.name : "isRoot");
              +};
              +var setting = {
              +	callback: {
              +		onRightClick: myOnRightClick
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.autoCheckTrigger.html b/src/main/resources/static/lib/ztree/api/en/setting.check.autoCheckTrigger.html new file mode 100644 index 0000000..b8b04cc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.autoCheckTrigger.html @@ -0,0 +1,29 @@ +
              +
              +

              Booleansetting.check.autoCheckTrigger

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              When node is automatically checked or unchecked, this parameter used to set to trigger 'beforeCheck / onCheck' callback. It is valid when [setting.check.enable = true & setting.check.chkStyle = "checkbox"]

              +

              1. If you set 'setting.check.chkboxType' to { "Y": "", "N": "" }, will not automatically checked or unchecked.

              +

              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.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: trigger callback

              +

              false means: don't trigger callback

              +
              +

              Examples of setting

              +

              1. When node is automatically checked or unchecked, zTree trigger 'beforeCheck / onCheck' callback.

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		autoCheckTrigger: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.chkDisabledInherit.html b/src/main/resources/static/lib/ztree/api/en/setting.check.chkDisabledInherit.html new file mode 100644 index 0000000..98d824e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.chkDisabledInherit.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.check.chkDisabledInherit

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              When the parent node's 'chkDisabled' attribute is true, set the child nodes automatically inherit the 'chkDisabled' attribute. It is valid when [setting.check.enable = true]

              +

              1. Only be used to initialize the nodes, easy batch operations. Please use the 'updateNode' method modify existing node.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: When add new child nodes, if parent node's 'chkDisabled' attribute is true, the child nodes automatically inherit the 'chkDisabled' attribute.

              +

              false means: When add new child nodes, the child nodes don't inherit the 'chkDisabled' attribute from parent node.

              +
              +

              Examples of setting

              +

              1. When add new child nodes, the child nodes automatically inherit the 'chkDisabled' attribute from parent node.

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkDisabledInherit: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.chkStyle.html b/src/main/resources/static/lib/ztree/api/en/setting.check.chkStyle.html new file mode 100644 index 0000000..d42e757 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.chkStyle.html @@ -0,0 +1,48 @@ +
              +
              +

              Stringsetting.check.chkStyle

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Use the checkbox or radio. It is valid when [setting.check.enable = true]

              +

              Default: "checkbox"

              +
              +
              +

              String Format

              +
              +

              When chkStyle = "checkbox", zTree show checkbox, and 'setting.check.chkboxType' attribute is valid. +
              When chkStyle = "radio", zTree show radio, and 'setting.check.radioType' attribute is valid.

              +

              Please note that letter case, do not change.

              +
              +

              checkbox States Descriptions

              +
              +

              +
              +

              not checked; If node is parent, so its child nodes have been not checked. when mouse over:

              +

              not checked; (only parent node) some of its child nodes have been checked. when mouse over:

              +

              be checked; If node is parent, so its all child nodes have been checked. when mouse over:

              +

              be checked; (only parent node) some of its child nodes or all have been not checked. when mouse over:

              +
              +
              +

              radio States Descriptions

              +
              +

              +
              +

              not checked; If node is parent, so its child have been not checked. when mouse over:

              +

              not checked; (only parent node) some of its child have been checked. when mouse over:

              +

              be checked; If node is parent, so its child have been not checked. when mouse over:

              +

              be checked; (only parent node) some of its child have been checked. when mouse over:

              +
              +
              +

              Examples of setting

              +

              1. use radio

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkStyle: "radio"
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.chkboxType.html b/src/main/resources/static/lib/ztree/api/en/setting.check.chkboxType.html new file mode 100644 index 0000000..5cecc9e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.chkboxType.html @@ -0,0 +1,31 @@ +
              +
              +

              JSONsetting.check.chkboxType

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              When one node is checked or unchecked, control its parent node and its child node auto checked or unchecked. It is valid when [setting.check.enable = true & setting.check.chkStyle = "checkbox"]

              +

              Default: { "Y": "ps", "N": "ps" }

              +
              +
              +

              JSON Format

              +
              +

              "Y" attribute use to set auto check after checkbox was checked. +
              "N" attribute use to set auto uncheck after checkbox was unchecked. +
              If value has "p", so parent nodes will be checked or unchecked. +
              If value has "s", so child nodes will be checked or unchecked.

              +

              Please note that letter case, do not change.

              +
              +

              Examples of setting

              +

              1. If check the node, so only auto check parent nodes; If uncheck the node, so only auto uncheck child nodes;

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkStyle: "checkbox",
              +		chkboxType: { "Y": "p", "N": "s" }
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.enable.html b/src/main/resources/static/lib/ztree/api/en/setting.check.enable.html new file mode 100644 index 0000000..0236b5f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.enable.html @@ -0,0 +1,26 @@ +
              +
              +

              Booleansetting.check.enable

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Set to use checkbox or radio in zTree

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: use the checkbox or radio

              +

              false means: don't use the checkbox or radio

              +
              +

              Examples of setting

              +

              1. use the checkbox

              +
              var setting = {
              +	check: {
              +		enable: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.nocheckInherit.html b/src/main/resources/static/lib/ztree/api/en/setting.check.nocheckInherit.html new file mode 100644 index 0000000..758b437 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.nocheckInherit.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.check.nocheckInherit

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              When the parent node's 'nocheck' attribute is true, set the child nodes automatically inherit the 'nocheck' attribute. It is valid when [setting.check.enable = true]

              +

              1. Only be used to initialize the nodes, easy batch operations. Please use the 'updateNode' method modify existing node.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: When add new child nodes, if parent node's 'nocheck' attribute is true, the child nodes automatically inherit the 'nocheck' attribute.

              +

              false means: When add new child nodes, the child nodes don't inherit the 'nocheck' attribute from parent node.

              +
              +

              Examples of setting

              +

              1. When add new child nodes, the child nodes automatically inherit the 'nocheck' attribute from parent node.

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		nocheckInherit: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.check.radioType.html b/src/main/resources/static/lib/ztree/api/en/setting.check.radioType.html new file mode 100644 index 0000000..be867d7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.check.radioType.html @@ -0,0 +1,29 @@ +
              +
              +

              Stringsetting.check.radioType

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              The group about radio. It is valid when [setting.check.enable = true & setting.check.chkStyle = "radio"]

              +

              Default: "level"

              +
              +
              +

              String Format

              +
              +

              When radioType = "level", will be grouped with same level nodes which have the same parent node. +
              When radioType = "all", will be grouped with all nodes.

              +

              Please note that letter case, do not change.

              +
              +

              Examples of setting

              +

              1. Set the group about radio is all nodes.

              +
              var setting = {
              +	check: {
              +		enable: true,
              +		chkStyle: "radio",
              +		radioType: "all"
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.keep.leaf.html b/src/main/resources/static/lib/ztree/api/en/setting.data.keep.leaf.html new file mode 100644 index 0000000..71c573e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.keep.leaf.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.data.keep.leaf

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The leaf node's lock, the leaf node will lock the 'isParent' attribute to false.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: lock the leaf node, and the node which 'isParent' attribute is false can't add child nodes.

              +

              false means: don't lock the leaf node, and the node which 'isParent' attribute is false can add child nodes.

              +
              +

              Examples of setting

              +

              1. lock the leaf node

              +
              var setting = {
              +	data: {
              +		keep: {
              +			leaf: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.keep.parent.html b/src/main/resources/static/lib/ztree/api/en/setting.data.keep.parent.html new file mode 100644 index 0000000..5bab2f1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.keep.parent.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.data.keep.parent

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The parent node's lock, the parent node will lock 'isParent' attribute to true.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: lock the parent node, and if remove all of the parent node's child nodes, its 'isParent' attribute still keep to be true..

              +

              false means: don't lock the parent node, and if remove all of the parent node's child nodes, its 'isParent' attribute will change to be false..

              +
              +

              Examples of setting

              +

              1. lock the parent node

              +
              var setting = {
              +	data: {
              +		keep: {
              +			parent: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.checked.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.checked.html new file mode 100644 index 0000000..2678cf2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.checked.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.checked

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              The node data's attribute to save the checked state.

              +

              Default: "checked"

              +

              Please don't set the other node attribute which zTree used. (e.g., checkedOld)

              +
              +
              +

              Examples of setting

              +

              1. set the 'isChecked' attribute to save the checked state.

              +
              var setting = {
              +	data: {
              +		key: {
              +			checked: "isChecked"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.children.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.children.html new file mode 100644 index 0000000..321a1a7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.children.html @@ -0,0 +1,23 @@ +
              +
              +

              Stringsetting.data.key.children

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save the child nodes.

              +

              Default: "children"

              +
              +
              +

              Examples of setting

              +

              1. Set the 'nodes' attribute to save the child nodes.

              +
              var setting = {
              +	data: {
              +		key: {
              +			children: "nodes"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.isHidden.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.isHidden.html new file mode 100644 index 0000000..a275d30 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.isHidden.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.isHidden

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save whether the node is the parent node.

              +

              Default: "isHidden"

              +

              v3.5.32+

              +
              +
              +

              Examples of setting

              +

              1. Set the 'hidden' attribute to save whether the node is the parent node.

              +
              var setting = {
              +	data: {
              +		key: {
              +			isHidden: "hidden"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.isParent.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.isParent.html new file mode 100644 index 0000000..37940ca --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.isParent.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.isParent

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save whether the node is the parent node.

              +

              Default: "isParent"

              +

              v3.5.32+

              +
              +
              +

              Examples of setting

              +

              1. Set the 'parent' attribute to save whether the node is the parent node.

              +
              var setting = {
              +	data: {
              +		key: {
              +			isParent: "parent"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.name.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.name.html new file mode 100644 index 0000000..0208c55 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.name.html @@ -0,0 +1,23 @@ +
              +
              +

              Stringsetting.data.key.name

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save the node name.

              +

              Default: "name"

              +
              +
              +

              Examples of setting

              +

              1. Set the 'ename' attribute to save the node name.

              +
              var setting = {
              +	data: {
              +		key: {
              +			name: "ename"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.title.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.title.html new file mode 100644 index 0000000..96540eb --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.title.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.title

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save the 'title' attribute of node DOM. It is valid when [setting.view.showTitle = true]

              +

              If set it to "", the title of node DOM will be same as 'setting.data.key.name' attribute.

              +

              Default: ""

              +
              +
              +

              Examples of setting

              +

              1. Set the 'fullName' attribute to save the title of node DOM.

              +
              var setting = {
              +	data: {
              +		key: {
              +			title: "fullName"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.key.url.html b/src/main/resources/static/lib/ztree/api/en/setting.data.key.url.html new file mode 100644 index 0000000..e9a08ce --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.key.url.html @@ -0,0 +1,24 @@ +
              +
              +

              Stringsetting.data.key.url

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save the node link's url.

              +

              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.

              +

              Default: "url"

              +
              +
              +

              Examples of setting

              +

              1. Set the 'xUrl' attribute to save the node link's url.

              +
              var setting = {
              +	data: {
              +		key: {
              +			url: "xUrl"
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.enable.html b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.enable.html new file mode 100644 index 0000000..9bb56d1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.enable.html @@ -0,0 +1,39 @@ +
              +
              +

              Booleansetting.data.simpleData.enable

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set zTree's node to accept the simple data format, when zTree is initialized or when ajax get / or when use addNodes method.

              +

              Don't have to generate the complex nested data.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: zTree's node accept the simple data format.

              +

              false means: zTree's node only accept the nested data format.

              +

              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.

              +
              +

              Examples of setting

              +

              1. use the simple data format

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.idKey.html b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.idKey.html new file mode 100644 index 0000000..1216e0c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.idKey.html @@ -0,0 +1,32 @@ +
              +
              +

              Stringsetting.data.simpleData.idKey

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save node data's unique identifier. It is valid when [setting.data.simpleData.enable = true]

              +

              Default: "id"

              +
              +
              +

              Examples of setting

              +

              1. use the simple data format

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.pIdKey.html b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.pIdKey.html new file mode 100644 index 0000000..8378c6e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.pIdKey.html @@ -0,0 +1,32 @@ +
              +
              +

              Stringsetting.data.simpleData.pIdKey

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node data's attribute to save its parent node data's unique identifier. It is valid when [setting.data.simpleData.enable = true]

              +

              Default: "pId"

              +
              +
              +

              Examples of setting

              +

              1. use the simple data format

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.rootPId.html b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.rootPId.html new file mode 100644 index 0000000..61c9bbd --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.data.simpleData.rootPId.html @@ -0,0 +1,32 @@ +
              +
              +

              String / Numbersetting.data.simpleData.rootPId

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set the default value of root's 'pIdKey' specified attribute values​​. It is valid when [setting.data.simpleData.enable = true]

              +

              Default: null

              +
              +
              +

              Examples of setting

              +

              1. use the simple data format

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var treeNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoExpandTrigger.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoExpandTrigger.html new file mode 100644 index 0000000..804ee66 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoExpandTrigger.html @@ -0,0 +1,29 @@ +
              +
              +

              Booleansetting.edit.drag.autoExpandTrigger

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              When drag node cause the parent node is automatically expanded, set whether to allow to trigger the 'onExpand' callback. It is valid when [setting.edit.enable = true]

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: trigger the 'onExpand' callback.

              +

              false means: don't trigger the 'onExpand' callback.

              +
              +

              Examples of setting

              +

              1. Set to allow to trigger the 'onExpand' callback

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			autoExpandTrigger: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoOpenTime.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoOpenTime.html new file mode 100644 index 0000000..74982af --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.autoOpenTime.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.autoOpenTime

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Drag to the parent node, the parent node auto expand time interval. (Unit: ms) It is valid when [setting.edit.enable = true]

              +

              Default: 500

              +

              Please adjust the value according to needs.

              +
              +
              +

              Examples of setting

              +

              1. When drag node to other parent node, expand it at once.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			autoOpenTime: 0
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMax.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMax.html new file mode 100644 index 0000000..edbb752 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMax.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.borderMax

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              When drag a node to root, the zTree's inner border width. (Unit: px) It is valid when [setting.edit.enable = true]

              +

              Default: 10

              +

              Please adjust the value according to needs.

              +
              +
              +

              Examples of setting

              +

              1. adjust the inner border width is 20px

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			borderMax: 20
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMin.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMin.html new file mode 100644 index 0000000..e845853 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.borderMin.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.borderMin

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              When drag a node to root, the zTree's outer border width. (Unit: px) It is valid when [setting.edit.enable = true]

              +

              Default: -5

              +

              Please adjust the value according to needs.

              +
              +
              +

              Examples of setting

              +

              1. adjust the outer border width is 10px

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			borderMin: -10
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.inner.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.inner.html new file mode 100644 index 0000000..5258e2f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.inner.html @@ -0,0 +1,60 @@ +
              +
              +

              Boolean / Function(treeId, treeNodes, targetNode)setting.edit.drag.inner

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              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 [setting.edit.enable = true]

              +

              If the target node is root, so zTree will only trigger 'inner' and not trigger 'prev / next'.

              +

              This function mainly for the appropriate limit drag and drop (auxiliary arrow), it requires a combination of 'prev, next' together, to achieve full functionality.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: allow the node to be the target node's child.

              +

              false means: don't allow the node to be the target node's child.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which has been dragged

              +

              targetNodeJSON

              +

              JSON data object of the target node which treeNodes are draged over.

              +

              If the treeNodes will be root node, the targetNode = null

              +

              Return Boolean

              +

              return true or false

              +
              +

              Examples of setting & function

              +

              1. disable to drag the node to the target node's inner.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: true,
              +			inner: false
              +		}
              +	}
              +};
              +......
              +

              2. disable to drag the node to be root node's child.

              +
              function canInner(treeId, nodes, targetNode) {
              +	return !(targetNode && targetNode.level === 0);
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: true,
              +			inner: canInner
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isCopy.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isCopy.html new file mode 100644 index 0000000..1207d2a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isCopy.html @@ -0,0 +1,32 @@ +
              +
              +

              Booleansetting.edit.drag.isCopy

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              When drag-drop node, set whether to allow to copy node. It is valid when [setting.edit.enable = true]

              +

              Default: true

              +
              +
              +

              Rules Description

              +
              +

              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.

              +

              2. If isCopy = true and isMove = false, when drag-drop node, will copy node.

              +

              3. If isCopy = false and isMove = true, when drag-drop node, will move node.

              +

              4. If isCopy = false and isMove = false, so disable to drag-drop node.

              +
              +

              Examples of setting

              +

              1. all of the drag-drop operation will copy node.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			isCopy: true,
              +			isMove: false
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isMove.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isMove.html new file mode 100644 index 0000000..e4a7ca3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.isMove.html @@ -0,0 +1,32 @@ +
              +
              +

              Booleansetting.edit.drag.isMove

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              When drag-drop node, set whether to allow to move node. It is valid when [setting.edit.enable = true]

              +

              Default: true

              +
              +
              +

              Rules Description

              +
              +

              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.

              +

              2. If isCopy = true and isMove = false, when drag-drop node, will copy node.

              +

              3. If isCopy = false and isMove = true, when drag-drop node, will move node.

              +

              4. If isCopy = false and isMove = false, so disable to drag-drop node.

              +
              +

              Examples of setting

              +

              1. all of the drag-drop operation will move node.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			isCopy: false,
              +			isMove: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.maxShowNodeNum.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.maxShowNodeNum.html new file mode 100644 index 0000000..dbc3ae4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.maxShowNodeNum.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.maxShowNodeNum

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              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 [setting.edit.enable = true]

              +

              Default: 5

              +

              Please adjust the value according to needs.

              +
              +
              +

              Examples of setting

              +

              1. Set the maximum number is 10

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			maxShowNodeNum: 10
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.minMoveSize.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.minMoveSize.html new file mode 100644 index 0000000..8270a99 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.minMoveSize.html @@ -0,0 +1,25 @@ +
              +
              +

              Numbersetting.edit.drag.minMoveSize

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              The minimum offset which used to determine the drag operator start. (Unit: px) It is valid when [setting.edit.enable = true]

              +

              Please adjust the value according to needs. Note: If it is too small, will easily lead to misoperation when you click mouse.

              +

              Default: 5

              +
              +
              +

              Examples of setting

              +

              1. Set the minimum offset is 10px.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			minMoveSize: 10
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.next.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.next.html new file mode 100644 index 0000000..11323f1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.next.html @@ -0,0 +1,59 @@ +
              +
              +

              Boolean / Function(treeId, treeNodes, targetNode)setting.edit.drag.next

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              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 [setting.edit.enable = true]

              +

              If the target node is root, so zTree will only trigger 'inner' and not trigger 'prev / next'.

              +

              This function mainly for the appropriate limit drag and drop (auxiliary arrow), it requires a combination of 'prev, inner' together, to achieve full functionality.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: allow the node to be the target node's next sibling.

              +

              false means: don't allow the node to be the target node's next sibling.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which has been dragged

              +

              targetNodeJSON

              +

              JSON data object of the target node which treeNodes are draged over.

              +

              Return Boolean

              +

              return true or false

              +
              +

              Examples of setting & function

              +

              1. disable to drag the node to the target node's next sibling.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: false,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +

              2. disable to drag the node to be all of the parent nodes's next sibling.

              +
              function canNext(treeId, nodes, targetNode) {
              +	return !targetNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: true,
              +			next: canNext,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.prev.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.prev.html new file mode 100644 index 0000000..84e3b1a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.drag.prev.html @@ -0,0 +1,59 @@ +
              +
              +

              Boolean / Function(treeId, treeNodes, targetNode)setting.edit.drag.prev

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              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 [setting.edit.enable = true]

              +

              If the target node is root, so zTree will only trigger 'inner' and not trigger 'prev / next'.

              +

              This function mainly for the appropriate limit drag and drop (auxiliary arrow), it requires a combination of 'next, inner' together, to achieve full functionality.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: allow the node to be the target node's previous sibling.

              +

              false means: don't allow the node to be the target node's previous sibling.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodesArray(JSON)

              +

              A collection of the nodes which has been dragged

              +

              targetNodeJSON

              +

              JSON data object of the target node which treeNodes are draged over.

              +

              Return Boolean

              +

              return true or false

              +
              +

              Examples of setting & function

              +

              1. disable to drag the node to the target node's previous sibling.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: false,
              +			next: true,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +

              2. disable to drag the node to be all of the parent nodes's previous sibling.

              +
              function canPrev(treeId, nodes, targetNode) {
              +	return !targetNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		drag: {
              +			prev: canPrev,
              +			next: true,
              +			inner: true
              +		}
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.editNameSelectAll.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.editNameSelectAll.html new file mode 100644 index 0000000..a030359 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.editNameSelectAll.html @@ -0,0 +1,27 @@ +
              +
              +

              Booleansetting.edit.editNameSelectAll

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              When edit node's name, the text in input is selected or unselected. It is valid when [setting.edit.enable = true]

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: when show the input, the text in input is selected

              +

              false means: when show the input, the text in input is not selected

              +
              +

              Examples of setting

              +

              1. When edit node's name, the text in input is selected.

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		editNameSelectAll: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.enable.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.enable.html new file mode 100644 index 0000000..ec9d2b3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.enable.html @@ -0,0 +1,39 @@ +
              +
              +

              Booleansetting.edit.enable

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Set zTree is in edit mode

              +

              Please set this attribute before zTree initialization. If you need to change the edit mode after the initialization, please use zTreeObj.setEditable() method.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: zTree is in edit mode.

              +

              false means: zTree is not in edit mode.

              +
              +

              Editing Rules Description

              +
              +

              1. When click the node, it will not open 'node.url' specified URL. +
              2. Support for dynamic tree editing. +
              3. You can drag-drop nodes, and support drag-drop nodes between multiple trees. +
              4. Support use drag-drop to copy or move the node. (Reference: setting.edit.drag.isCopy / setting.edit.drag.isMove) +
              5. You can use the Edit button to modify the name attribute. +
              6. You can use the Remove button to remove the node. +
              +

              +

              Please note that letter case, do not change.

              +
              +

              Examples of setting

              +

              1. edit the tree

              +
              var setting = {
              +	edit: {
              +		enable: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.removeTitle.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.removeTitle.html new file mode 100644 index 0000000..d749c05 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.removeTitle.html @@ -0,0 +1,48 @@ +
              +
              +

              String / Function(treeId, treeNode)setting.edit.removeTitle

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              the title of the remove button DOM. It is valid when [setting.edit.enable = true & setting.edit.showRemoveBtn = true]

              +

              Default: "remove"

              +
              +
              +

              String Format

              +
              +

              When the mouse over the remove button, the browser auto pop-up message content.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which show the remove button

              +

              Return String

              +

              Return value is same as 'String Format'

              +
              +

              Examples of setting & function

              +

              1. Set title is 'remove the node' about all the remove button

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: true,
              +		removeTitle: "remove the node"
              +	}
              +};
              +......
              +

              2. Set title is 'remove the parent node' about the parent node, and is 'remove the leaf node' about the leaf node

              +
              function setRemoveTitle(treeId, treeNode) {
              +	return treeNode.isParent ? "remove the parent node":"remove the leaf node";
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: true,
              +		removeTitle: setRemoveTitle
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.renameTitle.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.renameTitle.html new file mode 100644 index 0000000..aa2d719 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.renameTitle.html @@ -0,0 +1,48 @@ +
              +
              +

              String / Function(treeId, treeNode)setting.edit.renameTitle

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              the title of the rename button DOM. It is valid when [setting.edit.enable = true & setting.edit.showRenameBtn = true]

              +

              Default: "rename"

              +
              +
              +

              String Format

              +
              +

              When the mouse over the rename button, the browser auto pop-up message content.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which show the rename button

              +

              Return String

              +

              return value is same as 'String Format'

              +
              +

              Examples of setting & function

              +

              1. Set title is 'rename the node' about all the rename button

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: true,
              +		renameTitle: "rename the node"
              +	}
              +};
              +......
              +

              2. Set title is 'rename the parent node' about the parent node, and is 'rename the leaf node' about the leaf node

              +
              function setRenameTitle(treeId, treeNode) {
              +	return treeNode.isParent ? "rename the parent node":"rename the leaf node";
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: true,
              +		renameTitle: setRenameTitle
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.showRemoveBtn.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.showRemoveBtn.html new file mode 100644 index 0000000..2c64ac1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.showRemoveBtn.html @@ -0,0 +1,50 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.edit.showRemoveBtn

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Set to show or hide the remove button. It is valid when [setting.edit.enable = true]

              +

              When you click the remove button:

              +

              1. zTree will trigger the setting.callback.beforeRemove callback, and you can decide whether to allow delete.

              +

              2. If you don't set the 'beforeRemove' or the 'beforeRemove' callback return true, so zTree will trigger the setting.callback.onRemove callback after remove the node.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: show the remove button

              +

              false means: hide the remove button

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which show the remove button

              +

              Return Boolean

              +

              Return value is same as 'Boolean Format'

              +
              +

              Examples of setting & function

              +

              1. Hide the remove button

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: false
              +	}
              +};
              +......
              +

              2. Hide the remove button of parent node

              +
              function setRemoveBtn(treeId, treeNode) {
              +	return !treeNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRemoveBtn: setRemoveBtn
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.edit.showRenameBtn.html b/src/main/resources/static/lib/ztree/api/en/setting.edit.showRenameBtn.html new file mode 100644 index 0000000..390f0a1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.edit.showRenameBtn.html @@ -0,0 +1,52 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.edit.showRenameBtn

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Set to show or hide the rename button. It is valid when [setting.edit.enable = true]

              +

              When you click the rename button:

              +

              1. Click the rename button, you can rename the node.

              +

              2. After rename operation (the input DOM blur or press the Enter Key), zTree will trigger the setting.callback.beforeRename callback, and you can decide whether to allow rename.

              +

              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.

              +

              4. If you don't set the 'beforeRename' or the 'beforeRename' callback return true, so zTree will trigger the setting.callback.onRename callback after rename the node.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: show the rename button

              +

              false means: hide the rename button

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which show the rename button

              +

              Return Boolean

              +

              Return value is same as 'Boolean Format'

              +
              +

              Examples of setting & function

              +

              1. Hide the rename button

              +
              var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: false
              +	}
              +};
              +......
              +

              2. Hide the rename button of parent node

              +
              function setRenameBtn(treeId, treeNode) {
              +	return !treeNode.isParent;
              +}
              +var setting = {
              +	edit: {
              +		enable: true,
              +		showRenameBtn: setRenameBtn
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.treeId.html b/src/main/resources/static/lib/ztree/api/en/setting.treeId.html new file mode 100644 index 0000000..e4b04b3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.treeId.html @@ -0,0 +1,14 @@ +
              +
              +

              Stringsetting.treeId

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              zTree unique identifier. After the initialization, it equals to the id attribute value of the user-defined zTree container.

              +

              Do not initialize or modify it, it is an internal argument.

              +
              +
              + +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.treeObj.html b/src/main/resources/static/lib/ztree/api/en/setting.treeObj.html new file mode 100644 index 0000000..30eb66c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.treeObj.html @@ -0,0 +1,14 @@ +
              +
              +

              Objectsetting.treeObj

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              zTree DOM's jQuery object, the main function: easy to internal operations.

              +

              Do not initialize or modify it, it is an internal argument.

              +
              +
              + +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.addDiyDom.html b/src/main/resources/static/lib/ztree/api/en/setting.view.addDiyDom.html new file mode 100644 index 0000000..efcc8d4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.addDiyDom.html @@ -0,0 +1,40 @@ +
              +
              +

              Function(treeId, treeNode)setting.view.addDiyDom

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              This function used to display the custom control on the node.

              +

              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.

              +

              2. This function is an advanced application, please make sure that a better understanding of zTree before you use it.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which display the custom control.

              +
              +

              Examples of setting & function

              +

              1. Display button in all nodes.

              +
              var setting = {
              +	view: {
              +		addDiyDom: addDiyDom
              +	}
              +};
              +function addDiyDom(treeId, treeNode) {
              +	var aObj = $("#" + treeNode.tId + "_a");
              +	if ($("#diyBtn_"+treeNode.id).length>0) return;
              +	var editStr = "<span id='diyBtn_space_" +treeNode.id+ "' > </span>"
              +		+ "<button type='button' class='diyBtn1' id='diyBtn_" + treeNode.id
              +		+ "' title='"+treeNode.name+"' onfocus='this.blur();'></button>";
              +	aObj.append(editStr);
              +	var btn = $("#diyBtn_"+treeNode.id);
              +	if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.addHoverDom.html b/src/main/resources/static/lib/ztree/api/en/setting.view.addHoverDom.html new file mode 100644 index 0000000..9c6ccf6 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.addHoverDom.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(treeId, treeNode)setting.view.addHoverDom

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to display custom control when mouse move over the node. (e.g. the rename and remove button)

              +

              If you use this function, so must set setting.view.removeHoverDom, please make sure that a better understanding of zTree before you use it.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which need to display the custom control.

              +
              +

              Examples of setting & function

              +

              1. Display a button when mouse move over the node, and hide the button when mouse move out.

              +
              var setting = {
              +	view: {
              +		addHoverDom: addHoverDom,
              +		removeHoverDom: removeHoverDom,
              +		......
              +	}
              +};
              +function addHoverDom(treeId, treeNode) {
              +	var aObj = $("#" + treeNode.tId + "_a");
              +	if ($("#diyBtn_"+treeNode.id).length>0) return;
              +	var editStr = "<span id='diyBtn_space_" +treeNode.id+ "' > </span>"
              +		+ "<button type='button' class='diyBtn1' id='diyBtn_" + treeNode.id
              +		+ "' title='"+treeNode.name+"' onfocus='this.blur();'></button>";
              +	aObj.append(editStr);
              +	var btn = $("#diyBtn_"+treeNode.id);
              +	if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
              +};
              +function removeHoverDom(treeId, treeNode) {
              +	$("#diyBtn_"+treeNode.id).unbind().remove();
              +	$("#diyBtn_space_" +treeNode.id).unbind().remove();
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.autoCancelSelected.html b/src/main/resources/static/lib/ztree/api/en/setting.view.autoCancelSelected.html new file mode 100644 index 0000000..44ab90d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.autoCancelSelected.html @@ -0,0 +1,27 @@ +
              +
              +

              Booleansetting.view.autoCancelSelected

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              When click the selected node while pressing the Ctrl-key or Cmd-key, allow to cancel selected the node.

              +

              If you don't need this function, please set to false.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: press the Ctrl-key or Cmd-key, can cancel selected node.

              +

              false means: press the Ctrl-key or Cmd-key, can't cancel selected node.

              +
              +

              Examples of setting

              +

              1. Press the Ctrl-key or Cmd-key, can't cancel selected node.

              +
              var setting = {
              +	view: {
              +		autoCancelSelected: false
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.dblClickExpand.html b/src/main/resources/static/lib/ztree/api/en/setting.view.dblClickExpand.html new file mode 100644 index 0000000..210dfec --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.dblClickExpand.html @@ -0,0 +1,45 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.view.dblClickExpand

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              When double-click the parent node, 'dblClickExpand' is used to decide whether to expand the parent node.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: When double-click the parent node, zTree will expand the parent node.

              +

              false means: When double-click the parent node, zTree will not expand the parent node.

              +
              +

              Function Pamameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which be double-clicked.

              +

              Return Boolean

              +

              Return value is same as 'Boolean Format'

              +
              +

              Example of setting

              +

              1. When double-click the parent node, zTree will not expand the parent node.

              +
              var setting = {
              +	view: {
              +		dblClickExpand: false
              +	}
              +};
              +......
              +

              2. When double-click the parent node, zTree will expand the parent node which level>0.

              +
              function dblClickExpand(treeId, treeNode) {
              +	return treeNode.level > 0;
              +};
              +var setting = {
              +	view: {
              +		dblClickExpand: dblClickExpand
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.expandSpeed.html b/src/main/resources/static/lib/ztree/api/en/setting.view.expandSpeed.html new file mode 100644 index 0000000..1911e74 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.expandSpeed.html @@ -0,0 +1,31 @@ +
              +
              +

              String / Numbersetting.view.expandSpeed

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The animation speed of expand or collapse node. As same as 'speed' parameter in jQuery

              +

              In order to ensure zTree operating speed, if use the IE6, zTree will not use animation.

              +

              Default: "fast"

              +
              +
              +

              String Format

              +
              +

              e.g. "slow", "normal", or "fast"

              +

              If set to "", zTree will not use animation.

              +
              +

              Number Format

              +
              +

              How long the animation will run. [Unit: ms] (e.g. 1000)

              +
              +

              Examples of setting

              +

              1. Set the animation speed to slow

              +
              var setting = {
              +	view: {
              +		expandSpeed: "slow"
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.fontCss.html b/src/main/resources/static/lib/ztree/api/en/setting.view.fontCss.html new file mode 100644 index 0000000..02bddea --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.fontCss.html @@ -0,0 +1,42 @@ +
              +
              +

              JSON / Function(treeId, treeNode)setting.view.fontCss

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Personalized text style, only applies to <A> object in the node DOM

              +

              Default: {}

              +
              +
              +

              JSON Format

              +
              +

              As same as .css() method in jQuery. e.g. {color:"#ff0011", background:"blue"}

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which use the personalized text style

              +

              Return JSON

              +

              Return value is same as 'JSON Format'. e.g. {color:"#ff0011", background:"blue"}

              +
              +

              Examples of setting & function

              +

              1. Don't modify css file, and set the node name's color to red

              +
              var setting = {
              +	view: {
              +		fontCss : {color:"red"}
              +	}
              +};
              +

              2. Don't modify css file, and set the root node name's color to red

              +
              function setFontCss(treeId, treeNode) {
              +	return treeNode.level == 0 ? {color:"red"} : {};
              +};
              +var setting = {
              +	view: {
              +		fontCss: setFontCss
              +	}
              +};
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.nameIsHTML.html b/src/main/resources/static/lib/ztree/api/en/setting.view.nameIsHTML.html new file mode 100644 index 0000000..4fe19ad --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.nameIsHTML.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.view.nameIsHTML

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set to use HTML in 'name' attribute.

              +

              If allow HTML, please do check to avoid security issues, e.g. JavaScript Injection...

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: 'name' attribute can be HTML.

              +

              false means: 'name' attribute is only TEXT.

              +
              +

              Examples of setting

              +

              1. Set to allow HTML

              +
              var setting = {
              +	view: {
              +		nameIsHTML: true
              +	}
              +};
              +var node = {"name":"<font color='red'>test</font>"};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.removeHoverDom.html b/src/main/resources/static/lib/ztree/api/en/setting.view.removeHoverDom.html new file mode 100644 index 0000000..83f8047 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.removeHoverDom.html @@ -0,0 +1,45 @@ +
              +
              +

              Function(treeId, treeNode)setting.view.removeHoverDom

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to hide custom control when mouse move out the node. (e.g. the rename and remove button)

              +

              If you use this function, so must set setting.view.addHoverDom, please make sure that a better understanding of zTree before you use it.

              +

              Default: null

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which need to hide the custom control.

              +
              +

              Examples of setting & function

              +

              1. Display a button when mouse move over the node, and hide the button when mouse move out.

              +
              var setting = {
              +	view: {
              +		addHoverDom: addHoverDom,
              +		removeHoverDom: removeHoverDom,
              +		......
              +	}
              +};
              +function addHoverDom(treeId, treeNode) {
              +	var aObj = $("#" + treeNode.tId + "_a");
              +	if ($("#diyBtn_"+treeNode.id).length>0) return;
              +	var editStr = "<span id='diyBtn_space_" +treeNode.id+ "' > </span>"
              +		+ "<button type='button' class='diyBtn1' id='diyBtn_" + treeNode.id
              +		+ "' title='"+treeNode.name+"' onfocus='this.blur();'></button>";
              +	aObj.append(editStr);
              +	var btn = $("#diyBtn_"+treeNode.id);
              +	if (btn) btn.bind("click", function(){alert("diy Button for " + treeNode.name);});
              +};
              +function removeHoverDom(treeId, treeNode) {
              +	$("#diyBtn_"+treeNode.id).unbind().remove();
              +	$("#diyBtn_space_" +treeNode.id).unbind().remove();
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.selectedMulti.html b/src/main/resources/static/lib/ztree/api/en/setting.view.selectedMulti.html new file mode 100644 index 0000000..074fb68 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.selectedMulti.html @@ -0,0 +1,28 @@ +
              +
              +

              Booleansetting.view.selectedMulti

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set whether to allow select multiple nodes.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true mean: you can select multiple nodes.

              +

              false mean: you can only select one node.

              +

              1. Press Ctrl-key or Cmd-key, you can select multiple nodes.

              +

              2、This attribute don't affect the feature of cancel select node. ( please see setting.view.autoCancelSelected )

              +
              +

              Examples of setting

              +

              1. Only select one node.

              +
              var setting = {
              +	view: {
              +		selectedMulti: false
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.showIcon.html b/src/main/resources/static/lib/ztree/api/en/setting.view.showIcon.html new file mode 100644 index 0000000..69f1b05 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.showIcon.html @@ -0,0 +1,45 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.view.showIcon

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set to show or hide node icon.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: show node icon.

              +

              false means: hide node icon.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which need to show icon.

              +

              Return Boolean

              +

              Return value is same as 'Boolean Format'

              +
              +

              Examples of setting & function

              +

              1. Hide node icon

              +
              var setting = {
              +	view: {
              +		showIcon: false
              +	}
              +};
              +......
              +

              2. Hide node icon which level=2

              +
              function showIconForTree(treeId, treeNode) {
              +	return treeNode.level != 2;
              +};
              +var setting = {
              +	view: {
              +		showIcon: showIconForTree
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.showLine.html b/src/main/resources/static/lib/ztree/api/en/setting.view.showLine.html new file mode 100644 index 0000000..a554014 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.showLine.html @@ -0,0 +1,26 @@ +
              +
              +

              Booleansetting.view.showLine

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set to show or hide line.

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: show line.

              +

              false means: hide line.

              +
              +

              Examples of setting

              +

              1. Hide line

              +
              var setting = {
              +	view: {
              +		showLine: false
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.showTitle.html b/src/main/resources/static/lib/ztree/api/en/setting.view.showTitle.html new file mode 100644 index 0000000..8af6984 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.showTitle.html @@ -0,0 +1,47 @@ +
              +
              +

              Boolean / Function(treeId, treeNode)setting.view.showTitle

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set to show or hide the 'title' attribute of node DOM.

              +

              Please see the setting.data.key.title attribute

              +

              Default: true

              +
              +
              +

              Boolean Format

              +
              +

              true means: show the 'title' attribute of node DOM.

              +

              false means: hide the 'title' attribute of node DOM.

              +

              When setting.view.showTitle = true & setting.data.key.title = '', zTree will set the 'setting.data.key.name' attribute to the 'setting.data.key.title'.

              +
              +

              Function Parameter Descriptions

              +
              +

              treeIdString

              +

              zTree unique identifier: treeId.

              +

              treeNodeJSON

              +

              JSON data object of the node which need to show title.

              +

              Return Boolean

              +

              Return value is same as 'Boolean Format'

              +
              +

              Examples of setting & function

              +

              1. Hide the 'title' attribute of node DOM.

              +
              var setting = {
              +	view: {
              +		showTitle: false
              +	}
              +};
              +......
              +

              2. Hide the 'title' attribute of node DOM which level=2.

              +
              function showTitleForTree(treeId, treeNode) {
              +	return treeNode.level != 2;
              +};
              +var setting = {
              +	view: {
              +		showTitle: showTitleForTree
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/setting.view.txtSelectedEnable.html b/src/main/resources/static/lib/ztree/api/en/setting.view.txtSelectedEnable.html new file mode 100644 index 0000000..a380930 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/setting.view.txtSelectedEnable.html @@ -0,0 +1,26 @@ +
              +
              +

              Booleansetting.view.txtSelectedEnable

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Set to allow or don't allow to select the text which in zTree's DOM.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: Allow to select the txt which in zTree's DOM.

              +

              false means: Don't allow to select the txt which in zTree's DOM.

              +
              +

              Examples of setting & function

              +

              1. Allow to select the txt which in zTree's DOM.

              +
              var setting = {
              +	view: {
              +		txtSelectedEnable: true
              +	}
              +};
              +......
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.check_Child_State.html b/src/main/resources/static/lib/ztree/api/en/treeNode.check_Child_State.html new file mode 100644 index 0000000..48efb79 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.check_Child_State.html @@ -0,0 +1,43 @@ +
              +
              +

              NumbertreeNode.check_Child_State

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Used to record the node's half-checked state about its all child nodes's checkbox or radio. It is valid when [setting.check.enable = true]

              +

              zTree v3.x provides treeNode.getCheckStatus () method to get an accurate the half-checked status.

              +

              Do not initialize or modify it, it is an internal argument.

              +

              Default: true

              +
              +
              +

              Number Format

              +
              +

              Rules:

              + + + + + + + + + + + +
              setting.check.checkType = "checkbox"
              treeNode.check_Child_StateChecked Status Description
              -1Has no child nodes or all child nodes's 'nocheck' attribute is true.
              0All of the child nodes has not been checked.
              1Some of the child nodes has been checked.
              2All of the child nodes has been checked.
              +
              + + + + + + + + + + +
              setting.check.checkType = "radio"
              treeNode.check_Child_StateChecked Status Description
              -1Has no child nodes or all child nodes's 'nocheck' attribute is true.
              0All of the child nodes has not been checked.
              2Some of the child nodes has been checked.
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.check_Focus.html b/src/main/resources/static/lib/ztree/api/en/treeNode.check_Focus.html new file mode 100644 index 0000000..77b7359 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.check_Focus.html @@ -0,0 +1,19 @@ +
              +
              +

              BooleantreeNode.check_Focus

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Used to record the status which the checkbox or radio get focus. It is valid when [setting.check.enable = true]

              +

              Do not initialize or modify it, it is an internal argument.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: mouse move over the checkbox

              +

              false means: mouse move out the checkbox

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.checked.html b/src/main/resources/static/lib/ztree/api/en/treeNode.checked.html new file mode 100644 index 0000000..8a55f3d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.checked.html @@ -0,0 +1,32 @@ +
              +
              +

              BooleantreeNode.checked

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              The checked status about node's checkbox or radio. It is valid when [setting.check.enable = true & treeNode.nocheck = false]

              +

              1. If change the 'checked' to other attribute, please set the 'setting.data.key.checked' attribute.

              +

              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.

              +

              3. Use the treeObj.checkNode or checkAllNodes or updateNode method, you can check or uncheck the node. Please see the API about these methods.

              +

              4. zTree support identification string 'true' & 'false'.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: check the checkbox or radio when zTree is initialized.

              +

              false means: uncheck the checkbox or radio when zTree is initialized.

              +
              +

              Examples of treeNode

              +

              1. check the checkbox when zTree is initialized

              +
              var nodes = [
              +{ "id":1, "name":"test1", checked:true },
              +{ "id":2, "name":"test2", checked:true }
              +]
              +

              2. Get the checked status of the first root node

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var checked = treeObj.getNodes()[0].checked;
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.checkedOld.html b/src/main/resources/static/lib/ztree/api/en/treeNode.checkedOld.html new file mode 100644 index 0000000..ee51626 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.checkedOld.html @@ -0,0 +1,25 @@ +
              +
              +

              BooleantreeNode.checkedOld

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              The checked status about node's checkbox or radio when zTree was initialized. It is valid when [setting.check.enable = true & treeNode.nocheck = false]

              +

              1. Do not initialize it, it will be initialized when the node is initialized.

              +

              2. If you need to achieve special features, you can use the zTreeObj.getChangeCheckedNodes method and modify the value of 'checkedOld' attribute.

              +

              Default: the value of 'checked' attribute when zTree is initialized

              +
              +
              +

              Boolean Format

              +
              +

              true means: the checkbox or radio is checked when zTree is initialized.

              +

              false means: the checkbox or radio is not checked when zTree is initialized.

              +
              +

              Examples of treeNode

              +

              1. Get the original checked status of the first root node

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var checkedOld = treeObj.getNodes()[0].checkedOld;
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.children.html b/src/main/resources/static/lib/ztree/api/en/treeNode.children.html new file mode 100644 index 0000000..d765bb9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.children.html @@ -0,0 +1,35 @@ +
              +
              +

              Array(JSON)treeNode.children

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The data collections of node's child nodes.

              +

              1. If change the 'children' to other attribute, please set the 'setting.data.key.children' attribute.

              +

              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.

              +

              Default: undefined

              +
              +
              +

              Array(JSON) Format

              +
              +

              Standard JSON Data object

              +
              +

              Examples of treeNode

              +

              1. Use the standard JSON data object.

              +
              var nodes = [
              +{ "id":1, "name":"test1",
              +	children: [
              +	{ "id":3, "name":"test3"},
              +	{ "id":4, "name":"test4"},
              +	{ "id":5, "name":"test5"}
              +	]
              +},
              +{ "id":2, "name":"test2"  }
              +]
              +

              2. Get the first root node's child nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes()[0].children;
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.chkDisabled.html b/src/main/resources/static/lib/ztree/api/en/treeNode.chkDisabled.html new file mode 100644 index 0000000..7a5fcf3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.chkDisabled.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.chkDisabled

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              1. Set node's checkbox / radio to disabled. It is valid when [setting.check.enable = true]

              +

              2. zTree support identification string 'true' & 'false'.

              +

              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.

              +

              4. When zTree initialize the nodes, if you need to the child nodes automatically inherit the 'chkDisabled' attribute, please see 'setting.check.chkDisabledInherit'.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: this node's checkbox / radio is disabled.

              +

              false means: this node's checkbox / radio is able.

              +
              +

              Examples of treeNode

              +

              1. disable some node's checkbox / radio

              +
              var nodes = [
              +	{ "id":1, "name":"test1", "checked":true, "chkDisabled":true},
              +	{ "id":2, "name":"test2", "chkDisabled":true},
              +	{ "id":3, "name":"test3"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.click.html b/src/main/resources/static/lib/ztree/api/en/treeNode.click.html new file mode 100644 index 0000000..1f9db62 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.click.html @@ -0,0 +1,24 @@ +
              +
              +

              StringtreeNode.click

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Simple click event operations. As same as : (onclick ="...") the code. If the operation is more complex, please use the onClick callback.

              +

              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.

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              Standard javascript syntax, for example: alert ("test"); etc.

              +
              +

              Examples of treeNode

              +

              1. When click this node, will alert msg.

              +
              var nodes = [
              +	{ "id":1, "name":"Google CN", "url":"http://g.cn", "click":"alert('test');"},
              +	......
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.diy.html b/src/main/resources/static/lib/ztree/api/en/treeNode.diy.html new file mode 100644 index 0000000..68c39ba --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.diy.html @@ -0,0 +1,15 @@ +
              +
              +

              ?treeNode.* DIY *

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to save other custom data of node, do not use the same attribute name with ztree used, the user can freely set.

              +
              +
              +

              Examples of treeNode

              +

              1. Use 'ename' attribute to save more info

              +
              var node = { "id":1, "name":"test1", "ename":"test eName"};
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.editNameFlag.html b/src/main/resources/static/lib/ztree/api/en/treeNode.editNameFlag.html new file mode 100644 index 0000000..f60ef2a --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.editNameFlag.html @@ -0,0 +1,19 @@ +
              +
              +

              BooleantreeNode.editNameFlag

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to save the node editing name status. It is valid when [setting.edit.enable = true]

              +

              Do not initialize or modify it, it is an internal argument.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: node is being edited.

              +

              false means: node is not being edited.

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.getCheckStatus.html b/src/main/resources/static/lib/ztree/api/en/treeNode.getCheckStatus.html new file mode 100644 index 0000000..3c9a2e6 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.getCheckStatus.html @@ -0,0 +1,63 @@ +
              +
              +

              Function()treeNode.getCheckStatus

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Get the node's half-checked status of checkbox or radio. It is valid when [setting.check.enable = true]

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              ReturnJSON

              +
              {
              +	checked: true, //As same as 'treeNode.checked'
              +	half: true  //Rule the table below
              +}
              + + + + + + + + + + + + + + + + + + +
              setting.check.checkType = "checkbox"
              treeNode.checkedtreeNode.check_Child_StatetreeNode.halfCheck half
              --truetrue
               
              true-1falsefalse
              true0falsetrue
              true1falsetrue
              true2falsefalse
               
              false-1falsefalse
              false0falsefalse
              false1falsetrue
              false2falsetrue
              +
              + + + + + + + + + + + + + + + + +
              setting.check.checkType = "radio"
              treeNode.checkedtreeNode.check_Child_StatetreeNode.halfCheck half
              --truetrue
               
              true-1falsefalse
              true0falsefalse
              true2falsetrue
               
              false-1falsefalse
              false0falsefalse
              false2falsetrue
              +
              +

              Examples of treeNode

              +

              1. Get the first root node's half-checked status

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var halfCheck = treeObj.getNodes()[0].getCheckStatus();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.getIndex.html b/src/main/resources/static/lib/ztree/api/en/treeNode.getIndex.html new file mode 100644 index 0000000..2c31cfe --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.getIndex.html @@ -0,0 +1,26 @@ +
              +
              +

              Function()treeNode.getIndex

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the treeNode's index in its parent node's children.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              ReturnNumber

              +

              the treeNode's index in its parent node's children. ( start at 0 )

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's index.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getIndex();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.getNextNode.html b/src/main/resources/static/lib/ztree/api/en/treeNode.getNextNode.html new file mode 100644 index 0000000..755aa6e --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.getNextNode.html @@ -0,0 +1,27 @@ +
              +
              +

              Function()treeNode.getNextNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the treeNode's next sibling node.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              ReturnJSON

              +

              JSON data object of the treeNode's next sibling node

              +

              If have not the next node, return null.

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's next sibling node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getNextNode();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.getParentNode.html b/src/main/resources/static/lib/ztree/api/en/treeNode.getParentNode.html new file mode 100644 index 0000000..16bab30 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.getParentNode.html @@ -0,0 +1,27 @@ +
              +
              +

              Function()treeNode.getParentNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the treeNode's parent node.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              ReturnJSON

              +

              JSON data object of treeNode's parent node.

              +

              If treeNode is root, return null.

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's parent node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getParentNode();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.getPath.html b/src/main/resources/static/lib/ztree/api/en/treeNode.getPath.html new file mode 100644 index 0000000..5f81676 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.getPath.html @@ -0,0 +1,26 @@ +
              +
              +

              Function()treeNode.getPath

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the treeNode's all parent nodes. (Include itself)

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              ReturnArray (JSON)

              +

              Array of treeNode's all parent nodes. (Include itself)

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's all parent nodes.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getPath();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.getPreNode.html b/src/main/resources/static/lib/ztree/api/en/treeNode.getPreNode.html new file mode 100644 index 0000000..f6745b1 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.getPreNode.html @@ -0,0 +1,27 @@ +
              +
              +

              Function()treeNode.getPreNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the treeNode's previous sibling node.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              ReturnJSON

              +

              JSON data object of the treeNode's previous sibling node

              +

              If have not the previous node, return null.

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's previous sibling node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var node = sNodes[0].getPreNode();
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.halfCheck.html b/src/main/resources/static/lib/ztree/api/en/treeNode.halfCheck.html new file mode 100644 index 0000000..8375326 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.halfCheck.html @@ -0,0 +1,29 @@ +
              +
              +

              BooleantreeNode.halfCheck

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Force node checkBox / radio to the half-checked status. It is valid when [setting.check.enable = true & treeNode.nocheck = false]

              +

              1. If you force to the half-checked status, zTree will not automatically calculated the half-checked status about this node.

              +

              2. Until you set treeNode.halfCheck to false or null, zTree will automatically calculated the half-checked status about this node.

              +

              3. zTree support identification string 'true' & 'false'.

              +

              Defaul: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: the checkbox or radio is half-checked when zTree is initialized.

              +

              false means: the half-checked status will be automatically calculated

              +
              +

              Examples of treeNode

              +

              1. set the half-checked status when zTree is initialized

              +
              var nodes = [
              +{ "id":1, "name":"test1", isParent:true, checked:true, halfCheck:true },
              +{ "id":2, "name":"test2", isParent:true, checked:false, halfCheck:true },
              +{ "id":3, "name":"test3", isParent:true, checked:true },
              +{ "id":4, "name":"test4", isParent:true, checked:false }
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.icon.html b/src/main/resources/static/lib/ztree/api/en/treeNode.icon.html new file mode 100644 index 0000000..4e1c99f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.icon.html @@ -0,0 +1,33 @@ +
              +
              +

              StringtreeNode.icon

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              URL path of node's custom icon.

              +

              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.

              +

              2. If you need to show two icons when it is expanded or collapsed, please set the 'treeNode.iconOpen' and 'treeNode.iconClose' attribute.

              +

              3. If you need to use css to set the custom icon, please set the 'treeNode.iconSkin' attribute.

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              Icon image url can be a relative path or absolute path.

              +

              If use a relative path, please note the relationship between icon image and the page, ensure the correct image path.

              +
              +

              Examples of treeNode

              +

              1. Set the custom icon

              +
              var nodes = [
              +	//Only show one icon when it is expanded or collapsed.
              +	{ name:"Parent Node 1", icon:"/img/parent.gif"},
              +
              +	//Show two icons when it is expanded or collapsed.
              +	{ name:"Parent Node 2", iconOpen:"/img/open.gif", iconClose:"/img/close.gif"},
              +
              +	//the custom icon for leaf node
              +	{ name:"Leaf Node", icon:"/img/leaf.gif"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.iconClose.html b/src/main/resources/static/lib/ztree/api/en/treeNode.iconClose.html new file mode 100644 index 0000000..2259e8f --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.iconClose.html @@ -0,0 +1,33 @@ +
              +
              +

              StringtreeNode.iconClose

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              URL path of parent node's custom icon when it is collapsed.

              +

              1. Only parent node support this attribute.

              +

              2. This attribute must be used simultaneously with 'iconOpen' attribute.

              +

              3. If you need to use css to set the custom icon, please set the 'treeNode.iconSkin' attribute.

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              Icon image url can be a relative path or absolute path.

              +

              If use a relative path, please note the relationship between icon image and the page, ensure the correct image path.

              +
              +

              Examples of treeNode

              +

              1. Set the custom icon

              +
              var nodes = [
              +	//Only show one icon when it is expanded or collapsed.
              +	{ name:"Parent Node 1", icon:"/img/parent.gif"},
              +
              +	//Show two icons when it is expanded or collapsed.
              +	{ name:"Parent Node 2", iconOpen:"/img/open.gif", iconClose:"/img/close.gif"},
              +
              +	//the custom icon for leaf node
              +	{ name:"Leaf Node", icon:"/img/leaf.gif"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.iconOpen.html b/src/main/resources/static/lib/ztree/api/en/treeNode.iconOpen.html new file mode 100644 index 0000000..3203615 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.iconOpen.html @@ -0,0 +1,33 @@ +
              +
              +

              StringtreeNode.iconOpen

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              URL path of parent node's custom icon when it is expanded.

              +

              1. Only parent node support this attribute.

              +

              2. This attribute must be used simultaneously with 'iconClose' attribute.

              +

              3. If you need to use css to set the custom icon, please set the 'treeNode.iconSkin' attribute.

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              Icon image url can be a relative path or absolute path.

              +

              If use a relative path, please note the relationship between icon image and the page, ensure the correct image path.

              +
              +

              Examples of treeNode

              +

              1. Set the custom icon

              +
              var nodes = [
              +	//Only show one icon when it is expanded or collapsed.
              +	{ name:"Parent Node 1", icon:"/img/parent.gif"},
              +
              +	//Show two icons when it is expanded or collapsed.
              +	{ name:"Parent Node 2", iconOpen:"/img/open.gif", iconClose:"/img/close.gif"},
              +
              +	//the custom icon for leaf node
              +	{ name:"Leaf Node", icon:"/img/leaf.gif"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.iconSkin.html b/src/main/resources/static/lib/ztree/api/en/treeNode.iconSkin.html new file mode 100644 index 0000000..fca7fbf --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.iconSkin.html @@ -0,0 +1,43 @@ +
              +
              +

              StringtreeNode.iconSkin

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The className of node's custom icon.

              +

              1. You need to modify the css, add the definition of className.

              +

              2. The css is simple, convenient, and support the parent node to switch icons when it is expanded or collapsed.

              +

              3. Recommend the use of CSS Sprites, can reduce repeating load the image, to avoid image flicker.

              +

              4. The 'iconSkin' support IE6 in zTree v3.x.

              +

              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.

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              The string about custom icon's className.

              +
              +

              Examples of css & treeNode

              +

              1. Set the custom icon

              +
              css example:
              +.ztree li span.button.diy01_ico_open, .ztree li span.button.diy01_ico_close{...}
              +
              +.ztree li span.button.diy02_ico_open{...}
              +.ztree li span.button.diy02_ico_close{...}
              +
              +.ztree li span.button.diy03_ico_docu{...}
              +
              +node's data example:
              +var nodes = [
              +	//Only show one icon when it is expanded or collapsed.
              +	{ name:"Parent Node 1", iconSkin:"diy01"},
              +
              +	//Show two icons when it is expanded or collapsed.
              +	{ name:"Parent Node 2", iconSkin:"diy02"},
              +
              +	//the custom icon for leaf node
              +	{ name:"Leaf Node", iconSkin:"diy03"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.isAjaxing.html b/src/main/resources/static/lib/ztree/api/en/treeNode.isAjaxing.html new file mode 100644 index 0000000..ddadf41 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.isAjaxing.html @@ -0,0 +1,26 @@ +
              +
              +

              BooleantreeNode.isAjaxing

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Judge whether the node's child nodes being loaded asynchronously.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Boolean Format

              +
              +

              true means: the node's child nodes is being loaded asynchronously

              +

              false means: the node's child nodes is not being loaded asynchronously

              +
              +

              Examples of treeNode

              +

              1. Judge whether the first selected node's child nodes being loaded asynchronously

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isAjaxing = sNodes[0].isAjaxing;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.isFirstNode.html b/src/main/resources/static/lib/ztree/api/en/treeNode.isFirstNode.html new file mode 100644 index 0000000..a8ee61c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.isFirstNode.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isFirstNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Judge whether the node is the sibling nodes's first node.

              +

              If you use the 'exhide' pack, so this attribute will only support the node which be shown.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Boolean Format

              +
              +

              true means: the node is first node.

              +

              false means: the node is not first node.

              +

              If the node has been hidden, isFirstNode = false

              +
              +

              Examples of treeNode

              +

              1. Judge whether the first selected node is the sibling nodes's first node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isFirstNode = sNodes[0].isFirstNode;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.isHidden.html b/src/main/resources/static/lib/ztree/api/en/treeNode.isHidden.html new file mode 100644 index 0000000..3a07b94 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.isHidden.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isHidden

              +

              Overview[ depends on jquery.ztree.exhide js ]

              +
              +

              +
              +

              Judge whether the node has been hidden.

              +

              1. When initialize zTree, the nodes which be set 'isHidden = true' will be hidden.

              +

              +

              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.

              +
              +
              +

              Boolean Format

              +
              +

              true means: this node is hidden.

              +

              false means: this node is shown.

              +
              +

              Examples of treeNode

              +

              1. Judge whether the first root node has been hidden.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getNodes();
              +if (sNodes.length > 0) {
              +	var isHidden = sNodes[0].isHidden;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.isHover.html b/src/main/resources/static/lib/ztree/api/en/treeNode.isHover.html new file mode 100644 index 0000000..e18ed0c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.isHover.html @@ -0,0 +1,19 @@ +
              +
              +

              BooleantreeNode.isHover

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Used to record the hover status of node's DOM. For 'setting.view.addHoverDom / removeHoverDom'.

              +

              Do not initialize or modify it, it is an internal argument.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: the node's DOM is in hover.

              +

              false means: the node's DOM is not in hover.

              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.isLastNode.html b/src/main/resources/static/lib/ztree/api/en/treeNode.isLastNode.html new file mode 100644 index 0000000..cd2ca26 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.isLastNode.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isLastNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Judge whether the node is the sibling nodes's last node.

              +

              If you use the 'exhide' pack, so this attribute will only support the node which be shown.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Boolean Format

              +
              +

              true means: the node is last node.

              +

              false means: the node is not last node.

              +

              If the node has been hidden, isLastNode = false

              +
              +

              Examples of treeNode

              +

              1. Judge whether the first selected node is the sibling nodes's last node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isLastNode = sNodes[0].isLastNode;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.isParent.html b/src/main/resources/static/lib/ztree/api/en/treeNode.isParent.html new file mode 100644 index 0000000..dad4b81 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.isParent.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.isParent

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Judge whether the node is the parent node.

              +

              1. When zTree initialize the node data, the node which has children is set to true, otherwise false.

              +

              2. When zTree initialize the node data, if set treeNode.isParent to true, the node will be set to be parent node.

              +

              3. In order to solve the problem of someone make json data, supporting "false", "true" format of the data string.

              +
              +
              +

              Boolean Format

              +
              +

              true means: the node is parent node.

              +

              false means: the node is not parent node.

              +
              +

              Examples of treeNode

              +

              1. Judge whether the first selected node is the parent node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isParent = sNodes[0].isParent;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.level.html b/src/main/resources/static/lib/ztree/api/en/treeNode.level.html new file mode 100644 index 0000000..d151162 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.level.html @@ -0,0 +1,25 @@ +
              +
              +

              NumbertreeNode.level

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The level of node

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              Number Format

              +
              +

              The root node's level = 0, and next level = 1, ...

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's level

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var level = sNodes[0].level;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.name.html b/src/main/resources/static/lib/ztree/api/en/treeNode.name.html new file mode 100644 index 0000000..fa508cc --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.name.html @@ -0,0 +1,25 @@ +
              +
              +

              StringtreeNode.name

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The node's name

              +

              1. If you want to change 'name' attribute, please modify the 'setting.data.key.name' attribute.

              +

              Default: undenfined

              +
              +
              +

              String Format

              +
              +

              String object. The HTML special characters are escaped

              +
              +

              Examples of treeNode

              +

              1. Set node's name to 'test1', 'test2', 'test3'

              +
              var nodes = [
              +	{ "id":1, "name":"test1"},
              +	{ "id":2, "name":"test2"},
              +	{ "id":3, "name":"test3"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.nocheck.html b/src/main/resources/static/lib/ztree/api/en/treeNode.nocheck.html new file mode 100644 index 0000000..6c4880c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.nocheck.html @@ -0,0 +1,26 @@ +
              +
              +

              BooleantreeNode.nocheck

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              1. Set node to hide the checkbox or radio. It is valid when [setting.check.enable = true]

              +

              2. zTree support identification string 'true' & 'false'.

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              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.

              +

              false means: the node show the checkbox or radio.

              +
              +

              Examples of treeNode

              +

              1. Hide some node's checkbox / radio

              +
              var nodes = [
              +	{ "id":1, "name":"test1", "nocheck":true},
              +	{ "id":2, "name":"test2"},
              +	{ "id":3, "name":"test3"}
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.open.html b/src/main/resources/static/lib/ztree/api/en/treeNode.open.html new file mode 100644 index 0000000..bc910de --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.open.html @@ -0,0 +1,30 @@ +
              +
              +

              BooleantreeNode.open

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to record the parent node's expand status.

              +

              1. When zTree initialize the node data, if you set treeNode.open = true, zTree will default expand this parent node.

              +

              2. Leaf node's 'open' attribute is false.

              +

              3. In order to solve the problem of someone make json data, supporting "false", "true" format of the data string.

              +

              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+)

              +

              Default: false

              +
              +
              +

              Boolean Format

              +
              +

              true means: the parent node is expanded.

              +

              false means: the parent node is collapsed.

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's expand status.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var isOpen = sNodes[0].open;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.parentTId.html b/src/main/resources/static/lib/ztree/api/en/treeNode.parentTId.html new file mode 100644 index 0000000..0bc2a6d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.parentTId.html @@ -0,0 +1,27 @@ +
              +
              +

              StringtreeNode.parentTId

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The unique identifier of node's parent node.

              +

              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.

              +

              2. Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              String Format

              +
              +

              String object of node's parent node's tId. please see API about 'treeNode.tId'

              +

              If treeNode is root node, parentTId is null.

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's parent node's tId

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var parentTId = sNodes[0].parentTId;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.tId.html b/src/main/resources/static/lib/ztree/api/en/treeNode.tId.html new file mode 100644 index 0000000..18c2855 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.tId.html @@ -0,0 +1,25 @@ +
              +
              +

              StringtreeNode.tId

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The unique identifier of node.

              +

              Do not initialize or modify it, it is created by the zTree.

              +
              +
              +

              String Format

              +
              +

              tId rules: setting.treeId + "_" + zTree counter

              +
              +

              Examples of treeNode

              +

              1. Get the first selected node's tId

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var tId = sNodes[0].tId;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.target.html b/src/main/resources/static/lib/ztree/api/en/treeNode.target.html new file mode 100644 index 0000000..176a7a3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.target.html @@ -0,0 +1,24 @@ +
              +
              +

              StringtreeNode.target

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Used to set the target where the node is clicked to open url. It is valid when [treeNode.url exists]

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              As same as <a> tag's 'target' attribute. e.g. '_blank', '_self' or other window name.

              +

              if this attribute is omitted, zTree default set it to '_blank'

              +
              +

              Exmaples of treeNode

              +

              1. Set target is '_blank'

              +
              var nodes = [
              +	{ "id":1, "name":"test1", "url":"http://myTest.com", "target":"_blank"},
              +	......
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.url.html b/src/main/resources/static/lib/ztree/api/en/treeNode.url.html new file mode 100644 index 0000000..5552445 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.url.html @@ -0,0 +1,25 @@ +
              +
              +

              StringtreeNode.url

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The URL of node link

              +

              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.

              +

              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.

              +

              Default: undefined

              +
              +
              +

              String Format

              +
              +

              As same as <a> tag's 'href' attribute.

              +
              +

              Examples of treeNode

              +

              1. Set the URL is 'g.cn'

              +
              var nodes = [
              +	{ "id":1, "name":"Google CN", "url":"http://g.cn"},
              +	......
              +]
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/treeNode.zAsync.html b/src/main/resources/static/lib/ztree/api/en/treeNode.zAsync.html new file mode 100644 index 0000000..b3ff414 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/treeNode.zAsync.html @@ -0,0 +1,28 @@ +
              +
              +

              BooleantreeNode.zAsync

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Judge whether the parent node's child nodes will be loaded asynchronously when the parent node is expanded.

              +

              Do not initialize or modify it, it is created by the zTree.

              +

              Default:false (the parent node which have no child nodes); true (the parent node which have child nodes or the leaf node)

              +
              +
              +

              Boolean Format

              +
              +

              true means: the node's child nodes will not be loaded asynchronously when the parent node is expanded.

              +

              false means: the node's child nodes will be loaded asynchronously when the parent node is expanded.

              +

              This attribute will not effect to 'reAsyncChildNodes()' method

              +
              +

              Examples of treeNode

              +

              1. Judge whether the first selected node's child nodes has been loaded asynchronously

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var sNodes = treeObj.getSelectedNodes();
              +if (sNodes.length > 0) {
              +	var zAsync = sNodes[0].zAsync;
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.addNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.addNodes.html new file mode 100644 index 0000000..c40caaf --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.addNodes.html @@ -0,0 +1,47 @@ +
              +
              +

              Function(parentNode, [index], newNodes, isSilent)zTreeObj.addNodes

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Add nodes

              +

              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.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              parentNodeJSON

              +

              The additional node's parent node. If additional node is root node, please the parentNode is null.

              +

              Please ensure this node data object is a data object within zTree.

              +

              [index]Number

              +

              The index of the parentNode's children where the newnodes will be added (the value start from 0)

              +

              When index = -1, the newnodes will be added to the last

              +

              This parameter can be ignore.

              +

              v3.5.19+

              +

              newNodesJSON / Array(JSON)

              +

              The node data's JSON object collection which need to increase, refer to 'treeNode treeNode data details'

              +

              1. zTree v3.x support to add single node, that is, if you only add a node, you can don't use the array.

              +

              2. If you use simple data model, please refer to the attributes within the 'setting.data.simpleData'.

              +

              isSilentBoolean

              +

              Set whether to automatically expand the parent node, after add nodes.

              +

              isSilent = true means: don't auto expand the parent node. Otherwise auto expand.

              +

              Return Array(JSON)

              +

              return the new nodes in zTree

              +

              If the newNodes is single data object, the return value is a array with length is 1.

              +

              Note: the node data JSON object in the return value is not equal to the JSON object in the 'newNodes'.

              +
              +

              Examples of function

              +

              1. Add one root node to zTree which id is 'tree'

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var newNode = {name:"newNode1"};
              +newNode = treeObj.addNodes(null, newNode);
              +
              +

              2. Add three root nodes to zTree which id is 'tree'

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var newNodes = [{name:"newNode1"}, {name:"newNode2"}, {name:"newNode3"}];
              +newNodes = treeObj.addNodes(null, newNodes);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelEditName.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelEditName.html new file mode 100644 index 0000000..8afdae0 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelEditName.html @@ -0,0 +1,30 @@ +
              +
              +

              Function(newName)zTreeObj.cancelEditName

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Cancel the edit name status. Can restore the original name, and can also force assigned to a new name.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              newNameString

              +

              Re given a new name

              +

              If this parameter is omitted, then restore the original name.

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Cancel edit name, and restore the original name.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.cancelEditName();
              +
              +

              2. Cancel edit name , and set the new name.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.cancelEditName("test_new_name");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelSelectedNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelSelectedNode.html new file mode 100644 index 0000000..84c6c80 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.cancelSelectedNode.html @@ -0,0 +1,35 @@ +
              +
              +

              Function(treeNode)zTreeObj.cancelSelectedNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              To cancel the selected node.

              +

              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.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node which need to cancel selected.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              If you omit this parameter, zTree will cancel all of the selected nodes.

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Cancel all of the selected nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.cancelSelectedNode();
              +
              +

              2. Cancel the first node of the selected nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) { 
              +	treeObj.cancelSelectedNode(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.checkAllNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.checkAllNodes.html new file mode 100644 index 0000000..de00e11 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.checkAllNodes.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(checked)zTreeObj.checkAllNodes

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Check or unCheck all nodes which have been initialized. It is valid when [setting.check.enable = true & setting.check.chkStyle = "checkbox"]

              +

              This method does not trigger 'beforeCheck' or 'onCheck' callback function.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              checkedBoolean

              +

              checked = true means: check all nodes.

              +

              checked = false means: uncheck all nodes.

              +

              Don't affect the node which 'nocheck' attribute is true.

              +

              Don't affect the node is not loaded.

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. check all nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.checkAllNodes(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.checkNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.checkNode.html new file mode 100644 index 0000000..741eb3b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.checkNode.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(treeNode, checked, checkTypeFlag, callbackFlag)zTreeObj.checkNode

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Check or unCheck a single node. It is valid when [setting.check.enable = true]

              +

              Use checkNode() method of zTree v3.x can trigger 'beforeCheck' or 'onCheck' callback function. for reduce redundant code.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node which need to be checked or unchecked.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              checkedBoolean

              +

              checked = true means: check node.

              +

              checked = false means: uncheck node.

              +

              If this parameter is omitted, then toggle check or uncheck depend this node's expanded state.

              +

              Don't affect the node which 'nocheck' attribute is true.

              +

              checkTypeFlagBoolean

              +

              checkTypeFlag = true means: According to 'setting.check.chkboxType' attribute automatically check or uncheck the parent and child nodes.

              +

              checkTypeFlag = false means: only check or uncheck this node, don't affect its parent and child nodes.

              +

              When checkTypeFlag = false and treeNode.checked = checked, will not trigger callback function.

              +

              Don't affect the parent and child nodes which 'nocheck' attribute is true.

              +

              callbackFlagBoolean

              +

              callbackFlag = true means: call this method, will trigger 'beforeCheck' & 'onCheck' callback.

              +

              callbackFlag = false means: call this method, will not trigger callback.

              +

              If this parameter is omitted, it is same as 'callbackFlag = false'

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. check the selected nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +for (var i=0, l=nodes.length; i < l; i++) {
              +	treeObj.checkNode(nodes[i], true, true);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.copyNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.copyNode.html new file mode 100644 index 0000000..ff7b5b5 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.copyNode.html @@ -0,0 +1,47 @@ +
              +
              +

              Function(targetNode, treeNode, moveType, isSilent)zTreeObj.copyNode

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Copy the node

              +

              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.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              targetNodeJSON

              +

              JSON data object of the node to be target.

              +

              If copy the node to root node, please set the 'targetNode' to null.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              treeNodeJSON

              +

              JSON data object of the node to be copied.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              moveTypeString

              +

              Copied to the target node's relative position.

              +

              "inner" means: to be taregetNode's child node.

              +

              "prev" means: to be taregetNode's previous sibling node.

              +

              "next" means: to be taregetNode's next sibling node.

              +

              isSilentBoolean

              +

              After copy the node, whether to automatically expand its parent node.

              +

              isSilent = true means: don't expand its parent node.

              +

              isSilent = false or omit this parameter means: expand its parent node.

              +

              Return JSON

              +

              return the new node in zTree

              +

              Note: the node data JSON object in the return value is not equal to the treeNode.

              +
              +

              Examples of function

              +

              1. Copy the second root node to the first root node's child node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.copyNode(nodes[0], nodes[1], "inner");
              +
              +

              2. Copy the second root node to the first root node's previous sibling node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.copyNode(nodes[0], nodes[1], "before");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.destroy.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.destroy.html new file mode 100644 index 0000000..80c5281 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.destroy.html @@ -0,0 +1,25 @@ +
              +
              +

              Function(treeId)zTreeObj.destroy

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              From zTree v3.4, zTree support the method for destruction.

              +

              1. This method can destroy the zTreeObj's zTree.

              +

              2. If you want to destory all of the zTrees, you can use the '$.fn.zTree.destroy()' method.

              +

              3. If you want to use the tree which has been destroyed, you must use the 'init()' method at first.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. destroy the zTree which its id is 'treeDemo'

              +
              var zTreeObj = $.fn.zTree.getZTreeObj("treeDemo");
              +zTreeObj.destroy();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.editName.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.editName.html new file mode 100644 index 0000000..f8df264 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.editName.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNode)zTreeObj.editName

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Start editing the node's name.

              +

              1. If need to cancel editing the node's name, please use cancelEditName(newName) method.

              +

              2. This method can be used to set the editing node‘s input box to get focus.

              +

              3. Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node to be editing name

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Retrun none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Start editing the first selected node's name.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.editName(nodes[0]);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.expandAll.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.expandAll.html new file mode 100644 index 0000000..ef28a31 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.expandAll.html @@ -0,0 +1,30 @@ +
              +
              +

              Function(expandFlag)zTreeObj.expandAll

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Expand or collapse all nodes.

              +

              This method does not trigger 'beforeExpand / onExpand' or 'beforeCollapse / onCollapse' callback function.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              expandFlagBoolean

              +

              expandFlag = true means: expand all nodes.

              +

              expandFlag = false means: collapse all nodes.

              +

              Return Boolean

              +

              return the result of expand or collapse.

              +

              true means: expand all nodes

              +

              false means: collapse all nodes

              +

              null means: have no parent node to expand or collapse.

              +
              +

              Examples of function

              +

              1. Expand all nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.expandAll(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.expandNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.expandNode.html new file mode 100644 index 0000000..01e7442 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.expandNode.html @@ -0,0 +1,50 @@ +
              +
              +

              Function(treeNode, expandFlag, sonSign, focus, callbackFlag)zTreeObj.expandNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Expand or collapse single node.

              +

              Use expandNode() method of zTree v3.x can trigger 'beforeExpand / onExpand' or 'beforeCollapse / onCollapse' callback function. for reduce redundant code.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node to be expanded or collapsed

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              expandFlagBoolean

              +

              expandFlag = true means: expand the node.

              +

              expandFlag = false means: collapse the node.

              +

              If this parameter is omitted, then toggle expand or collapse depend this node's expanded state.

              +

              sonSignBoolean

              +

              sonSign = true means: expand or collapse all of the child nodes depend the 'expandFlag' parameter.

              +

              sonSign = false means: only expand or collapse this node.

              +

              When sonSign = false and treeNode.open = expandFlag, will not trigger the callback.

              +

              If this parameter is omitted, it is same as 'sonSign = false'.

              +

              focusBoolean

              +

              focus = true means: after expand or collapse, set the focus of this node for view.

              +

              focus = false means: after expand or coolapse, don't set the focus of this node.

              +

              If this parameter is omitted, it is same as 'focus = true'.

              +

              callbackFlagBoolean

              +

              callbackFlag = true means: call this method, will trigger 'beforeExpand / onExpand' or 'beforeCollapse / onCollapse' callback.

              +

              callbackFlag = false means: call this method, will not trigger callback.

              +

              If this parameter is omitted, it is same as 'callbackFlag = false'

              +

              Return Boolean

              +

              return the result of expand or collapse.

              +

              true means: expand node

              +

              false means: collapse node

              +

              null means: the node is not parent node.

              +
              +

              Examples of function

              +

              1. Expand the first selected node. (and expand this node's child nodes)

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	treeObj.expandNode(nodes[0], true, true, true);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getChangeCheckedNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getChangeCheckedNodes.html new file mode 100644 index 0000000..d0f9cf3 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getChangeCheckedNodes.html @@ -0,0 +1,24 @@ +
              +
              +

              Function()zTreeObj.getChangeCheckedNodes

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Get the collection of nodes which be changed checked status. (Compared with the original data checkedOld) It is valid when [setting.check.enable = true]

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              Return Array(JSON)

              +

              return the collection of nodes which be changed checked status (Array)

              +

              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 ).

              +
              +

              Examples of function

              +

              1. Get the collection of nodes which be changed checked status

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getChangeCheckedNodes();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getCheckedNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getCheckedNodes.html new file mode 100644 index 0000000..9e59b21 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getCheckedNodes.html @@ -0,0 +1,28 @@ +
              +
              +

              Function(checked)zTreeObj.getCheckedNodes

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Get the collection of nodes which be checked or unchecked. It is valid when [setting.check.enable = true]

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              checkedBoolean

              +

              checked = true means: get the collection of nodes which be checked

              +

              checked = false means: get the collection of nodes which be unchecked

              +

              If this parameter is omitted, it is same as 'checked = true'

              +

              Don't get the nodes which 'nocheck' attribute is true.

              +

              Return Array(JSON)

              +

              return the collection of nodes which be checked or unchecked. (Array)

              +
              +

              Examples of function

              +

              1. Get the collection of nodes which be checked.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getCheckedNodes(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByParam.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByParam.html new file mode 100644 index 0000000..05572e7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByParam.html @@ -0,0 +1,32 @@ +
              +
              +

              Function(key, value, parentNode)zTreeObj.getNodeByParam

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              According to the node data attribute, search the node which exactly matches, and get the JSON object of node.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              keyString

              +

              The name of attribute which need to exactly match

              +

              value?

              +

              The value which need to exactly match, can be any type, please ensure its type consistent with the attribute values.

              +

              parentNodeJSON

              +

              The search range, you can search node from a parent node's child nodes.

              +

              If this parameter is omitted, zTree will search node from all nodes.

              +

              Return JSON

              +

              JSON data object of the node which be searched.

              +

              1. If search none node, return null.

              +

              2. If there are many nodes can be searched, return the first node.

              +
              +

              Examples of function

              +

              1. Search the node which its 'id' attribute is 1.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodeByParam("id", 1, null);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByTId.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByTId.html new file mode 100644 index 0000000..8fd26ea --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeByTId.html @@ -0,0 +1,27 @@ +
              +
              +

              Function(tId)zTreeObj.getNodeByTId

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              According the unique identifier tId of zTree, quick get the node's JSON data object.

              +

              Get the node from the cache, don't need to search from all nodes.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              tIdString

              +

              The unique identifier of node.

              +

              Return JSON

              +

              JSON data object of the node which be searched.

              +

              If no result, return null.

              +
              +

              Examples of function

              +

              1. 1. Search the node which its 'tId' attribute is 'tree_10'

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodeByTId("tree_10");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeIndex.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeIndex.html new file mode 100644 index 0000000..ad828e7 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodeIndex.html @@ -0,0 +1,30 @@ +
              +
              +

              Function(treeNode)zTreeObj.getNodeIndex

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the node's index in the same level nodes. (start from 0)

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node which need to get index.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Return Number

              +

              return the index. (start from 0)

              +

              If there is no this node, return -1.

              +
              +

              Examples of function

              +

              1. Get the first selected node's index in the same level nodes.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	var index = treeObj.getNodeIndex(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodes.html new file mode 100644 index 0000000..5906a43 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodes.html @@ -0,0 +1,26 @@ +
              +
              +

              Function()zTreeObj.getNodes

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get all of the nodes in zTree

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              Return Array(JSON)

              +

              return all of the nodes

              +

              1. This array is a collection of the root nodes (the default child nodes are in the 'children' attributes);

              +

              2. Traverse all the nodes need to use recursion, or the use of transformToArray() method make the nodes to be a simple array.

              +

              3. For the asynchronous loading mode, can't get the nodes which are yet loaded.

              +
              +

              Examples of function

              +

              1. Get all of the nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByFilter.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByFilter.html new file mode 100644 index 0000000..2cd6baa --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByFilter.html @@ -0,0 +1,43 @@ +
              +
              +

              Function(filter, isSingle, parentNode, invokeParam)zTreeObj.getNodesByFilter

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Search the single node's data or collection of nodes's data by custom rules.

              +

              Can be customized complex search rules.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              filterFunction

              +

              Custom search function. e.g. function filter(node) {...}

              +

              filter's parameter: node (node's data -- JSON)

              +

              filter's return: boolean (true means: match the rules; false means: don't match the rules)

              +

              isSingleBoolean

              +

              isSingle = true means: search only one node

              +

              isSingle = false means: search the array of the nodes

              +

              If this parameter is omitted, as same as false

              +

              parentNodeJSON

              +

              The search range, you can search node from a parent node's child nodes.

              +

              If this parameter is omitted, zTree will search node from all nodes.

              +

              invokeParamanything

              +

              Custom data object by user, used to calculate in the filter function.

              +

              Return Array(JSON) / JSON

              +

              If isSingle = true, will return the first node's data (JSON) what be matched. If no match, return null.

              +

              If isSingle = false, will return the array of all nodes's data what be matched. if no match, return [ ].

              +
              +

              Examples of function

              +

              1. Search the nodes which their 'name' contains 'test' and 'level' is 2.

              +
              function filter(node) {
              +    return (node.level == 2 && node.name.indexOf("test")>-1);
              +}
              +......
              +var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodesByFilter(filter, true); // search only one node
              +var nodes = treeObj.getNodesByFilter(filter); // search the array of the nodes
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParam.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParam.html new file mode 100644 index 0000000..3173af4 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParam.html @@ -0,0 +1,31 @@ +
              +
              +

              Function(key, value, parentNode)zTreeObj.getNodesByParam

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              According to the node data attribute, search the nodes which exactly matches, and get the JSON objects collection of nodes.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              keyString

              +

              The name of attribute which need to exactly match

              +

              value?

              +

              The value which need to exactly match, can be any type, please ensure its type consistent with the attribute values.

              +

              parentNodeJSON

              +

              The search range, you can search node from a parent node's child nodes.

              +

              If this parameter is omitted, zTree will search node from all nodes.

              +

              Return Array(JSON)

              +

              The JSON data objects collection of the nodes which be searched.

              +

              If search none node, return [ ].

              +
              +

              Examples of function

              +

              1. Search the nodes which their 'name' attribute is 'test'.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodesByParam("name", "test", null);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParamFuzzy.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParamFuzzy.html new file mode 100644 index 0000000..14b6c29 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getNodesByParamFuzzy.html @@ -0,0 +1,32 @@ +
              +
              +

              Function(key, value, parentNode)zTreeObj.getNodesByParamFuzzy

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              According to the node data attribute, search the nodes which fuzzy matches, and get the JSON objects collection of nodes.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              keyString

              +

              The name of attribute which need to fuzzy match

              +

              valueString

              +

              The value which need to fuzzy match.

              +

              The type of value can only be String

              +

              parentNodeJSON

              +

              The search range, you can search node from a parent node's child nodes.

              +

              If this parameter is omitted, zTree will search node from all nodes.

              +

              Return Array(JSON)

              +

              The JSON data objects collection of the nodes which be searched.

              +

              If search none node, return [ ].

              +
              +

              Examples of function

              +

              1. Search the nodes which their 'name' attribute contains the string 'test'.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodesByParamFuzzy("name", "test", null);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.getSelectedNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getSelectedNodes.html new file mode 100644 index 0000000..4a0f060 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.getSelectedNodes.html @@ -0,0 +1,23 @@ +
              +
              +

              Function()zTreeObj.getSelectedNodes

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Get the JSON data objects collection of the selected nodes in zTree.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              Return Array(JSON)

              +

              The JSON data objects collection of the selected nodes.

              +
              +

              Examples of function

              +

              1. get the selected nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNode.html new file mode 100644 index 0000000..8ddb684 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNode.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNode)zTreeObj.hideNode

              +

              Overview[ depends on jquery.ztree.exhide js ]

              +
              +

              +
              +

              To hide any node.

              +

              1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.

              +

              2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.

              +

              3. Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node to be hidden

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Retrun none

              +

              no return value

              +
              +

              Examples of function

              +

              1. hide the first root node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.hideNode(nodes[0]);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNodes.html new file mode 100644 index 0000000..9bf8e6b --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.hideNodes.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNodes)zTreeObj.hideNodes

              +

              Overview[ depends on jquery.ztree.exhide js ]

              +
              +

              +
              +

              To hide a group of nodes.

              +

              1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.

              +

              2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.

              +

              3. Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodesArray(JSON)

              +

              the array of the nodes which will be hidden

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Retrun none

              +

              no return value

              +
              +

              Examples of function

              +

              1. hide the first root node's children.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.hideNodes(nodes[0].children);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.moveNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.moveNode.html new file mode 100644 index 0000000..1f3b88c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.moveNode.html @@ -0,0 +1,49 @@ +
              +
              +

              Function(targetNode, treeNode, moveType, isSilent)zTreeObj.moveNode

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Move the node

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              targetNodeJSON

              +

              JSON data object of the node to be target.

              +

              If move the node to root node, please set the 'targetNode' to null.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              treeNodeJSON

              +

              JSON data object of the node to be moved.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              moveTypeString

              +

              Moved to the target node's relative position.

              +

              "inner" means: to be taregetNode's child node.

              +

              "prev" means: to be taregetNode's previous sibling node.

              +

              "next" means: to be taregetNode's next sibling node.

              +

              isSilentBoolean

              +

              After move the node, whether to automatically expand its parent node.

              +

              isSilent = true means: don't expand its parent node.

              +

              isSilent = false or omit this parameter means: expand its parent node.

              +

              Return JSON

              +

              return the node which be moved, it is same as the 'treeNode' parameter.

              +

              Return null means: move node has failed. The cause:
              +  1. the targetNode is the treeNode's parent node, and moveType = "inner"
              +  2. the targetNode is the treeNode's child node. +

              +
              +

              Examples of function

              +

              1. Move the second root node to the first root node's child node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.moveNode(nodes[0], nodes[1], "inner");
              +
              +

              2. Move the second root node to the first root node's previous sibling node.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +treeObj.moveNode(nodes[0], nodes[1], "prev");
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodes.html new file mode 100644 index 0000000..9b9a930 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodes.html @@ -0,0 +1,48 @@ +
              +
              +

              Function(parentNode, reloadType, isSilent, callback)zTreeObj.reAsyncChildNodes +

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Forced asynchronous loading child nodes of parent node. It is valid when [setting.async.enable = true] +

              +

              You can use this method to reload child nodes.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              parentNodeJSON

              +

              The parent node which will asynchronous loading child nodes.

              +

              1. If parentNode = null, it is same as reload root nodes.

              +

              2. If parentNode.isParent = false, don't load nodes.

              +

              3. Please ensure that this data object is an internal node data object in + zTree.

              +

              reloadTypeString

              +

              reloadType = "refresh" means: reload child nodes.

              +

              reloadType != "refresh" means: append to load child nodes.

              +

              isSilentBoolean

              +

              Set whether to automatically expand the parent node, after load nodes.

              +

              isSilent = true means: don't auto expand the parent node. Otherwise auto expand.

              +

              callbackfunction

              +

              zTree will trigger this callback() function after reAsyncChildNodes()

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. reload root nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.reAsyncChildNodes(null, "refresh");
              +
              +

              2. reload the first selected node's child nodes.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	treeObj.reAsyncChildNodes(nodes[0], "refresh");
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodesPromise.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodesPromise.html new file mode 100644 index 0000000..599e2af --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.reAsyncChildNodesPromise.html @@ -0,0 +1,47 @@ +
              +
              +

              Function(parentNode, reloadType, isSilent)zTreeObj.reAsyncChildNodesPromise +

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Forced asynchronous loading child nodes of parent node ( for ES6 Promise ). It is valid when [setting.async.enable = true] +

              +

              You can use this method to reload child nodes.

              +

              Please use zTree object to executing the method.

              +

              v3.5.29+

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              parentNodeJSON

              +

              The parent node which will asynchronous loading child nodes.

              +

              1. If parentNode = null, it is same as reload root nodes.

              +

              2. If parentNode.isParent = false, don't load nodes.

              +

              3. Please ensure that this data object is an internal node data object in + zTree.

              +

              reloadTypeString

              +

              reloadType = "refresh" means: reload child nodes.

              +

              reloadType != "refresh" means: append to load child nodes.

              +

              isSilentBoolean

              +

              Set whether to automatically expand the parent node, after load nodes.

              +

              isSilent = true means: don't auto expand the parent node. Otherwise auto expand.

              +

              Return ES6 Promise

              +

              Promise Object of ES6

              +
              +

              Examples of function

              +

              1. reload root nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.reAsyncChildNodes(null, "refresh");
              +
              +

              2. reload the first selected node's child nodes.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes.length>0) {
              +	treeObj.reAsyncChildNodes(nodes[0], "refresh");
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.refresh.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.refresh.html new file mode 100644 index 0000000..8316192 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.refresh.html @@ -0,0 +1,24 @@ +
              +
              +

              Function()zTreeObj.refresh

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Refresh zTree

              +

              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.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. refresh zTree

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.refresh();
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.removeChildNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.removeChildNodes.html new file mode 100644 index 0000000..c249e17 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.removeChildNodes.html @@ -0,0 +1,32 @@ +
              +
              +

              Function(parentNode)zTreeObj.removeChildNodes

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Remove a parent node's child nodes

              +

              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.

              +

              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.

              +

              3. This method does not trigger any callback function.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              parentNodeJSON

              +

              The parent node which need to clear its child nodes.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Return Array(JSON)

              +

              Return the parent node's child nodes which have been removed. If has no child nodes, return null.

              +
              +

              Examples of function

              +

              1. Remove the first selected node's child nodes

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +if (nodes && nodes.length>0) {
              +	treeObj.removeChildNodes(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.removeNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.removeNode.html new file mode 100644 index 0000000..67ad7e2 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.removeNode.html @@ -0,0 +1,34 @@ +
              +
              +

              Function(treeNode, callbackFlag)zTreeObj.removeNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Remove a node

              +

              Use removeNode() method of zTree v3.x can trigger 'beforeRemove / onRemove' callback function. for reduce redundant code.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node to be removed.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              callbackFlagBoolean

              +

              callbackFlag = true means: call this method, will trigger 'beforeRemove' & 'onRemove' callback.

              +

              callbackFlag = false means: call this method, will not trigger callback.

              +

              If this parameter is omitted, it is same as 'callbackFlag = false'

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Remove all of the selected nodes.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +for (var i=0, l=nodes.length; i < l; i++) {
              +	treeObj.removeNode(nodes[i]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.selectNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.selectNode.html new file mode 100644 index 0000000..45c4c10 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.selectNode.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeNode, addFlag, isSilent)zTreeObj.selectNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Select a node

              +

              zTree v3.x supports select multiple nodes.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node to be selected.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              addFlagBoolean

              +

              addFlag = true means: append to select node, don't affect the previously selected node, can select multiple nodes.

              +

              addFlag = false (default) means: select single node, prior the selected node is deselected.

              +

              If setting.view.selectedMulti = false, this para, this parameter is not valid, always select single node

              +

              isSilent = true means: when you select node, zTree will not scroll the node into view.

              +

              isSilent = false (default) means: when you select node, zTree will scroll the node into view.

              +

              (v3.5.23+)

              +

              Return none

              +

              no return value

              +
              +

              Exampleso of function

              +

              1. Select single node which be first selected.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +if (nodes.length>0) {
              +	treeObj.selectNode(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.setChkDisabled.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.setChkDisabled.html new file mode 100644 index 0000000..30b5342 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.setChkDisabled.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(node, disabled, inheritParent, inheritChildren)zTreeObj.setChkDisabled

              +

              Overview[ depends on jquery.ztree.excheck js ]

              +
              +

              +
              +

              Set the node's checkbox or radio is disabled or remove disabled. It is valid when [setting.check.enable = true]

              +

              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.

              +

              2. Please do not directly modify the 'chkDisabled' attribute of the loaded node.

              +

              3. Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node which need to be checked or unchecked.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              disabledBoolean

              +

              disabled = true means: the node's checkbox / radio is disabled.

              +

              disabled = false means: the node's checkbox / radio is removed disabled.

              +

              If this parameter is omitted, it is same as disabled = false

              +

              Don't affect the node which 'nocheck' attribute is true.

              +

              inheritParentBoolean

              +

              inheritParent = true means: all parent nodes's disabled status will be same as this node.

              +

              inheritParent = false means: all parent nodes's disabled status will be not affected.

              +

              If this parameter is omitted, it is same as 'inheritParent = false'

              +

              inheritChildrenBoolean

              +

              inheritChildren = true means: all child nodes's disabled status will be same as this node.

              +

              inheritChildren = false means: all child nodes's disabled status will be not affected.

              +

              If this parameter is omitted, it is same as 'inheritChildren = false'

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Set the selected nodes's checkbox / radio to disable.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getSelectedNodes();
              +for (var i=0, l=nodes.length; i < l; i++) {
              +	treeObj.setChkDisabled(nodes[i], true);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.setEditable.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.setEditable.html new file mode 100644 index 0000000..a44b0ff --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.setEditable.html @@ -0,0 +1,27 @@ +
              +
              +

              Function(editable)zTreeObj.setEditable

              +

              Overview[ depends on jquery.ztree.exedit js ]

              +
              +

              +
              +

              Edit mode and normal mode switch.

              +

              To use edit mode, please set the attributes in 'setting.edit'

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              editableBoolean

              +

              true means: set zTree to edit mode.

              +

              false means: set zTree to normal mode.

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. set zTree to edit mode

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +treeObj.setEditable(true);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.setting.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.setting.html new file mode 100644 index 0000000..d80c139 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.setting.html @@ -0,0 +1,14 @@ +
              +
              +

              JSONzTreeObj.setting

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              The configuration data of zTree, refer to "setting details"

              +

              zTree v3.x to cancel the original operation setting method, so users can modify.

              +

              Note: Modify the parameters which affect zTree initialization will not work, please first understand the different attributes.

              +
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.showNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.showNode.html new file mode 100644 index 0000000..08b2a06 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.showNode.html @@ -0,0 +1,31 @@ +
              +
              +

              Function(treeNode)zTreeObj.showNode

              +

              Overview[ depends on jquery.ztree.exhide js ]

              +
              +

              +
              +

              To hide any node which be hidden.

              +

              1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.

              +

              2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.

              +

              3. Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodesArray(JSON)

              +

              JSON data object of the node to be shown

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Retrun none

              +

              no return value

              +
              +

              Examples of function

              +

              1. show someone node which be hidden.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var node = treeObj.getNodeByParam("isHidden", true);
              +if (node) {
              +  treeObj.showNode(node);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.showNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.showNodes.html new file mode 100644 index 0000000..c0c926c --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.showNodes.html @@ -0,0 +1,29 @@ +
              +
              +

              Function(treeNodes)zTreeObj.showNodes

              +

              Overview[ depends on jquery.ztree.exhide js ]

              +
              +

              +
              +

              To show a group of nodes which be hidden.

              +

              1. This feature can't support the 'exedit' feature, so please don't use this feature in edit mode.

              +

              2. If you hide or show the nodes, it will effect the 'isFirstNode' and 'isLastNode' attribute.

              +

              3. Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodesArray(JSON)

              +

              the array of the nodes which will be shown

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              Retrun none

              +

              no return value

              +
              +

              Examples of function

              +

              1. show all of the nodes which be hidden.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodesByParam("isHidden", true);
              +treeObj.showNodes(nodes);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.transformToArray.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.transformToArray.html new file mode 100644 index 0000000..4b2296d --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.transformToArray.html @@ -0,0 +1,27 @@ +
              +
              +

              Function(treeNodes)zTreeObj.transformToArray

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              +

              Transform the zTree nodes data into simple array. (To avoid the user to write code to traverse all nodes)

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodesArray(JSON) / JSON

              +

              JSON data object of the node which need to be transformed.

              +

              or JSON data objects collection of the nodes which need to be transformed.

              +

              Return Array(JSON)

              +

              The JSON data objects array of the nodes which be transformed.

              +
              +

              Examples of function

              +

              1. Transform the zTree nodes data into simple array.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.transformToArray(treeObj.getNodes());
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.transformTozTreeNodes.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.transformTozTreeNodes.html new file mode 100644 index 0000000..7015016 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.transformTozTreeNodes.html @@ -0,0 +1,44 @@ +
              +
              +

              Function(simpleNodes)zTreeObj.transformTozTreeNodes

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Transform the simple array into zTree nodes data.

              +

              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.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              simpleNodesArray(JSON) / JSON

              +

              JSON data object of the node which need to be transformed.

              +

              or JSON data objects array of the nodes which need to be transformed.

              +

              Return Array(JSON)

              +

              Standard data which zTree use. The child nodes are stored in the parent node's 'children' attribute.

              +

              If simpleNodes is a single JSON, so the return array's length is 1.

              +
              +

              Examples of function

              +

              1. Transform the simple array data into zTree nodes format.

              +
              var setting = {
              +	data: {
              +		simpleData: {
              +			enable: true,
              +			idKey: "id",
              +			pIdKey: "pId",
              +			rootPId: 0
              +		}
              +	}
              +};
              +var simpleNodes = [
              +    {"id":1, "pId":0, "name":"test1"},
              +    {"id":11, "pId":1, "name":"test11"},
              +    {"id":12, "pId":1, "name":"test12"},
              +    {"id":111, "pId":11, "name":"test111"}
              +];
              +var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.transformTozTreeNodes(simpleNodes);
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/api/en/zTreeObj.updateNode.html b/src/main/resources/static/lib/ztree/api/en/zTreeObj.updateNode.html new file mode 100644 index 0000000..a914b12 --- /dev/null +++ b/src/main/resources/static/lib/ztree/api/en/zTreeObj.updateNode.html @@ -0,0 +1,37 @@ +
              +
              +

              Function(treeNode, checkTypeFlag)zTreeObj.updateNode

              +

              Overview[ depends on jquery.ztree.core js ]

              +
              +

              +
              +

              Update node data. Primarily used to update the node's DOM.

              +

              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.

              +

              2. Use updateNode() method of zTree can't trigger 'beforeCheck' or 'onCheck' callback function.

              +

              Please use zTree object to executing the method.

              +
              +
              +

              Function Parameter Descriptions

              +
              +

              treeNodeJSON

              +

              JSON data object of the node which need to update.

              +

              Please ensure that this data object is an internal node data object in zTree.

              +

              checkTypeFlagBoolean

              +

              checkTypeFlag = true means: According to 'setting.check.chkboxType' attribute automatically check or uncheck the parent and child nodes.

              +

              checkTypeFlag = false means: only check or uncheck this node, don't affect its parent and child nodes.

              +

              This parameter is valid when 'setting.check.enable = true' and 'setting.check.chkStyle = "checkbox"'

              +

              Don't affect the parent and child nodes which 'nocheck' attribute is true.

              +

              Return none

              +

              no return value

              +
              +

              Examples of function

              +

              1. Modify the first selected node's name, and update it.

              +
              var treeObj = $.fn.zTree.getZTreeObj("tree");
              +var nodes = treeObj.getNodes();
              +if (nodes.length>0) {
              +	nodes[0].name = "test";
              +	treeObj.updateNode(nodes[0]);
              +}
              +
              +
              +
              \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.css b/src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.css new file mode 100644 index 0000000..c1fcf3a --- /dev/null +++ b/src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.css @@ -0,0 +1,386 @@ +/*------------------------------------- +zTree Style using fontawesome instead of images + +version: 1.1 +author: Mike King +email: mikkelking @ hotmail . com +website: http://code.google.com/p/jquerytree/ + +-------------------------------------*/ +/* Definitions ----------------------*/ +/* End of Definitions ---------------*/ +/* Imports -------------------------*/ +/* End of Imports ------------------*/ +.ztree * { + padding: 0; + margin: 0; + font-size: 12px; + font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; + background-color: #af0000; +} +.ztree { + margin: 0; + padding: 5px; + color: #ffffff; + background-color: #af0000; +} +.ztree li { + padding: 0; + margin: 0; + list-style: none; + line-height: 17px; + text-align: left; + white-space: nowrap; + outline: 0; +} +.ztree li ul { + margin: 0px; + padding: 0 0 0 18px; +} +.ztree li a { + padding-right: 3px; + margin: 0; + cursor: pointer; + height: 17px; + color: #ffffff; + background-color: transparent; + text-decoration: none; + vertical-align: top; + display: inline-block; +} +.ztree li a input.rename { + height: 14px; + width: 80px; + padding: 0; + margin: 0; + color: #af0000; + background-color: #ffffff; + font-size: 12px; + border: 1px #585956 solid; + *border: 0px; +} +.ztree li a:hover { + text-decoration: underline; +} +.ztree li a.curSelectedNode { + padding-top: 0px; + background-color: #af4040; + color: #ffff00; + height: 17px; + opacity: 0.8; +} +.ztree li a.curSelectedNode_Edit { + padding-top: 0px; + background-color: transparent; + color: #ffff00; + height: 17px; + border: 1px #666 solid; + opacity: 0.8; +} +.ztree li a.tmpTargetNode_inner { + padding-top: 0px; + background-color: #aaa; + color: #ffff00; + height: 17px; + border: 1px #666 solid; + opacity: 0.8; + filter: alpha(opacity=80); +} +.ztree li span { + line-height: 17px; + margin-right: 2px; + background-color: transparent; +} +.ztree li span.button { + line-height: 0; + margin: 0; + padding: 0; + width: 15px; + height: 17px; + display: inline-block; + vertical-align: top; + border: 0px solid; + cursor: pointer; + outline: none; + background-color: transparent; + background-repeat: no-repeat; + background-attachment: scroll; +} +.ztree li span.button::before { + color: #ffffff; + font-family: FontAwesome; + padding-top: 10px; +} +.ztree li span.button.chk { + margin: 0px; + cursor: auto; + width: 12px; + display: inline-block; + padding-top: 10px; + padding-left: 2px; +} +.ztree li span.button.chk.checkbox_false_full::before { + content: "\f096"; +} +.ztree li span.button.chk.checkbox_false_full_focus::before { + content: "\f096"; + color: #ffff00; +} +.ztree li span.button.chk.checkbox_false_part::before { + content: "\f096"; + color: #aaaaaa; +} +.ztree li span.button.chk.checkbox_false_part_focus::before { + content: "\f096"; + color: #cad96c; +} +.ztree li span.button.chk.checkbox_false_disable::before { + content: "\f096"; + color: #808080; +} +.ztree li span.button.chk.checkbox_true_full::before { + content: "\f046"; +} +.ztree li span.button.chk.checkbox_true_full_focus::before { + content: "\f046"; +} +.ztree li span.button.chk.checkbox_true_part::before { + content: "\f14a"; +} +.ztree li span.button.chk.checkbox_true_part_focus::before { + content: "\f14a"; + color: #ffff00; +} +.ztree li span.button.chk.checkbox_true_full_focus::before { + content: "\f046"; + color: #ffff00; +} +.ztree li span.button.chk.checkbox_true_part::before { + content: "\f046"; + color: #aaaaaa; +} +.ztree li span.button.chk.checkbox_true_part_focus::before { + content: "\f046"; + color: #cad96c; +} +.ztree li span.button.chk.checkbox_true_disable::before { + content: "\f046"; + color: #808080; +} +.ztree li span.button.chk.radio_false_full::before { + content: "\f10c"; +} +.ztree li span.button.chk.radio_false_full_focus::before { + content: "\f10c"; + color: #ffff00; +} +.ztree li span.button.chk.radio_false_part::before { + content: "\f10c"; + color: #aaaaaa; +} +.ztree li span.button.chk.radio_false_part_focus::before { + content: "\f10c"; + color: #ffff00; +} +.ztree li span.button.chk.radio_false_disable::before { + content: "\f1db"; + color: #808080; +} +.ztree li span.button.chk.radio_true_full::before { + content: "\f192"; +} +.ztree li span.button.chk.radio_true_full_focus::before { + content: "\f192"; + color: #ffff00; +} +.ztree li span.button.chk.radio_true_part::before { + content: "\f192"; + color: #aaaaaa; +} +.ztree li span.button.chk.radio_true_part_focus::before { + content: "\f192"; + color: #aaaaaa; +} +.ztree li span.button.chk.radio_true_disable::before { + content: "\f1db"; + color: #808080; +} +.ztree li span.button.switch { + width: 15px; + height: 17px; +} +.ztree li span.button.root_open::before { + content: "\f078"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.root_close::before { + content: "\f115"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.roots_open::before { + content: "\f078"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.roots_close::before { + content: "\f054"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.center_open::before { + content: "\f078"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.center_close::before { + content: "\f054"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.bottom_open::before { + content: "\f078"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.bottom_close::before { + content: "\f054"; + padding-top: 10px; + padding-left: 2px; + display: inline-block; +} +.ztree li span.button.root_docu { + background: none; +} +.ztree li span.button.roots_docu::before { + content: "\f022"; + padding-left: 2px; + display: inline-block; + color: #ffffff; +} +.ztree li span.button.center_docu::before { + padding-top: 10px; + padding-left: 2px; + display: inline-block; + color: #ffffff; +} +.ztree li span.button.bottom_docu::before { + padding-top: 10px; + padding-left: 2px; + display: inline-block; + color: #ffffff; +} +.ztree li span.button.noline_docu { + background: none; +} +.ztree li span.button.ico_open::before { + content: "\f115"; + font-family: FontAwesome; + padding-top: 10px; + padding-left: 2px; + display: inline-block; + color: #ffffff; +} +.ztree li span.button.ico_close::before { + content: "\f114"; + font-family: FontAwesome; + padding-top: 10px; + padding-left: 2px; + display: inline-block; + color: #ffffff; +} +.ztree li span.button.ico_docu::before { + content: "\f022"; + font-family: FontAwesome; + padding-top: 10px; + padding-left: 2px; + display: inline-block; + color: #ffffff; +} +.ztree li span.button.edit { + margin-left: 4px; + margin-right: -1px; + vertical-align: top; + *vertical-align: middle; + padding-top: 10px; +} +.ztree li span.button.edit::before { + content: "\f044"; + font-family: FontAwesome; +} +.ztree li span.button.remove { + margin-left: 4px; + margin-right: -1px; + vertical-align: top; + *vertical-align: middle; + padding-top: 10px; +} +.ztree li span.button.remove::before { + content: "\f1f8"; + font-family: FontAwesome; +} +.ztree li span.button.add { + margin-left: 4px; + margin-right: -1px; + vertical-align: top; + *vertical-align: middle; + padding-top: 10px; +} +.ztree li span.button.add::before { + content: "\f067"; + font-family: FontAwesome; +} +.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; +} +ul.tmpTargetzTree { + background-color: #FFE6B0; + opacity: 0.8; + filter: alpha(opacity=80); +} +span.tmpzTreeMove_arrow { + width: 16px; + height: 17px; + display: inline-block; + padding: 0; + margin: 2px 0 0 1px; + border: 0 none; + position: absolute; + background-color: transparent; + background-attachment: scroll; +} +span.tmpzTreeMove_arrow::before { + content: "\f04b"; + font-family: FontAwesome; + color: #ffff00; +} +ul.ztree.zTreeDragUL { + margin: 0; + padding: 0; + position: absolute; + width: auto; + height: auto; + overflow: hidden; + background-color: #cfcfcf; + border: 1px #ffff00 dotted; + opacity: 0.8; + filter: alpha(opacity=80); +} +.ztreeMask { + z-index: 10000; + background-color: #cfcfcf; + opacity: 0.0; + filter: alpha(opacity=0); + position: absolute; +} diff --git a/src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.less b/src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.less new file mode 100644 index 0000000..b282d81 --- /dev/null +++ b/src/main/resources/static/lib/ztree/css/awesomeStyle/awesome.less @@ -0,0 +1,146 @@ +/*------------------------------------- +zTree Style using fontawesome instead of images + +version: 1.1 +author: Mike King +email: mikkelking @ hotmail . com +website: http://code.google.com/p/jquerytree/ + +-------------------------------------*/ + +/* Definitions ----------------------*/ +@font-size: 12px; +// Regular icon and text color is white, which suits any medium -> dark background +@color-normal: white; +// Background color +@color-bg: #af0000; +// Highlight color +@color-highlight: yellow; +// Partially selected (checkboxes, radio buttons) +@color-partial: #aaaaaa; +// Partially selected and focused (checkboxes, radio buttons) +@color-partfocus: #cad96c; +// Disabled altogether +@color-disabled: #808080; +// Editing color +@color-edit: yellow; +@w: 15px; +@h: 17px; +@pad-left: 2px; +@pad-top: 10px; +/* End of Definitions ---------------*/ + +/* Imports -------------------------*/ +@import "fa.less"; +/* End of Imports ------------------*/ + +.ztree * {padding:0; margin:0; font-size:@font-size; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; background-color: @color-bg;} +.ztree { + margin:0; padding:5px; color:@color-normal; background-color: @color-bg; + li { + padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0; + ul { + margin: 0px; padding:0 0 0 18px; + } + ul.line { } + a {padding-right:3px; margin:0; cursor:pointer; height:@h; color:@color-normal; background-color: transparent; + text-decoration:none; vertical-align:top; display: inline-block; + input.rename {height:14px; width:80px; padding:0; margin:0; + color: @color-bg; background-color: @color-normal; + font-size:@font-size; border:1px #585956 solid; *border:0px} + } + a:hover {text-decoration:underline} + a.curSelectedNode {padding-top:0px; background-color:#af4040; color:@color-highlight; height:@h; opacity:0.8;} + a.curSelectedNode_Edit {padding-top:0px; background-color:transparent; color:@color-highlight; height:@h; border:1px #666 solid; opacity:0.8;} + a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:@color-highlight; height:@h; border:1px #666 solid; + opacity:0.8; filter:alpha(opacity=80)} + a.tmpTargetNode_prev {} + a.tmpTargetNode_next {} + span {line-height:@h; margin-right:2px; background-color:transparent;} + span.button {line-height:0; margin:0; padding: 0; width:@w; height:@h; display: inline-block; vertical-align:top; + border:0px solid; cursor: pointer;outline:none; + background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; + + &::before{color: @color-normal; font-family: FontAwesome; padding-top:@pad-top;} + &.chk { margin:0px; cursor: auto; width: 12px; + display: inline-block;padding-top:@pad-top;padding-left:@pad-left; + + &.checkbox_false_full::before {content: @fa-square-o;} + &.checkbox_false_full_focus::before {content: @fa-square-o; color:@color-highlight;} + &.checkbox_false_part::before {content: @fa-square-o;color: @color-partial;} + &.checkbox_false_part_focus::before {content: @fa-square-o; color:@color-partfocus;} + &.checkbox_false_disable::before {content: @fa-square-o; color:@color-disabled;} + &.checkbox_true_full::before {content: @fa-check-square-o;} + &.checkbox_true_full_focus::before {content: @fa-check-square-o;} + &.checkbox_true_part::before {content: @fa-check-square;} + &.checkbox_true_part_focus::before {content: @fa-check-square; color: @color-highlight} + &.checkbox_true_full_focus::before {content: @fa-check-square-o; color: @color-highlight} + &.checkbox_true_part::before {content: @fa-check-square-o;color: @color-partial} + &.checkbox_true_part_focus::before {content: @fa-check-square-o;color: @color-partfocus;} + &.checkbox_true_disable::before {content: @fa-check-square-o;color: @color-disabled} + + &.radio_false_full::before {content: @fa-circle-o;} + &.radio_false_full_focus::before {content: @fa-circle-o;color: @color-highlight} + &.radio_false_part::before {content: @fa-circle-o;color: @color-partial} + &.radio_false_part_focus::before {content: @fa-circle-o;color: @color-highlight} + &.radio_false_disable::before {content: @fa-circle-thin;color: @color-disabled} + &.radio_true_full::before {content: @fa-dot-circle-o;} + &.radio_true_full_focus::before {content: @fa-dot-circle-o;color: @color-highlight} + &.radio_true_part::before {content: @fa-dot-circle-o;color: @color-partial} + &.radio_true_part_focus::before {content: @fa-dot-circle-o;color: @color-partial;} + &.radio_true_disable::before {content: @fa-circle-thin;color: @color-disabled} + + } + &.switch {width:@w; height:@h} + &.root_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.root_close::before{content: @fa-folder-open-o;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.roots_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.roots_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.center_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.center_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.bottom_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.bottom_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;} + &.noline_open{} + &.noline_close{} + &.root_docu{ background:none;} + &.roots_docu::before{content: @fa-list-alt;padding-left:@pad-left;display: inline-block;color:@color-normal;} + &.center_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;} + &.bottom_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;} + &.noline_docu{ background:none;} + + &.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;} + &.ico_close::before {content: @fa-folder-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;} + &.ico_docu::before{content: @fa-list-alt;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;} + + &.edit {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;} + &.edit::before{content: @fa-pencil-square-o;font-family: FontAwesome;} + + &.remove {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;} + &.remove::before{content: @fa-trash;font-family: FontAwesome;} + + + &.add {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;} + &.add::before{content: @fa-plus;font-family: FontAwesome;} + + &.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle} + } + + } +} + + +ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} + +// this is the arrow that moves +span.tmpzTreeMove_arrow{width:16px; height:@h; display: inline-block; + padding:0; margin:2px 0 0 1px; border:0 none; position:absolute; + background-color:transparent; background-attachment: scroll; + } +span.tmpzTreeMove_arrow::before{content: @fa-play;font-family: FontAwesome;color: @color-highlight; + } +// outline + +ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; + background-color:#cfcfcf; border:1px @color-highlight dotted; opacity:0.8; filter:alpha(opacity=80)} +.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} + diff --git a/src/main/resources/static/lib/ztree/css/awesomeStyle/fa.less b/src/main/resources/static/lib/ztree/css/awesomeStyle/fa.less new file mode 100644 index 0000000..3714884 --- /dev/null +++ b/src/main/resources/static/lib/ztree/css/awesomeStyle/fa.less @@ -0,0 +1,480 @@ +@fa-glass: "\f000"; +@fa-music: "\f001"; +@fa-search: "\f002"; +@fa-envelope-o: "\f003"; +@fa-heart: "\f004"; +@fa-star: "\f005"; +@fa-star-o: "\f006"; +@fa-user: "\f007"; +@fa-film: "\f008"; +@fa-th-large: "\f009"; +@fa-th: "\f00a"; +@fa-th-list: "\f00b"; +@fa-check: "\f00c"; +@fa-times: "\f00d"; +@fa-search-plus: "\f00e"; +@fa-search-minus: "\f010"; +@fa-power-off: "\f011"; +@fa-signal: "\f012"; +@fa-cog: "\f013"; +@fa-trash-o: "\f014"; +@fa-home: "\f015"; +@fa-file-o: "\f016"; +@fa-clock-o: "\f017"; +@fa-road: "\f018"; +@fa-download: "\f019"; +@fa-arrow-circle-o-down: "\f01a"; +@fa-arrow-circle-o-up: "\f01b"; +@fa-inbox: "\f01c"; +@fa-play-circle-o: "\f01d"; +@fa-repeat: "\f01e"; +@fa-refresh: "\f021"; +@fa-list-alt: "\f022"; +@fa-lock: "\f023"; +@fa-flag: "\f024"; +@fa-headphones: "\f025"; +@fa-volume-off: "\f026"; +@fa-volume-down: "\f027"; +@fa-volume-up: "\f028"; +@fa-qrcode: "\f029"; +@fa-barcode: "\f02a"; +@fa-tag: "\f02b"; +@fa-tags: "\f02c"; +@fa-book: "\f02d"; +@fa-bookmark: "\f02e"; +@fa-print: "\f02f"; +@fa-camera: "\f030"; +@fa-font: "\f031"; +@fa-bold: "\f032"; +@fa-italic: "\f033"; +@fa-text-height: "\f034"; +@fa-text-width: "\f035"; +@fa-align-left: "\f036"; +@fa-align-center: "\f037"; +@fa-align-right: "\f038"; +@fa-align-justify: "\f039"; +@fa-list: "\f03a"; +@fa-outdent: "\f03b"; +@fa-indent: "\f03c"; +@fa-video-camera: "\f03d"; +@fa-picture-o: "\f03e"; +@fa-pencil: "\f040"; +@fa-map-marker: "\f041"; +@fa-adjust: "\f042"; +@fa-tint: "\f043"; +@fa-pencil-square-o: "\f044"; +@fa-share-square-o: "\f045"; +@fa-check-square-o: "\f046"; +@fa-arrows: "\f047"; +@fa-step-backward: "\f048"; +@fa-fast-backward: "\f049"; +@fa-backward: "\f04a"; +@fa-play: "\f04b"; +@fa-pause: "\f04c"; +@fa-stop: "\f04d"; +@fa-forward: "\f04e"; +@fa-fast-forward: "\f050"; +@fa-step-forward: "\f051"; +@fa-eject: "\f052"; +@fa-chevron-left: "\f053"; +@fa-chevron-right: "\f054"; +@fa-plus-circle: "\f055"; +@fa-minus-circle: "\f056"; +@fa-times-circle: "\f057"; +@fa-check-circle: "\f058"; +@fa-question-circle: "\f059"; +@fa-info-circle: "\f05a"; +@fa-crosshairs: "\f05b"; +@fa-times-circle-o: "\f05c"; +@fa-check-circle-o: "\f05d"; +@fa-ban: "\f05e"; +@fa-arrow-left: "\f060"; +@fa-arrow-right: "\f061"; +@fa-arrow-up: "\f062"; +@fa-arrow-down: "\f063"; +@fa-share: "\f064"; +@fa-expand: "\f065"; +@fa-compress: "\f066"; +@fa-plus: "\f067"; +@fa-minus: "\f068"; +@fa-asterisk: "\f069"; +@fa-exclamation-circle: "\f06a"; +@fa-gift: "\f06b"; +@fa-leaf: "\f06c"; +@fa-fire: "\f06d"; +@fa-eye: "\f06e"; +@fa-eye-slash: "\f070"; +@fa-exclamation-triangle: "\f071"; +@fa-plane: "\f072"; +@fa-calendar: "\f073"; +@fa-random: "\f074"; +@fa-comment: "\f075"; +@fa-magnet: "\f076"; +@fa-chevron-up: "\f077"; +@fa-chevron-down: "\f078"; +@fa-retweet: "\f079"; +@fa-shopping-cart: "\f07a"; +@fa-folder: "\f07b"; +@fa-folder-open: "\f07c"; +@fa-arrows-v: "\f07d"; +@fa-arrows-h: "\f07e"; +@fa-bar-chart: "\f080"; +@fa-twitter-square: "\f081"; +@fa-facebook-square: "\f082"; +@fa-camera-retro: "\f083"; +@fa-key: "\f084"; +@fa-cogs: "\f085"; +@fa-comments: "\f086"; +@fa-thumbs-o-up: "\f087"; +@fa-thumbs-o-down: "\f088"; +@fa-star-half: "\f089"; +@fa-heart-o: "\f08a"; +@fa-sign-out: "\f08b"; +@fa-linkedin-square: "\f08c"; +@fa-thumb-tack: "\f08d"; +@fa-external-link: "\f08e"; +@fa-sign-in: "\f090"; +@fa-trophy: "\f091"; +@fa-github-square: "\f092"; +@fa-upload: "\f093"; +@fa-lemon-o: "\f094"; +@fa-phone: "\f095"; +@fa-square-o: "\f096"; +@fa-bookmark-o: "\f097"; +@fa-phone-square: "\f098"; +@fa-twitter: "\f099"; +@fa-facebook: "\f09a"; +@fa-github: "\f09b"; +@fa-unlock: "\f09c"; +@fa-credit-card: "\f09d"; +@fa-rss: "\f09e"; +@fa-hdd-o: "\f0a0"; +@fa-bullhorn: "\f0a1"; +@fa-bell: "\f0f3"; +@fa-certificate: "\f0a3"; +@fa-hand-o-right: "\f0a4"; +@fa-hand-o-left: "\f0a5"; +@fa-hand-o-up: "\f0a6"; +@fa-hand-o-down: "\f0a7"; +@fa-arrow-circle-left: "\f0a8"; +@fa-arrow-circle-right: "\f0a9"; +@fa-arrow-circle-up: "\f0aa"; +@fa-arrow-circle-down: "\f0ab"; +@fa-globe: "\f0ac"; +@fa-wrench: "\f0ad"; +@fa-tasks: "\f0ae"; +@fa-filter: "\f0b0"; +@fa-briefcase: "\f0b1"; +@fa-arrows-alt: "\f0b2"; +@fa-users: "\f0c0"; +@fa-link: "\f0c1"; +@fa-cloud: "\f0c2"; +@fa-flask: "\f0c3"; +@fa-scissors: "\f0c4"; +@fa-files-o: "\f0c5"; +@fa-paperclip: "\f0c6"; +@fa-floppy-o: "\f0c7"; +@fa-square: "\f0c8"; +@fa-bars: "\f0c9"; +@fa-list-ul: "\f0ca"; +@fa-list-ol: "\f0cb"; +@fa-strikethrough: "\f0cc"; +@fa-underline: "\f0cd"; +@fa-table: "\f0ce"; +@fa-magic: "\f0d0"; +@fa-truck: "\f0d1"; +@fa-pinterest: "\f0d2"; +@fa-pinterest-square: "\f0d3"; +@fa-google-plus-square: "\f0d4"; +@fa-google-plus: "\f0d5"; +@fa-money: "\f0d6"; +@fa-caret-down: "\f0d7"; +@fa-caret-up: "\f0d8"; +@fa-caret-left: "\f0d9"; +@fa-caret-right: "\f0da"; +@fa-columns: "\f0db"; +@fa-sort: "\f0dc"; +@fa-sort-desc: "\f0dd"; +@fa-sort-asc: "\f0de"; +@fa-envelope: "\f0e0"; +@fa-linkedin: "\f0e1"; +@fa-undo: "\f0e2"; +@fa-gavel: "\f0e3"; +@fa-tachometer: "\f0e4"; +@fa-comment-o: "\f0e5"; +@fa-comments-o: "\f0e6"; +@fa-bolt: "\f0e7"; +@fa-sitemap: "\f0e8"; +@fa-umbrella: "\f0e9"; +@fa-clipboard: "\f0ea"; +@fa-lightbulb-o: "\f0eb"; +@fa-exchange: "\f0ec"; +@fa-cloud-download: "\f0ed"; +@fa-cloud-upload: "\f0ee"; +@fa-user-md: "\f0f0"; +@fa-stethoscope: "\f0f1"; +@fa-suitcase: "\f0f2"; +@fa-bell-o: "\f0a2"; +@fa-coffee: "\f0f4"; +@fa-cutlery: "\f0f5"; +@fa-file-text-o: "\f0f6"; +@fa-building-o: "\f0f7"; +@fa-hospital-o: "\f0f8"; +@fa-ambulance: "\f0f9"; +@fa-medkit: "\f0fa"; +@fa-fighter-jet: "\f0fb"; +@fa-beer: "\f0fc"; +@fa-h-square: "\f0fd"; +@fa-plus-square: "\f0fe"; +@fa-angle-double-left: "\f100"; +@fa-angle-double-right: "\f101"; +@fa-angle-double-up: "\f102"; +@fa-angle-double-down: "\f103"; +@fa-angle-left: "\f104"; +@fa-angle-right: "\f105"; +@fa-angle-up: "\f106"; +@fa-angle-down: "\f107"; +@fa-desktop: "\f108"; +@fa-laptop: "\f109"; +@fa-tablet: "\f10a"; +@fa-mobile: "\f10b"; +@fa-circle-o: "\f10c"; +@fa-quote-left: "\f10d"; +@fa-quote-right: "\f10e"; +@fa-spinner: "\f110"; +@fa-circle: "\f111"; +@fa-reply: "\f112"; +@fa-github-alt: "\f113"; +@fa-folder-o: "\f114"; +@fa-folder-open-o: "\f115"; +@fa-smile-o: "\f118"; +@fa-frown-o: "\f119"; +@fa-meh-o: "\f11a"; +@fa-gamepad: "\f11b"; +@fa-keyboard-o: "\f11c"; +@fa-flag-o: "\f11d"; +@fa-flag-checkered: "\f11e"; +@fa-terminal: "\f120"; +@fa-code: "\f121"; +@fa-reply-all: "\f122"; +@fa-star-half-o: "\f123"; +@fa-location-arrow: "\f124"; +@fa-crop: "\f125"; +@fa-code-fork: "\f126"; +@fa-chain-broken: "\f127"; +@fa-question: "\f128"; +@fa-info: "\f129"; +@fa-exclamation: "\f12a"; +@fa-superscript: "\f12b"; +@fa-subscript: "\f12c"; +@fa-eraser: "\f12d"; +@fa-puzzle-piece: "\f12e"; +@fa-microphone: "\f130"; +@fa-microphone-slash: "\f131"; +@fa-shield: "\f132"; +@fa-calendar-o: "\f133"; +@fa-fire-extinguisher: "\f134"; +@fa-rocket: "\f135"; +@fa-maxcdn: "\f136"; +@fa-chevron-circle-left: "\f137"; +@fa-chevron-circle-right: "\f138"; +@fa-chevron-circle-up: "\f139"; +@fa-chevron-circle-down: "\f13a"; +@fa-html5: "\f13b"; +@fa-css3: "\f13c"; +@fa-anchor: "\f13d"; +@fa-unlock-alt: "\f13e"; +@fa-bullseye: "\f140"; +@fa-ellipsis-h: "\f141"; +@fa-ellipsis-v: "\f142"; +@fa-rss-square: "\f143"; +@fa-play-circle: "\f144"; +@fa-ticket: "\f145"; +@fa-minus-square: "\f146"; +@fa-minus-square-o: "\f147"; +@fa-level-up: "\f148"; +@fa-level-down: "\f149"; +@fa-check-square: "\f14a"; +@fa-pencil-square: "\f14b"; +@fa-external-link-square: "\f14c"; +@fa-share-square: "\f14d"; +@fa-compass: "\f14e"; +@fa-caret-square-o-down: "\f150"; +@fa-caret-square-o-up: "\f151"; +@fa-caret-square-o-right: "\f152"; +@fa-eur: "\f153"; +@fa-gbp: "\f154"; +@fa-usd: "\f155"; +@fa-inr: "\f156"; +@fa-jpy: "\f157"; +@fa-rub: "\f158"; +@fa-krw: "\f159"; +@fa-btc: "\f15a"; +@fa-file: "\f15b"; +@fa-file-text: "\f15c"; +@fa-sort-alpha-asc: "\f15d"; +@fa-sort-alpha-desc: "\f15e"; +@fa-sort-amount-asc: "\f160"; +@fa-sort-amount-desc: "\f161"; +@fa-sort-numeric-asc: "\f162"; +@fa-sort-numeric-desc: "\f163"; +@fa-thumbs-up: "\f164"; +@fa-thumbs-down: "\f165"; +@fa-youtube-square: "\f166"; +@fa-youtube: "\f167"; +@fa-xing: "\f168"; +@fa-xing-square: "\f169"; +@fa-youtube-play: "\f16a"; +@fa-dropbox: "\f16b"; +@fa-stack-overflow: "\f16c"; +@fa-instagram: "\f16d"; +@fa-flickr: "\f16e"; +@fa-adn: "\f170"; +@fa-bitbucket: "\f171"; +@fa-bitbucket-square: "\f172"; +@fa-tumblr: "\f173"; +@fa-tumblr-square: "\f174"; +@fa-long-arrow-down: "\f175"; +@fa-long-arrow-up: "\f176"; +@fa-long-arrow-left: "\f177"; +@fa-long-arrow-right: "\f178"; +@fa-apple: "\f179"; +@fa-windows: "\f17a"; +@fa-android: "\f17b"; +@fa-linux: "\f17c"; +@fa-dribbble: "\f17d"; +@fa-skype: "\f17e"; +@fa-foursquare: "\f180"; +@fa-trello: "\f181"; +@fa-female: "\f182"; +@fa-male: "\f183"; +@fa-gittip: "\f184"; +@fa-sun-o: "\f185"; +@fa-moon-o: "\f186"; +@fa-archive: "\f187"; +@fa-bug: "\f188"; +@fa-vk: "\f189"; +@fa-weibo: "\f18a"; +@fa-renren: "\f18b"; +@fa-pagelines: "\f18c"; +@fa-stack-exchange: "\f18d"; +@fa-arrow-circle-o-right: "\f18e"; +@fa-arrow-circle-o-left: "\f190"; +@fa-caret-square-o-left: "\f191"; +@fa-dot-circle-o: "\f192"; +@fa-wheelchair: "\f193"; +@fa-vimeo-square: "\f194"; +@fa-try: "\f195"; +@fa-plus-square-o: "\f196"; +@fa-space-shuttle: "\f197"; +@fa-slack: "\f198"; +@fa-envelope-square: "\f199"; +@fa-wordpress: "\f19a"; +@fa-openid: "\f19b"; +@fa-university: "\f19c"; +@fa-graduation-cap: "\f19d"; +@fa-yahoo: "\f19e"; +@fa-google: "\f1a0"; +@fa-reddit: "\f1a1"; +@fa-reddit-square: "\f1a2"; +@fa-stumbleupon-circle: "\f1a3"; +@fa-stumbleupon: "\f1a4"; +@fa-delicious: "\f1a5"; +@fa-digg: "\f1a6"; +@fa-pied-piper: "\f1a7"; +@fa-pied-piper-alt: "\f1a8"; +@fa-drupal: "\f1a9"; +@fa-joomla: "\f1aa"; +@fa-language: "\f1ab"; +@fa-fax: "\f1ac"; +@fa-building: "\f1ad"; +@fa-child: "\f1ae"; +@fa-paw: "\f1b0"; +@fa-spoon: "\f1b1"; +@fa-cube: "\f1b2"; +@fa-cubes: "\f1b3"; +@fa-behance: "\f1b4"; +@fa-behance-square: "\f1b5"; +@fa-steam: "\f1b6"; +@fa-steam-square: "\f1b7"; +@fa-recycle: "\f1b8"; +@fa-car: "\f1b9"; +@fa-taxi: "\f1ba"; +@fa-tree: "\f1bb"; +@fa-spotify: "\f1bc"; +@fa-deviantart: "\f1bd"; +@fa-soundcloud: "\f1be"; +@fa-database: "\f1c0"; +@fa-file-pdf-o: "\f1c1"; +@fa-file-word-o: "\f1c2"; +@fa-file-excel-o: "\f1c3"; +@fa-file-powerpoint-o: "\f1c4"; +@fa-file-image-o: "\f1c5"; +@fa-file-archive-o: "\f1c6"; +@fa-file-audio-o: "\f1c7"; +@fa-file-video-o: "\f1c8"; +@fa-file-code-o: "\f1c9"; +@fa-vine: "\f1ca"; +@fa-codepen: "\f1cb"; +@fa-jsfiddle: "\f1cc"; +@fa-life-ring: "\f1cd"; +@fa-circle-o-notch: "\f1ce"; +@fa-rebel: "\f1d0"; +@fa-empire: "\f1d1"; +@fa-git-square: "\f1d2"; +@fa-git: "\f1d3"; +@fa-hacker-news: "\f1d4"; +@fa-tencent-weibo: "\f1d5"; +@fa-qq: "\f1d6"; +@fa-weixin: "\f1d7"; +@fa-paper-plane: "\f1d8"; +@fa-paper-plane-o: "\f1d9"; +@fa-history: "\f1da"; +@fa-circle-thin: "\f1db"; +@fa-header: "\f1dc"; +@fa-paragraph: "\f1dd"; +@fa-sliders: "\f1de"; +@fa-share-alt: "\f1e0"; +@fa-share-alt-square: "\f1e1"; +@fa-bomb: "\f1e2"; +@fa-futbol-o: "\f1e3"; +@fa-tty: "\f1e4"; +@fa-binoculars: "\f1e5"; +@fa-plug: "\f1e6"; +@fa-slideshare: "\f1e7"; +@fa-twitch: "\f1e8"; +@fa-yelp: "\f1e9"; +@fa-newspaper-o: "\f1ea"; +@fa-wifi: "\f1eb"; +@fa-calculator: "\f1ec"; +@fa-paypal: "\f1ed"; +@fa-google-wallet: "\f1ee"; +@fa-cc-visa: "\f1f0"; +@fa-cc-mastercard: "\f1f1"; +@fa-cc-discover: "\f1f2"; +@fa-cc-amex: "\f1f3"; +@fa-cc-paypal: "\f1f4"; +@fa-cc-stripe: "\f1f5"; +@fa-bell-slash: "\f1f6"; +@fa-bell-slash-o: "\f1f7"; +@fa-trash: "\f1f8"; +@fa-copyright: "\f1f9"; +@fa-at: "\f1fa"; +@fa-eyedropper: "\f1fb"; +@fa-paint-brush: "\f1fc"; +@fa-birthday-cake: "\f1fd"; +@fa-area-chart: "\f1fe"; +@fa-pie-chart: "\f200"; +@fa-line-chart: "\f201"; +@fa-lastfm: "\f202"; +@fa-lastfm-square: "\f203"; +@fa-toggle-off: "\f204"; +@fa-toggle-on: "\f205"; +@fa-bicycle: "\f206"; +@fa-bus: "\f207"; +@fa-ioxhost: "\f208"; +@fa-angellist: "\f209"; +@fa-cc: "\f20a"; +@fa-ils: "\f20b"; +@fa-meanpath: "\f20c"; + diff --git a/src/main/resources/static/lib/ztree/css/awesomeStyle/img/loading.gif b/src/main/resources/static/lib/ztree/css/awesomeStyle/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8c289293b11c889703d83dce6631fce90da4630 GIT binary patch literal 381 zcmZ?wbhEHb6krfwSj5I~=*GvEjZcb~Jveda^Z5r~o`3lD|Nnmm1_s6d+T_)p@)n z{^qIIq1(T$e$~zMQ}6t1w^a|Cj;Amo3}FHq!p^`7G=x7ROJIXqM}S9S9}m;(SWbi* zHiVjpkZW$u7K%QH zEX1o>%eNv<=;4;$&*l9z?u( zP*7y?;7!l|0S|ih=+&ElKyP{x)=9VNda#Bh^TG2x?>q1N%+qe?ZejQOF2`{N>(J=2 z@iO}^T)N2q&)@ESXTvpW4rw2cY2pyXwLCmRzzUoR>LJHlJotcYHXfu3lOXzbf&|zq=t4Ev@t=T!pkMMEQ&x?c~PmTs(2en zWl<8!>{UymqE%E)s)F?cSv2B}wVrXXj>T3woKhNTf{-K$pU6BW6G5!k>zRfml^CKF zFGA|1r7$k$3I>W@;z!iSA;=V+5uQ^WvP{p85JVfjHwg4$TD=u6nNkFG^1KGOhr=nO;Z*{Q*Oypy;ZK&6j4= zO*gh>i;eM7$lOktt)IPo@hZDgmeCrdUq`=BPn$bmxOcCwzBxJhc>{dnemyQ;QN9%( PWf#XXJI4F{`%nG=ZlfRK literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/metroStyle/img/loading.gif b/src/main/resources/static/lib/ztree/css/metroStyle/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8c289293b11c889703d83dce6631fce90da4630 GIT binary patch literal 381 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/metroStyle/img/metro.png b/src/main/resources/static/lib/ztree/css/metroStyle/img/metro.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e58a3a73ab5eac62afb4a4062887896248ec2d GIT binary patch literal 5283 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/5.png b/src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/5.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5eccd562c303cf5197629ef5f2666b6180bd48 GIT binary patch literal 710 zcmV;%0y+JOP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;Oi4sRRCwB?l21sJaTv!xzis}To8;O?C>{dC{zy=SO6rn?>JoVfJ9PB0!cw|< z5rY2EH4^INrK0lE$(TB`L1J|?w{{RVwVX+{e0A>6yZ3#69o{*#LV~{V{P^I25M99V?Z$DfCOu%f*iEi)VM!&PQ0~X={*pIhRm&^JADx2Ei zO9FtZ)17!zihou!LclW{fUsJ6-KRQWX%RLy%#rdc&iw~WzZ8c|*7UlD+tm4dPcnr0SiDoFEg5E2Y&dPN717pvrG@d&~qN)SLk2YQ}eWhnzS2NsMXU@e;q z$#1J?MTrek>$@}ysIbH4Pn4|s4!{BsRg~ey@o{jwK^l-v|2=daTrL(~1&Auja1qcm zA0Pb~i;esUhr#VZ*EO_EW=H6T4sH+MBVlG^vFAPW@zEjxNMD$XUVj}71~yd{>Do)) z&``4()NF>lp&_eXY~*rG1t$YtbJ2bvy&WKdWa#Vaz0czlsCFm9?LkALArT%gs@=iz zM3Aw>%3UB?=s|4%%0TI@ntc}!?y2fKbE&)8wwW?tw9>)Yi;(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-Hc3Q5RCwBylf6#EFcgKqR*|SEf;KdQN{mQMNM#6bz*E3p!3*#TJOP9q=I%T} z)g_1#i3ub?3{8Itwu2ecv`#4@J&R@g=<~Vv$_3Z+FM(5**Hx$4IK%aP-43;Gb+vXq zUuVhneBJ75-43T-EP$6WJoRVj!|QthI?cwfXCHeI>Dj&rpcKd`Uv3%2{zO&+5OQ|7 z=;cI0rUAu-Dnz~nLZs7L08+*mb;p_3zesh*i2-sBFdS=wK}gNEso8dBf?)8;uvD5$ zpcK!qZv_3`za>=GH`uH0qya)Hf_^WvdFF_P+D(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-oJmAMRCwCNld)>sP!xtg$;P&DX##d?FjXy#1Btu@<1TrIE}b(6+V0u<0C|G+ z1!6E{h#^zPfVNUH1)Si?mq44L)RLtur52}yfrAIB@yT&wtK6#}E;o1CwW> zs0MEifRF!B`^DaweqwrPizJsaJ+ws@N@V7V{5<_TW}e7G$pgN~T?_h(db5KXZbM-X z@i~OveZ=Qbn4^Z<)SDg9SGgG&F_ybUT3JJlcA@4#C4%DjEY}>=XqU9IhUIR75$6O7 z8YIQ(_la3W9qobDhNK8q8+Eit%qmX550Ym5hYkYx{R_;P^`1+ZR#BsUc>NAF+9yn_ ztoK|n4k(!k^_NgGljU2p)j*9W zaI13;R$T12?;o{2_N$D)6u7>L2Aq7}dD;>lbA1yHY`_4jK;tey79sFML_*`gU*n$v Y0CUjIYVM#Hl>h($07*qoM6N<$g3L4G@&Et; literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/8.png b/src/main/resources/static/lib/ztree/css/zTreeStyle/img/diy/8.png new file mode 100644 index 0000000000000000000000000000000000000000..a8f3a86e7091de4acdd38745f74b30f0f3d40f9e GIT binary patch literal 529 zcmV+s0`C2ZP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-mq|oHRCwB?ld(!1Q51&1(I{htpn+Xo2nhiLK7gQ=rAta1-4c z23I~Dy#=Bx=-sES#qFU9A~NtT@3!SYME0%7fru>cwq@9yhz#EV;MBm^6uNgtR8Xr= z2i9fl6|Mue0M{9PgJ@>&J^Va_d-JF#FCqZvz~tbj{^y9_PT}y_|FTqGfU(|32N(ld zdoN`zWX3zdQtSRe)z51`wtYaRAywY{0S-(qSQqqB^m^?LF~6wMV5jvm0?L4k3s8yo zD*>6YSQl38yF2Ej`-O+&`dWo7gEaA8Rp?@@!`g|8C0WWJ_m{hqX~o6>&}D$W3~-$S zV;!z@c}1laaT=qvy0*ci2asppOD)WX6h)7P*^pMr>b(YuB-DG2YA$FmJ^na9HNDvf zXGS+Sp6w9M)GC&%xasQa+^&Tc%i_FwxOx6O0H%St(lzkAoEgbPL(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-SxH1eRCwCFlD%phK@^3*HCYugNa+j-+qg=ez>lIrt6Er<-ysj+R54r6Ea(-| zq;X*c?zeMmf*6eCC_6h695=JJ71{U?e45KW_s-#5&LjXuQTzlBfs@f_G?s+5w&eg$ zhQs057_-6Uc|IlzNRo=85P&3%F=}Cq5wOKcVuv^4*#fPL|MB6ehpW|!JkK}!G)eCUA?`kDYU+wRQl|@AsL{=k$6#thE3*=Sl#oqXX&kO!|GS z@au=FqXS6-*ah~DF{o$>nU{_K+;olW3X86D1zL_O(0T4pKdrt_r^NSay z@PGjCE6_9z-g}y+dE_5_`V3#b@v&aP`RUeDmSwEhYqBic7MNZ8lJBEIOU$l)`Ssp{ zbFQ3BCIf)!bb1$GL=xlLi**V7k+e*bq}|z?$BHD9nE9)5GXRrS-uaN7-+2H4002ov JPDHLkV1iKO%vb;b literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/zTreeStyle/img/line_conn.gif b/src/main/resources/static/lib/ztree/css/zTreeStyle/img/line_conn.gif new file mode 100644 index 0000000000000000000000000000000000000000..d561d36a915776730eb3069cee4c949f027667ed GIT binary patch literal 45 xcmZ?wbhEHbT_)p@)n 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/zTreeStyle/img/zTreeStandard.png b/src/main/resources/static/lib/ztree/css/zTreeStyle/img/zTreeStandard.png new file mode 100644 index 0000000000000000000000000000000000000000..ffda01ef1cccc398ee4e2327f4093ba1130a4961 GIT binary patch literal 11173 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 X3wf1`XyoU;TL_tNiW1dgpn(4aGkUu% literal 0 HcmV?d00001 diff --git a/src/main/resources/static/lib/ztree/css/zTreeStyle/zTreeStyle.css b/src/main/resources/static/lib/ztree/css/zTreeStyle/zTreeStyle.css new file mode 100644 index 0000000..4a1705b --- /dev/null +++ b/src/main/resources/static/lib/ztree/css/zTreeStyle/zTreeStyle.css @@ -0,0 +1,97 @@ +/*------------------------------------- +zTree Style + +version: 3.5.19 +author: Hunter.z +email: hunter.z@263.net +website: http://code.google.com/p/jquerytree/ + +-------------------------------------*/ + +.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif} +.ztree {margin:0; padding:5px; color:#333} +.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0} +.ztree li ul{ margin:0; padding:0 0 0 18px} +.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;} + +.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent; + text-decoration:none; vertical-align:top; display: inline-block} +.ztree li a:hover {text-decoration:underline} +.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} +.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} +.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)} +.ztree li a.tmpTargetNode_prev {} +.ztree li a.tmpTargetNode_next {} +.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; + font-size:12px; border:1px #7EC4CC solid; *border:0px} +.ztree li span {line-height:16px; margin-right:2px} +.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle; + border:0 none; cursor: pointer;outline:none; + background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; + background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} + +.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto} +.ztree li span.button.chk.checkbox_false_full {background-position:0 0} +.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px} +.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px} +.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px} +.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px} +.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0} +.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px} +.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px} +.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px} +.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px} +.ztree li span.button.chk.radio_false_full {background-position:-28px 0} +.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px} +.ztree li span.button.chk.radio_false_part {background-position:-28px -28px} +.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px} +.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px} +.ztree li span.button.chk.radio_true_full {background-position:-42px 0} +.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px} +.ztree li span.button.chk.radio_true_part {background-position:-42px -28px} +.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px} +.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px} + +.ztree li span.button.switch {width:18px; height:18px} +.ztree li span.button.root_open{background-position:-92px -54px} +.ztree li span.button.root_close{background-position:-74px -54px} +.ztree li span.button.roots_open{background-position:-92px 0} +.ztree li span.button.roots_close{background-position:-74px 0} +.ztree li span.button.center_open{background-position:-92px -18px} +.ztree li span.button.center_close{background-position:-74px -18px} +.ztree li span.button.bottom_open{background-position:-92px -36px} +.ztree li span.button.bottom_close{background-position:-74px -36px} +.ztree li span.button.noline_open{background-position:-92px -72px} +.ztree li span.button.noline_close{background-position:-74px -72px} +.ztree li span.button.root_docu{ background:none;} +.ztree li span.button.roots_docu{background-position:-56px 0} +.ztree li span.button.center_docu{background-position:-56px -18px} +.ztree li span.button.bottom_docu{background-position:-56px -36px} +.ztree li span.button.noline_docu{ background:none;} + +.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle} +.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle} +.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle} +.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle} +.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle} + +.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} + +ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} + +span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute; + background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; + background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} + +ul.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)} +.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} + +/* level style*/ +/*.ztree li span.button.level0 { + display:none; +} +.ztree li ul.level0 { + padding:0; + background:none; +}*/ \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/js/jquery-1.4.4.min.js b/src/main/resources/static/lib/ztree/js/jquery-1.4.4.min.js new file mode 100644 index 0000000..8f3ca2e --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery-1.4.4.min.js @@ -0,0 +1,167 @@ +/*! + * jQuery JavaScript Library v1.4.4 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Nov 11 19:04:53 2010 -0500 + */ +(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h= +h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;kd)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La, +"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this, +e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a, +"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+ +a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/, +C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j, +s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this, +j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length}, +toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j=== +-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false; +if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload", +b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&& +!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&& +l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H
              a";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"), +k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false, +scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent= +false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom= +1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="
              ";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="
              t
              ";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display= +"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h= +c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando); +else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one"; +if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true}, +attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&& +b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0}; +c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem, +arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid= +d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+ +c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== +8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k=== +"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+ +d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired= +B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type=== +"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]=== +0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); +(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3]; +break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr, +q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h= +l;g.sort(w);if(h)for(var i=1;i0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n, +m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== +true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== +g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]- +0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== +i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]]; +if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m, +g);else if(typeof g.length==="number")for(var p=g.length;n";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g); +n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&& +function(){var g=k,i=t.createElement("div");i.innerHTML="

              ";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F|| +p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g= +t.createElement("div");g.innerHTML="
              ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition? +function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h= +h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context): +c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a, +2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a, +b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&& +e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1, +""],legend:[1,"
              ","
              "],thead:[1,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],col:[2,"","
              "],area:[1,"",""],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div
              ","
              "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null; +else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append", +prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument|| +b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===""&&!x?r.childNodes:[];for(o=k.length- +1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script")))); +d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i, +jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true, +zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b), +h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b); +if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f= +d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left; +e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/)<[^<]*)*<\/script>/gi, +ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b=== +"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("
              ").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& +!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, +getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", +script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| +!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache= +false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset; +A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type", +b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& +c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| +c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]= +encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess", +[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"), +e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}}); +if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show", +3),a,b,d);else{d=0;for(var e=this.length;d=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, +d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* +Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)} +var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; +this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| +this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= +c.timers,b=0;b-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a, +e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&& +c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); +c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+ +b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window); diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.all.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.all.js new file mode 100644 index 0000000..33ba271 --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.all.js @@ -0,0 +1,3835 @@ + +/* + * JQuery zTree core v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function ($) { + var settings = {}, roots = {}, caches = {}, + //default consts of core + _consts = { + className: { + BUTTON: "button", + LEVEL: "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", + CLOSE: "close", + DOCU: "docu" + }, + node: { + CURSELECTED: "curSelectedNode" + } + }, + //default setting of core + _setting = { + treeId: "", + treeObj: null, + view: { + addDiyDom: null, + autoCancelSelected: true, + dblClickExpand: true, + expandSpeed: "fast", + fontCss: {}, + nameIsHTML: false, + selectedMulti: true, + showIcon: true, + showLine: true, + showTitle: true, + txtSelectedEnable: false + }, + data: { + key: { + isParent: "isParent", + children: "children", + name: "name", + title: "", + url: "url", + icon: "icon" + }, + simpleData: { + enable: false, + idKey: "id", + pIdKey: "pId", + rootPId: null + }, + keep: { + parent: false, + leaf: false + } + }, + async: { + enable: false, + contentType: "application/x-www-form-urlencoded", + type: "post", + dataType: "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 + } + }, + //default root of core + //zTree use root to save full data + _initRoot = function (setting) { + var r = data.getRoot(setting); + if (!r) { + r = {}; + data.setRoot(setting, r); + } + data.nodeChildren(setting, r, []); + r.expandTriggerFlag = false; + r.curSelectedList = []; + r.noSelection = true; + r.createdNodes = []; + r.zId = 0; + r._ver = (new Date()).getTime(); + }, + //default cache of core + _initCache = function (setting) { + var c = data.getCache(setting); + if (!c) { + c = {}; + data.setCache(setting, c); + } + c.nodes = []; + c.doms = []; + }, + //default bindEvent of core + _bindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.bind(c.NODECREATED, function (event, treeId, node) { + tools.apply(setting.callback.onNodeCreated, [event, treeId, node]); + }); + + o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) { + tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]); + }); + + o.bind(c.EXPAND, function (event, treeId, node) { + tools.apply(setting.callback.onExpand, [event, treeId, node]); + }); + + o.bind(c.COLLAPSE, function (event, treeId, node) { + tools.apply(setting.callback.onCollapse, [event, treeId, node]); + }); + + o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) { + tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]); + }); + + o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) { + tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]); + }); + + o.bind(c.REMOVE, function (event, treeId, treeNode) { + tools.apply(setting.callback.onRemove, [event, treeId, treeNode]); + }); + + o.bind(c.SELECTED, function (event, treeId, node) { + tools.apply(setting.callback.onSelected, [treeId, node]); + }); + o.bind(c.UNSELECTED, function (event, treeId, node) { + tools.apply(setting.callback.onUnSelected, [treeId, node]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.unbind(c.NODECREATED) + .unbind(c.CLICK) + .unbind(c.EXPAND) + .unbind(c.COLLAPSE) + .unbind(c.ASYNC_SUCCESS) + .unbind(c.ASYNC_ERROR) + .unbind(c.REMOVE) + .unbind(c.SELECTED) + .unbind(c.UNSELECTED); + }, + //default event proxy of core + _eventProxy = function (event) { + var target = event.target, + setting = data.getSetting(event.data.treeId), + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null, + tmp = null; + + if (tools.eqs(event.type, "mousedown")) { + treeEventType = "mousedown"; + } else if (tools.eqs(event.type, "mouseup")) { + treeEventType = "mouseup"; + } else if (tools.eqs(event.type, "contextmenu")) { + treeEventType = "contextmenu"; + } else if (tools.eqs(event.type, "click")) { + if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.SWITCH) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "switchNode"; + } else { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "clickNode"; + } + } + } else if (tools.eqs(event.type, "dblclick")) { + treeEventType = "dblclick"; + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "switchNode"; + } + } + if (treeEventType.length > 0 && tId.length == 0) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + } + } + // event to node + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "switchNode" : + var isParent = data.nodeIsParent(setting, node); + if (!isParent) { + nodeEventType = ""; + } else if (tools.eqs(event.type, "click") + || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) { + nodeEventCallback = handler.onSwitchNode; + } else { + nodeEventType = ""; + } + break; + case "clickNode" : + nodeEventCallback = handler.onClickNode; + break; + } + } + // event to zTree + switch (treeEventType) { + case "mousedown" : + treeEventCallback = handler.onZTreeMousedown; + break; + case "mouseup" : + treeEventCallback = handler.onZTreeMouseup; + break; + case "dblclick" : + treeEventCallback = handler.onZTreeDblclick; + break; + case "contextmenu" : + treeEventCallback = handler.onZTreeContextmenu; + break; + } + var proxyResult = { + stop: false, + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of core + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + var r = data.getRoot(setting), + children = data.nodeChildren(setting, n); + n.level = level; + n.tId = setting.treeId + "_" + (++r.zId); + n.parentTId = parentNode ? parentNode.tId : null; + n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open; + var isParent = data.nodeIsParent(setting, n); + if (tools.isArray(children) && + !(isParent === false || (typeof isParent == "string" && tools.eqs(isParent, "false")))) { + data.nodeIsParent(setting, n, true); + n.zAsync = true; + } else { + isParent = data.nodeIsParent(setting, n, isParent); + n.open = (isParent && !setting.async.enable) ? n.open : false; + n.zAsync = !isParent; + } + n.isFirstNode = isFirstNode; + n.isLastNode = isLastNode; + n.getParentNode = function () { + return data.getNodeCache(setting, n.parentTId); + }; + n.getPreNode = function () { + return data.getPreNode(setting, n); + }; + n.getNextNode = function () { + return data.getNextNode(setting, n); + }; + n.getIndex = function () { + return data.getNodeIndex(setting, n); + }; + n.getPath = function () { + return data.getNodePath(setting, n); + }; + n.isAjaxing = false; + data.fixPIdKeyValue(setting, n); + }, + _init = { + bind: [_bindEvent], + unbind: [_unbindEvent], + caches: [_initCache], + nodes: [_initNode], + proxys: [_eventProxy], + roots: [_initRoot], + beforeA: [], + afterA: [], + innerBeforeA: [], + innerAfterA: [], + zTreeTools: [] + }, + //method of operate data + data = { + addNodeCache: function (setting, node) { + data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node; + }, + getNodeCacheId: function (tId) { + return tId.substring(tId.lastIndexOf("_") + 1); + }, + addAfterA: function (afterA) { + _init.afterA.push(afterA); + }, + addBeforeA: function (beforeA) { + _init.beforeA.push(beforeA); + }, + addInnerAfterA: function (innerAfterA) { + _init.innerAfterA.push(innerAfterA); + }, + addInnerBeforeA: function (innerBeforeA) { + _init.innerBeforeA.push(innerBeforeA); + }, + addInitBind: function (bindEvent) { + _init.bind.push(bindEvent); + }, + addInitUnBind: function (unbindEvent) { + _init.unbind.push(unbindEvent); + }, + addInitCache: function (initCache) { + _init.caches.push(initCache); + }, + addInitNode: function (initNode) { + _init.nodes.push(initNode); + }, + addInitProxy: function (initProxy, isFirst) { + if (!!isFirst) { + _init.proxys.splice(0, 0, initProxy); + } else { + _init.proxys.push(initProxy); + } + }, + addInitRoot: function (initRoot) { + _init.roots.push(initRoot); + }, + addNodesData: function (setting, parentNode, index, nodes) { + var children = data.nodeChildren(setting, parentNode), params; + if (!children) { + children = data.nodeChildren(setting, parentNode, []); + index = -1; + } else if (index >= children.length) { + index = -1; + } + + if (children.length > 0 && index === 0) { + children[0].isFirstNode = false; + view.setNodeLineIcos(setting, children[0]); + } else if (children.length > 0 && index < 0) { + children[children.length - 1].isLastNode = false; + view.setNodeLineIcos(setting, children[children.length - 1]); + } + data.nodeIsParent(setting, parentNode, true); + + if (index < 0) { + data.nodeChildren(setting, parentNode, children.concat(nodes)); + } else { + params = [index, 0].concat(nodes); + children.splice.apply(children, params); + } + }, + addSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + if (!data.isSelectedNode(setting, node)) { + root.curSelectedList.push(node); + } + }, + addCreatedNode: function (setting, node) { + if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { + var root = data.getRoot(setting); + root.createdNodes.push(node); + } + }, + addZTreeTools: function (zTreeTools) { + _init.zTreeTools.push(zTreeTools); + }, + exSetting: function (s) { + $.extend(true, _setting, s); + }, + fixPIdKeyValue: function (setting, node) { + if (setting.data.simpleData.enable) { + node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId; + } + }, + getAfterA: function (setting, node, array) { + for (var i = 0, j = _init.afterA.length; i < j; i++) { + _init.afterA[i].apply(this, arguments); + } + }, + getBeforeA: function (setting, node, array) { + for (var i = 0, j = _init.beforeA.length; i < j; i++) { + _init.beforeA[i].apply(this, arguments); + } + }, + getInnerAfterA: function (setting, node, array) { + for (var i = 0, j = _init.innerAfterA.length; i < j; i++) { + _init.innerAfterA[i].apply(this, arguments); + } + }, + getInnerBeforeA: function (setting, node, array) { + for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) { + _init.innerBeforeA[i].apply(this, arguments); + } + }, + getCache: function (setting) { + return caches[setting.treeId]; + }, + getNodeIndex: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length - 1; i <= l; i++) { + if (children[i] === node) { + return i; + } + } + return -1; + }, + getNextNode: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length - 1; i <= l; i++) { + if (children[i] === node) { + return (i == l ? null : children[i + 1]); + } + } + return null; + }, + getNodeByParam: function (setting, nodes, key, value) { + if (!nodes || !key) return null; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (node[key] == value) { + return nodes[i]; + } + var children = data.nodeChildren(setting, node); + var tmp = data.getNodeByParam(setting, children, key, value); + if (tmp) return tmp; + } + return null; + }, + getNodeCache: function (setting, tId) { + if (!tId) return null; + var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)]; + return n ? n : null; + }, + getNodePath: function (setting, node) { + if (!node) return null; + + var path; + if (node.parentTId) { + path = node.getParentNode().getPath(); + } else { + path = []; + } + + if (path) { + path.push(node); + } + + return path; + }, + getNodes: function (setting) { + return data.nodeChildren(setting, data.getRoot(setting)); + }, + getNodesByParam: function (setting, nodes, key, value) { + if (!nodes || !key) return []; + var result = []; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (node[key] == value) { + result.push(node); + } + var children = data.nodeChildren(setting, node); + result = result.concat(data.getNodesByParam(setting, children, key, value)); + } + return result; + }, + getNodesByParamFuzzy: function (setting, nodes, key, value) { + if (!nodes || !key) return []; + var result = []; + value = value.toLowerCase(); + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) { + result.push(node); + } + var children = data.nodeChildren(setting, node); + result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value)); + } + return result; + }, + getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) { + if (!nodes) return (isSingle ? null : []); + var result = isSingle ? null : []; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (tools.apply(filter, [node, invokeParam], false)) { + if (isSingle) { + return node; + } + result.push(node); + } + var children = data.nodeChildren(setting, node); + var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam); + if (isSingle && !!tmpResult) { + return tmpResult; + } + result = isSingle ? tmpResult : result.concat(tmpResult); + } + return result; + }, + getPreNode: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i] === node) { + return (i == 0 ? null : children[i - 1]); + } + } + return null; + }, + getRoot: function (setting) { + return setting ? roots[setting.treeId] : null; + }, + getRoots: function () { + return roots; + }, + getSetting: function (treeId) { + return settings[treeId]; + }, + getSettings: function () { + return settings; + }, + getZTreeTools: function (treeId) { + var r = this.getRoot(this.getSetting(treeId)); + return r ? r.treeTools : null; + }, + initCache: function (setting) { + for (var i = 0, j = _init.caches.length; i < j; i++) { + _init.caches[i].apply(this, arguments); + } + }, + initNode: function (setting, level, node, parentNode, preNode, nextNode) { + for (var i = 0, j = _init.nodes.length; i < j; i++) { + _init.nodes[i].apply(this, arguments); + } + }, + initRoot: function (setting) { + for (var i = 0, j = _init.roots.length; i < j; i++) { + _init.roots[i].apply(this, arguments); + } + }, + isSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + for (var i = 0, j = root.curSelectedList.length; i < j; i++) { + if (node === root.curSelectedList[i]) return true; + } + return false; + }, + nodeChildren: function (setting, node, newChildren) { + if (!node) { + return null; + } + var key = setting.data.key.children; + if (typeof newChildren !== 'undefined') { + node[key] = newChildren; + } + return node[key]; + }, + nodeIsParent: function (setting, node, newIsParent) { + if (!node) { + return false; + } + var key = setting.data.key.isParent; + if (typeof newIsParent !== 'undefined') { + if (typeof newIsParent === "string") { + newIsParent = tools.eqs(newIsParent, "true"); + } + newIsParent = !!newIsParent; + node[key] = newIsParent; + } + return node[key]; + }, + nodeName: function (setting, node, newName) { + var key = setting.data.key.name; + if (typeof newName !== 'undefined') { + node[key] = newName; + } + return "" + node[key]; + }, + nodeTitle: function (setting, node) { + var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title; + return "" + node[t]; + }, + removeNodeCache: function (setting, node) { + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + data.removeNodeCache(setting, children[i]); + } + } + data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null; + }, + removeSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + for (var i = 0, j = root.curSelectedList.length; i < j; i++) { + if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) { + root.curSelectedList.splice(i, 1); + setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]); + i--; + j--; + } + } + }, + setCache: function (setting, cache) { + caches[setting.treeId] = cache; + }, + setRoot: function (setting, root) { + roots[setting.treeId] = root; + }, + setZTreeTools: function (setting, zTreeTools) { + for (var i = 0, j = _init.zTreeTools.length; i < j; i++) { + _init.zTreeTools[i].apply(this, arguments); + } + }, + transformToArrayFormat: function (setting, nodes) { + if (!nodes) return []; + var r = []; + if (tools.isArray(nodes)) { + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + _do(node); + } + } else { + _do(nodes); + } + return r; + + function _do(_node) { + r.push(_node); + var children = data.nodeChildren(setting, _node); + if (children) { + r = r.concat(data.transformToArrayFormat(setting, children)); + } + } + }, + transformTozTreeFormat: function (setting, sNodes) { + var i, l, + key = setting.data.simpleData.idKey, + parentKey = setting.data.simpleData.pIdKey; + if (!key || key == "" || !sNodes) return []; + + if (tools.isArray(sNodes)) { + var r = []; + var tmpMap = {}; + for (i = 0, l = sNodes.length; i < l; i++) { + tmpMap[sNodes[i][key]] = sNodes[i]; + } + for (i = 0, l = sNodes.length; i < l; i++) { + var p = tmpMap[sNodes[i][parentKey]]; + if (p && sNodes[i][key] != sNodes[i][parentKey]) { + var children = data.nodeChildren(setting, p); + if (!children) { + children = data.nodeChildren(setting, p, []); + } + children.push(sNodes[i]); + } else { + r.push(sNodes[i]); + } + } + return r; + } else { + return [sNodes]; + } + } + }, + //method of event proxy + event = { + bindEvent: function (setting) { + for (var i = 0, j = _init.bind.length; i < j; i++) { + _init.bind[i].apply(this, arguments); + } + }, + unbindEvent: function (setting) { + for (var i = 0, j = _init.unbind.length; i < j; i++) { + _init.unbind[i].apply(this, arguments); + } + }, + bindTree: function (setting) { + var eventParam = { + treeId: setting.treeId + }, + o = setting.treeObj; + if (!setting.view.txtSelectedEnable) { + // for can't select text + o.bind('selectstart', handler.onSelectStart).css({ + "-moz-user-select": "-moz-none" + }); + } + o.bind('click', eventParam, event.proxy); + o.bind('dblclick', eventParam, event.proxy); + o.bind('mouseover', eventParam, event.proxy); + o.bind('mouseout', eventParam, event.proxy); + o.bind('mousedown', eventParam, event.proxy); + o.bind('mouseup', eventParam, event.proxy); + o.bind('contextmenu', eventParam, event.proxy); + }, + unbindTree: function (setting) { + var o = setting.treeObj; + o.unbind('selectstart', handler.onSelectStart) + .unbind('click', event.proxy) + .unbind('dblclick', event.proxy) + .unbind('mouseover', event.proxy) + .unbind('mouseout', event.proxy) + .unbind('mousedown', event.proxy) + .unbind('mouseup', event.proxy) + .unbind('contextmenu', event.proxy); + }, + doProxy: function (e) { + var results = []; + for (var i = 0, j = _init.proxys.length; i < j; i++) { + var proxyResult = _init.proxys[i].apply(this, arguments); + results.push(proxyResult); + if (proxyResult.stop) { + break; + } + } + return results; + }, + proxy: function (e) { + var setting = data.getSetting(e.data.treeId); + if (!tools.uCanDo(setting, e)) return true; + var results = event.doProxy(e), + r = true, x = false; + for (var i = 0, l = results.length; i < l; i++) { + var proxyResult = results[i]; + if (proxyResult.nodeEventCallback) { + x = true; + r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; + } + if (proxyResult.treeEventCallback) { + x = true; + r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; + } + } + return r; + } + }, + //method of event handler + handler = { + onSwitchNode: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (node.open) { + if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true; + data.getRoot(setting).expandTriggerFlag = true; + view.switchNode(setting, node); + } else { + if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true; + data.getRoot(setting).expandTriggerFlag = true; + view.switchNode(setting, node); + } + return true; + }, + onClickNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + 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; + if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true; + if (clickFlag === 0) { + view.cancelPreSelectedNode(setting, node); + } else { + view.selectNode(setting, node, clickFlag === 2); + } + setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]); + return true; + }, + onZTreeMousedown: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) { + tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]); + } + return true; + }, + onZTreeMouseup: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) { + tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]); + } + return true; + }, + onZTreeDblclick: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) { + tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]); + } + return true; + }, + onZTreeContextmenu: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) { + tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]); + } + return (typeof setting.callback.onRightClick) != "function"; + }, + onSelectStart: function (e) { + var n = e.originalEvent.srcElement.nodeName.toLowerCase(); + return (n === "input" || n === "textarea"); + } + }, + //method of tools for zTree + tools = { + apply: function (fun, param, defaultValue) { + if ((typeof fun) == "function") { + return fun.apply(zt, param ? param : []); + } + return defaultValue; + }, + canAsync: function (setting, node) { + var children = data.nodeChildren(setting, node); + var isParent = data.nodeIsParent(setting, node); + return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0))); + }, + clone: function (obj) { + if (obj === null) return null; + var o = tools.isArray(obj) ? [] : {}; + for (var i in obj) { + o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]); + } + return o; + }, + eqs: function (str1, str2) { + return str1.toLowerCase() === str2.toLowerCase(); + }, + isArray: function (arr) { + return Object.prototype.toString.apply(arr) === "[object Array]"; + }, + isElement: function (o) { + return ( + typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2 + o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string" + ); + }, + $: function (node, exp, setting) { + if (!!exp && typeof exp != "string") { + setting = exp; + exp = ""; + } + if (typeof node == "string") { + return $(node, setting ? setting.treeObj.get(0).ownerDocument : null); + } else { + return $("#" + node.tId + exp, setting ? setting.treeObj : null); + } + }, + getMDom: function (setting, curDom, targetExpr) { + if (!curDom) return null; + while (curDom && curDom.id !== setting.treeId) { + for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) { + if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) { + return curDom; + } + } + curDom = curDom.parentNode; + } + return null; + }, + getNodeMainDom: function (target) { + return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0)); + }, + isChildOrSelf: function (dom, parentId) { + return ($(dom).closest("#" + parentId).length > 0); + }, + uCanDo: function (setting, e) { + return true; + } + }, + //method of operate ztree dom + view = { + addNodes: function (setting, parentNode, index, newNodes, isSilent) { + var isParent = data.nodeIsParent(setting, parentNode); + if (setting.data.keep.leaf && parentNode && !isParent) { + return; + } + if (!tools.isArray(newNodes)) { + newNodes = [newNodes]; + } + if (setting.data.simpleData.enable) { + newNodes = data.transformTozTreeFormat(setting, newNodes); + } + if (parentNode) { + var target_switchObj = $$(parentNode, consts.id.SWITCH, setting), + target_icoObj = $$(parentNode, consts.id.ICON, setting), + target_ulObj = $$(parentNode, consts.id.UL, setting); + + if (!parentNode.open) { + view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE); + view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE); + parentNode.open = false; + target_ulObj.css({ + "display": "none" + }); + } + + data.addNodesData(setting, parentNode, index, newNodes); + view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index); + if (!isSilent) { + view.expandCollapseParentNode(setting, parentNode, true); + } + } else { + data.addNodesData(setting, data.getRoot(setting), index, newNodes); + view.createNodes(setting, 0, newNodes, null, index); + } + }, + appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) { + if (!nodes) return []; + var html = []; + + var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting), + tmpPChild = data.nodeChildren(setting, tmpPNode), + isFirstNode, isLastNode; + + if (!tmpPChild || index >= tmpPChild.length - nodes.length) { + index = -1; + } + + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (initFlag) { + isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0)); + isLastNode = (index < 0 && i == (nodes.length - 1)); + data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag); + data.addNodeCache(setting, node); + } + var isParent = data.nodeIsParent(setting, node); + + var childHtml = []; + var children = data.nodeChildren(setting, node); + if (children && children.length > 0) { + //make child html first, because checkType + childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open); + } + if (openFlag) { + view.makeDOMNodeMainBefore(html, setting, node); + view.makeDOMNodeLine(html, setting, node); + data.getBeforeA(setting, node, html); + view.makeDOMNodeNameBefore(html, setting, node); + data.getInnerBeforeA(setting, node, html); + view.makeDOMNodeIcon(html, setting, node); + data.getInnerAfterA(setting, node, html); + view.makeDOMNodeNameAfter(html, setting, node); + data.getAfterA(setting, node, html); + if (isParent && node.open) { + view.makeUlHtml(setting, node, html, childHtml.join('')); + } + view.makeDOMNodeMainAfter(html, setting, node); + data.addCreatedNode(setting, node); + } + } + return html; + }, + appendParentULDom: function (setting, node) { + var html = [], + nObj = $$(node, setting); + if (!nObj.get(0) && !!node.parentTId) { + view.appendParentULDom(setting, node.getParentNode()); + nObj = $$(node, setting); + } + var ulObj = $$(node, consts.id.UL, setting); + if (ulObj.get(0)) { + ulObj.remove(); + } + var children = data.nodeChildren(setting, node), + childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true); + view.makeUlHtml(setting, node, html, childHtml.join('')); + nObj.append(html.join('')); + }, + asyncNode: function (setting, node, isSilent, callback) { + var i, l; + var isParent = data.nodeIsParent(setting, node); + if (node && !isParent) { + tools.apply(callback); + return false; + } else if (node && node.isAjaxing) { + return false; + } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) { + tools.apply(callback); + return false; + } + if (node) { + node.isAjaxing = true; + var icoObj = $$(node, consts.id.ICON, setting); + icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING}); + } + + var tmpParam = {}; + var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam); + for (i = 0, l = autoParam.length; node && i < l; i++) { + var pKey = autoParam[i].split("="), spKey = pKey; + if (pKey.length > 1) { + spKey = pKey[1]; + pKey = pKey[0]; + } + tmpParam[spKey] = node[pKey]; + } + var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam); + if (tools.isArray(otherParam)) { + for (i = 0, l = otherParam.length; i < l; i += 2) { + tmpParam[otherParam[i]] = otherParam[i + 1]; + } + } else { + for (var p in otherParam) { + tmpParam[p] = otherParam[p]; + } + } + + var _tmpV = data.getRoot(setting)._ver; + $.ajax({ + contentType: setting.async.contentType, + cache: false, + type: setting.async.type, + url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url), + data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam, + dataType: setting.async.dataType, + headers: setting.async.headers, + xhrFields: setting.async.xhrFields, + success: function (msg) { + if (_tmpV != data.getRoot(setting)._ver) { + return; + } + var newNodes = []; + try { + if (!msg || msg.length == 0) { + newNodes = []; + } else if (typeof msg == "string") { + newNodes = eval("(" + msg + ")"); + } else { + newNodes = msg; + } + } catch (err) { + newNodes = msg; + } + + if (node) { + node.isAjaxing = null; + node.zAsync = true; + } + view.setNodeLineIcos(setting, node); + if (newNodes && newNodes !== "") { + newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes); + view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent); + } else { + view.addNodes(setting, node, -1, [], !!isSilent); + } + setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]); + tools.apply(callback); + }, + error: function (XMLHttpRequest, textStatus, errorThrown) { + if (_tmpV != data.getRoot(setting)._ver) { + return; + } + if (node) node.isAjaxing = null; + view.setNodeLineIcos(setting, node); + setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]); + } + }); + return true; + }, + cancelPreSelectedNode: function (setting, node, excludeNode) { + var list = data.getRoot(setting).curSelectedList, + i, n; + for (i = list.length - 1; i >= 0; i--) { + n = list[i]; + if (node === n || (!node && (!excludeNode || excludeNode !== n))) { + $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED); + if (node) { + data.removeSelectedNode(setting, node); + break; + } else { + list.splice(i, 1); + setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]); + } + } + } + }, + createNodeCallback: function (setting) { + if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { + var root = data.getRoot(setting); + while (root.createdNodes.length > 0) { + var node = root.createdNodes.shift(); + tools.apply(setting.view.addDiyDom, [setting.treeId, node]); + if (!!setting.callback.onNodeCreated) { + setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]); + } + } + } + }, + createNodes: function (setting, level, nodes, parentNode, index) { + if (!nodes || nodes.length == 0) return; + var root = data.getRoot(setting), + openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0); + root.createdNodes = []; + var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag), + parentObj, nextObj; + + if (!parentNode) { + parentObj = setting.treeObj; + //setting.treeObj.append(zTreeHtml.join('')); + } else { + var ulObj = $$(parentNode, consts.id.UL, setting); + if (ulObj.get(0)) { + parentObj = ulObj; + //ulObj.append(zTreeHtml.join('')); + } + } + if (parentObj) { + if (index >= 0) { + nextObj = parentObj.children()[index]; + } + if (index >= 0 && nextObj) { + $(nextObj).before(zTreeHtml.join('')); + } else { + parentObj.append(zTreeHtml.join('')); + } + } + + view.createNodeCallback(setting); + }, + destroy: function (setting) { + if (!setting) return; + data.initCache(setting); + data.initRoot(setting); + event.unbindTree(setting); + event.unbindEvent(setting); + setting.treeObj.empty(); + delete settings[setting.treeId]; + }, + expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) { + var root = data.getRoot(setting); + var tmpCb, _callback; + if (!node) { + tools.apply(callback, []); + return; + } + var children = data.nodeChildren(setting, node); + var isParent = data.nodeIsParent(setting, node); + if (root.expandTriggerFlag) { + _callback = callback; + tmpCb = function () { + if (_callback) _callback(); + if (node.open) { + setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]); + } else { + setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]); + } + }; + callback = tmpCb; + root.expandTriggerFlag = false; + } + if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) { + view.appendParentULDom(setting, node); + view.createNodeCallback(setting); + } + if (node.open == expandFlag) { + tools.apply(callback, []); + return; + } + var ulObj = $$(node, consts.id.UL, setting), + switchObj = $$(node, consts.id.SWITCH, setting), + icoObj = $$(node, consts.id.ICON, setting); + + if (isParent) { + node.open = !node.open; + if (node.iconOpen && node.iconClose) { + icoObj.attr("style", view.makeNodeIcoStyle(setting, node)); + } + + if (node.open) { + view.replaceSwitchClass(node, switchObj, consts.folder.OPEN); + view.replaceIcoClass(node, icoObj, consts.folder.OPEN); + if (animateFlag == false || setting.view.expandSpeed == "") { + ulObj.show(); + tools.apply(callback, []); + } else { + if (children && children.length > 0) { + ulObj.slideDown(setting.view.expandSpeed, callback); + } else { + ulObj.show(); + tools.apply(callback, []); + } + } + } else { + view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE); + view.replaceIcoClass(node, icoObj, consts.folder.CLOSE); + if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) { + ulObj.hide(); + tools.apply(callback, []); + } else { + ulObj.slideUp(setting.view.expandSpeed, callback); + } + } + } else { + tools.apply(callback, []); + } + }, + expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) { + if (!node) return; + if (!node.parentTId) { + view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); + return; + } else { + view.expandCollapseNode(setting, node, expandFlag, animateFlag); + } + if (node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback); + } + }, + expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) { + var root = data.getRoot(setting), + treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root), + selfAnimateSign = (node) ? false : animateFlag, + expandTriggerFlag = data.getRoot(setting).expandTriggerFlag; + data.getRoot(setting).expandTriggerFlag = false; + if (treeNodes) { + for (var i = 0, l = treeNodes.length; i < l; i++) { + if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign); + } + } + data.getRoot(setting).expandTriggerFlag = expandTriggerFlag; + view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); + }, + isSelectedNode: function (setting, node) { + if (!node) { + return false; + } + var list = data.getRoot(setting).curSelectedList, + i; + for (i = list.length - 1; i >= 0; i--) { + if (node === list[i]) { + return true; + } + } + return false; + }, + makeDOMNodeIcon: function (html, setting, node) { + var nameStr = data.nodeName(setting, node), + name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&').replace(//g, '>'); + html.push("", name, ""); + }, + makeDOMNodeLine: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeMainAfter: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeMainBefore: function (html, setting, node) { + html.push("
            • "); + }, + makeDOMNodeNameAfter: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeNameBefore: function (html, setting, node) { + var title = data.nodeTitle(setting, node), + url = view.makeNodeUrl(setting, node), + fontcss = view.makeNodeFontCss(setting, node), + fontStyle = []; + for (var f in fontcss) { + fontStyle.push(f, ":", fontcss[f], ";"); + } + html.push(" 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''), + "'"); + if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) { + html.push("title='", title.replace(/'/g, "'").replace(//g, '>'), "'"); + } + html.push(">"); + }, + makeNodeFontCss: function (setting, node) { + var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss); + return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {}; + }, + makeNodeIcoClass: function (setting, node) { + var icoCss = ["ico"]; + if (!node.isAjaxing) { + var isParent = data.nodeIsParent(setting, node); + icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0]; + if (isParent) { + icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); + } else { + icoCss.push(consts.folder.DOCU); + } + } + return consts.className.BUTTON + " " + icoCss.join('_'); + }, + makeNodeIcoStyle: function (setting, node) { + var icoStyle = []; + if (!node.isAjaxing) { + var isParent = data.nodeIsParent(setting, node); + var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon]; + if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;"); + if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) { + icoStyle.push("width:0px;height:0px;"); + } + } + return icoStyle.join(''); + }, + makeNodeLineClass: function (setting, node) { + var lineClass = []; + if (setting.view.showLine) { + if (node.level == 0 && node.isFirstNode && node.isLastNode) { + lineClass.push(consts.line.ROOT); + } else if (node.level == 0 && node.isFirstNode) { + lineClass.push(consts.line.ROOTS); + } else if (node.isLastNode) { + lineClass.push(consts.line.BOTTOM); + } else { + lineClass.push(consts.line.CENTER); + } + } else { + lineClass.push(consts.line.NOLINE); + } + if (data.nodeIsParent(setting, node)) { + lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); + } else { + lineClass.push(consts.folder.DOCU); + } + return view.makeNodeLineClassEx(node) + lineClass.join('_'); + }, + makeNodeLineClassEx: function (node) { + return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " "; + }, + makeNodeTarget: function (node) { + return (node.target || "_blank"); + }, + makeNodeUrl: function (setting, node) { + var urlKey = setting.data.key.url; + return node[urlKey] ? node[urlKey] : null; + }, + makeUlHtml: function (setting, node, html, content) { + html.push("
                "); + html.push(content); + html.push("
              "); + }, + makeUlLineClass: function (setting, node) { + return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : ""); + }, + removeChildNodes: function (setting, node) { + if (!node) return; + var nodes = data.nodeChildren(setting, node); + if (!nodes) return; + + for (var i = 0, l = nodes.length; i < l; i++) { + data.removeNodeCache(setting, nodes[i]); + } + data.removeSelectedNode(setting); + delete node[setting.data.key.children]; + + if (!setting.data.keep.parent) { + data.nodeIsParent(setting, node, false); + node.open = false; + var tmp_switchObj = $$(node, consts.id.SWITCH, setting), + tmp_icoObj = $$(node, consts.id.ICON, setting); + view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU); + $$(node, consts.id.UL, setting).remove(); + } else { + $$(node, consts.id.UL, setting).empty(); + } + }, + scrollIntoView: function (setting, dom) { + if (!dom) { + return; + } + // support IE 7 + if (typeof Element === 'undefined') { + var contRect = setting.treeObj.get(0).getBoundingClientRect(), + findMeRect = dom.getBoundingClientRect(); + if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom + || findMeRect.right > contRect.right || findMeRect.left < contRect.left) { + dom.scrollIntoView(); + } + return; + } + // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e + if (!Element.prototype.scrollIntoViewIfNeeded) { + Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) { + "use strict"; + + function makeRange(start, length) { + return {"start": start, "length": length, "end": start + length}; + } + + function coverRange(inner, outer) { + if ( + false === centerIfNeeded || + (outer.start < inner.end && inner.start < outer.end) + ) { + return Math.max( + inner.end - outer.length, + Math.min(outer.start, inner.start) + ); + } + return (inner.start + inner.end - outer.length) / 2; + } + + function makePoint(x, y) { + return { + "x": x, + "y": y, + "translate": function translate(dX, dY) { + return makePoint(x + dX, y + dY); + } + }; + } + + function absolute(elem, pt) { + while (elem) { + pt = pt.translate(elem.offsetLeft, elem.offsetTop); + elem = elem.offsetParent; + } + return pt; + } + + var target = absolute(this, makePoint(0, 0)), + extent = makePoint(this.offsetWidth, this.offsetHeight), + elem = this.parentNode, + origin; + + while (elem instanceof HTMLElement) { + // Apply desired scroll amount. + origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop)); + elem.scrollLeft = coverRange( + makeRange(target.x - origin.x, extent.x), + makeRange(elem.scrollLeft, elem.clientWidth) + ); + elem.scrollTop = coverRange( + makeRange(target.y - origin.y, extent.y), + makeRange(elem.scrollTop, elem.clientHeight) + ); + + // Determine actual scroll amount by reading back scroll properties. + target = target.translate(-elem.scrollLeft, -elem.scrollTop); + elem = elem.parentNode; + } + }; + } + dom.scrollIntoViewIfNeeded(); + }, + setFirstNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + if (children.length > 0) { + children[0].isFirstNode = true; + } + }, + setLastNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + if (children.length > 0) { + children[children.length - 1].isLastNode = true; + } + }, + removeNode: function (setting, node) { + var root = data.getRoot(setting), + parentNode = (node.parentTId) ? node.getParentNode() : root; + + node.isFirstNode = false; + node.isLastNode = false; + node.getPreNode = function () { + return null; + }; + node.getNextNode = function () { + return null; + }; + + if (!data.getNodeCache(setting, node.tId)) { + return; + } + + $$(node, setting).remove(); + data.removeNodeCache(setting, node); + data.removeSelectedNode(setting, node); + + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i].tId == node.tId) { + children.splice(i, 1); + break; + } + } + view.setFirstNode(setting, parentNode); + view.setLastNode(setting, parentNode); + + var tmp_ulObj, tmp_switchObj, tmp_icoObj, + childLength = children.length; + + //repair nodes old parent + if (!setting.data.keep.parent && childLength == 0) { + //old parentNode has no child nodes + data.nodeIsParent(setting, parentNode, false); + parentNode.open = false; + delete parentNode[setting.data.key.children]; + tmp_ulObj = $$(parentNode, consts.id.UL, setting); + tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting); + tmp_icoObj = $$(parentNode, consts.id.ICON, setting); + view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU); + tmp_ulObj.css("display", "none"); + + } else if (setting.view.showLine && childLength > 0) { + //old parentNode has child nodes + var newLast = children[childLength - 1]; + tmp_ulObj = $$(newLast, consts.id.UL, setting); + tmp_switchObj = $$(newLast, consts.id.SWITCH, setting); + tmp_icoObj = $$(newLast, consts.id.ICON, setting); + if (parentNode == root) { + if (children.length == 1) { + //node was root, and ztree has only one root after move node + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT); + } else { + var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting); + view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS); + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); + } + } else { + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); + } + tmp_ulObj.removeClass(consts.line.LINE); + } + }, + replaceIcoClass: function (node, obj, newName) { + if (!obj || node.isAjaxing) return; + var tmpName = obj.attr("class"); + if (tmpName == undefined) return; + var tmpList = tmpName.split("_"); + switch (newName) { + case consts.folder.OPEN: + case consts.folder.CLOSE: + case consts.folder.DOCU: + tmpList[tmpList.length - 1] = newName; + break; + } + obj.attr("class", tmpList.join("_")); + }, + replaceSwitchClass: function (node, obj, newName) { + if (!obj) return; + var tmpName = obj.attr("class"); + if (tmpName == undefined) return; + var tmpList = tmpName.split("_"); + switch (newName) { + case consts.line.ROOT: + case consts.line.ROOTS: + case consts.line.CENTER: + case consts.line.BOTTOM: + case consts.line.NOLINE: + tmpList[0] = view.makeNodeLineClassEx(node) + newName; + break; + case consts.folder.OPEN: + case consts.folder.CLOSE: + case consts.folder.DOCU: + tmpList[1] = newName; + break; + } + obj.attr("class", tmpList.join("_")); + if (newName !== consts.folder.DOCU) { + obj.removeAttr("disabled"); + } else { + obj.attr("disabled", "disabled"); + } + }, + selectNode: function (setting, node, addFlag) { + if (!addFlag) { + view.cancelPreSelectedNode(setting, null, node); + } + $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED); + data.addSelectedNode(setting, node); + setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]); + }, + setNodeFontCss: function (setting, treeNode) { + var aObj = $$(treeNode, consts.id.A, setting), + fontCss = view.makeNodeFontCss(setting, treeNode); + if (fontCss) { + aObj.css(fontCss); + } + }, + setNodeLineIcos: function (setting, node) { + if (!node) return; + var switchObj = $$(node, consts.id.SWITCH, setting), + ulObj = $$(node, consts.id.UL, setting), + icoObj = $$(node, consts.id.ICON, setting), + ulLine = view.makeUlLineClass(setting, node); + if (ulLine.length == 0) { + ulObj.removeClass(consts.line.LINE); + } else { + ulObj.addClass(ulLine); + } + switchObj.attr("class", view.makeNodeLineClass(setting, node)); + if (data.nodeIsParent(setting, node)) { + switchObj.removeAttr("disabled"); + } else { + switchObj.attr("disabled", "disabled"); + } + icoObj.removeAttr("style"); + icoObj.attr("style", view.makeNodeIcoStyle(setting, node)); + icoObj.attr("class", view.makeNodeIcoClass(setting, node)); + }, + setNodeName: function (setting, node) { + var title = data.nodeTitle(setting, node), + nObj = $$(node, consts.id.SPAN, setting); + nObj.empty(); + if (setting.view.nameIsHTML) { + nObj.html(data.nodeName(setting, node)); + } else { + nObj.text(data.nodeName(setting, node)); + } + if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) { + var aObj = $$(node, consts.id.A, setting); + aObj.attr("title", !title ? "" : title); + } + }, + setNodeTarget: function (setting, node) { + var aObj = $$(node, consts.id.A, setting); + aObj.attr("target", view.makeNodeTarget(node)); + }, + setNodeUrl: function (setting, node) { + var aObj = $$(node, consts.id.A, setting), + url = view.makeNodeUrl(setting, node); + if (url == null || url.length == 0) { + aObj.removeAttr("href"); + } else { + aObj.attr("href", url); + } + }, + switchNode: function (setting, node) { + if (node.open || !tools.canAsync(setting, node)) { + view.expandCollapseNode(setting, node, !node.open); + } else if (setting.async.enable) { + if (!view.asyncNode(setting, node)) { + view.expandCollapseNode(setting, node, !node.open); + return; + } + } else if (node) { + view.expandCollapseNode(setting, node, !node.open); + } + } + }; + // zTree defind + $.fn.zTree = { + consts: _consts, + _z: { + tools: tools, + view: view, + event: event, + data: data + }, + getZTreeObj: function (treeId) { + var o = data.getZTreeTools(treeId); + return o ? o : null; + }, + destroy: function (treeId) { + if (!!treeId && treeId.length > 0) { + view.destroy(data.getSetting(treeId)); + } else { + for (var s in settings) { + view.destroy(settings[s]); + } + } + }, + init: function (obj, zSetting, zNodes) { + var setting = tools.clone(_setting); + $.extend(true, setting, zSetting); + setting.treeId = obj.attr("id"); + setting.treeObj = obj; + setting.treeObj.empty(); + settings[setting.treeId] = setting; + //For some older browser,(e.g., ie6) + if (typeof document.body.style.maxHeight === "undefined") { + setting.view.expandSpeed = ""; + } + data.initRoot(setting); + var root = data.getRoot(setting); + zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : []; + if (setting.data.simpleData.enable) { + data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes)); + } else { + data.nodeChildren(setting, root, zNodes); + } + + data.initCache(setting); + event.unbindTree(setting); + event.bindTree(setting); + event.unbindEvent(setting); + event.bindEvent(setting); + + var zTreeTools = { + setting: setting, + addNodes: function (parentNode, index, newNodes, isSilent) { + if (!parentNode) parentNode = null; + var isParent = data.nodeIsParent(setting, parentNode); + if (parentNode && !isParent && setting.data.keep.leaf) return null; + + var i = parseInt(index, 10); + if (isNaN(i)) { + isSilent = !!newNodes; + newNodes = index; + index = -1; + } else { + index = i; + } + if (!newNodes) return null; + + + var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]); + + function addCallback() { + view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true)); + } + + if (tools.canAsync(setting, parentNode)) { + view.asyncNode(setting, parentNode, isSilent, addCallback); + } else { + addCallback(); + } + return xNewNodes; + }, + cancelSelectedNode: function (node) { + view.cancelPreSelectedNode(setting, node); + }, + destroy: function () { + view.destroy(setting); + }, + expandAll: function (expandFlag) { + expandFlag = !!expandFlag; + view.expandCollapseSonNode(setting, null, expandFlag, true); + return expandFlag; + }, + expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) { + if (!node || !data.nodeIsParent(setting, node)) return null; + if (expandFlag !== true && expandFlag !== false) { + expandFlag = !node.open; + } + callbackFlag = !!callbackFlag; + + if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) { + return null; + } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) { + return null; + } + if (expandFlag && node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false); + } + if (expandFlag === node.open && !sonSign) { + return null; + } + + data.getRoot(setting).expandTriggerFlag = callbackFlag; + if (!tools.canAsync(setting, node) && sonSign) { + view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus); + } else { + node.open = !expandFlag; + view.switchNode(this.setting, node); + showNodeFocus(); + } + return expandFlag; + + function showNodeFocus() { + var a = $$(node, setting).get(0); + if (a && focus !== false) { + view.scrollIntoView(setting, a); + } + } + }, + getNodes: function () { + return data.getNodes(setting); + }, + getNodeByParam: function (key, value, parentNode) { + if (!key) return null; + return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodeByTId: function (tId) { + return data.getNodeCache(setting, tId); + }, + getNodesByParam: function (key, value, parentNode) { + if (!key) return null; + return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodesByParamFuzzy: function (key, value, parentNode) { + if (!key) return null; + return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) { + isSingle = !!isSingle; + if (!filter || (typeof filter != "function")) return (isSingle ? null : []); + return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam); + }, + getNodeIndex: function (node) { + if (!node) return null; + var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i] == node) return i; + } + return -1; + }, + getSelectedNodes: function () { + var r = [], list = data.getRoot(setting).curSelectedList; + for (var i = 0, l = list.length; i < l; i++) { + r.push(list[i]); + } + return r; + }, + isSelectedNode: function (node) { + return data.isSelectedNode(setting, node); + }, + reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) { + var promise = new Promise(function (resolve, reject) { + try { + zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () { + resolve(parentNode); + }); + } catch (e) { + reject(e); + } + }); + return promise; + }, + reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) { + if (!this.setting.async.enable) return; + var isRoot = !parentNode; + if (isRoot) { + parentNode = data.getRoot(setting); + } + if (reloadType == "refresh") { + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children ? children.length : 0; i < l; i++) { + data.removeNodeCache(setting, children[i]); + } + data.removeSelectedNode(setting); + data.nodeChildren(setting, parentNode, []); + if (isRoot) { + this.setting.treeObj.empty(); + } else { + var ulObj = $$(parentNode, consts.id.UL, setting); + ulObj.empty(); + } + } + view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback); + }, + refresh: function () { + this.setting.treeObj.empty(); + var root = data.getRoot(setting), + nodes = data.nodeChildren(setting, root); + data.initRoot(setting); + data.nodeChildren(setting, root, nodes); + data.initCache(setting); + view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1); + }, + removeChildNodes: function (node) { + if (!node) return null; + var nodes = data.nodeChildren(setting, node); + view.removeChildNodes(setting, node); + return nodes ? nodes : null; + }, + removeNode: function (node, callbackFlag) { + if (!node) return; + callbackFlag = !!callbackFlag; + if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return; + view.removeNode(setting, node); + if (callbackFlag) { + this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); + } + }, + selectNode: function (node, addFlag, isSilent) { + if (!node) return; + if (tools.uCanDo(setting)) { + addFlag = setting.view.selectedMulti && addFlag; + if (node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus); + } else if (!isSilent) { + try { + $$(node, setting).focus().blur(); + } catch (e) { + } + } + view.selectNode(setting, node, addFlag); + } + + function showNodeFocus() { + if (isSilent) { + return; + } + var a = $$(node, setting).get(0); + view.scrollIntoView(setting, a); + } + }, + transformTozTreeNodes: function (simpleNodes) { + return data.transformTozTreeFormat(setting, simpleNodes); + }, + transformToArray: function (nodes) { + return data.transformToArrayFormat(setting, nodes); + }, + updateNode: function (node, checkTypeFlag) { + if (!node) return; + var nObj = $$(node, setting); + if (nObj.get(0) && tools.uCanDo(setting)) { + view.setNodeName(setting, node); + view.setNodeTarget(setting, node); + view.setNodeUrl(setting, node); + view.setNodeLineIcos(setting, node); + view.setNodeFontCss(setting, node); + } + } + }; + root.treeTools = zTreeTools; + data.setZTreeTools(setting, zTreeTools); + var children = data.nodeChildren(setting, root); + if (children && children.length > 0) { + view.createNodes(setting, 0, children, null, -1); + } else if (setting.async.enable && setting.async.url && setting.async.url !== '') { + view.asyncNode(setting); + } + return zTreeTools; + } + }; + + var zt = $.fn.zTree, + $$ = tools.$, + consts = zt.consts; +})(jQuery); +/* + * JQuery zTree excheck v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function ($) { + //default consts of excheck + var _consts = { + event: { + CHECK: "ztree_check" + }, + id: { + CHECK: "_check" + }, + checkbox: { + STYLE: "checkbox", + DEFAULT: "chk", + DISABLED: "disable", + FALSE: "false", + TRUE: "true", + FULL: "full", + PART: "part", + FOCUS: "focus" + }, + radio: { + STYLE: "radio", + TYPE_ALL: "all", + TYPE_LEVEL: "level" + } + }, + //default setting of excheck + _setting = { + check: { + enable: false, + autoCheckTrigger: false, + chkStyle: _consts.checkbox.STYLE, + nocheckInherit: false, + chkDisabledInherit: false, + radioType: _consts.radio.TYPE_LEVEL, + chkboxType: { + "Y": "ps", + "N": "ps" + } + }, + data: { + key: { + checked: "checked" + } + }, + callback: { + beforeCheck: null, + onCheck: null + } + }, + //default root of excheck + _initRoot = function (setting) { + var r = data.getRoot(setting); + r.radioCheckedList = []; + }, + //default cache of excheck + _initCache = function (treeId) { + }, + //default bind event of excheck + _bindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.bind(c.CHECK, function (event, srcEvent, treeId, node) { + event.srcEvent = srcEvent; + tools.apply(setting.callback.onCheck, [event, treeId, node]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.unbind(c.CHECK); + }, + //default event proxy of excheck + _eventProxy = function (e) { + var target = e.target, + setting = data.getSetting(e.data.treeId), + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null; + + if (tools.eqs(e.type, "mouseover")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "mouseoverCheck"; + } + } else if (tools.eqs(e.type, "mouseout")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "mouseoutCheck"; + } + } else if (tools.eqs(e.type, "click")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "checkNode"; + } + } + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "checkNode" : + nodeEventCallback = _handler.onCheckNode; + break; + case "mouseoverCheck" : + nodeEventCallback = _handler.onMouseoverCheck; + break; + case "mouseoutCheck" : + nodeEventCallback = _handler.onMouseoutCheck; + break; + } + } + var proxyResult = { + stop: nodeEventType === "checkNode", + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of excheck + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + var checked = data.nodeChecked(setting, n); + checked = data.nodeChecked(setting, n, checked); + n.checkedOld = checked; + if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true"); + n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck); + if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true"); + n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled); + if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true"); + n.halfCheck = !!n.halfCheck; + n.check_Child_State = -1; + n.check_Focus = false; + n.getCheckStatus = function () { + return data.getCheckStatus(setting, n); + }; + + if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) { + var r = data.getRoot(setting); + r.radioCheckedList.push(n); + } + }, + //add dom for check + _beforeA = function (setting, node, html) { + if (setting.check.enable) { + data.makeChkFlag(setting, node); + html.push(""); + } + }, + //update zTreeObj, add method of check + _zTreeTools = function (setting, zTreeTools) { + zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) { + var nodeChecked = data.nodeChecked(setting, node); + if (node.chkDisabled === true) return; + if (checked !== true && checked !== false) { + checked = !nodeChecked; + } + callbackFlag = !!callbackFlag; + + if (nodeChecked === checked && !checkTypeFlag) { + return; + } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) { + return; + } + if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) { + data.nodeChecked(setting, node, checked); + var checkObj = $$(node, consts.id.CHECK, this.setting); + if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); + view.setChkClass(this.setting, checkObj, node); + view.repairParentChkClassWithSelf(this.setting, node); + if (callbackFlag) { + this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]); + } + } + } + + zTreeTools.checkAllNodes = function (checked) { + view.repairAllChk(this.setting, !!checked); + } + + zTreeTools.getCheckedNodes = function (checked) { + var checked = (checked !== false); + var children = data.nodeChildren(setting, data.getRoot(this.setting)); + return data.getTreeCheckedNodes(this.setting, children, checked); + } + + zTreeTools.getChangeCheckedNodes = function () { + var children = data.nodeChildren(setting, data.getRoot(this.setting)); + return data.getTreeChangeCheckedNodes(this.setting, children); + } + + zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) { + disabled = !!disabled; + inheritParent = !!inheritParent; + inheritChildren = !!inheritChildren; + view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren); + view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent); + } + + var _updateNode = zTreeTools.updateNode; + zTreeTools.updateNode = function (node, checkTypeFlag) { + if (_updateNode) _updateNode.apply(zTreeTools, arguments); + if (!node || !this.setting.check.enable) return; + var nObj = $$(node, this.setting); + if (nObj.get(0) && tools.uCanDo(this.setting)) { + var checkObj = $$(node, consts.id.CHECK, this.setting); + if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); + view.setChkClass(this.setting, checkObj, node); + view.repairParentChkClassWithSelf(this.setting, node); + } + } + }, + //method of operate data + _data = { + getRadioCheckedList: function (setting) { + var checkedList = data.getRoot(setting).radioCheckedList; + for (var i = 0, j = checkedList.length; i < j; i++) { + if (!data.getNodeCache(setting, checkedList[i].tId)) { + checkedList.splice(i, 1); + i--; + j--; + } + } + return checkedList; + }, + getCheckStatus: function (setting, node) { + if (!setting.check.enable || node.nocheck || node.chkDisabled) return null; + var checked = data.nodeChecked(setting, node), + r = { + checked: checked, + 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))) + }; + return r; + }, + getTreeCheckedNodes: function (setting, nodes, checked, results) { + if (!nodes) return []; + var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL); + results = !results ? [] : results; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + var children = data.nodeChildren(setting, node); + var nodeChecked = data.nodeChecked(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) { + results.push(node); + if (onlyOne) { + break; + } + } + data.getTreeCheckedNodes(setting, children, checked, results); + if (onlyOne && results.length > 0) { + break; + } + } + return results; + }, + getTreeChangeCheckedNodes: function (setting, nodes, results) { + if (!nodes) return []; + results = !results ? [] : results; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + var children = data.nodeChildren(setting, node); + var nodeChecked = data.nodeChecked(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) { + results.push(node); + } + data.getTreeChangeCheckedNodes(setting, children, results); + } + return results; + }, + makeChkFlag: function (setting, node) { + if (!node) return; + var chkFlag = -1; + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + var cNode = children[i]; + var nodeChecked = data.nodeChecked(setting, cNode); + var tmp = -1; + if (setting.check.chkStyle == consts.radio.STYLE) { + if (cNode.nocheck === true || cNode.chkDisabled === true) { + tmp = cNode.check_Child_State; + } else if (cNode.halfCheck === true) { + tmp = 2; + } else if (nodeChecked) { + tmp = 2; + } else { + tmp = cNode.check_Child_State > 0 ? 2 : 0; + } + if (tmp == 2) { + chkFlag = 2; + break; + } else if (tmp == 0) { + chkFlag = 0; + } + } else if (setting.check.chkStyle == consts.checkbox.STYLE) { + if (cNode.nocheck === true || cNode.chkDisabled === true) { + tmp = cNode.check_Child_State; + } else if (cNode.halfCheck === true) { + tmp = 1; + } else if (nodeChecked) { + tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1; + } else { + tmp = (cNode.check_Child_State > 0) ? 1 : 0; + } + if (tmp === 1) { + chkFlag = 1; + break; + } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) { + chkFlag = 1; + break; + } else if (chkFlag === 2 && tmp > -1 && tmp < 2) { + chkFlag = 1; + break; + } else if (tmp > -1) { + chkFlag = tmp; + } + } + } + } + node.check_Child_State = chkFlag; + } + }, + //method of event proxy + _event = {}, + //method of event handler + _handler = { + onCheckNode: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true; + var nodeChecked = data.nodeChecked(setting, node); + data.nodeChecked(setting, node, !nodeChecked); + view.checkNodeRelation(setting, node); + var checkObj = $$(node, consts.id.CHECK, setting); + view.setChkClass(setting, checkObj, node); + view.repairParentChkClassWithSelf(setting, node); + setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]); + return true; + }, + onMouseoverCheck: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId), + checkObj = $$(node, consts.id.CHECK, setting); + node.check_Focus = true; + view.setChkClass(setting, checkObj, node); + return true; + }, + onMouseoutCheck: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId), + checkObj = $$(node, consts.id.CHECK, setting); + node.check_Focus = false; + view.setChkClass(setting, checkObj, node); + return true; + } + }, + //method of tools for zTree + _tools = {}, + //method of operate ztree dom + _view = { + checkNodeRelation: function (setting, node) { + var pNode, i, l, + r = consts.radio; + var nodeChecked = data.nodeChecked(setting, node); + if (setting.check.chkStyle == r.STYLE) { + var checkedList = data.getRadioCheckedList(setting); + if (nodeChecked) { + if (setting.check.radioType == r.TYPE_ALL) { + for (i = checkedList.length - 1; i >= 0; i--) { + pNode = checkedList[i]; + var pNodeChecked = data.nodeChecked(setting, pNode); + if (pNodeChecked && pNode != node) { + data.nodeChecked(setting, pNode, false); + checkedList.splice(i, 1); + + view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); + if (pNode.parentTId != node.parentTId) { + view.repairParentChkClassWithSelf(setting, pNode); + } + } + } + checkedList.push(node); + } else { + var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); + var children = data.nodeChildren(setting, parentNode); + for (i = 0, l = children.length; i < l; i++) { + pNode = children[i]; + var pNodeChecked = data.nodeChecked(setting, pNode); + if (pNodeChecked && pNode != node) { + data.nodeChecked(setting, pNode, false); + view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); + } + } + } + } else if (setting.check.radioType == r.TYPE_ALL) { + for (i = 0, l = checkedList.length; i < l; i++) { + if (node == checkedList[i]) { + checkedList.splice(i, 1); + break; + } + } + } + + } else { + var children = data.nodeChildren(setting, node); + if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) { + view.setSonNodeCheckBox(setting, node, true); + } + if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) { + view.setSonNodeCheckBox(setting, node, false); + } + if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) { + view.setParentNodeCheckBox(setting, node, true); + } + if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) { + view.setParentNodeCheckBox(setting, node, false); + } + } + }, + makeChkClass: function (setting, node) { + var c = consts.checkbox, r = consts.radio, + fullStyle = ""; + var nodeChecked = data.nodeChecked(setting, node); + if (node.chkDisabled === true) { + fullStyle = c.DISABLED; + } else if (node.halfCheck) { + fullStyle = c.PART; + } else if (setting.check.chkStyle == r.STYLE) { + fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART; + } else { + 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); + } + var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle; + chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName; + return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName; + }, + repairAllChk: function (setting, checked) { + if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) { + var root = data.getRoot(setting); + var children = data.nodeChildren(setting, root); + for (var i = 0, l = children.length; i < l; i++) { + var node = children[i]; + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, checked); + } + view.setSonNodeCheckBox(setting, node, checked); + } + } + }, + repairChkClass: function (setting, node) { + if (!node) return; + data.makeChkFlag(setting, node); + if (node.nocheck !== true) { + var checkObj = $$(node, consts.id.CHECK, setting); + view.setChkClass(setting, checkObj, node); + } + }, + repairParentChkClass: function (setting, node) { + if (!node || !node.parentTId) return; + var pNode = node.getParentNode(); + view.repairChkClass(setting, pNode); + view.repairParentChkClass(setting, pNode); + }, + repairParentChkClassWithSelf: function (setting, node) { + if (!node) return; + var children = data.nodeChildren(setting, node); + if (children && children.length > 0) { + view.repairParentChkClass(setting, children[0]); + } else { + view.repairParentChkClass(setting, node); + } + }, + repairSonChkDisabled: function (setting, node, chkDisabled, inherit) { + if (!node) return; + if (node.chkDisabled != chkDisabled) { + node.chkDisabled = chkDisabled; + } + view.repairChkClass(setting, node); + var children = data.nodeChildren(setting, node); + if (children && inherit) { + for (var i = 0, l = children.length; i < l; i++) { + var sNode = children[i]; + view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit); + } + } + }, + repairParentChkDisabled: function (setting, node, chkDisabled, inherit) { + if (!node) return; + if (node.chkDisabled != chkDisabled && inherit) { + node.chkDisabled = chkDisabled; + } + view.repairChkClass(setting, node); + view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit); + }, + setChkClass: function (setting, obj, node) { + if (!obj) return; + if (node.nocheck === true) { + obj.hide(); + } else { + obj.show(); + } + obj.attr('class', view.makeChkClass(setting, node)); + }, + setParentNodeCheckBox: function (setting, node, value, srcNode) { + var checkObj = $$(node, consts.id.CHECK, setting); + if (!srcNode) srcNode = node; + data.makeChkFlag(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, value); + view.setChkClass(setting, checkObj, node); + if (setting.check.autoCheckTrigger && node != srcNode) { + setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); + } + } + if (node.parentTId) { + var pSign = true; + if (!value) { + var pNodes = data.nodeChildren(setting, node.getParentNode()); + for (var i = 0, l = pNodes.length; i < l; i++) { + var pNode = pNodes[i]; + var nodeChecked = data.nodeChecked(setting, pNode); + if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked) + || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) { + pSign = false; + break; + } + } + } + if (pSign) { + view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode); + } + } + }, + setSonNodeCheckBox: function (setting, node, value, srcNode) { + if (!node) return; + var checkObj = $$(node, consts.id.CHECK, setting); + if (!srcNode) srcNode = node; + + var hasDisable = false; + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + var sNode = children[i]; + view.setSonNodeCheckBox(setting, sNode, value, srcNode); + if (sNode.chkDisabled === true) hasDisable = true; + } + } + + if (node != data.getRoot(setting) && node.chkDisabled !== true) { + if (hasDisable && node.nocheck !== true) { + data.makeChkFlag(setting, node); + } + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, value); + if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1; + } else { + node.check_Child_State = -1; + } + view.setChkClass(setting, checkObj, node); + if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) { + setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); + } + } + + } + }, + + _z = { + tools: _tools, + view: _view, + event: _event, + data: _data + }; + $.extend(true, $.fn.zTree.consts, _consts); + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.nodeChecked = function (setting, node, newChecked) { + if (!node) { + return false; + } + var key = setting.data.key.checked; + if (typeof newChecked !== 'undefined') { + if (typeof newChecked === "string") { + newChecked = tools.eqs(newChecked, "true"); + } + newChecked = !!newChecked; + node[key] = newChecked; + } + return node[key]; + }; + + data.exSetting(_setting); + data.addInitBind(_bindEvent); + data.addInitUnBind(_unbindEvent); + data.addInitCache(_initCache); + data.addInitNode(_initNode); + data.addInitProxy(_eventProxy, true); + data.addInitRoot(_initRoot); + data.addBeforeA(_beforeA); + data.addZTreeTools(_zTreeTools); + + var _createNodes = view.createNodes; + view.createNodes = function (setting, level, nodes, parentNode, index) { + if (_createNodes) _createNodes.apply(view, arguments); + if (!nodes) return; + view.repairParentChkClassWithSelf(setting, parentNode); + } + var _removeNode = view.removeNode; + view.removeNode = function (setting, node) { + var parentNode = node.getParentNode(); + if (_removeNode) _removeNode.apply(view, arguments); + if (!node || !parentNode) return; + view.repairChkClass(setting, parentNode); + view.repairParentChkClass(setting, parentNode); + } + + var _appendNodes = view.appendNodes; + view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) { + var html = ""; + if (_appendNodes) { + html = _appendNodes.apply(view, arguments); + } + if (parentNode) { + data.makeChkFlag(setting, parentNode); + } + return html; + } +})(jQuery); +/* + * JQuery zTree exedit v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function ($) { + //default consts of exedit + var _consts = { + event: { + DRAG: "ztree_drag", + DROP: "ztree_drop", + RENAME: "ztree_rename", + DRAGMOVE: "ztree_dragmove" + }, + id: { + EDIT: "_edit", + INPUT: "_input", + REMOVE: "_remove" + }, + move: { + TYPE_INNER: "inner", + TYPE_PREV: "prev", + TYPE_NEXT: "next" + }, + node: { + CURSELECTED_EDIT: "curSelectedNode_Edit", + TMPTARGET_TREE: "tmpTargetzTree", + TMPTARGET_NODE: "tmpTargetNode" + } + }, + //default setting of exedit + _setting = { + edit: { + enable: false, + editNameSelectAll: false, + showRemoveBtn: true, + showRenameBtn: true, + removeTitle: "remove", + renameTitle: "rename", + drag: { + autoExpandTrigger: false, + isCopy: true, + isMove: true, + prev: true, + next: true, + inner: true, + minMoveSize: 5, + borderMax: 10, + borderMin: -5, + maxShowNodeNum: 5, + autoOpenTime: 500 + } + }, + view: { + addHoverDom: null, + removeHoverDom: null + }, + callback: { + beforeDrag: null, + beforeDragOpen: null, + beforeDrop: null, + beforeEditName: null, + beforeRename: null, + onDrag: null, + onDragMove: null, + onDrop: null, + onRename: null + } + }, + //default root of exedit + _initRoot = function (setting) { + var r = data.getRoot(setting), rs = data.getRoots(); + r.curEditNode = null; + r.curEditInput = null; + r.curHoverNode = null; + r.dragFlag = 0; + r.dragNodeShowBefore = []; + r.dragMaskList = new Array(); + rs.showHoverDom = true; + }, + //default cache of exedit + _initCache = function (treeId) { + }, + //default bind event of exedit + _bindEvent = function (setting) { + var o = setting.treeObj; + var c = consts.event; + o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) { + tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]); + }); + + o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) { + tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]); + }); + + o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) { + tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]); + }); + + o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) { + tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj; + var c = consts.event; + o.unbind(c.RENAME); + o.unbind(c.DRAG); + o.unbind(c.DRAGMOVE); + o.unbind(c.DROP); + }, + //default event proxy of exedit + _eventProxy = function (e) { + var target = e.target, + setting = data.getSetting(e.data.treeId), + relatedTarget = e.relatedTarget, + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null, + tmp = null; + + if (tools.eqs(e.type, "mouseover")) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "hoverOverNode"; + } + } else if (tools.eqs(e.type, "mouseout")) { + tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (!tmp) { + tId = "remove"; + nodeEventType = "hoverOutNode"; + } + } else if (tools.eqs(e.type, "mousedown")) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "mousedownNode"; + } + } + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "mousedownNode" : + nodeEventCallback = _handler.onMousedownNode; + break; + case "hoverOverNode" : + nodeEventCallback = _handler.onHoverOverNode; + break; + case "hoverOutNode" : + nodeEventCallback = _handler.onHoverOutNode; + break; + } + } + var proxyResult = { + stop: false, + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of exedit + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + n.isHover = false; + n.editNameFlag = false; + }, + //update zTreeObj, add method of edit + _zTreeTools = function (setting, zTreeTools) { + zTreeTools.cancelEditName = function (newName) { + var root = data.getRoot(this.setting); + if (!root.curEditNode) return; + view.cancelCurEditNode(this.setting, newName ? newName : null, true); + } + zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) { + if (!node) return null; + var isParent = data.nodeIsParent(setting, targetNode); + if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null; + var _this = this, + newNode = tools.clone(node); + if (!targetNode) { + targetNode = null; + moveType = consts.move.TYPE_INNER; + } + if (moveType == consts.move.TYPE_INNER) { + function copyCallback() { + view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent); + } + + if (tools.canAsync(this.setting, targetNode)) { + view.asyncNode(this.setting, targetNode, isSilent, copyCallback); + } else { + copyCallback(); + } + } else { + view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent); + view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent); + } + return newNode; + } + zTreeTools.editName = function (node) { + if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return; + if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true); + view.editNode(this.setting, node) + } + zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) { + if (!node) return node; + var isParent = data.nodeIsParent(setting, targetNode); + if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) { + return null; + } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) { + return null; + } else if (!targetNode) { + targetNode = null; + } + var _this = this; + + function moveCallback() { + view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent); + } + + if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) { + view.asyncNode(this.setting, targetNode, isSilent, moveCallback); + } else { + moveCallback(); + } + return node; + } + zTreeTools.setEditable = function (editable) { + this.setting.edit.enable = editable; + return this.refresh(); + } + }, + //method of operate data + _data = { + setSonNodeLevel: function (setting, parentNode, node) { + if (!node) return; + var children = data.nodeChildren(setting, node); + node.level = (parentNode) ? parentNode.level + 1 : 0; + if (!children) return; + for (var i = 0, l = children.length; i < l; i++) { + if (children[i]) data.setSonNodeLevel(setting, node, children[i]); + } + } + }, + //method of event proxy + _event = {}, + //method of event handler + _handler = { + onHoverOverNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + root = data.getRoot(setting); + if (root.curHoverNode != node) { + _handler.onHoverOutNode(event); + } + root.curHoverNode = node; + view.addHoverDom(setting, node); + }, + onHoverOutNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + root = data.getRoot(setting); + if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) { + view.removeTreeDom(setting, root.curHoverNode); + root.curHoverNode = null; + } + }, + onMousedownNode: function (eventMouseDown, _node) { + var i, l, + setting = data.getSetting(eventMouseDown.data.treeId), + root = data.getRoot(setting), roots = data.getRoots(); + //right click can't drag & drop + if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true; + + //input of edit node name can't drag & drop + var target = eventMouseDown.target, + _nodes = data.getRoot(setting).curSelectedList, + nodes = []; + if (!data.isSelectedNode(setting, _node)) { + nodes = [_node]; + } else { + for (i = 0, l = _nodes.length; i < l; i++) { + if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) { + return true; + } + nodes.push(_nodes[i]); + if (nodes[0].parentTId !== _nodes[i].parentTId) { + nodes = [_node]; + break; + } + } + } + + view.editNodeBlur = true; + view.cancelCurEditNode(setting); + + var doc = $(setting.treeObj.get(0).ownerDocument), + body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget, + isOtherTree = false, + targetSetting = setting, + sourceSetting = setting, + preNode, nextNode, + preTmpTargetNodeId = null, + preTmpMoveType = null, + tmpTargetNodeId = null, + moveType = consts.move.TYPE_INNER, + mouseDownX = eventMouseDown.clientX, + mouseDownY = eventMouseDown.clientY, + startTime = (new Date()).getTime(); + + if (tools.uCanDo(setting)) { + doc.bind("mousemove", _docMouseMove); + } + + function _docMouseMove(event) { + //avoid start drag after click node + if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize + && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) { + return true; + } + var i, l, tmpNode, tmpDom, tmpNodes; + body.css("cursor", "pointer"); + + if (root.dragFlag == 0) { + if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) { + _docMouseUp(event); + return true; + } + + for (i = 0, l = nodes.length; i < l; i++) { + if (i == 0) { + root.dragNodeShowBefore = []; + } + tmpNode = nodes[i]; + if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) { + view.expandCollapseNode(setting, tmpNode, !tmpNode.open); + root.dragNodeShowBefore[tmpNode.tId] = true; + } else { + root.dragNodeShowBefore[tmpNode.tId] = false; + } + } + + root.dragFlag = 1; + roots.showHoverDom = false; + tools.showIfameMask(setting, true); + + //sort + var isOrder = true, lastIndex = -1; + if (nodes.length > 1) { + var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting); + tmpNodes = []; + for (i = 0, l = pNodes.length; i < l; i++) { + if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) { + if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) { + isOrder = false; + } + tmpNodes.push(pNodes[i]); + lastIndex = i; + } + if (nodes.length === tmpNodes.length) { + nodes = tmpNodes; + break; + } + } + } + if (isOrder) { + preNode = nodes[0].getPreNode(); + nextNode = nodes[nodes.length - 1].getNextNode(); + } + + //set node in selected + curNode = $$("
                ", setting); + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + tmpNode.editNameFlag = false; + view.selectNode(setting, tmpNode, i > 0); + view.removeTreeDom(setting, tmpNode); + + if (i > setting.edit.drag.maxShowNodeNum - 1) { + continue; + } + + tmpDom = $$("
              • ", setting); + tmpDom.append($$(tmpNode, consts.id.A, setting).clone()); + tmpDom.css("padding", "0"); + tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED); + curNode.append(tmpDom); + if (i == setting.edit.drag.maxShowNodeNum - 1) { + tmpDom = $$("
              • ...
              • ", setting); + curNode.append(tmpDom); + } + } + curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp"); + curNode.addClass(setting.treeObj.attr("class")); + curNode.appendTo(body); + + tmpArrow = $$("", setting); + tmpArrow.attr("id", "zTreeMove_arrow_tmp"); + tmpArrow.appendTo(body); + + setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]); + } + + if (root.dragFlag == 1) { + if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) { + var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget); + event.target = (xT.length > 0) ? xT.get(0) : event.target; + } else if (tmpTarget) { + tmpTarget.removeClass(consts.node.TMPTARGET_TREE); + if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) + .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); + } + tmpTarget = null; + tmpTargetNodeId = null; + + //judge drag & drop in multi ztree + isOtherTree = false; + targetSetting = setting; + var settings = data.getSettings(); + for (var s in settings) { + if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId + && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) { + isOtherTree = true; + targetSetting = settings[s]; + } + } + + var docScrollTop = doc.scrollTop(), + docScrollLeft = doc.scrollLeft(), + treeOffset = targetSetting.treeObj.offset(), + scrollHeight = targetSetting.treeObj.get(0).scrollHeight, + scrollWidth = targetSetting.treeObj.get(0).scrollWidth, + dTop = (event.clientY + docScrollTop - treeOffset.top), + dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop), + dLeft = (event.clientX + docScrollLeft - treeOffset.left), + dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft), + isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin), + isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin), + isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin), + isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin), + isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin, + isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0), + isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight), + isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0), + isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth); + + if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) { + //get node
              • dom + var targetObj = event.target; + while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) { + targetObj = targetObj.parentNode; + } + + var canMove = true; + //don't move to self or children of self + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + if (targetObj.id === tmpNode.tId) { + canMove = false; + break; + } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) { + canMove = false; + break; + } + } + if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) { + tmpTarget = $(targetObj); + tmpTargetNodeId = targetObj.id; + } + } + + //the mouse must be in zTree + tmpNode = nodes[0]; + if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) { + //judge mouse move in root of ztree + if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) { + tmpTarget = targetSetting.treeObj; + } + //auto scroll top + if (isTop) { + targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10); + } else if (isBottom) { + targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10); + } + if (isLeft) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10); + } else if (isRight) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10); + } + //auto scroll left + if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left); + } + } + + curNode.css({ + "top": (event.clientY + docScrollTop + 3) + "px", + "left": (event.clientX + docScrollLeft + 3) + "px" + }); + + var dX = 0; + var dY = 0; + if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) { + var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId), + isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy), + isPrev = !!(preNode && tmpTargetNodeId === preNode.tId), + isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId), + isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId), + canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev), + canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next), + 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); + + function clearMove() { + tmpTarget = null; + tmpTargetNodeId = ""; + moveType = consts.move.TYPE_INNER; + tmpArrow.css({ + "display": "none" + }); + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null + } + } + + if (!canPrev && !canNext && !canInner) { + clearMove(); + } else { + var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget), + tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()), + tmpTop = tmpTargetA.offset().top, + tmpLeft = tmpTargetA.offset().left, + prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1, + nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1, + dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height(); + + if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) { + dX = 1 - tmpArrow.width(); + dY = tmpTop - tmpArrow.height() / 2; + moveType = consts.move.TYPE_PREV; + } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) { + dX = 1 - tmpArrow.width(); + dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2); + moveType = consts.move.TYPE_NEXT; + } else if (canInner) { + dX = 5 - tmpArrow.width(); + dY = tmpTop; + moveType = consts.move.TYPE_INNER; + } else { + clearMove(); + } + + if (tmpTarget) { + tmpArrow.css({ + "display": "block", + "top": dY + "px", + "left": (tmpLeft + dX) + "px" + }); + tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType); + + if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) { + startTime = (new Date()).getTime(); + } + if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) { + var startTimer = true; + if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) { + startTimer = false; + } + if (startTimer) { + window.zTreeMoveTimer = setTimeout(function () { + if (moveType != consts.move.TYPE_INNER) return; + if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime + && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) { + view.switchNode(targetSetting, tmpTargetNode); + if (targetSetting.edit.drag.autoExpandTrigger) { + targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]); + } + } + }, targetSetting.edit.drag.autoOpenTime + 50); + window.zTreeMoveTargetNodeTId = tmpTargetNode.tId; + } + } + } + } + } else { + moveType = consts.move.TYPE_INNER; + if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) { + tmpTarget.addClass(consts.node.TMPTARGET_TREE); + } else { + tmpTarget = null; + } + tmpArrow.css({ + "display": "none" + }); + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } + } + preTmpTargetNodeId = tmpTargetNodeId; + preTmpMoveType = moveType; + + setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]); + } + return false; + } + + doc.bind("mouseup", _docMouseUp); + + function _docMouseUp(event) { + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } + preTmpTargetNodeId = null; + preTmpMoveType = null; + doc.unbind("mousemove", _docMouseMove); + doc.unbind("mouseup", _docMouseUp); + doc.unbind("selectstart", _docSelect); + body.css("cursor", ""); + if (tmpTarget) { + tmpTarget.removeClass(consts.node.TMPTARGET_TREE); + if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) + .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); + } + tools.showIfameMask(setting, false); + + roots.showHoverDom = true; + if (root.dragFlag == 0) return; + root.dragFlag = 0; + + var i, l, tmpNode; + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) { + view.expandCollapseNode(setting, tmpNode, !tmpNode.open); + delete root.dragNodeShowBefore[tmpNode.tId]; + } + } + + if (curNode) curNode.remove(); + if (tmpArrow) tmpArrow.remove(); + + var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy); + if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) { + tmpTarget = null; + } + if (tmpTarget) { + var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId); + if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) { + view.selectNodes(sourceSetting, nodes); + return; + } + var newNodes = isCopy ? tools.clone(nodes) : nodes; + + function dropCallback() { + if (isOtherTree) { + if (!isCopy) { + for (var i = 0, l = nodes.length; i < l; i++) { + view.removeNode(setting, nodes[i]); + } + } + if (moveType == consts.move.TYPE_INNER) { + view.addNodes(targetSetting, dragTargetNode, -1, newNodes); + } else { + view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes); + } + } else { + if (isCopy && moveType == consts.move.TYPE_INNER) { + view.addNodes(targetSetting, dragTargetNode, -1, newNodes); + } else if (isCopy) { + view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes); + } else { + if (moveType != consts.move.TYPE_NEXT) { + for (i = 0, l = newNodes.length; i < l; i++) { + view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false); + } + } else { + for (i = -1, l = newNodes.length - 1; i < l; l--) { + view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false); + } + } + } + } + view.selectNodes(targetSetting, newNodes); + + var a = $$(newNodes[0], setting).get(0); + view.scrollIntoView(setting, a); + + setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]); + } + + if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) { + view.asyncNode(targetSetting, dragTargetNode, false, dropCallback); + } else { + dropCallback(); + } + + } else { + view.selectNodes(sourceSetting, nodes); + setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]); + } + } + + doc.bind("selectstart", _docSelect); + + function _docSelect() { + return false; + } + + // 2018-03-30 FireFox has fixed this issue. + //Avoid FireFox's Bug + //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error. + // if(eventMouseDown.preventDefault) { + // eventMouseDown.preventDefault(); + // } + return true; + } + }, + //method of tools for zTree + _tools = { + getAbs: function (obj) { + var oRect = obj.getBoundingClientRect(), + scrollTop = document.body.scrollTop + document.documentElement.scrollTop, + scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft; + return [oRect.left + scrollLeft, oRect.top + scrollTop]; + }, + inputFocus: function (inputObj) { + if (inputObj.get(0)) { + inputObj.focus(); + tools.setCursorPosition(inputObj.get(0), inputObj.val().length); + } + }, + inputSelect: function (inputObj) { + if (inputObj.get(0)) { + inputObj.focus(); + inputObj.select(); + } + }, + setCursorPosition: function (obj, pos) { + if (obj.setSelectionRange) { + obj.focus(); + obj.setSelectionRange(pos, pos); + } else if (obj.createTextRange) { + var range = obj.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + range.select(); + } + }, + showIfameMask: function (setting, showSign) { + var root = data.getRoot(setting); + //clear full mask + while (root.dragMaskList.length > 0) { + root.dragMaskList[0].remove(); + root.dragMaskList.shift(); + } + if (showSign) { + //show mask + var iframeList = $$("iframe", setting); + for (var i = 0, l = iframeList.length; i < l; i++) { + var obj = iframeList.get(i), + r = tools.getAbs(obj), + dragMask = $$("
                ", setting); + dragMask.appendTo($$("body", setting)); + root.dragMaskList.push(dragMask); + } + } + } + }, + //method of operate ztree dom + _view = { + addEditBtn: function (setting, node) { + if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) { + return; + } + if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) { + return; + } + var aObj = $$(node, consts.id.A, setting), + editStr = ""; + aObj.append(editStr); + + $$(node, consts.id.EDIT, setting).bind('click', + function () { + if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false; + view.editNode(setting, node); + return false; + } + ).show(); + }, + addRemoveBtn: function (setting, node) { + if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) { + return; + } + if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) { + return; + } + var aObj = $$(node, consts.id.A, setting), + removeStr = ""; + aObj.append(removeStr); + + $$(node, consts.id.REMOVE, setting).bind('click', + function () { + if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false; + view.removeNode(setting, node); + setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); + return false; + } + ).bind('mousedown', + function (eventMouseDown) { + return true; + } + ).show(); + }, + addHoverDom: function (setting, node) { + if (data.getRoots().showHoverDom) { + node.isHover = true; + if (setting.edit.enable) { + view.addEditBtn(setting, node); + view.addRemoveBtn(setting, node); + } + tools.apply(setting.view.addHoverDom, [setting.treeId, node]); + } + }, + cancelCurEditNode: function (setting, forceName, isCancel) { + var root = data.getRoot(setting), + node = root.curEditNode; + + if (node) { + var inputObj = root.curEditInput, + newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val()); + if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) { + return false; + } + data.nodeName(setting, node, newName); + var aObj = $$(node, consts.id.A, setting); + aObj.removeClass(consts.node.CURSELECTED_EDIT); + inputObj.unbind(); + view.setNodeName(setting, node); + node.editNameFlag = false; + root.curEditNode = null; + root.curEditInput = null; + view.selectNode(setting, node, false); + setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]); + } + root.noSelection = true; + return true; + }, + editNode: function (setting, node) { + var root = data.getRoot(setting); + view.editNodeBlur = false; + if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { + setTimeout(function () { + tools.inputFocus(root.curEditInput); + }, 0); + return; + } + node.editNameFlag = true; + view.removeTreeDom(setting, node); + view.cancelCurEditNode(setting); + view.selectNode(setting, node, false); + $$(node, consts.id.SPAN, setting).html(""); + var inputObj = $$(node, consts.id.INPUT, setting); + inputObj.attr("value", data.nodeName(setting, node)); + if (setting.edit.editNameSelectAll) { + tools.inputSelect(inputObj); + } else { + tools.inputFocus(inputObj); + } + + inputObj.bind('blur', function (event) { + if (!view.editNodeBlur) { + view.cancelCurEditNode(setting); + } + }).bind('keydown', function (event) { + if (event.keyCode == "13") { + view.editNodeBlur = true; + view.cancelCurEditNode(setting); + } else if (event.keyCode == "27") { + view.cancelCurEditNode(setting, null, true); + } + }).bind('click', function (event) { + return false; + }).bind('dblclick', function (event) { + return false; + }); + + $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT); + root.curEditInput = inputObj; + root.noSelection = false; + root.curEditNode = node; + }, + moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) { + var root = data.getRoot(setting); + if (targetNode == node) return; + if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return; + var oldParentNode = (node.parentTId ? node.getParentNode() : root), + targetNodeIsRoot = (targetNode === null || targetNode == root); + if (targetNodeIsRoot && targetNode === null) targetNode = root; + if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER; + var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root); + + if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) { + moveType = consts.move.TYPE_INNER; + } + + if (moveType == consts.move.TYPE_INNER) { + if (targetNodeIsRoot) { + //parentTId of root node is null + node.parentTId = null; + } else { + if (!data.nodeIsParent(setting, targetNode)) { + data.nodeIsParent(setting, targetNode, true); + targetNode.open = !!targetNode.open; + view.setNodeLineIcos(setting, targetNode); + } + node.parentTId = targetNode.tId; + } + } + + //move node Dom + var targetObj, target_ulObj; + if (targetNodeIsRoot) { + targetObj = setting.treeObj; + target_ulObj = targetObj; + } else { + if (!isSilent && moveType == consts.move.TYPE_INNER) { + view.expandCollapseNode(setting, targetNode, true, false); + } else if (!isSilent) { + view.expandCollapseNode(setting, targetNode.getParentNode(), true, false); + } + targetObj = $$(targetNode, setting); + target_ulObj = $$(targetNode, consts.id.UL, setting); + if (!!targetObj.get(0) && !target_ulObj.get(0)) { + var ulstr = []; + view.makeUlHtml(setting, targetNode, ulstr, ''); + targetObj.append(ulstr.join('')); + } + target_ulObj = $$(targetNode, consts.id.UL, setting); + } + var nodeDom = $$(node, setting); + if (!nodeDom.get(0)) { + nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join(''); + } else if (!targetObj.get(0)) { + nodeDom.remove(); + } + if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) { + target_ulObj.append(nodeDom); + } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) { + targetObj.before(nodeDom); + } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) { + targetObj.after(nodeDom); + } + + //repair the data after move + var i, l, + tmpSrcIndex = -1, + tmpTargetIndex = 0, + oldNeighbor = null, + newNeighbor = null, + oldLevel = node.level; + var oldChildren = data.nodeChildren(setting, oldParentNode); + var targetParentChildren = data.nodeChildren(setting, targetParentNode); + var targetChildren = data.nodeChildren(setting, targetNode); + if (node.isFirstNode) { + tmpSrcIndex = 0; + if (oldChildren.length > 1) { + oldNeighbor = oldChildren[1]; + oldNeighbor.isFirstNode = true; + } + } else if (node.isLastNode) { + tmpSrcIndex = oldChildren.length - 1; + oldNeighbor = oldChildren[tmpSrcIndex - 1]; + oldNeighbor.isLastNode = true; + } else { + for (i = 0, l = oldChildren.length; i < l; i++) { + if (oldChildren[i].tId == node.tId) { + tmpSrcIndex = i; + break; + } + } + } + if (tmpSrcIndex >= 0) { + oldChildren.splice(tmpSrcIndex, 1); + } + if (moveType != consts.move.TYPE_INNER) { + for (i = 0, l = targetParentChildren.length; i < l; i++) { + if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i; + } + } + if (moveType == consts.move.TYPE_INNER) { + if (!targetChildren) { + targetChildren = data.nodeChildren(setting, targetNode, []); + } + if (targetChildren.length > 0) { + newNeighbor = targetChildren[targetChildren.length - 1]; + newNeighbor.isLastNode = false; + } + targetChildren.splice(targetChildren.length, 0, node); + node.isLastNode = true; + node.isFirstNode = (targetChildren.length == 1); + } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) { + targetParentChildren.splice(tmpTargetIndex, 0, node); + newNeighbor = targetNode; + newNeighbor.isFirstNode = false; + node.parentTId = targetNode.parentTId; + node.isFirstNode = true; + node.isLastNode = false; + + } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) { + targetParentChildren.splice(tmpTargetIndex + 1, 0, node); + newNeighbor = targetNode; + newNeighbor.isLastNode = false; + node.parentTId = targetNode.parentTId; + node.isFirstNode = false; + node.isLastNode = true; + + } else { + if (moveType == consts.move.TYPE_PREV) { + targetParentChildren.splice(tmpTargetIndex, 0, node); + } else { + targetParentChildren.splice(tmpTargetIndex + 1, 0, node); + } + node.parentTId = targetNode.parentTId; + node.isFirstNode = false; + node.isLastNode = false; + } + data.fixPIdKeyValue(setting, node); + data.setSonNodeLevel(setting, node.getParentNode(), node); + + //repair node what been moved + view.setNodeLineIcos(setting, node); + view.repairNodeLevelClass(setting, node, oldLevel); + + //repair node's old parentNode dom + if (!setting.data.keep.parent && oldChildren.length < 1) { + //old parentNode has no child nodes + data.nodeIsParent(setting, oldParentNode, false); + oldParentNode.open = false; + var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting), + tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting), + tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting); + view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU); + tmp_ulObj.css("display", "none"); + + } else if (oldNeighbor) { + //old neigbor node + view.setNodeLineIcos(setting, oldNeighbor); + } + + //new neigbor node + if (newNeighbor) { + view.setNodeLineIcos(setting, newNeighbor); + } + + //repair checkbox / radio + if (!!setting.check && setting.check.enable && view.repairChkClass) { + view.repairChkClass(setting, oldParentNode); + view.repairParentChkClassWithSelf(setting, oldParentNode); + if (oldParentNode != node.parent) + view.repairParentChkClassWithSelf(setting, node); + } + + //expand parents after move + if (!isSilent) { + view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag); + } + }, + removeEditBtn: function (setting, node) { + $$(node, consts.id.EDIT, setting).unbind().remove(); + }, + removeRemoveBtn: function (setting, node) { + $$(node, consts.id.REMOVE, setting).unbind().remove(); + }, + removeTreeDom: function (setting, node) { + node.isHover = false; + view.removeEditBtn(setting, node); + view.removeRemoveBtn(setting, node); + tools.apply(setting.view.removeHoverDom, [setting.treeId, node]); + }, + repairNodeLevelClass: function (setting, node, oldLevel) { + if (oldLevel === node.level) return; + var liObj = $$(node, setting), + aObj = $$(node, consts.id.A, setting), + ulObj = $$(node, consts.id.UL, setting), + oldClass = consts.className.LEVEL + oldLevel, + newClass = consts.className.LEVEL + node.level; + liObj.removeClass(oldClass); + liObj.addClass(newClass); + aObj.removeClass(oldClass); + aObj.addClass(newClass); + ulObj.removeClass(oldClass); + ulObj.addClass(newClass); + }, + selectNodes: function (setting, nodes) { + for (var i = 0, l = nodes.length; i < l; i++) { + view.selectNode(setting, nodes[i], i > 0); + } + } + }, + + _z = { + tools: _tools, + view: _view, + event: _event, + data: _data + }; + $.extend(true, $.fn.zTree.consts, _consts); + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.exSetting(_setting); + data.addInitBind(_bindEvent); + data.addInitUnBind(_unbindEvent); + data.addInitCache(_initCache); + data.addInitNode(_initNode); + data.addInitProxy(_eventProxy); + data.addInitRoot(_initRoot); + data.addZTreeTools(_zTreeTools); + + var _cancelPreSelectedNode = view.cancelPreSelectedNode; + view.cancelPreSelectedNode = function (setting, node) { + var list = data.getRoot(setting).curSelectedList; + for (var i = 0, j = list.length; i < j; i++) { + if (!node || node === list[i]) { + view.removeTreeDom(setting, list[i]); + if (node) break; + } + } + if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments); + } + + var _createNodes = view.createNodes; + view.createNodes = function (setting, level, nodes, parentNode, index) { + if (_createNodes) { + _createNodes.apply(view, arguments); + } + if (!nodes) return; + if (view.repairParentChkClassWithSelf) { + view.repairParentChkClassWithSelf(setting, parentNode); + } + } + + var _makeNodeUrl = view.makeNodeUrl; + view.makeNodeUrl = function (setting, node) { + return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments)); + } + + var _removeNode = view.removeNode; + view.removeNode = function (setting, node) { + var root = data.getRoot(setting); + if (root.curEditNode === node) root.curEditNode = null; + if (_removeNode) { + _removeNode.apply(view, arguments); + } + } + + var _selectNode = view.selectNode; + view.selectNode = function (setting, node, addFlag) { + var root = data.getRoot(setting); + if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { + return false; + } + if (_selectNode) _selectNode.apply(view, arguments); + view.addHoverDom(setting, node); + return true; + } + + var _uCanDo = tools.uCanDo; + tools.uCanDo = function (setting, e) { + var root = data.getRoot(setting); + if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) { + return true; + } + if (root.curEditNode) { + view.editNodeBlur = false; + root.curEditInput.focus(); + } + return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true); + } +})(jQuery); diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.all.min.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.all.min.js new file mode 100644 index 0000000..52bbe0d --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.all.min.js @@ -0,0 +1,166 @@ + +/* + * JQuery zTree core v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(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", +dataType:"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, +function(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, +[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= +e.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)&&!(b===!1||typeof b=="string"&&h.eqs(b,"false"))?(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)};c.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,i="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,"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=(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,b){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)||c.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-1&& +f.push(k);k=e.nodeChildren(a,k);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 +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&&a.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&&d0},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+1,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;s0&&(l=j.appendNodes(a,b+1,I,p,-1,i,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)&&f.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);for(f=0,i=k.length;b&&f1&&(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-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,xhrFields: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,[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,[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),n.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=l(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,[])):c.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=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,"&").replace(//g,">");a.push("", +d,"")},makeDOMNodeLine:function(a,b,c){a.push("")},makeDOMNodeMainAfter:function(a){a.push("
              • ")},makeDOMNodeMainBefore:function(a,b,c){a.push("
              • ")},makeDOMNodeNameAfter:function(a){a.push("")},makeDOMNodeNameBefore:function(a,b,c){var d=e.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("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,"'").replace(//g,">"),"'");a.push(">")},makeNodeFontCss:function(a,b){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(",d,") 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("_")},makeNodeLineClassEx: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("
                  ");c.push(d);c.push("
                ")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c= +e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;dc.bottom||d.right>c.right||d.left0)c[0].isFirstNode=!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;i0){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,h,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)+c;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,a),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,[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",LEVEL:"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",CLOSE:"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)?c:[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,a)},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(),b,!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,b,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;c0?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); + +/* + * JQuery zTree excheck v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function(n){var q,r,s,p={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},w={check:{enable:!1,autoCheckTrigger:!1,chkStyle:p.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:p.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};q=function(c, +a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId);if(i.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;var d=e.nodeChecked(b,a);e.nodeChecked(b,a,!d);f.checkNodeRelation(b,a);d=m(a,h.id.CHECK,b);f.setChkClass(b,d,a);f.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(h.event.CHECK,[c,b.treeId,a]);return!0};r=function(c,a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!0;f.setChkClass(b,d,a);return!0};s=function(c, +a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!1;f.setChkClass(b,d,a);return!0};n.extend(!0,n.fn.zTree.consts,p);n.extend(!0,n.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,j;d=h.radio;b=e.nodeChecked(c,a);if(c.check.chkStyle==d.STYLE){var g=e.getRadioCheckedList(c);if(b)if(c.check.radioType==d.TYPE_ALL){for(d=g.length-1;d>=0;d--){b=g[d];var k=e.nodeChecked(c,b);k&&b!=a&&(e.nodeChecked(c,b,!1),g.splice(d,1),f.setChkClass(c, +m(b,h.id.CHECK,c),b),b.parentTId!=a.parentTId&&f.repairParentChkClassWithSelf(c,b))}g.push(a)}else{g=a.parentTId?a.getParentNode():e.getRoot(c);g=e.nodeChildren(c,g);for(d=0,j=g.length;d-1)&&f.setSonNodeCheckBox(c,a, +!0),!b&&(!g||g.length==0||c.check.chkboxType.N.indexOf("s")>-1)&&f.setSonNodeCheckBox(c,a,!1),b&&c.check.chkboxType.Y.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!0),!b&&c.check.chkboxType.N.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=h.checkbox,d=h.radio,j="",g=e.nodeChecked(c,a),j=a.chkDisabled===!0?b.DISABLED:a.halfCheck?b.PART:c.check.chkStyle==d.STYLE?a.check_Child_State<1?b.FULL:b.PART:g?a.check_Child_State===2||a.check_Child_State===-1?b.FULL:b.PART: +a.check_Child_State<1?b.FULL:b.PART,d=c.check.chkStyle+"_"+(g?b.TRUE:b.FALSE)+"_"+j,d=a.check_Focus&&a.chkDisabled!==!0?d+"_"+b.FOCUS:d;return h.className.BUTTON+" "+b.DEFAULT+" "+d},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===h.checkbox.STYLE)for(var b=e.getRoot(c),b=e.nodeChildren(c,b),d=0,j=b.length;d0?f.repairParentChkClass(c,b[0]):f.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b)a.chkDisabled=b;f.repairChkClass(c,a);if((a=e.nodeChildren(c,a))&&d)for(var j=0,g=a.length;j0){j=!1;break}}j&&f.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var j=m(a,h.id.CHECK,c);d||(d=a);var g=!1,k=e.nodeChildren(c,a);if(k)for(var o=0,l=k.length;o0?b?2:0:-1}else a.check_Child_State=-1;f.setChkClass(c,j,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(h.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=e.getRoot(c).radioCheckedList,b=0,d=a.length;b-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var j=b&&c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL,d=!d?[]:d,g=0,f=a.length;g0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var b=!b?[]:b,d=0,j=a.length;d0?2:0,l==2){b=2;break}else l==0&&(b=0);else if(c.check.chkStyle==h.checkbox.STYLE)if(l=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?1:i?f.check_Child_State===-1||f.check_Child_State===2?2:1:f.check_Child_State>0?1:0,l===1){b=1;break}else if(l===2&&b>-1&&j>0&&l!== +b){b=1;break}else if(b===2&&l>-1&&l<2){b=1;break}else l>-1&&(b=l)}a.check_Child_State=b}}}});var n=n.fn.zTree,i=n._z.tools,h=n.consts,f=n._z.view,e=n._z.data,m=i.$;e.nodeChecked=function(c,a,b){if(!a)return!1;c=c.data.key.checked;typeof b!=="undefined"&&(typeof b==="string"&&(b=i.eqs(b,"true")),a[c]=!!b);return a[c]};e.exSetting(w);e.addInitBind(function(c){c.treeObj.bind(h.event.CHECK,function(a,b,d,e){a.srcEvent=b;i.apply(c.callback.onCheck,[a,d,e])})});e.addInitUnBind(function(c){c.treeObj.unbind(h.event.CHECK)}); +e.addInitCache(function(){});e.addInitNode(function(c,a,b,d){if(b){a=e.nodeChecked(c,b);a=e.nodeChecked(c,b,a);b.checkedOld=a;if(typeof b.nocheck=="string")b.nocheck=i.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=i.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=i.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck; +b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return e.getCheckStatus(c,b)};c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL&&a&&e.getRoot(c).radioCheckedList.push(b)}});e.addInitProxy(function(c){var a=c.target,b=e.getSetting(c.data.treeId),d="",f=null,g="",k=null;if(i.eqs(c.type,"mouseover")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoverCheck"}else if(i.eqs(c.type,"mouseout")){if(b.check.enable&& +i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoutCheck"}else if(i.eqs(c.type,"click")&&b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="checkNode";if(d.length>0)switch(f=e.getNodeCache(b,d),g){case "checkNode":k=q;break;case "mouseoverCheck":k=r;break;case "mouseoutCheck":k=s}return{stop:g==="checkNode",node:f,nodeEventType:g,nodeEventCallback:k,treeEventType:"",treeEventCallback:null}}, +!0);e.addInitRoot(function(c){e.getRoot(c).radioCheckedList=[]});e.addBeforeA(function(c,a,b){c.check.enable&&(e.makeChkFlag(c,a),b.push(""))});e.addZTreeTools(function(c,a){a.checkNode=function(a,b,g,k){var o=e.nodeChecked(c,a);if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!o),k=!!k,(o!==b||g)&&!(k&&i.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a], +!0)==!1)&&i.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))e.nodeChecked(c,a,b),b=m(a,h.id.CHECK,this.setting),(g||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,a),f.setChkClass(this.setting,b,a),f.repairParentChkClassWithSelf(this.setting,a),k&&this.setting.treeObj.trigger(h.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){f.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var a=a!==!1,b=e.nodeChildren(c,e.getRoot(this.setting)); +return e.getTreeCheckedNodes(this.setting,b,a)};a.getChangeCheckedNodes=function(){var a=e.nodeChildren(c,e.getRoot(this.setting));return e.getTreeChangeCheckedNodes(this.setting,a)};a.setChkDisabled=function(a,b,c,e){b=!!b;c=!!c;f.repairSonChkDisabled(this.setting,a,b,!!e);f.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,e){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&m(c,this.setting).get(0)&&i.uCanDo(this.setting)){var g=m(c, +h.id.CHECK,this.setting);(e==!0||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,c);f.setChkClass(this.setting,g,c);f.repairParentChkClassWithSelf(this.setting,c)}}});var t=f.createNodes;f.createNodes=function(c,a,b,d,e){t&&t.apply(f,arguments);b&&f.repairParentChkClassWithSelf(c,d)};var u=f.removeNode;f.removeNode=function(c,a){var b=a.getParentNode();u&&u.apply(f,arguments);a&&b&&(f.repairChkClass(c,b),f.repairParentChkClass(c,b))};var v=f.appendNodes;f.appendNodes= +function(c,a,b,d,h,g,i){var m="";v&&(m=v.apply(f,arguments));d&&e.makeChkFlag(c,d);return m}})(jQuery); + +/* + * JQuery zTree exedit v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function(B){var I={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},v={onHoverOverNode:function(a,b){var c=i.getSetting(a.data.treeId),d=i.getRoot(c);if(d.curHoverNode!=b)v.onHoverOutNode(a);d.curHoverNode=b;e.addHoverDom(c,b)},onHoverOutNode:function(a){var a= +i.getSetting(a.data.treeId),b=i.getRoot(a);if(b.curHoverNode&&!i.isSelectedNode(a,b.curHoverNode))e.removeTreeDom(a,b.curHoverNode),b.curHoverNode=null},onMousedownNode:function(a,b){function c(a){if(m.dragFlag==0&&Math.abs(N-a.clientX)1){var o=n[0].parentTId?i.nodeChildren(f,n[0].getParentNode()):i.getNodes(f);g=[];for(b=0,c=o.length;b-1&&p+1!==b&&(j=!1),g.push(o[b]),p=b),n.length===g.length){n=g;break}}j&&(H=n[0].getPreNode(),Q=n[n.length-1].getNextNode());C=q("
                  ", +f);for(b=0,c=n.length;b0),e.removeTreeDom(f,g),b>f.edit.drag.maxShowNodeNum-1||(j=q("
                • ",f),j.append(q(g,d.id.A,f).clone()),j.css("padding","0"),j.children("#"+g.tId+d.id.A).removeClass(d.node.CURSELECTED),C.append(j),b==f.edit.drag.maxShowNodeNum-1&&(j=q("
                • ...
                • ",f),C.append(j)));C.attr("id",n[0].tId+d.id.UL+"_tmp");C.addClass(f.treeObj.attr("class"));C.appendTo(L);u=q("", +f);u.attr("id","zTreeMove_arrow_tmp");u.appendTo(L);f.treeObj.trigger(d.event.DRAG,[a,f.treeId,n])}if(m.dragFlag==1){t&&u.attr("id")==a.target.id&&w&&a.clientX+G.scrollLeft()+2>B("#"+w+d.id.A,t).offset().left?(g=B("#"+w+d.id.A,t),a.target=g.length>0?g.get(0):a.target):t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER)); +w=t=null;J=!1;h=f;g=i.getSettings();for(var z in g)if(g[z].treeId&&g[z].edit.enable&&g[z].treeId!=f.treeId&&(a.target.id==g[z].treeId||B(a.target).parents("#"+g[z].treeId).length>0))J=!0,h=g[z];z=G.scrollTop();j=G.scrollLeft();p=h.treeObj.offset();b=h.treeObj.get(0).scrollHeight;g=h.treeObj.get(0).scrollWidth;c=a.clientY+z-p.top;var E=h.treeObj.height()+p.top-a.clientY-z,r=a.clientX+j-p.left,s=h.treeObj.width()+p.left-a.clientX-j,p=cf.edit.drag.borderMin,o=Ef.edit.drag.borderMin,F=rf.edit.drag.borderMin,v=sf.edit.drag.borderMin,E=c>f.edit.drag.borderMin&&E>f.edit.drag.borderMin&&r>f.edit.drag.borderMin&&s>f.edit.drag.borderMin,r=p&&h.treeObj.scrollTop()<=0,s=o&&h.treeObj.scrollTop()+h.treeObj.height()+10>=b,M=F&&h.treeObj.scrollLeft()<=0,P=v&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=g;if(a.target&&k.isChildOrSelf(a.target,h.treeId)){for(var D=a.target;D&&D.tagName&&!k.eqs(D.tagName,"li")&&D.id!= +h.treeId;)D=D.parentNode;var R=!0;for(b=0,c=n.length;b0){R=!1;break}if(R&&a.target&&k.isChildOrSelf(a.target,D.id+d.id.A))t=B(D),w=D.id}g=n[0];if(E&&k.isChildOrSelf(a.target,h.treeId)){if(!t&&(a.target.id==h.treeId||r||s||M||P)&&(J||!J&&g.parentTId))t=h.treeObj;p?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):o&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);F?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):v&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+ +10);t&&t!=h.treeObj&&t.offset().left=-0.2)&&g?(j=1-u.width(),b=E-u.height()/2,x=d.move.TYPE_PREV):(M==0||z>=M&&z<=1.2)&&c?(j=1-u.width(),b=v==null||i.nodeIsParent(f,A)&&A.open?E+F.height()-u.height()/2:v.offset().top-u.height()/2,x=d.move.TYPE_NEXT):p?(j=5-u.width(),b=E,x=d.move.TYPE_INNER):o(),t){u.css({display:"block",top:b+"px",left:r+j+"px"});F.addClass(d.node.TMPTARGET_NODE+"_"+x);if(S!=w||T!=x)K=(new Date).getTime();if(A&&i.nodeIsParent(f, +A)&&x==d.move.TYPE_INNER&&(z=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(z=!1),z))window.zTreeMoveTimer=setTimeout(function(){x==d.move.TYPE_INNER&&A&&i.nodeIsParent(f,A)&&!A.open&&(new Date).getTime()-K>h.edit.drag.autoOpenTime&&k.apply(h.callback.beforeDragOpen,[h.treeId,A],!0)&&(e.switchNode(h,A),h.edit.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND, +[h.treeId,A]))},h.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId}}else if(x=d.move.TYPE_INNER,t&&k.apply(h.edit.drag.inner,[h.treeId,n,null],!!h.edit.drag.inner)?t.addClass(d.node.TMPTARGET_TREE):t=null,u.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;S=w;T=x;f.treeObj.trigger(d.event.DRAGMOVE,[a,f.treeId,n])}return!1}function l(a){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId= +null;T=S=null;G.unbind("mousemove",c);G.unbind("mouseup",l);G.unbind("selectstart",g);L.css("cursor","");t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));k.showIfameMask(f,!1);y.showHoverDom=!0;if(m.dragFlag!=0){m.dragFlag=0;var b,j,o;for(b=0,j=n.length;b0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(b)for(var d=q("iframe",a),g=0,e=d.length;g
                  ",a);j.appendTo(q("body",a));c.dragMaskList.push(j)}}},view:{addEditBtn:function(a,b){if(!(b.editNameFlag|| +q(b,d.id.EDIT,a).length>0)&&k.apply(a.edit.showRenameBtn,[a.treeId,b],a.edit.showRenameBtn)){var c=q(b,d.id.A,a),l="";c.append(l);q(b,d.id.EDIT,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeEditName,[a.treeId,b],!0)==!1)return!1;e.editNode(a,b);return!1}).show()}},addRemoveBtn:function(a, +b){if(!(b.editNameFlag||q(b,d.id.REMOVE,a).length>0)&&k.apply(a.edit.showRemoveBtn,[a.treeId,b],a.edit.showRemoveBtn)){var c=q(b,d.id.A,a),l="";c.append(l);q(b,d.id.REMOVE,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeRemove,[a.treeId,b],!0)==!1)return!1;e.removeNode(a,b);a.treeObj.trigger(d.event.REMOVE, +[a.treeId,b]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(a,b){if(i.getRoots().showHoverDom)b.isHover=!0,a.edit.enable&&(e.addEditBtn(a,b),e.addRemoveBtn(a,b)),k.apply(a.view.addHoverDom,[a.treeId,b])},cancelCurEditNode:function(a,b,c){var l=i.getRoot(a),g=l.curEditNode;if(g){var o=l.curEditInput,b=b?b:c?i.nodeName(a,g):o.val();if(k.apply(a.callback.beforeRename,[a.treeId,g,b,c],!0)===!1)return!1;i.nodeName(a,g,b);q(g,d.id.A,a).removeClass(d.node.CURSELECTED_EDIT); +o.unbind();e.setNodeName(a,g);g.editNameFlag=!1;l.curEditNode=null;l.curEditInput=null;e.selectNode(a,g,!1);a.treeObj.trigger(d.event.RENAME,[a.treeId,g,c])}return l.noSelection=!0},editNode:function(a,b){var c=i.getRoot(a);e.editNodeBlur=!1;if(i.isSelectedNode(a,b)&&c.curEditNode==b&&b.editNameFlag)setTimeout(function(){k.inputFocus(c.curEditInput)},0);else{b.editNameFlag=!0;e.removeTreeDom(a,b);e.cancelCurEditNode(a);e.selectNode(a,b,!1);q(b,d.id.SPAN,a).html("");var l=q(b,d.id.INPUT,a);l.attr("value",i.nodeName(a,b));a.edit.editNameSelectAll?k.inputSelect(l):k.inputFocus(l);l.bind("blur",function(){e.editNodeBlur||e.cancelCurEditNode(a)}).bind("keydown",function(b){b.keyCode=="13"?(e.editNodeBlur=!0,e.cancelCurEditNode(a)):b.keyCode=="27"&&e.cancelCurEditNode(a,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});q(b,d.id.A,a).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=l; +c.noSelection=!1;c.curEditNode=b}},moveNode:function(a,b,c,l,g,k){var j=i.getRoot(a);if(b!=c&&(!a.data.keep.leaf||!b||i.nodeIsParent(a,b)||l!=d.move.TYPE_INNER)){var f=c.parentTId?c.getParentNode():j,m=b===null||b==j;m&&b===null&&(b=j);if(m)l=d.move.TYPE_INNER;j=b.parentTId?b.getParentNode():j;if(l!=d.move.TYPE_PREV&&l!=d.move.TYPE_NEXT)l=d.move.TYPE_INNER;if(l==d.move.TYPE_INNER)if(m)c.parentTId=null;else{if(!i.nodeIsParent(a,b))i.nodeIsParent(a,b,!0),b.open=!!b.open,e.setNodeLineIcos(a,b);c.parentTId= +b.tId}var y;m?y=m=a.treeObj:(!k&&l==d.move.TYPE_INNER?e.expandCollapseNode(a,b,!0,!1):k||e.expandCollapseNode(a,b.getParentNode(),!0,!1),m=q(b,a),y=q(b,d.id.UL,a),m.get(0)&&!y.get(0)&&(y=[],e.makeUlHtml(a,b,y,""),m.append(y.join(""))),y=q(b,d.id.UL,a));var r=q(c,a);r.get(0)?m.get(0)||r.remove():r=e.appendNodes(a,c.level,[c],null,-1,!1,!0).join("");y.get(0)&&l==d.move.TYPE_INNER?y.append(r):m.get(0)&&l==d.move.TYPE_PREV?m.before(r):m.get(0)&&l==d.move.TYPE_NEXT&&m.after(r);var s;y=-1;var r=0,n=null, +m=null,B=c.level,v=i.nodeChildren(a,f),C=i.nodeChildren(a,j),u=i.nodeChildren(a,b);if(c.isFirstNode){if(y=0,v.length>1)n=v[1],n.isFirstNode=!0}else if(c.isLastNode)y=v.length-1,n=v[y-1],n.isLastNode=!0;else for(j=0,s=v.length;j=0&&v.splice(y,1);if(l!=d.move.TYPE_INNER)for(j=0,s=C.length;j0)m=u[u.length-1],m.isLastNode=!1;u.splice(u.length,0,c);c.isLastNode=!0;c.isFirstNode= +u.length==1}else b.isFirstNode&&l==d.move.TYPE_PREV?(C.splice(r,0,c),m=b,m.isFirstNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!0,c.isLastNode=!1):b.isLastNode&&l==d.move.TYPE_NEXT?(C.splice(r+1,0,c),m=b,m.isLastNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(l==d.move.TYPE_PREV?C.splice(r,0,c):C.splice(r+1,0,c),c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!1);i.fixPIdKeyValue(a,c);i.setSonNodeLevel(a,c.getParentNode(),c);e.setNodeLineIcos(a,c);e.repairNodeLevelClass(a, +c,B);!a.data.keep.parent&&v.length<1?(i.nodeIsParent(a,f,!1),f.open=!1,b=q(f,d.id.UL,a),l=q(f,d.id.SWITCH,a),j=q(f,d.id.ICON,a),e.replaceSwitchClass(f,l,d.folder.DOCU),e.replaceIcoClass(f,j,d.folder.DOCU),b.css("display","none")):n&&e.setNodeLineIcos(a,n);m&&e.setNodeLineIcos(a,m);a.check&&a.check.enable&&e.repairChkClass&&(e.repairChkClass(a,f),e.repairParentChkClassWithSelf(a,f),f!=c.parent&&e.repairParentChkClassWithSelf(a,c));k||e.expandCollapseParentNode(a,c.getParentNode(),!0,g)}},removeEditBtn:function(a, +b){q(b,d.id.EDIT,a).unbind().remove()},removeRemoveBtn:function(a,b){q(b,d.id.REMOVE,a).unbind().remove()},removeTreeDom:function(a,b){b.isHover=!1;e.removeEditBtn(a,b);e.removeRemoveBtn(a,b);k.apply(a.view.removeHoverDom,[a.treeId,b])},repairNodeLevelClass:function(a,b,c){if(c!==b.level){var e=q(b,a),g=q(b,d.id.A,a),a=q(b,d.id.UL,a),c=d.className.LEVEL+c,b=d.className.LEVEL+b.level;e.removeClass(c);e.addClass(b);g.removeClass(c);g.addClass(b);a.removeClass(c);a.addClass(b)}},selectNodes:function(a, +b){for(var c=0,d=b.length;c0)}},event:{},data:{setSonNodeLevel:function(a,b,c){if(c){var d=i.nodeChildren(a,c);c.level=b?b.level+1:0;if(d)for(var b=0,g=d.length;b0)switch(o=i.getNodeCache(c,g),j){case "mousedownNode":f=v.onMousedownNode;break;case "hoverOverNode":f=v.onHoverOverNode; +break;case "hoverOutNode":f=v.onHoverOutNode}return{stop:!1,node:o,nodeEventType:j,nodeEventCallback:f,treeEventType:"",treeEventCallback:null}});i.addInitRoot(function(a){var a=i.getRoot(a),b=i.getRoots();a.curEditNode=null;a.curEditInput=null;a.curHoverNode=null;a.dragFlag=0;a.dragNodeShowBefore=[];a.dragMaskList=[];b.showHoverDom=!0});i.addZTreeTools(function(a,b){b.cancelEditName=function(a){i.getRoot(this.setting).curEditNode&&e.cancelCurEditNode(this.setting,a?a:null,!0)};b.copyNode=function(b, +l,g,o){if(!l)return null;var j=i.nodeIsParent(a,b);if(b&&!j&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;var f=this,m=k.clone(l);if(!b)b=null,g=d.move.TYPE_INNER;g==d.move.TYPE_INNER?(l=function(){e.addNodes(f.setting,b,-1,[m],o)},k.canAsync(this.setting,b)?e.asyncNode(this.setting,b,o,l):l()):(e.addNodes(this.setting,b.parentNode,-1,[m],o),e.moveNode(this.setting,b,m,g,!1,o));return m};b.editName=function(a){a&&a.tId&&a===i.getNodeCache(this.setting,a.tId)&&(a.parentTId&&e.expandCollapseParentNode(this.setting, +a.getParentNode(),!0),e.editNode(this.setting,a))};b.moveNode=function(b,l,g,o){function j(){e.moveNode(m.setting,b,l,g,!1,o)}if(!l)return l;var f=i.nodeIsParent(a,b);if(b&&!f&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;else if(b&&(l.parentTId==b.tId&&g==d.move.TYPE_INNER||q(l,this.setting).find("#"+b.tId).length>0))return null;else b||(b=null);var m=this;k.canAsync(this.setting,b)&&g===d.move.TYPE_INNER?e.asyncNode(this.setting,b,o,j):j();return l};b.setEditable=function(a){this.setting.edit.enable= +a;return this.refresh()}});var N=e.cancelPreSelectedNode;e.cancelPreSelectedNode=function(a,b){for(var c=i.getRoot(a).curSelectedList,d=0,g=c.length;d 0 && tId.length == 0) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + } + } + // event to node + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "switchNode" : + var isParent = data.nodeIsParent(setting, node); + if (!isParent) { + nodeEventType = ""; + } else if (tools.eqs(event.type, "click") + || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) { + nodeEventCallback = handler.onSwitchNode; + } else { + nodeEventType = ""; + } + break; + case "clickNode" : + nodeEventCallback = handler.onClickNode; + break; + } + } + // event to zTree + switch (treeEventType) { + case "mousedown" : + treeEventCallback = handler.onZTreeMousedown; + break; + case "mouseup" : + treeEventCallback = handler.onZTreeMouseup; + break; + case "dblclick" : + treeEventCallback = handler.onZTreeDblclick; + break; + case "contextmenu" : + treeEventCallback = handler.onZTreeContextmenu; + break; + } + var proxyResult = { + stop: false, + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of core + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + var r = data.getRoot(setting), + children = data.nodeChildren(setting, n); + n.level = level; + n.tId = setting.treeId + "_" + (++r.zId); + n.parentTId = parentNode ? parentNode.tId : null; + n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open; + var isParent = data.nodeIsParent(setting, n); + if (tools.isArray(children) && + !(isParent === false || (typeof isParent == "string" && tools.eqs(isParent, "false")))) { + data.nodeIsParent(setting, n, true); + n.zAsync = true; + } else { + isParent = data.nodeIsParent(setting, n, isParent); + n.open = (isParent && !setting.async.enable) ? n.open : false; + n.zAsync = !isParent; + } + n.isFirstNode = isFirstNode; + n.isLastNode = isLastNode; + n.getParentNode = function () { + return data.getNodeCache(setting, n.parentTId); + }; + n.getPreNode = function () { + return data.getPreNode(setting, n); + }; + n.getNextNode = function () { + return data.getNextNode(setting, n); + }; + n.getIndex = function () { + return data.getNodeIndex(setting, n); + }; + n.getPath = function () { + return data.getNodePath(setting, n); + }; + n.isAjaxing = false; + data.fixPIdKeyValue(setting, n); + }, + _init = { + bind: [_bindEvent], + unbind: [_unbindEvent], + caches: [_initCache], + nodes: [_initNode], + proxys: [_eventProxy], + roots: [_initRoot], + beforeA: [], + afterA: [], + innerBeforeA: [], + innerAfterA: [], + zTreeTools: [] + }, + //method of operate data + data = { + addNodeCache: function (setting, node) { + data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node; + }, + getNodeCacheId: function (tId) { + return tId.substring(tId.lastIndexOf("_") + 1); + }, + addAfterA: function (afterA) { + _init.afterA.push(afterA); + }, + addBeforeA: function (beforeA) { + _init.beforeA.push(beforeA); + }, + addInnerAfterA: function (innerAfterA) { + _init.innerAfterA.push(innerAfterA); + }, + addInnerBeforeA: function (innerBeforeA) { + _init.innerBeforeA.push(innerBeforeA); + }, + addInitBind: function (bindEvent) { + _init.bind.push(bindEvent); + }, + addInitUnBind: function (unbindEvent) { + _init.unbind.push(unbindEvent); + }, + addInitCache: function (initCache) { + _init.caches.push(initCache); + }, + addInitNode: function (initNode) { + _init.nodes.push(initNode); + }, + addInitProxy: function (initProxy, isFirst) { + if (!!isFirst) { + _init.proxys.splice(0, 0, initProxy); + } else { + _init.proxys.push(initProxy); + } + }, + addInitRoot: function (initRoot) { + _init.roots.push(initRoot); + }, + addNodesData: function (setting, parentNode, index, nodes) { + var children = data.nodeChildren(setting, parentNode), params; + if (!children) { + children = data.nodeChildren(setting, parentNode, []); + index = -1; + } else if (index >= children.length) { + index = -1; + } + + if (children.length > 0 && index === 0) { + children[0].isFirstNode = false; + view.setNodeLineIcos(setting, children[0]); + } else if (children.length > 0 && index < 0) { + children[children.length - 1].isLastNode = false; + view.setNodeLineIcos(setting, children[children.length - 1]); + } + data.nodeIsParent(setting, parentNode, true); + + if (index < 0) { + data.nodeChildren(setting, parentNode, children.concat(nodes)); + } else { + params = [index, 0].concat(nodes); + children.splice.apply(children, params); + } + }, + addSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + if (!data.isSelectedNode(setting, node)) { + root.curSelectedList.push(node); + } + }, + addCreatedNode: function (setting, node) { + if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { + var root = data.getRoot(setting); + root.createdNodes.push(node); + } + }, + addZTreeTools: function (zTreeTools) { + _init.zTreeTools.push(zTreeTools); + }, + exSetting: function (s) { + $.extend(true, _setting, s); + }, + fixPIdKeyValue: function (setting, node) { + if (setting.data.simpleData.enable) { + node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId; + } + }, + getAfterA: function (setting, node, array) { + for (var i = 0, j = _init.afterA.length; i < j; i++) { + _init.afterA[i].apply(this, arguments); + } + }, + getBeforeA: function (setting, node, array) { + for (var i = 0, j = _init.beforeA.length; i < j; i++) { + _init.beforeA[i].apply(this, arguments); + } + }, + getInnerAfterA: function (setting, node, array) { + for (var i = 0, j = _init.innerAfterA.length; i < j; i++) { + _init.innerAfterA[i].apply(this, arguments); + } + }, + getInnerBeforeA: function (setting, node, array) { + for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) { + _init.innerBeforeA[i].apply(this, arguments); + } + }, + getCache: function (setting) { + return caches[setting.treeId]; + }, + getNodeIndex: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length - 1; i <= l; i++) { + if (children[i] === node) { + return i; + } + } + return -1; + }, + getNextNode: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length - 1; i <= l; i++) { + if (children[i] === node) { + return (i == l ? null : children[i + 1]); + } + } + return null; + }, + getNodeByParam: function (setting, nodes, key, value) { + if (!nodes || !key) return null; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (node[key] == value) { + return nodes[i]; + } + var children = data.nodeChildren(setting, node); + var tmp = data.getNodeByParam(setting, children, key, value); + if (tmp) return tmp; + } + return null; + }, + getNodeCache: function (setting, tId) { + if (!tId) return null; + var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)]; + return n ? n : null; + }, + getNodePath: function (setting, node) { + if (!node) return null; + + var path; + if (node.parentTId) { + path = node.getParentNode().getPath(); + } else { + path = []; + } + + if (path) { + path.push(node); + } + + return path; + }, + getNodes: function (setting) { + return data.nodeChildren(setting, data.getRoot(setting)); + }, + getNodesByParam: function (setting, nodes, key, value) { + if (!nodes || !key) return []; + var result = []; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (node[key] == value) { + result.push(node); + } + var children = data.nodeChildren(setting, node); + result = result.concat(data.getNodesByParam(setting, children, key, value)); + } + return result; + }, + getNodesByParamFuzzy: function (setting, nodes, key, value) { + if (!nodes || !key) return []; + var result = []; + value = value.toLowerCase(); + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) { + result.push(node); + } + var children = data.nodeChildren(setting, node); + result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value)); + } + return result; + }, + getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) { + if (!nodes) return (isSingle ? null : []); + var result = isSingle ? null : []; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (tools.apply(filter, [node, invokeParam], false)) { + if (isSingle) { + return node; + } + result.push(node); + } + var children = data.nodeChildren(setting, node); + var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam); + if (isSingle && !!tmpResult) { + return tmpResult; + } + result = isSingle ? tmpResult : result.concat(tmpResult); + } + return result; + }, + getPreNode: function (setting, node) { + if (!node) return null; + var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), + children = data.nodeChildren(setting, p); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i] === node) { + return (i == 0 ? null : children[i - 1]); + } + } + return null; + }, + getRoot: function (setting) { + return setting ? roots[setting.treeId] : null; + }, + getRoots: function () { + return roots; + }, + getSetting: function (treeId) { + return settings[treeId]; + }, + getSettings: function () { + return settings; + }, + getZTreeTools: function (treeId) { + var r = this.getRoot(this.getSetting(treeId)); + return r ? r.treeTools : null; + }, + initCache: function (setting) { + for (var i = 0, j = _init.caches.length; i < j; i++) { + _init.caches[i].apply(this, arguments); + } + }, + initNode: function (setting, level, node, parentNode, preNode, nextNode) { + for (var i = 0, j = _init.nodes.length; i < j; i++) { + _init.nodes[i].apply(this, arguments); + } + }, + initRoot: function (setting) { + for (var i = 0, j = _init.roots.length; i < j; i++) { + _init.roots[i].apply(this, arguments); + } + }, + isSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + for (var i = 0, j = root.curSelectedList.length; i < j; i++) { + if (node === root.curSelectedList[i]) return true; + } + return false; + }, + nodeChildren: function (setting, node, newChildren) { + if (!node) { + return null; + } + var key = setting.data.key.children; + if (typeof newChildren !== 'undefined') { + node[key] = newChildren; + } + return node[key]; + }, + nodeIsParent: function (setting, node, newIsParent) { + if (!node) { + return false; + } + var key = setting.data.key.isParent; + if (typeof newIsParent !== 'undefined') { + if (typeof newIsParent === "string") { + newIsParent = tools.eqs(newIsParent, "true"); + } + newIsParent = !!newIsParent; + node[key] = newIsParent; + } + return node[key]; + }, + nodeName: function (setting, node, newName) { + var key = setting.data.key.name; + if (typeof newName !== 'undefined') { + node[key] = newName; + } + return "" + node[key]; + }, + nodeTitle: function (setting, node) { + var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title; + return "" + node[t]; + }, + removeNodeCache: function (setting, node) { + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + data.removeNodeCache(setting, children[i]); + } + } + data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null; + }, + removeSelectedNode: function (setting, node) { + var root = data.getRoot(setting); + for (var i = 0, j = root.curSelectedList.length; i < j; i++) { + if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) { + root.curSelectedList.splice(i, 1); + setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]); + i--; + j--; + } + } + }, + setCache: function (setting, cache) { + caches[setting.treeId] = cache; + }, + setRoot: function (setting, root) { + roots[setting.treeId] = root; + }, + setZTreeTools: function (setting, zTreeTools) { + for (var i = 0, j = _init.zTreeTools.length; i < j; i++) { + _init.zTreeTools[i].apply(this, arguments); + } + }, + transformToArrayFormat: function (setting, nodes) { + if (!nodes) return []; + var r = []; + if (tools.isArray(nodes)) { + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + _do(node); + } + } else { + _do(nodes); + } + return r; + + function _do(_node) { + r.push(_node); + var children = data.nodeChildren(setting, _node); + if (children) { + r = r.concat(data.transformToArrayFormat(setting, children)); + } + } + }, + transformTozTreeFormat: function (setting, sNodes) { + var i, l, + key = setting.data.simpleData.idKey, + parentKey = setting.data.simpleData.pIdKey; + if (!key || key == "" || !sNodes) return []; + + if (tools.isArray(sNodes)) { + var r = []; + var tmpMap = {}; + for (i = 0, l = sNodes.length; i < l; i++) { + tmpMap[sNodes[i][key]] = sNodes[i]; + } + for (i = 0, l = sNodes.length; i < l; i++) { + var p = tmpMap[sNodes[i][parentKey]]; + if (p && sNodes[i][key] != sNodes[i][parentKey]) { + var children = data.nodeChildren(setting, p); + if (!children) { + children = data.nodeChildren(setting, p, []); + } + children.push(sNodes[i]); + } else { + r.push(sNodes[i]); + } + } + return r; + } else { + return [sNodes]; + } + } + }, + //method of event proxy + event = { + bindEvent: function (setting) { + for (var i = 0, j = _init.bind.length; i < j; i++) { + _init.bind[i].apply(this, arguments); + } + }, + unbindEvent: function (setting) { + for (var i = 0, j = _init.unbind.length; i < j; i++) { + _init.unbind[i].apply(this, arguments); + } + }, + bindTree: function (setting) { + var eventParam = { + treeId: setting.treeId + }, + o = setting.treeObj; + if (!setting.view.txtSelectedEnable) { + // for can't select text + o.bind('selectstart', handler.onSelectStart).css({ + "-moz-user-select": "-moz-none" + }); + } + o.bind('click', eventParam, event.proxy); + o.bind('dblclick', eventParam, event.proxy); + o.bind('mouseover', eventParam, event.proxy); + o.bind('mouseout', eventParam, event.proxy); + o.bind('mousedown', eventParam, event.proxy); + o.bind('mouseup', eventParam, event.proxy); + o.bind('contextmenu', eventParam, event.proxy); + }, + unbindTree: function (setting) { + var o = setting.treeObj; + o.unbind('selectstart', handler.onSelectStart) + .unbind('click', event.proxy) + .unbind('dblclick', event.proxy) + .unbind('mouseover', event.proxy) + .unbind('mouseout', event.proxy) + .unbind('mousedown', event.proxy) + .unbind('mouseup', event.proxy) + .unbind('contextmenu', event.proxy); + }, + doProxy: function (e) { + var results = []; + for (var i = 0, j = _init.proxys.length; i < j; i++) { + var proxyResult = _init.proxys[i].apply(this, arguments); + results.push(proxyResult); + if (proxyResult.stop) { + break; + } + } + return results; + }, + proxy: function (e) { + var setting = data.getSetting(e.data.treeId); + if (!tools.uCanDo(setting, e)) return true; + var results = event.doProxy(e), + r = true, x = false; + for (var i = 0, l = results.length; i < l; i++) { + var proxyResult = results[i]; + if (proxyResult.nodeEventCallback) { + x = true; + r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; + } + if (proxyResult.treeEventCallback) { + x = true; + r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; + } + } + return r; + } + }, + //method of event handler + handler = { + onSwitchNode: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (node.open) { + if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true; + data.getRoot(setting).expandTriggerFlag = true; + view.switchNode(setting, node); + } else { + if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true; + data.getRoot(setting).expandTriggerFlag = true; + view.switchNode(setting, node); + } + return true; + }, + onClickNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + 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; + if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true; + if (clickFlag === 0) { + view.cancelPreSelectedNode(setting, node); + } else { + view.selectNode(setting, node, clickFlag === 2); + } + setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]); + return true; + }, + onZTreeMousedown: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) { + tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]); + } + return true; + }, + onZTreeMouseup: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) { + tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]); + } + return true; + }, + onZTreeDblclick: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) { + tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]); + } + return true; + }, + onZTreeContextmenu: function (event, node) { + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) { + tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]); + } + return (typeof setting.callback.onRightClick) != "function"; + }, + onSelectStart: function (e) { + var n = e.originalEvent.srcElement.nodeName.toLowerCase(); + return (n === "input" || n === "textarea"); + } + }, + //method of tools for zTree + tools = { + apply: function (fun, param, defaultValue) { + if ((typeof fun) == "function") { + return fun.apply(zt, param ? param : []); + } + return defaultValue; + }, + canAsync: function (setting, node) { + var children = data.nodeChildren(setting, node); + var isParent = data.nodeIsParent(setting, node); + return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0))); + }, + clone: function (obj) { + if (obj === null) return null; + var o = tools.isArray(obj) ? [] : {}; + for (var i in obj) { + o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]); + } + return o; + }, + eqs: function (str1, str2) { + return str1.toLowerCase() === str2.toLowerCase(); + }, + isArray: function (arr) { + return Object.prototype.toString.apply(arr) === "[object Array]"; + }, + isElement: function (o) { + return ( + typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2 + o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string" + ); + }, + $: function (node, exp, setting) { + if (!!exp && typeof exp != "string") { + setting = exp; + exp = ""; + } + if (typeof node == "string") { + return $(node, setting ? setting.treeObj.get(0).ownerDocument : null); + } else { + return $("#" + node.tId + exp, setting ? setting.treeObj : null); + } + }, + getMDom: function (setting, curDom, targetExpr) { + if (!curDom) return null; + while (curDom && curDom.id !== setting.treeId) { + for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) { + if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) { + return curDom; + } + } + curDom = curDom.parentNode; + } + return null; + }, + getNodeMainDom: function (target) { + return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0)); + }, + isChildOrSelf: function (dom, parentId) { + return ($(dom).closest("#" + parentId).length > 0); + }, + uCanDo: function (setting, e) { + return true; + } + }, + //method of operate ztree dom + view = { + addNodes: function (setting, parentNode, index, newNodes, isSilent) { + var isParent = data.nodeIsParent(setting, parentNode); + if (setting.data.keep.leaf && parentNode && !isParent) { + return; + } + if (!tools.isArray(newNodes)) { + newNodes = [newNodes]; + } + if (setting.data.simpleData.enable) { + newNodes = data.transformTozTreeFormat(setting, newNodes); + } + if (parentNode) { + var target_switchObj = $$(parentNode, consts.id.SWITCH, setting), + target_icoObj = $$(parentNode, consts.id.ICON, setting), + target_ulObj = $$(parentNode, consts.id.UL, setting); + + if (!parentNode.open) { + view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE); + view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE); + parentNode.open = false; + target_ulObj.css({ + "display": "none" + }); + } + + data.addNodesData(setting, parentNode, index, newNodes); + view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index); + if (!isSilent) { + view.expandCollapseParentNode(setting, parentNode, true); + } + } else { + data.addNodesData(setting, data.getRoot(setting), index, newNodes); + view.createNodes(setting, 0, newNodes, null, index); + } + }, + appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) { + if (!nodes) return []; + var html = []; + + var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting), + tmpPChild = data.nodeChildren(setting, tmpPNode), + isFirstNode, isLastNode; + + if (!tmpPChild || index >= tmpPChild.length - nodes.length) { + index = -1; + } + + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + if (initFlag) { + isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0)); + isLastNode = (index < 0 && i == (nodes.length - 1)); + data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag); + data.addNodeCache(setting, node); + } + var isParent = data.nodeIsParent(setting, node); + + var childHtml = []; + var children = data.nodeChildren(setting, node); + if (children && children.length > 0) { + //make child html first, because checkType + childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open); + } + if (openFlag) { + view.makeDOMNodeMainBefore(html, setting, node); + view.makeDOMNodeLine(html, setting, node); + data.getBeforeA(setting, node, html); + view.makeDOMNodeNameBefore(html, setting, node); + data.getInnerBeforeA(setting, node, html); + view.makeDOMNodeIcon(html, setting, node); + data.getInnerAfterA(setting, node, html); + view.makeDOMNodeNameAfter(html, setting, node); + data.getAfterA(setting, node, html); + if (isParent && node.open) { + view.makeUlHtml(setting, node, html, childHtml.join('')); + } + view.makeDOMNodeMainAfter(html, setting, node); + data.addCreatedNode(setting, node); + } + } + return html; + }, + appendParentULDom: function (setting, node) { + var html = [], + nObj = $$(node, setting); + if (!nObj.get(0) && !!node.parentTId) { + view.appendParentULDom(setting, node.getParentNode()); + nObj = $$(node, setting); + } + var ulObj = $$(node, consts.id.UL, setting); + if (ulObj.get(0)) { + ulObj.remove(); + } + var children = data.nodeChildren(setting, node), + childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true); + view.makeUlHtml(setting, node, html, childHtml.join('')); + nObj.append(html.join('')); + }, + asyncNode: function (setting, node, isSilent, callback) { + var i, l; + var isParent = data.nodeIsParent(setting, node); + if (node && !isParent) { + tools.apply(callback); + return false; + } else if (node && node.isAjaxing) { + return false; + } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) { + tools.apply(callback); + return false; + } + if (node) { + node.isAjaxing = true; + var icoObj = $$(node, consts.id.ICON, setting); + icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING}); + } + + var tmpParam = {}; + var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam); + for (i = 0, l = autoParam.length; node && i < l; i++) { + var pKey = autoParam[i].split("="), spKey = pKey; + if (pKey.length > 1) { + spKey = pKey[1]; + pKey = pKey[0]; + } + tmpParam[spKey] = node[pKey]; + } + var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam); + if (tools.isArray(otherParam)) { + for (i = 0, l = otherParam.length; i < l; i += 2) { + tmpParam[otherParam[i]] = otherParam[i + 1]; + } + } else { + for (var p in otherParam) { + tmpParam[p] = otherParam[p]; + } + } + + var _tmpV = data.getRoot(setting)._ver; + $.ajax({ + contentType: setting.async.contentType, + cache: false, + type: setting.async.type, + url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url), + data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam, + dataType: setting.async.dataType, + headers: setting.async.headers, + xhrFields: setting.async.xhrFields, + success: function (msg) { + if (_tmpV != data.getRoot(setting)._ver) { + return; + } + var newNodes = []; + try { + if (!msg || msg.length == 0) { + newNodes = []; + } else if (typeof msg == "string") { + newNodes = eval("(" + msg + ")"); + } else { + newNodes = msg; + } + } catch (err) { + newNodes = msg; + } + + if (node) { + node.isAjaxing = null; + node.zAsync = true; + } + view.setNodeLineIcos(setting, node); + if (newNodes && newNodes !== "") { + newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes); + view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent); + } else { + view.addNodes(setting, node, -1, [], !!isSilent); + } + setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]); + tools.apply(callback); + }, + error: function (XMLHttpRequest, textStatus, errorThrown) { + if (_tmpV != data.getRoot(setting)._ver) { + return; + } + if (node) node.isAjaxing = null; + view.setNodeLineIcos(setting, node); + setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]); + } + }); + return true; + }, + cancelPreSelectedNode: function (setting, node, excludeNode) { + var list = data.getRoot(setting).curSelectedList, + i, n; + for (i = list.length - 1; i >= 0; i--) { + n = list[i]; + if (node === n || (!node && (!excludeNode || excludeNode !== n))) { + $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED); + if (node) { + data.removeSelectedNode(setting, node); + break; + } else { + list.splice(i, 1); + setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]); + } + } + } + }, + createNodeCallback: function (setting) { + if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { + var root = data.getRoot(setting); + while (root.createdNodes.length > 0) { + var node = root.createdNodes.shift(); + tools.apply(setting.view.addDiyDom, [setting.treeId, node]); + if (!!setting.callback.onNodeCreated) { + setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]); + } + } + } + }, + createNodes: function (setting, level, nodes, parentNode, index) { + if (!nodes || nodes.length == 0) return; + var root = data.getRoot(setting), + openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0); + root.createdNodes = []; + var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag), + parentObj, nextObj; + + if (!parentNode) { + parentObj = setting.treeObj; + //setting.treeObj.append(zTreeHtml.join('')); + } else { + var ulObj = $$(parentNode, consts.id.UL, setting); + if (ulObj.get(0)) { + parentObj = ulObj; + //ulObj.append(zTreeHtml.join('')); + } + } + if (parentObj) { + if (index >= 0) { + nextObj = parentObj.children()[index]; + } + if (index >= 0 && nextObj) { + $(nextObj).before(zTreeHtml.join('')); + } else { + parentObj.append(zTreeHtml.join('')); + } + } + + view.createNodeCallback(setting); + }, + destroy: function (setting) { + if (!setting) return; + data.initCache(setting); + data.initRoot(setting); + event.unbindTree(setting); + event.unbindEvent(setting); + setting.treeObj.empty(); + delete settings[setting.treeId]; + }, + expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) { + var root = data.getRoot(setting); + var tmpCb, _callback; + if (!node) { + tools.apply(callback, []); + return; + } + var children = data.nodeChildren(setting, node); + var isParent = data.nodeIsParent(setting, node); + if (root.expandTriggerFlag) { + _callback = callback; + tmpCb = function () { + if (_callback) _callback(); + if (node.open) { + setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]); + } else { + setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]); + } + }; + callback = tmpCb; + root.expandTriggerFlag = false; + } + if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) { + view.appendParentULDom(setting, node); + view.createNodeCallback(setting); + } + if (node.open == expandFlag) { + tools.apply(callback, []); + return; + } + var ulObj = $$(node, consts.id.UL, setting), + switchObj = $$(node, consts.id.SWITCH, setting), + icoObj = $$(node, consts.id.ICON, setting); + + if (isParent) { + node.open = !node.open; + if (node.iconOpen && node.iconClose) { + icoObj.attr("style", view.makeNodeIcoStyle(setting, node)); + } + + if (node.open) { + view.replaceSwitchClass(node, switchObj, consts.folder.OPEN); + view.replaceIcoClass(node, icoObj, consts.folder.OPEN); + if (animateFlag == false || setting.view.expandSpeed == "") { + ulObj.show(); + tools.apply(callback, []); + } else { + if (children && children.length > 0) { + ulObj.slideDown(setting.view.expandSpeed, callback); + } else { + ulObj.show(); + tools.apply(callback, []); + } + } + } else { + view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE); + view.replaceIcoClass(node, icoObj, consts.folder.CLOSE); + if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) { + ulObj.hide(); + tools.apply(callback, []); + } else { + ulObj.slideUp(setting.view.expandSpeed, callback); + } + } + } else { + tools.apply(callback, []); + } + }, + expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) { + if (!node) return; + if (!node.parentTId) { + view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); + return; + } else { + view.expandCollapseNode(setting, node, expandFlag, animateFlag); + } + if (node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback); + } + }, + expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) { + var root = data.getRoot(setting), + treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root), + selfAnimateSign = (node) ? false : animateFlag, + expandTriggerFlag = data.getRoot(setting).expandTriggerFlag; + data.getRoot(setting).expandTriggerFlag = false; + if (treeNodes) { + for (var i = 0, l = treeNodes.length; i < l; i++) { + if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign); + } + } + data.getRoot(setting).expandTriggerFlag = expandTriggerFlag; + view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); + }, + isSelectedNode: function (setting, node) { + if (!node) { + return false; + } + var list = data.getRoot(setting).curSelectedList, + i; + for (i = list.length - 1; i >= 0; i--) { + if (node === list[i]) { + return true; + } + } + return false; + }, + makeDOMNodeIcon: function (html, setting, node) { + var nameStr = data.nodeName(setting, node), + name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&').replace(//g, '>'); + html.push("", name, ""); + }, + makeDOMNodeLine: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeMainAfter: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeMainBefore: function (html, setting, node) { + html.push("
                • "); + }, + makeDOMNodeNameAfter: function (html, setting, node) { + html.push(""); + }, + makeDOMNodeNameBefore: function (html, setting, node) { + var title = data.nodeTitle(setting, node), + url = view.makeNodeUrl(setting, node), + fontcss = view.makeNodeFontCss(setting, node), + fontStyle = []; + for (var f in fontcss) { + fontStyle.push(f, ":", fontcss[f], ";"); + } + html.push(" 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''), + "'"); + if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) { + html.push("title='", title.replace(/'/g, "'").replace(//g, '>'), "'"); + } + html.push(">"); + }, + makeNodeFontCss: function (setting, node) { + var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss); + return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {}; + }, + makeNodeIcoClass: function (setting, node) { + var icoCss = ["ico"]; + if (!node.isAjaxing) { + var isParent = data.nodeIsParent(setting, node); + icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0]; + if (isParent) { + icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); + } else { + icoCss.push(consts.folder.DOCU); + } + } + return consts.className.BUTTON + " " + icoCss.join('_'); + }, + makeNodeIcoStyle: function (setting, node) { + var icoStyle = []; + if (!node.isAjaxing) { + var isParent = data.nodeIsParent(setting, node); + var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon]; + if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;"); + if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) { + icoStyle.push("width:0px;height:0px;"); + } + } + return icoStyle.join(''); + }, + makeNodeLineClass: function (setting, node) { + var lineClass = []; + if (setting.view.showLine) { + if (node.level == 0 && node.isFirstNode && node.isLastNode) { + lineClass.push(consts.line.ROOT); + } else if (node.level == 0 && node.isFirstNode) { + lineClass.push(consts.line.ROOTS); + } else if (node.isLastNode) { + lineClass.push(consts.line.BOTTOM); + } else { + lineClass.push(consts.line.CENTER); + } + } else { + lineClass.push(consts.line.NOLINE); + } + if (data.nodeIsParent(setting, node)) { + lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); + } else { + lineClass.push(consts.folder.DOCU); + } + return view.makeNodeLineClassEx(node) + lineClass.join('_'); + }, + makeNodeLineClassEx: function (node) { + return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " "; + }, + makeNodeTarget: function (node) { + return (node.target || "_blank"); + }, + makeNodeUrl: function (setting, node) { + var urlKey = setting.data.key.url; + return node[urlKey] ? node[urlKey] : null; + }, + makeUlHtml: function (setting, node, html, content) { + html.push("
                    "); + html.push(content); + html.push("
                  "); + }, + makeUlLineClass: function (setting, node) { + return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : ""); + }, + removeChildNodes: function (setting, node) { + if (!node) return; + var nodes = data.nodeChildren(setting, node); + if (!nodes) return; + + for (var i = 0, l = nodes.length; i < l; i++) { + data.removeNodeCache(setting, nodes[i]); + } + data.removeSelectedNode(setting); + delete node[setting.data.key.children]; + + if (!setting.data.keep.parent) { + data.nodeIsParent(setting, node, false); + node.open = false; + var tmp_switchObj = $$(node, consts.id.SWITCH, setting), + tmp_icoObj = $$(node, consts.id.ICON, setting); + view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU); + $$(node, consts.id.UL, setting).remove(); + } else { + $$(node, consts.id.UL, setting).empty(); + } + }, + scrollIntoView: function (setting, dom) { + if (!dom) { + return; + } + // support IE 7 + if (typeof Element === 'undefined') { + var contRect = setting.treeObj.get(0).getBoundingClientRect(), + findMeRect = dom.getBoundingClientRect(); + if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom + || findMeRect.right > contRect.right || findMeRect.left < contRect.left) { + dom.scrollIntoView(); + } + return; + } + // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e + if (!Element.prototype.scrollIntoViewIfNeeded) { + Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) { + "use strict"; + + function makeRange(start, length) { + return {"start": start, "length": length, "end": start + length}; + } + + function coverRange(inner, outer) { + if ( + false === centerIfNeeded || + (outer.start < inner.end && inner.start < outer.end) + ) { + return Math.max( + inner.end - outer.length, + Math.min(outer.start, inner.start) + ); + } + return (inner.start + inner.end - outer.length) / 2; + } + + function makePoint(x, y) { + return { + "x": x, + "y": y, + "translate": function translate(dX, dY) { + return makePoint(x + dX, y + dY); + } + }; + } + + function absolute(elem, pt) { + while (elem) { + pt = pt.translate(elem.offsetLeft, elem.offsetTop); + elem = elem.offsetParent; + } + return pt; + } + + var target = absolute(this, makePoint(0, 0)), + extent = makePoint(this.offsetWidth, this.offsetHeight), + elem = this.parentNode, + origin; + + while (elem instanceof HTMLElement) { + // Apply desired scroll amount. + origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop)); + elem.scrollLeft = coverRange( + makeRange(target.x - origin.x, extent.x), + makeRange(elem.scrollLeft, elem.clientWidth) + ); + elem.scrollTop = coverRange( + makeRange(target.y - origin.y, extent.y), + makeRange(elem.scrollTop, elem.clientHeight) + ); + + // Determine actual scroll amount by reading back scroll properties. + target = target.translate(-elem.scrollLeft, -elem.scrollTop); + elem = elem.parentNode; + } + }; + } + dom.scrollIntoViewIfNeeded(); + }, + setFirstNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + if (children.length > 0) { + children[0].isFirstNode = true; + } + }, + setLastNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + if (children.length > 0) { + children[children.length - 1].isLastNode = true; + } + }, + removeNode: function (setting, node) { + var root = data.getRoot(setting), + parentNode = (node.parentTId) ? node.getParentNode() : root; + + node.isFirstNode = false; + node.isLastNode = false; + node.getPreNode = function () { + return null; + }; + node.getNextNode = function () { + return null; + }; + + if (!data.getNodeCache(setting, node.tId)) { + return; + } + + $$(node, setting).remove(); + data.removeNodeCache(setting, node); + data.removeSelectedNode(setting, node); + + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i].tId == node.tId) { + children.splice(i, 1); + break; + } + } + view.setFirstNode(setting, parentNode); + view.setLastNode(setting, parentNode); + + var tmp_ulObj, tmp_switchObj, tmp_icoObj, + childLength = children.length; + + //repair nodes old parent + if (!setting.data.keep.parent && childLength == 0) { + //old parentNode has no child nodes + data.nodeIsParent(setting, parentNode, false); + parentNode.open = false; + delete parentNode[setting.data.key.children]; + tmp_ulObj = $$(parentNode, consts.id.UL, setting); + tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting); + tmp_icoObj = $$(parentNode, consts.id.ICON, setting); + view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU); + tmp_ulObj.css("display", "none"); + + } else if (setting.view.showLine && childLength > 0) { + //old parentNode has child nodes + var newLast = children[childLength - 1]; + tmp_ulObj = $$(newLast, consts.id.UL, setting); + tmp_switchObj = $$(newLast, consts.id.SWITCH, setting); + tmp_icoObj = $$(newLast, consts.id.ICON, setting); + if (parentNode == root) { + if (children.length == 1) { + //node was root, and ztree has only one root after move node + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT); + } else { + var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting); + view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS); + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); + } + } else { + view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); + } + tmp_ulObj.removeClass(consts.line.LINE); + } + }, + replaceIcoClass: function (node, obj, newName) { + if (!obj || node.isAjaxing) return; + var tmpName = obj.attr("class"); + if (tmpName == undefined) return; + var tmpList = tmpName.split("_"); + switch (newName) { + case consts.folder.OPEN: + case consts.folder.CLOSE: + case consts.folder.DOCU: + tmpList[tmpList.length - 1] = newName; + break; + } + obj.attr("class", tmpList.join("_")); + }, + replaceSwitchClass: function (node, obj, newName) { + if (!obj) return; + var tmpName = obj.attr("class"); + if (tmpName == undefined) return; + var tmpList = tmpName.split("_"); + switch (newName) { + case consts.line.ROOT: + case consts.line.ROOTS: + case consts.line.CENTER: + case consts.line.BOTTOM: + case consts.line.NOLINE: + tmpList[0] = view.makeNodeLineClassEx(node) + newName; + break; + case consts.folder.OPEN: + case consts.folder.CLOSE: + case consts.folder.DOCU: + tmpList[1] = newName; + break; + } + obj.attr("class", tmpList.join("_")); + if (newName !== consts.folder.DOCU) { + obj.removeAttr("disabled"); + } else { + obj.attr("disabled", "disabled"); + } + }, + selectNode: function (setting, node, addFlag) { + if (!addFlag) { + view.cancelPreSelectedNode(setting, null, node); + } + $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED); + data.addSelectedNode(setting, node); + setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]); + }, + setNodeFontCss: function (setting, treeNode) { + var aObj = $$(treeNode, consts.id.A, setting), + fontCss = view.makeNodeFontCss(setting, treeNode); + if (fontCss) { + aObj.css(fontCss); + } + }, + setNodeLineIcos: function (setting, node) { + if (!node) return; + var switchObj = $$(node, consts.id.SWITCH, setting), + ulObj = $$(node, consts.id.UL, setting), + icoObj = $$(node, consts.id.ICON, setting), + ulLine = view.makeUlLineClass(setting, node); + if (ulLine.length == 0) { + ulObj.removeClass(consts.line.LINE); + } else { + ulObj.addClass(ulLine); + } + switchObj.attr("class", view.makeNodeLineClass(setting, node)); + if (data.nodeIsParent(setting, node)) { + switchObj.removeAttr("disabled"); + } else { + switchObj.attr("disabled", "disabled"); + } + icoObj.removeAttr("style"); + icoObj.attr("style", view.makeNodeIcoStyle(setting, node)); + icoObj.attr("class", view.makeNodeIcoClass(setting, node)); + }, + setNodeName: function (setting, node) { + var title = data.nodeTitle(setting, node), + nObj = $$(node, consts.id.SPAN, setting); + nObj.empty(); + if (setting.view.nameIsHTML) { + nObj.html(data.nodeName(setting, node)); + } else { + nObj.text(data.nodeName(setting, node)); + } + if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) { + var aObj = $$(node, consts.id.A, setting); + aObj.attr("title", !title ? "" : title); + } + }, + setNodeTarget: function (setting, node) { + var aObj = $$(node, consts.id.A, setting); + aObj.attr("target", view.makeNodeTarget(node)); + }, + setNodeUrl: function (setting, node) { + var aObj = $$(node, consts.id.A, setting), + url = view.makeNodeUrl(setting, node); + if (url == null || url.length == 0) { + aObj.removeAttr("href"); + } else { + aObj.attr("href", url); + } + }, + switchNode: function (setting, node) { + if (node.open || !tools.canAsync(setting, node)) { + view.expandCollapseNode(setting, node, !node.open); + } else if (setting.async.enable) { + if (!view.asyncNode(setting, node)) { + view.expandCollapseNode(setting, node, !node.open); + return; + } + } else if (node) { + view.expandCollapseNode(setting, node, !node.open); + } + } + }; + // zTree defind + $.fn.zTree = { + consts: _consts, + _z: { + tools: tools, + view: view, + event: event, + data: data + }, + getZTreeObj: function (treeId) { + var o = data.getZTreeTools(treeId); + return o ? o : null; + }, + destroy: function (treeId) { + if (!!treeId && treeId.length > 0) { + view.destroy(data.getSetting(treeId)); + } else { + for (var s in settings) { + view.destroy(settings[s]); + } + } + }, + init: function (obj, zSetting, zNodes) { + var setting = tools.clone(_setting); + $.extend(true, setting, zSetting); + setting.treeId = obj.attr("id"); + setting.treeObj = obj; + setting.treeObj.empty(); + settings[setting.treeId] = setting; + //For some older browser,(e.g., ie6) + if (typeof document.body.style.maxHeight === "undefined") { + setting.view.expandSpeed = ""; + } + data.initRoot(setting); + var root = data.getRoot(setting); + zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : []; + if (setting.data.simpleData.enable) { + data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes)); + } else { + data.nodeChildren(setting, root, zNodes); + } + + data.initCache(setting); + event.unbindTree(setting); + event.bindTree(setting); + event.unbindEvent(setting); + event.bindEvent(setting); + + var zTreeTools = { + setting: setting, + addNodes: function (parentNode, index, newNodes, isSilent) { + if (!parentNode) parentNode = null; + var isParent = data.nodeIsParent(setting, parentNode); + if (parentNode && !isParent && setting.data.keep.leaf) return null; + + var i = parseInt(index, 10); + if (isNaN(i)) { + isSilent = !!newNodes; + newNodes = index; + index = -1; + } else { + index = i; + } + if (!newNodes) return null; + + + var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]); + + function addCallback() { + view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true)); + } + + if (tools.canAsync(setting, parentNode)) { + view.asyncNode(setting, parentNode, isSilent, addCallback); + } else { + addCallback(); + } + return xNewNodes; + }, + cancelSelectedNode: function (node) { + view.cancelPreSelectedNode(setting, node); + }, + destroy: function () { + view.destroy(setting); + }, + expandAll: function (expandFlag) { + expandFlag = !!expandFlag; + view.expandCollapseSonNode(setting, null, expandFlag, true); + return expandFlag; + }, + expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) { + if (!node || !data.nodeIsParent(setting, node)) return null; + if (expandFlag !== true && expandFlag !== false) { + expandFlag = !node.open; + } + callbackFlag = !!callbackFlag; + + if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) { + return null; + } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) { + return null; + } + if (expandFlag && node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false); + } + if (expandFlag === node.open && !sonSign) { + return null; + } + + data.getRoot(setting).expandTriggerFlag = callbackFlag; + if (!tools.canAsync(setting, node) && sonSign) { + view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus); + } else { + node.open = !expandFlag; + view.switchNode(this.setting, node); + showNodeFocus(); + } + return expandFlag; + + function showNodeFocus() { + var a = $$(node, setting).get(0); + if (a && focus !== false) { + view.scrollIntoView(setting, a); + } + } + }, + getNodes: function () { + return data.getNodes(setting); + }, + getNodeByParam: function (key, value, parentNode) { + if (!key) return null; + return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodeByTId: function (tId) { + return data.getNodeCache(setting, tId); + }, + getNodesByParam: function (key, value, parentNode) { + if (!key) return null; + return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodesByParamFuzzy: function (key, value, parentNode) { + if (!key) return null; + return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); + }, + getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) { + isSingle = !!isSingle; + if (!filter || (typeof filter != "function")) return (isSingle ? null : []); + return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam); + }, + getNodeIndex: function (node) { + if (!node) return null; + var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children.length; i < l; i++) { + if (children[i] == node) return i; + } + return -1; + }, + getSelectedNodes: function () { + var r = [], list = data.getRoot(setting).curSelectedList; + for (var i = 0, l = list.length; i < l; i++) { + r.push(list[i]); + } + return r; + }, + isSelectedNode: function (node) { + return data.isSelectedNode(setting, node); + }, + reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) { + var promise = new Promise(function (resolve, reject) { + try { + zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () { + resolve(parentNode); + }); + } catch (e) { + reject(e); + } + }); + return promise; + }, + reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) { + if (!this.setting.async.enable) return; + var isRoot = !parentNode; + if (isRoot) { + parentNode = data.getRoot(setting); + } + if (reloadType == "refresh") { + var children = data.nodeChildren(setting, parentNode); + for (var i = 0, l = children ? children.length : 0; i < l; i++) { + data.removeNodeCache(setting, children[i]); + } + data.removeSelectedNode(setting); + data.nodeChildren(setting, parentNode, []); + if (isRoot) { + this.setting.treeObj.empty(); + } else { + var ulObj = $$(parentNode, consts.id.UL, setting); + ulObj.empty(); + } + } + view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback); + }, + refresh: function () { + this.setting.treeObj.empty(); + var root = data.getRoot(setting), + nodes = data.nodeChildren(setting, root); + data.initRoot(setting); + data.nodeChildren(setting, root, nodes); + data.initCache(setting); + view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1); + }, + removeChildNodes: function (node) { + if (!node) return null; + var nodes = data.nodeChildren(setting, node); + view.removeChildNodes(setting, node); + return nodes ? nodes : null; + }, + removeNode: function (node, callbackFlag) { + if (!node) return; + callbackFlag = !!callbackFlag; + if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return; + view.removeNode(setting, node); + if (callbackFlag) { + this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); + } + }, + selectNode: function (node, addFlag, isSilent) { + if (!node) return; + if (tools.uCanDo(setting)) { + addFlag = setting.view.selectedMulti && addFlag; + if (node.parentTId) { + view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus); + } else if (!isSilent) { + try { + $$(node, setting).focus().blur(); + } catch (e) { + } + } + view.selectNode(setting, node, addFlag); + } + + function showNodeFocus() { + if (isSilent) { + return; + } + var a = $$(node, setting).get(0); + view.scrollIntoView(setting, a); + } + }, + transformTozTreeNodes: function (simpleNodes) { + return data.transformTozTreeFormat(setting, simpleNodes); + }, + transformToArray: function (nodes) { + return data.transformToArrayFormat(setting, nodes); + }, + updateNode: function (node, checkTypeFlag) { + if (!node) return; + var nObj = $$(node, setting); + if (nObj.get(0) && tools.uCanDo(setting)) { + view.setNodeName(setting, node); + view.setNodeTarget(setting, node); + view.setNodeUrl(setting, node); + view.setNodeLineIcos(setting, node); + view.setNodeFontCss(setting, node); + } + } + }; + root.treeTools = zTreeTools; + data.setZTreeTools(setting, zTreeTools); + var children = data.nodeChildren(setting, root); + if (children && children.length > 0) { + view.createNodes(setting, 0, children, null, -1); + } else if (setting.async.enable && setting.async.url && setting.async.url !== '') { + view.asyncNode(setting); + } + return zTreeTools; + } + }; + + var zt = $.fn.zTree, + $$ = tools.$, + consts = zt.consts; +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.core.min.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.core.min.js new file mode 100644 index 0000000..b8a472a --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.core.min.js @@ -0,0 +1,75 @@ +/* + * JQuery zTree core v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(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", +dataType:"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, +function(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, +[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= +e.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)&&!(b===!1||typeof b=="string"&&h.eqs(b,"false"))?(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)};c.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,i="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,"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=(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,b){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)||c.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-1&& +f.push(k);k=e.nodeChildren(a,k);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 +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&&a.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&&d0},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+1,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;s0&&(l=j.appendNodes(a,b+1,I,p,-1,i,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)&&f.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);for(f=0,i=k.length;b&&f1&&(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-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,xhrFields: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,[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,[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),n.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=l(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,[])):c.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=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,"&").replace(//g,">");a.push("", +d,"")},makeDOMNodeLine:function(a,b,c){a.push("")},makeDOMNodeMainAfter:function(a){a.push("
                • ")},makeDOMNodeMainBefore:function(a,b,c){a.push("
                • ")},makeDOMNodeNameAfter:function(a){a.push("")},makeDOMNodeNameBefore:function(a,b,c){var d=e.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("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,"'").replace(//g,">"),"'");a.push(">")},makeNodeFontCss:function(a,b){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(",d,") 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("_")},makeNodeLineClassEx: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("
                    ");c.push(d);c.push("
                  ")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c= +e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;dc.bottom||d.right>c.right||d.left0)c[0].isFirstNode=!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;i0){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,h,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)+c;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,a),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,[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",LEVEL:"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",CLOSE:"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)?c:[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,a)},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(),b,!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,b,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;c0?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); diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.js new file mode 100644 index 0000000..5ccf3f9 --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.js @@ -0,0 +1,648 @@ +/* + * JQuery zTree excheck v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function ($) { + //default consts of excheck + var _consts = { + event: { + CHECK: "ztree_check" + }, + id: { + CHECK: "_check" + }, + checkbox: { + STYLE: "checkbox", + DEFAULT: "chk", + DISABLED: "disable", + FALSE: "false", + TRUE: "true", + FULL: "full", + PART: "part", + FOCUS: "focus" + }, + radio: { + STYLE: "radio", + TYPE_ALL: "all", + TYPE_LEVEL: "level" + } + }, + //default setting of excheck + _setting = { + check: { + enable: false, + autoCheckTrigger: false, + chkStyle: _consts.checkbox.STYLE, + nocheckInherit: false, + chkDisabledInherit: false, + radioType: _consts.radio.TYPE_LEVEL, + chkboxType: { + "Y": "ps", + "N": "ps" + } + }, + data: { + key: { + checked: "checked" + } + }, + callback: { + beforeCheck: null, + onCheck: null + } + }, + //default root of excheck + _initRoot = function (setting) { + var r = data.getRoot(setting); + r.radioCheckedList = []; + }, + //default cache of excheck + _initCache = function (treeId) { + }, + //default bind event of excheck + _bindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.bind(c.CHECK, function (event, srcEvent, treeId, node) { + event.srcEvent = srcEvent; + tools.apply(setting.callback.onCheck, [event, treeId, node]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj, + c = consts.event; + o.unbind(c.CHECK); + }, + //default event proxy of excheck + _eventProxy = function (e) { + var target = e.target, + setting = data.getSetting(e.data.treeId), + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null; + + if (tools.eqs(e.type, "mouseover")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "mouseoverCheck"; + } + } else if (tools.eqs(e.type, "mouseout")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "mouseoutCheck"; + } + } else if (tools.eqs(e.type, "click")) { + if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { + tId = tools.getNodeMainDom(target).id; + nodeEventType = "checkNode"; + } + } + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "checkNode" : + nodeEventCallback = _handler.onCheckNode; + break; + case "mouseoverCheck" : + nodeEventCallback = _handler.onMouseoverCheck; + break; + case "mouseoutCheck" : + nodeEventCallback = _handler.onMouseoutCheck; + break; + } + } + var proxyResult = { + stop: nodeEventType === "checkNode", + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of excheck + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + var checked = data.nodeChecked(setting, n); + checked = data.nodeChecked(setting, n, checked); + n.checkedOld = checked; + if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true"); + n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck); + if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true"); + n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled); + if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true"); + n.halfCheck = !!n.halfCheck; + n.check_Child_State = -1; + n.check_Focus = false; + n.getCheckStatus = function () { + return data.getCheckStatus(setting, n); + }; + + if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) { + var r = data.getRoot(setting); + r.radioCheckedList.push(n); + } + }, + //add dom for check + _beforeA = function (setting, node, html) { + if (setting.check.enable) { + data.makeChkFlag(setting, node); + html.push(""); + } + }, + //update zTreeObj, add method of check + _zTreeTools = function (setting, zTreeTools) { + zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) { + var nodeChecked = data.nodeChecked(setting, node); + if (node.chkDisabled === true) return; + if (checked !== true && checked !== false) { + checked = !nodeChecked; + } + callbackFlag = !!callbackFlag; + + if (nodeChecked === checked && !checkTypeFlag) { + return; + } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) { + return; + } + if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) { + data.nodeChecked(setting, node, checked); + var checkObj = $$(node, consts.id.CHECK, this.setting); + if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); + view.setChkClass(this.setting, checkObj, node); + view.repairParentChkClassWithSelf(this.setting, node); + if (callbackFlag) { + this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]); + } + } + } + + zTreeTools.checkAllNodes = function (checked) { + view.repairAllChk(this.setting, !!checked); + } + + zTreeTools.getCheckedNodes = function (checked) { + var checked = (checked !== false); + var children = data.nodeChildren(setting, data.getRoot(this.setting)); + return data.getTreeCheckedNodes(this.setting, children, checked); + } + + zTreeTools.getChangeCheckedNodes = function () { + var children = data.nodeChildren(setting, data.getRoot(this.setting)); + return data.getTreeChangeCheckedNodes(this.setting, children); + } + + zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) { + disabled = !!disabled; + inheritParent = !!inheritParent; + inheritChildren = !!inheritChildren; + view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren); + view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent); + } + + var _updateNode = zTreeTools.updateNode; + zTreeTools.updateNode = function (node, checkTypeFlag) { + if (_updateNode) _updateNode.apply(zTreeTools, arguments); + if (!node || !this.setting.check.enable) return; + var nObj = $$(node, this.setting); + if (nObj.get(0) && tools.uCanDo(this.setting)) { + var checkObj = $$(node, consts.id.CHECK, this.setting); + if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); + view.setChkClass(this.setting, checkObj, node); + view.repairParentChkClassWithSelf(this.setting, node); + } + } + }, + //method of operate data + _data = { + getRadioCheckedList: function (setting) { + var checkedList = data.getRoot(setting).radioCheckedList; + for (var i = 0, j = checkedList.length; i < j; i++) { + if (!data.getNodeCache(setting, checkedList[i].tId)) { + checkedList.splice(i, 1); + i--; + j--; + } + } + return checkedList; + }, + getCheckStatus: function (setting, node) { + if (!setting.check.enable || node.nocheck || node.chkDisabled) return null; + var checked = data.nodeChecked(setting, node), + r = { + checked: checked, + 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))) + }; + return r; + }, + getTreeCheckedNodes: function (setting, nodes, checked, results) { + if (!nodes) return []; + var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL); + results = !results ? [] : results; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + var children = data.nodeChildren(setting, node); + var nodeChecked = data.nodeChecked(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) { + results.push(node); + if (onlyOne) { + break; + } + } + data.getTreeCheckedNodes(setting, children, checked, results); + if (onlyOne && results.length > 0) { + break; + } + } + return results; + }, + getTreeChangeCheckedNodes: function (setting, nodes, results) { + if (!nodes) return []; + results = !results ? [] : results; + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + var children = data.nodeChildren(setting, node); + var nodeChecked = data.nodeChecked(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) { + results.push(node); + } + data.getTreeChangeCheckedNodes(setting, children, results); + } + return results; + }, + makeChkFlag: function (setting, node) { + if (!node) return; + var chkFlag = -1; + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + var cNode = children[i]; + var nodeChecked = data.nodeChecked(setting, cNode); + var tmp = -1; + if (setting.check.chkStyle == consts.radio.STYLE) { + if (cNode.nocheck === true || cNode.chkDisabled === true) { + tmp = cNode.check_Child_State; + } else if (cNode.halfCheck === true) { + tmp = 2; + } else if (nodeChecked) { + tmp = 2; + } else { + tmp = cNode.check_Child_State > 0 ? 2 : 0; + } + if (tmp == 2) { + chkFlag = 2; + break; + } else if (tmp == 0) { + chkFlag = 0; + } + } else if (setting.check.chkStyle == consts.checkbox.STYLE) { + if (cNode.nocheck === true || cNode.chkDisabled === true) { + tmp = cNode.check_Child_State; + } else if (cNode.halfCheck === true) { + tmp = 1; + } else if (nodeChecked) { + tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1; + } else { + tmp = (cNode.check_Child_State > 0) ? 1 : 0; + } + if (tmp === 1) { + chkFlag = 1; + break; + } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) { + chkFlag = 1; + break; + } else if (chkFlag === 2 && tmp > -1 && tmp < 2) { + chkFlag = 1; + break; + } else if (tmp > -1) { + chkFlag = tmp; + } + } + } + } + node.check_Child_State = chkFlag; + } + }, + //method of event proxy + _event = {}, + //method of event handler + _handler = { + onCheckNode: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId); + if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true; + var nodeChecked = data.nodeChecked(setting, node); + data.nodeChecked(setting, node, !nodeChecked); + view.checkNodeRelation(setting, node); + var checkObj = $$(node, consts.id.CHECK, setting); + view.setChkClass(setting, checkObj, node); + view.repairParentChkClassWithSelf(setting, node); + setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]); + return true; + }, + onMouseoverCheck: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId), + checkObj = $$(node, consts.id.CHECK, setting); + node.check_Focus = true; + view.setChkClass(setting, checkObj, node); + return true; + }, + onMouseoutCheck: function (event, node) { + if (node.chkDisabled === true) return false; + var setting = data.getSetting(event.data.treeId), + checkObj = $$(node, consts.id.CHECK, setting); + node.check_Focus = false; + view.setChkClass(setting, checkObj, node); + return true; + } + }, + //method of tools for zTree + _tools = {}, + //method of operate ztree dom + _view = { + checkNodeRelation: function (setting, node) { + var pNode, i, l, + r = consts.radio; + var nodeChecked = data.nodeChecked(setting, node); + if (setting.check.chkStyle == r.STYLE) { + var checkedList = data.getRadioCheckedList(setting); + if (nodeChecked) { + if (setting.check.radioType == r.TYPE_ALL) { + for (i = checkedList.length - 1; i >= 0; i--) { + pNode = checkedList[i]; + var pNodeChecked = data.nodeChecked(setting, pNode); + if (pNodeChecked && pNode != node) { + data.nodeChecked(setting, pNode, false); + checkedList.splice(i, 1); + + view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); + if (pNode.parentTId != node.parentTId) { + view.repairParentChkClassWithSelf(setting, pNode); + } + } + } + checkedList.push(node); + } else { + var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); + var children = data.nodeChildren(setting, parentNode); + for (i = 0, l = children.length; i < l; i++) { + pNode = children[i]; + var pNodeChecked = data.nodeChecked(setting, pNode); + if (pNodeChecked && pNode != node) { + data.nodeChecked(setting, pNode, false); + view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); + } + } + } + } else if (setting.check.radioType == r.TYPE_ALL) { + for (i = 0, l = checkedList.length; i < l; i++) { + if (node == checkedList[i]) { + checkedList.splice(i, 1); + break; + } + } + } + + } else { + var children = data.nodeChildren(setting, node); + if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) { + view.setSonNodeCheckBox(setting, node, true); + } + if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) { + view.setSonNodeCheckBox(setting, node, false); + } + if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) { + view.setParentNodeCheckBox(setting, node, true); + } + if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) { + view.setParentNodeCheckBox(setting, node, false); + } + } + }, + makeChkClass: function (setting, node) { + var c = consts.checkbox, r = consts.radio, + fullStyle = ""; + var nodeChecked = data.nodeChecked(setting, node); + if (node.chkDisabled === true) { + fullStyle = c.DISABLED; + } else if (node.halfCheck) { + fullStyle = c.PART; + } else if (setting.check.chkStyle == r.STYLE) { + fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART; + } else { + 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); + } + var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle; + chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName; + return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName; + }, + repairAllChk: function (setting, checked) { + if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) { + var root = data.getRoot(setting); + var children = data.nodeChildren(setting, root); + for (var i = 0, l = children.length; i < l; i++) { + var node = children[i]; + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, checked); + } + view.setSonNodeCheckBox(setting, node, checked); + } + } + }, + repairChkClass: function (setting, node) { + if (!node) return; + data.makeChkFlag(setting, node); + if (node.nocheck !== true) { + var checkObj = $$(node, consts.id.CHECK, setting); + view.setChkClass(setting, checkObj, node); + } + }, + repairParentChkClass: function (setting, node) { + if (!node || !node.parentTId) return; + var pNode = node.getParentNode(); + view.repairChkClass(setting, pNode); + view.repairParentChkClass(setting, pNode); + }, + repairParentChkClassWithSelf: function (setting, node) { + if (!node) return; + var children = data.nodeChildren(setting, node); + if (children && children.length > 0) { + view.repairParentChkClass(setting, children[0]); + } else { + view.repairParentChkClass(setting, node); + } + }, + repairSonChkDisabled: function (setting, node, chkDisabled, inherit) { + if (!node) return; + if (node.chkDisabled != chkDisabled) { + node.chkDisabled = chkDisabled; + } + view.repairChkClass(setting, node); + var children = data.nodeChildren(setting, node); + if (children && inherit) { + for (var i = 0, l = children.length; i < l; i++) { + var sNode = children[i]; + view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit); + } + } + }, + repairParentChkDisabled: function (setting, node, chkDisabled, inherit) { + if (!node) return; + if (node.chkDisabled != chkDisabled && inherit) { + node.chkDisabled = chkDisabled; + } + view.repairChkClass(setting, node); + view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit); + }, + setChkClass: function (setting, obj, node) { + if (!obj) return; + if (node.nocheck === true) { + obj.hide(); + } else { + obj.show(); + } + obj.attr('class', view.makeChkClass(setting, node)); + }, + setParentNodeCheckBox: function (setting, node, value, srcNode) { + var checkObj = $$(node, consts.id.CHECK, setting); + if (!srcNode) srcNode = node; + data.makeChkFlag(setting, node); + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, value); + view.setChkClass(setting, checkObj, node); + if (setting.check.autoCheckTrigger && node != srcNode) { + setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); + } + } + if (node.parentTId) { + var pSign = true; + if (!value) { + var pNodes = data.nodeChildren(setting, node.getParentNode()); + for (var i = 0, l = pNodes.length; i < l; i++) { + var pNode = pNodes[i]; + var nodeChecked = data.nodeChecked(setting, pNode); + if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked) + || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) { + pSign = false; + break; + } + } + } + if (pSign) { + view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode); + } + } + }, + setSonNodeCheckBox: function (setting, node, value, srcNode) { + if (!node) return; + var checkObj = $$(node, consts.id.CHECK, setting); + if (!srcNode) srcNode = node; + + var hasDisable = false; + var children = data.nodeChildren(setting, node); + if (children) { + for (var i = 0, l = children.length; i < l; i++) { + var sNode = children[i]; + view.setSonNodeCheckBox(setting, sNode, value, srcNode); + if (sNode.chkDisabled === true) hasDisable = true; + } + } + + if (node != data.getRoot(setting) && node.chkDisabled !== true) { + if (hasDisable && node.nocheck !== true) { + data.makeChkFlag(setting, node); + } + if (node.nocheck !== true && node.chkDisabled !== true) { + data.nodeChecked(setting, node, value); + if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1; + } else { + node.check_Child_State = -1; + } + view.setChkClass(setting, checkObj, node); + if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) { + setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); + } + } + + } + }, + + _z = { + tools: _tools, + view: _view, + event: _event, + data: _data + }; + $.extend(true, $.fn.zTree.consts, _consts); + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.nodeChecked = function (setting, node, newChecked) { + if (!node) { + return false; + } + var key = setting.data.key.checked; + if (typeof newChecked !== 'undefined') { + if (typeof newChecked === "string") { + newChecked = tools.eqs(newChecked, "true"); + } + newChecked = !!newChecked; + node[key] = newChecked; + } + return node[key]; + }; + + data.exSetting(_setting); + data.addInitBind(_bindEvent); + data.addInitUnBind(_unbindEvent); + data.addInitCache(_initCache); + data.addInitNode(_initNode); + data.addInitProxy(_eventProxy, true); + data.addInitRoot(_initRoot); + data.addBeforeA(_beforeA); + data.addZTreeTools(_zTreeTools); + + var _createNodes = view.createNodes; + view.createNodes = function (setting, level, nodes, parentNode, index) { + if (_createNodes) _createNodes.apply(view, arguments); + if (!nodes) return; + view.repairParentChkClassWithSelf(setting, parentNode); + } + var _removeNode = view.removeNode; + view.removeNode = function (setting, node) { + var parentNode = node.getParentNode(); + if (_removeNode) _removeNode.apply(view, arguments); + if (!node || !parentNode) return; + view.repairChkClass(setting, parentNode); + view.repairParentChkClass(setting, parentNode); + } + + var _appendNodes = view.appendNodes; + view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) { + var html = ""; + if (_appendNodes) { + html = _appendNodes.apply(view, arguments); + } + if (parentNode) { + data.makeChkFlag(setting, parentNode); + } + return html; + } +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.min.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.min.js new file mode 100644 index 0000000..9483360 --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.excheck.min.js @@ -0,0 +1,34 @@ +/* + * JQuery zTree excheck v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function(n){var q,r,s,p={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},w={check:{enable:!1,autoCheckTrigger:!1,chkStyle:p.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:p.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};q=function(c, +a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId);if(i.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;var d=e.nodeChecked(b,a);e.nodeChecked(b,a,!d);f.checkNodeRelation(b,a);d=m(a,h.id.CHECK,b);f.setChkClass(b,d,a);f.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(h.event.CHECK,[c,b.treeId,a]);return!0};r=function(c,a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!0;f.setChkClass(b,d,a);return!0};s=function(c, +a){if(a.chkDisabled===!0)return!1;var b=e.getSetting(c.data.treeId),d=m(a,h.id.CHECK,b);a.check_Focus=!1;f.setChkClass(b,d,a);return!0};n.extend(!0,n.fn.zTree.consts,p);n.extend(!0,n.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,j;d=h.radio;b=e.nodeChecked(c,a);if(c.check.chkStyle==d.STYLE){var g=e.getRadioCheckedList(c);if(b)if(c.check.radioType==d.TYPE_ALL){for(d=g.length-1;d>=0;d--){b=g[d];var k=e.nodeChecked(c,b);k&&b!=a&&(e.nodeChecked(c,b,!1),g.splice(d,1),f.setChkClass(c, +m(b,h.id.CHECK,c),b),b.parentTId!=a.parentTId&&f.repairParentChkClassWithSelf(c,b))}g.push(a)}else{g=a.parentTId?a.getParentNode():e.getRoot(c);g=e.nodeChildren(c,g);for(d=0,j=g.length;d-1)&&f.setSonNodeCheckBox(c,a, +!0),!b&&(!g||g.length==0||c.check.chkboxType.N.indexOf("s")>-1)&&f.setSonNodeCheckBox(c,a,!1),b&&c.check.chkboxType.Y.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!0),!b&&c.check.chkboxType.N.indexOf("p")>-1&&f.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=h.checkbox,d=h.radio,j="",g=e.nodeChecked(c,a),j=a.chkDisabled===!0?b.DISABLED:a.halfCheck?b.PART:c.check.chkStyle==d.STYLE?a.check_Child_State<1?b.FULL:b.PART:g?a.check_Child_State===2||a.check_Child_State===-1?b.FULL:b.PART: +a.check_Child_State<1?b.FULL:b.PART,d=c.check.chkStyle+"_"+(g?b.TRUE:b.FALSE)+"_"+j,d=a.check_Focus&&a.chkDisabled!==!0?d+"_"+b.FOCUS:d;return h.className.BUTTON+" "+b.DEFAULT+" "+d},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===h.checkbox.STYLE)for(var b=e.getRoot(c),b=e.nodeChildren(c,b),d=0,j=b.length;d0?f.repairParentChkClass(c,b[0]):f.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b)a.chkDisabled=b;f.repairChkClass(c,a);if((a=e.nodeChildren(c,a))&&d)for(var j=0,g=a.length;j0){j=!1;break}}j&&f.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var j=m(a,h.id.CHECK,c);d||(d=a);var g=!1,k=e.nodeChildren(c,a);if(k)for(var o=0,l=k.length;o0?b?2:0:-1}else a.check_Child_State=-1;f.setChkClass(c,j,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(h.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=e.getRoot(c).radioCheckedList,b=0,d=a.length;b-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var j=b&&c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL,d=!d?[]:d,g=0,f=a.length;g0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var b=!b?[]:b,d=0,j=a.length;d0?2:0,l==2){b=2;break}else l==0&&(b=0);else if(c.check.chkStyle==h.checkbox.STYLE)if(l=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?1:i?f.check_Child_State===-1||f.check_Child_State===2?2:1:f.check_Child_State>0?1:0,l===1){b=1;break}else if(l===2&&b>-1&&j>0&&l!== +b){b=1;break}else if(b===2&&l>-1&&l<2){b=1;break}else l>-1&&(b=l)}a.check_Child_State=b}}}});var n=n.fn.zTree,i=n._z.tools,h=n.consts,f=n._z.view,e=n._z.data,m=i.$;e.nodeChecked=function(c,a,b){if(!a)return!1;c=c.data.key.checked;typeof b!=="undefined"&&(typeof b==="string"&&(b=i.eqs(b,"true")),a[c]=!!b);return a[c]};e.exSetting(w);e.addInitBind(function(c){c.treeObj.bind(h.event.CHECK,function(a,b,d,e){a.srcEvent=b;i.apply(c.callback.onCheck,[a,d,e])})});e.addInitUnBind(function(c){c.treeObj.unbind(h.event.CHECK)}); +e.addInitCache(function(){});e.addInitNode(function(c,a,b,d){if(b){a=e.nodeChecked(c,b);a=e.nodeChecked(c,b,a);b.checkedOld=a;if(typeof b.nocheck=="string")b.nocheck=i.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=i.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=i.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck; +b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return e.getCheckStatus(c,b)};c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL&&a&&e.getRoot(c).radioCheckedList.push(b)}});e.addInitProxy(function(c){var a=c.target,b=e.getSetting(c.data.treeId),d="",f=null,g="",k=null;if(i.eqs(c.type,"mouseover")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoverCheck"}else if(i.eqs(c.type,"mouseout")){if(b.check.enable&& +i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoutCheck"}else if(i.eqs(c.type,"click")&&b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="checkNode";if(d.length>0)switch(f=e.getNodeCache(b,d),g){case "checkNode":k=q;break;case "mouseoverCheck":k=r;break;case "mouseoutCheck":k=s}return{stop:g==="checkNode",node:f,nodeEventType:g,nodeEventCallback:k,treeEventType:"",treeEventCallback:null}}, +!0);e.addInitRoot(function(c){e.getRoot(c).radioCheckedList=[]});e.addBeforeA(function(c,a,b){c.check.enable&&(e.makeChkFlag(c,a),b.push(""))});e.addZTreeTools(function(c,a){a.checkNode=function(a,b,g,k){var o=e.nodeChecked(c,a);if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!o),k=!!k,(o!==b||g)&&!(k&&i.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a], +!0)==!1)&&i.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))e.nodeChecked(c,a,b),b=m(a,h.id.CHECK,this.setting),(g||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,a),f.setChkClass(this.setting,b,a),f.repairParentChkClassWithSelf(this.setting,a),k&&this.setting.treeObj.trigger(h.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){f.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var a=a!==!1,b=e.nodeChildren(c,e.getRoot(this.setting)); +return e.getTreeCheckedNodes(this.setting,b,a)};a.getChangeCheckedNodes=function(){var a=e.nodeChildren(c,e.getRoot(this.setting));return e.getTreeChangeCheckedNodes(this.setting,a)};a.setChkDisabled=function(a,b,c,e){b=!!b;c=!!c;f.repairSonChkDisabled(this.setting,a,b,!!e);f.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,e){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&m(c,this.setting).get(0)&&i.uCanDo(this.setting)){var g=m(c, +h.id.CHECK,this.setting);(e==!0||this.setting.check.chkStyle===h.radio.STYLE)&&f.checkNodeRelation(this.setting,c);f.setChkClass(this.setting,g,c);f.repairParentChkClassWithSelf(this.setting,c)}}});var t=f.createNodes;f.createNodes=function(c,a,b,d,e){t&&t.apply(f,arguments);b&&f.repairParentChkClassWithSelf(c,d)};var u=f.removeNode;f.removeNode=function(c,a){var b=a.getParentNode();u&&u.apply(f,arguments);a&&b&&(f.repairChkClass(c,b),f.repairParentChkClass(c,b))};var v=f.appendNodes;f.appendNodes= +function(c,a,b,d,h,g,i){var m="";v&&(m=v.apply(f,arguments));d&&e.makeChkFlag(c,d);return m}})(jQuery); diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.js new file mode 100644 index 0000000..278c599 --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.js @@ -0,0 +1,1203 @@ +/* + * JQuery zTree exedit v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function ($) { + //default consts of exedit + var _consts = { + event: { + DRAG: "ztree_drag", + DROP: "ztree_drop", + RENAME: "ztree_rename", + DRAGMOVE: "ztree_dragmove" + }, + id: { + EDIT: "_edit", + INPUT: "_input", + REMOVE: "_remove" + }, + move: { + TYPE_INNER: "inner", + TYPE_PREV: "prev", + TYPE_NEXT: "next" + }, + node: { + CURSELECTED_EDIT: "curSelectedNode_Edit", + TMPTARGET_TREE: "tmpTargetzTree", + TMPTARGET_NODE: "tmpTargetNode" + } + }, + //default setting of exedit + _setting = { + edit: { + enable: false, + editNameSelectAll: false, + showRemoveBtn: true, + showRenameBtn: true, + removeTitle: "remove", + renameTitle: "rename", + drag: { + autoExpandTrigger: false, + isCopy: true, + isMove: true, + prev: true, + next: true, + inner: true, + minMoveSize: 5, + borderMax: 10, + borderMin: -5, + maxShowNodeNum: 5, + autoOpenTime: 500 + } + }, + view: { + addHoverDom: null, + removeHoverDom: null + }, + callback: { + beforeDrag: null, + beforeDragOpen: null, + beforeDrop: null, + beforeEditName: null, + beforeRename: null, + onDrag: null, + onDragMove: null, + onDrop: null, + onRename: null + } + }, + //default root of exedit + _initRoot = function (setting) { + var r = data.getRoot(setting), rs = data.getRoots(); + r.curEditNode = null; + r.curEditInput = null; + r.curHoverNode = null; + r.dragFlag = 0; + r.dragNodeShowBefore = []; + r.dragMaskList = new Array(); + rs.showHoverDom = true; + }, + //default cache of exedit + _initCache = function (treeId) { + }, + //default bind event of exedit + _bindEvent = function (setting) { + var o = setting.treeObj; + var c = consts.event; + o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) { + tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]); + }); + + o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) { + tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]); + }); + + o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) { + tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]); + }); + + o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) { + tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]); + }); + }, + _unbindEvent = function (setting) { + var o = setting.treeObj; + var c = consts.event; + o.unbind(c.RENAME); + o.unbind(c.DRAG); + o.unbind(c.DRAGMOVE); + o.unbind(c.DROP); + }, + //default event proxy of exedit + _eventProxy = function (e) { + var target = e.target, + setting = data.getSetting(e.data.treeId), + relatedTarget = e.relatedTarget, + tId = "", node = null, + nodeEventType = "", treeEventType = "", + nodeEventCallback = null, treeEventCallback = null, + tmp = null; + + if (tools.eqs(e.type, "mouseover")) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "hoverOverNode"; + } + } else if (tools.eqs(e.type, "mouseout")) { + tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (!tmp) { + tId = "remove"; + nodeEventType = "hoverOutNode"; + } + } else if (tools.eqs(e.type, "mousedown")) { + tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]); + if (tmp) { + tId = tools.getNodeMainDom(tmp).id; + nodeEventType = "mousedownNode"; + } + } + if (tId.length > 0) { + node = data.getNodeCache(setting, tId); + switch (nodeEventType) { + case "mousedownNode" : + nodeEventCallback = _handler.onMousedownNode; + break; + case "hoverOverNode" : + nodeEventCallback = _handler.onHoverOverNode; + break; + case "hoverOutNode" : + nodeEventCallback = _handler.onHoverOutNode; + break; + } + } + var proxyResult = { + stop: false, + node: node, + nodeEventType: nodeEventType, + nodeEventCallback: nodeEventCallback, + treeEventType: treeEventType, + treeEventCallback: treeEventCallback + }; + return proxyResult + }, + //default init node of exedit + _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { + if (!n) return; + n.isHover = false; + n.editNameFlag = false; + }, + //update zTreeObj, add method of edit + _zTreeTools = function (setting, zTreeTools) { + zTreeTools.cancelEditName = function (newName) { + var root = data.getRoot(this.setting); + if (!root.curEditNode) return; + view.cancelCurEditNode(this.setting, newName ? newName : null, true); + } + zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) { + if (!node) return null; + var isParent = data.nodeIsParent(setting, targetNode); + if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null; + var _this = this, + newNode = tools.clone(node); + if (!targetNode) { + targetNode = null; + moveType = consts.move.TYPE_INNER; + } + if (moveType == consts.move.TYPE_INNER) { + function copyCallback() { + view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent); + } + + if (tools.canAsync(this.setting, targetNode)) { + view.asyncNode(this.setting, targetNode, isSilent, copyCallback); + } else { + copyCallback(); + } + } else { + view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent); + view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent); + } + return newNode; + } + zTreeTools.editName = function (node) { + if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return; + if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true); + view.editNode(this.setting, node) + } + zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) { + if (!node) return node; + var isParent = data.nodeIsParent(setting, targetNode); + if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) { + return null; + } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) { + return null; + } else if (!targetNode) { + targetNode = null; + } + var _this = this; + + function moveCallback() { + view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent); + } + + if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) { + view.asyncNode(this.setting, targetNode, isSilent, moveCallback); + } else { + moveCallback(); + } + return node; + } + zTreeTools.setEditable = function (editable) { + this.setting.edit.enable = editable; + return this.refresh(); + } + }, + //method of operate data + _data = { + setSonNodeLevel: function (setting, parentNode, node) { + if (!node) return; + var children = data.nodeChildren(setting, node); + node.level = (parentNode) ? parentNode.level + 1 : 0; + if (!children) return; + for (var i = 0, l = children.length; i < l; i++) { + if (children[i]) data.setSonNodeLevel(setting, node, children[i]); + } + } + }, + //method of event proxy + _event = {}, + //method of event handler + _handler = { + onHoverOverNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + root = data.getRoot(setting); + if (root.curHoverNode != node) { + _handler.onHoverOutNode(event); + } + root.curHoverNode = node; + view.addHoverDom(setting, node); + }, + onHoverOutNode: function (event, node) { + var setting = data.getSetting(event.data.treeId), + root = data.getRoot(setting); + if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) { + view.removeTreeDom(setting, root.curHoverNode); + root.curHoverNode = null; + } + }, + onMousedownNode: function (eventMouseDown, _node) { + var i, l, + setting = data.getSetting(eventMouseDown.data.treeId), + root = data.getRoot(setting), roots = data.getRoots(); + //right click can't drag & drop + if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true; + + //input of edit node name can't drag & drop + var target = eventMouseDown.target, + _nodes = data.getRoot(setting).curSelectedList, + nodes = []; + if (!data.isSelectedNode(setting, _node)) { + nodes = [_node]; + } else { + for (i = 0, l = _nodes.length; i < l; i++) { + if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) { + return true; + } + nodes.push(_nodes[i]); + if (nodes[0].parentTId !== _nodes[i].parentTId) { + nodes = [_node]; + break; + } + } + } + + view.editNodeBlur = true; + view.cancelCurEditNode(setting); + + var doc = $(setting.treeObj.get(0).ownerDocument), + body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget, + isOtherTree = false, + targetSetting = setting, + sourceSetting = setting, + preNode, nextNode, + preTmpTargetNodeId = null, + preTmpMoveType = null, + tmpTargetNodeId = null, + moveType = consts.move.TYPE_INNER, + mouseDownX = eventMouseDown.clientX, + mouseDownY = eventMouseDown.clientY, + startTime = (new Date()).getTime(); + + if (tools.uCanDo(setting)) { + doc.bind("mousemove", _docMouseMove); + } + + function _docMouseMove(event) { + //avoid start drag after click node + if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize + && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) { + return true; + } + var i, l, tmpNode, tmpDom, tmpNodes; + body.css("cursor", "pointer"); + + if (root.dragFlag == 0) { + if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) { + _docMouseUp(event); + return true; + } + + for (i = 0, l = nodes.length; i < l; i++) { + if (i == 0) { + root.dragNodeShowBefore = []; + } + tmpNode = nodes[i]; + if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) { + view.expandCollapseNode(setting, tmpNode, !tmpNode.open); + root.dragNodeShowBefore[tmpNode.tId] = true; + } else { + root.dragNodeShowBefore[tmpNode.tId] = false; + } + } + + root.dragFlag = 1; + roots.showHoverDom = false; + tools.showIfameMask(setting, true); + + //sort + var isOrder = true, lastIndex = -1; + if (nodes.length > 1) { + var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting); + tmpNodes = []; + for (i = 0, l = pNodes.length; i < l; i++) { + if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) { + if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) { + isOrder = false; + } + tmpNodes.push(pNodes[i]); + lastIndex = i; + } + if (nodes.length === tmpNodes.length) { + nodes = tmpNodes; + break; + } + } + } + if (isOrder) { + preNode = nodes[0].getPreNode(); + nextNode = nodes[nodes.length - 1].getNextNode(); + } + + //set node in selected + curNode = $$("
                    ", setting); + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + tmpNode.editNameFlag = false; + view.selectNode(setting, tmpNode, i > 0); + view.removeTreeDom(setting, tmpNode); + + if (i > setting.edit.drag.maxShowNodeNum - 1) { + continue; + } + + tmpDom = $$("
                  • ", setting); + tmpDom.append($$(tmpNode, consts.id.A, setting).clone()); + tmpDom.css("padding", "0"); + tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED); + curNode.append(tmpDom); + if (i == setting.edit.drag.maxShowNodeNum - 1) { + tmpDom = $$("
                  • ...
                  • ", setting); + curNode.append(tmpDom); + } + } + curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp"); + curNode.addClass(setting.treeObj.attr("class")); + curNode.appendTo(body); + + tmpArrow = $$("", setting); + tmpArrow.attr("id", "zTreeMove_arrow_tmp"); + tmpArrow.appendTo(body); + + setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]); + } + + if (root.dragFlag == 1) { + if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) { + var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget); + event.target = (xT.length > 0) ? xT.get(0) : event.target; + } else if (tmpTarget) { + tmpTarget.removeClass(consts.node.TMPTARGET_TREE); + if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) + .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); + } + tmpTarget = null; + tmpTargetNodeId = null; + + //judge drag & drop in multi ztree + isOtherTree = false; + targetSetting = setting; + var settings = data.getSettings(); + for (var s in settings) { + if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId + && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) { + isOtherTree = true; + targetSetting = settings[s]; + } + } + + var docScrollTop = doc.scrollTop(), + docScrollLeft = doc.scrollLeft(), + treeOffset = targetSetting.treeObj.offset(), + scrollHeight = targetSetting.treeObj.get(0).scrollHeight, + scrollWidth = targetSetting.treeObj.get(0).scrollWidth, + dTop = (event.clientY + docScrollTop - treeOffset.top), + dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop), + dLeft = (event.clientX + docScrollLeft - treeOffset.left), + dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft), + isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin), + isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin), + isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin), + isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin), + isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin, + isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0), + isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight), + isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0), + isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth); + + if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) { + //get node
                  • dom + var targetObj = event.target; + while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) { + targetObj = targetObj.parentNode; + } + + var canMove = true; + //don't move to self or children of self + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + if (targetObj.id === tmpNode.tId) { + canMove = false; + break; + } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) { + canMove = false; + break; + } + } + if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) { + tmpTarget = $(targetObj); + tmpTargetNodeId = targetObj.id; + } + } + + //the mouse must be in zTree + tmpNode = nodes[0]; + if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) { + //judge mouse move in root of ztree + if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) { + tmpTarget = targetSetting.treeObj; + } + //auto scroll top + if (isTop) { + targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10); + } else if (isBottom) { + targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10); + } + if (isLeft) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10); + } else if (isRight) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10); + } + //auto scroll left + if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) { + targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left); + } + } + + curNode.css({ + "top": (event.clientY + docScrollTop + 3) + "px", + "left": (event.clientX + docScrollLeft + 3) + "px" + }); + + var dX = 0; + var dY = 0; + if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) { + var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId), + isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy), + isPrev = !!(preNode && tmpTargetNodeId === preNode.tId), + isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId), + isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId), + canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev), + canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next), + 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); + + function clearMove() { + tmpTarget = null; + tmpTargetNodeId = ""; + moveType = consts.move.TYPE_INNER; + tmpArrow.css({ + "display": "none" + }); + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null + } + } + + if (!canPrev && !canNext && !canInner) { + clearMove(); + } else { + var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget), + tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()), + tmpTop = tmpTargetA.offset().top, + tmpLeft = tmpTargetA.offset().left, + prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1, + nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1, + dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height(); + + if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) { + dX = 1 - tmpArrow.width(); + dY = tmpTop - tmpArrow.height() / 2; + moveType = consts.move.TYPE_PREV; + } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) { + dX = 1 - tmpArrow.width(); + dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2); + moveType = consts.move.TYPE_NEXT; + } else if (canInner) { + dX = 5 - tmpArrow.width(); + dY = tmpTop; + moveType = consts.move.TYPE_INNER; + } else { + clearMove(); + } + + if (tmpTarget) { + tmpArrow.css({ + "display": "block", + "top": dY + "px", + "left": (tmpLeft + dX) + "px" + }); + tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType); + + if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) { + startTime = (new Date()).getTime(); + } + if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) { + var startTimer = true; + if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) { + startTimer = false; + } + if (startTimer) { + window.zTreeMoveTimer = setTimeout(function () { + if (moveType != consts.move.TYPE_INNER) return; + if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime + && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) { + view.switchNode(targetSetting, tmpTargetNode); + if (targetSetting.edit.drag.autoExpandTrigger) { + targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]); + } + } + }, targetSetting.edit.drag.autoOpenTime + 50); + window.zTreeMoveTargetNodeTId = tmpTargetNode.tId; + } + } + } + } + } else { + moveType = consts.move.TYPE_INNER; + if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) { + tmpTarget.addClass(consts.node.TMPTARGET_TREE); + } else { + tmpTarget = null; + } + tmpArrow.css({ + "display": "none" + }); + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } + } + preTmpTargetNodeId = tmpTargetNodeId; + preTmpMoveType = moveType; + + setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]); + } + return false; + } + + doc.bind("mouseup", _docMouseUp); + + function _docMouseUp(event) { + if (window.zTreeMoveTimer) { + clearTimeout(window.zTreeMoveTimer); + window.zTreeMoveTargetNodeTId = null; + } + preTmpTargetNodeId = null; + preTmpMoveType = null; + doc.unbind("mousemove", _docMouseMove); + doc.unbind("mouseup", _docMouseUp); + doc.unbind("selectstart", _docSelect); + body.css("cursor", ""); + if (tmpTarget) { + tmpTarget.removeClass(consts.node.TMPTARGET_TREE); + if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) + .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); + } + tools.showIfameMask(setting, false); + + roots.showHoverDom = true; + if (root.dragFlag == 0) return; + root.dragFlag = 0; + + var i, l, tmpNode; + for (i = 0, l = nodes.length; i < l; i++) { + tmpNode = nodes[i]; + if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) { + view.expandCollapseNode(setting, tmpNode, !tmpNode.open); + delete root.dragNodeShowBefore[tmpNode.tId]; + } + } + + if (curNode) curNode.remove(); + if (tmpArrow) tmpArrow.remove(); + + var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy); + if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) { + tmpTarget = null; + } + if (tmpTarget) { + var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId); + if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) { + view.selectNodes(sourceSetting, nodes); + return; + } + var newNodes = isCopy ? tools.clone(nodes) : nodes; + + function dropCallback() { + if (isOtherTree) { + if (!isCopy) { + for (var i = 0, l = nodes.length; i < l; i++) { + view.removeNode(setting, nodes[i]); + } + } + if (moveType == consts.move.TYPE_INNER) { + view.addNodes(targetSetting, dragTargetNode, -1, newNodes); + } else { + view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes); + } + } else { + if (isCopy && moveType == consts.move.TYPE_INNER) { + view.addNodes(targetSetting, dragTargetNode, -1, newNodes); + } else if (isCopy) { + view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes); + } else { + if (moveType != consts.move.TYPE_NEXT) { + for (i = 0, l = newNodes.length; i < l; i++) { + view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false); + } + } else { + for (i = -1, l = newNodes.length - 1; i < l; l--) { + view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false); + } + } + } + } + view.selectNodes(targetSetting, newNodes); + + var a = $$(newNodes[0], setting).get(0); + view.scrollIntoView(setting, a); + + setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]); + } + + if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) { + view.asyncNode(targetSetting, dragTargetNode, false, dropCallback); + } else { + dropCallback(); + } + + } else { + view.selectNodes(sourceSetting, nodes); + setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]); + } + } + + doc.bind("selectstart", _docSelect); + + function _docSelect() { + return false; + } + + // 2018-03-30 FireFox has fixed this issue. + //Avoid FireFox's Bug + //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error. + // if(eventMouseDown.preventDefault) { + // eventMouseDown.preventDefault(); + // } + return true; + } + }, + //method of tools for zTree + _tools = { + getAbs: function (obj) { + var oRect = obj.getBoundingClientRect(), + scrollTop = document.body.scrollTop + document.documentElement.scrollTop, + scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft; + return [oRect.left + scrollLeft, oRect.top + scrollTop]; + }, + inputFocus: function (inputObj) { + if (inputObj.get(0)) { + inputObj.focus(); + tools.setCursorPosition(inputObj.get(0), inputObj.val().length); + } + }, + inputSelect: function (inputObj) { + if (inputObj.get(0)) { + inputObj.focus(); + inputObj.select(); + } + }, + setCursorPosition: function (obj, pos) { + if (obj.setSelectionRange) { + obj.focus(); + obj.setSelectionRange(pos, pos); + } else if (obj.createTextRange) { + var range = obj.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + range.select(); + } + }, + showIfameMask: function (setting, showSign) { + var root = data.getRoot(setting); + //clear full mask + while (root.dragMaskList.length > 0) { + root.dragMaskList[0].remove(); + root.dragMaskList.shift(); + } + if (showSign) { + //show mask + var iframeList = $$("iframe", setting); + for (var i = 0, l = iframeList.length; i < l; i++) { + var obj = iframeList.get(i), + r = tools.getAbs(obj), + dragMask = $$("
                    ", setting); + dragMask.appendTo($$("body", setting)); + root.dragMaskList.push(dragMask); + } + } + } + }, + //method of operate ztree dom + _view = { + addEditBtn: function (setting, node) { + if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) { + return; + } + if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) { + return; + } + var aObj = $$(node, consts.id.A, setting), + editStr = ""; + aObj.append(editStr); + + $$(node, consts.id.EDIT, setting).bind('click', + function () { + if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false; + view.editNode(setting, node); + return false; + } + ).show(); + }, + addRemoveBtn: function (setting, node) { + if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) { + return; + } + if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) { + return; + } + var aObj = $$(node, consts.id.A, setting), + removeStr = ""; + aObj.append(removeStr); + + $$(node, consts.id.REMOVE, setting).bind('click', + function () { + if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false; + view.removeNode(setting, node); + setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); + return false; + } + ).bind('mousedown', + function (eventMouseDown) { + return true; + } + ).show(); + }, + addHoverDom: function (setting, node) { + if (data.getRoots().showHoverDom) { + node.isHover = true; + if (setting.edit.enable) { + view.addEditBtn(setting, node); + view.addRemoveBtn(setting, node); + } + tools.apply(setting.view.addHoverDom, [setting.treeId, node]); + } + }, + cancelCurEditNode: function (setting, forceName, isCancel) { + var root = data.getRoot(setting), + node = root.curEditNode; + + if (node) { + var inputObj = root.curEditInput, + newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val()); + if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) { + return false; + } + data.nodeName(setting, node, newName); + var aObj = $$(node, consts.id.A, setting); + aObj.removeClass(consts.node.CURSELECTED_EDIT); + inputObj.unbind(); + view.setNodeName(setting, node); + node.editNameFlag = false; + root.curEditNode = null; + root.curEditInput = null; + view.selectNode(setting, node, false); + setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]); + } + root.noSelection = true; + return true; + }, + editNode: function (setting, node) { + var root = data.getRoot(setting); + view.editNodeBlur = false; + if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { + setTimeout(function () { + tools.inputFocus(root.curEditInput); + }, 0); + return; + } + node.editNameFlag = true; + view.removeTreeDom(setting, node); + view.cancelCurEditNode(setting); + view.selectNode(setting, node, false); + $$(node, consts.id.SPAN, setting).html(""); + var inputObj = $$(node, consts.id.INPUT, setting); + inputObj.attr("value", data.nodeName(setting, node)); + if (setting.edit.editNameSelectAll) { + tools.inputSelect(inputObj); + } else { + tools.inputFocus(inputObj); + } + + inputObj.bind('blur', function (event) { + if (!view.editNodeBlur) { + view.cancelCurEditNode(setting); + } + }).bind('keydown', function (event) { + if (event.keyCode == "13") { + view.editNodeBlur = true; + view.cancelCurEditNode(setting); + } else if (event.keyCode == "27") { + view.cancelCurEditNode(setting, null, true); + } + }).bind('click', function (event) { + return false; + }).bind('dblclick', function (event) { + return false; + }); + + $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT); + root.curEditInput = inputObj; + root.noSelection = false; + root.curEditNode = node; + }, + moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) { + var root = data.getRoot(setting); + if (targetNode == node) return; + if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return; + var oldParentNode = (node.parentTId ? node.getParentNode() : root), + targetNodeIsRoot = (targetNode === null || targetNode == root); + if (targetNodeIsRoot && targetNode === null) targetNode = root; + if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER; + var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root); + + if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) { + moveType = consts.move.TYPE_INNER; + } + + if (moveType == consts.move.TYPE_INNER) { + if (targetNodeIsRoot) { + //parentTId of root node is null + node.parentTId = null; + } else { + if (!data.nodeIsParent(setting, targetNode)) { + data.nodeIsParent(setting, targetNode, true); + targetNode.open = !!targetNode.open; + view.setNodeLineIcos(setting, targetNode); + } + node.parentTId = targetNode.tId; + } + } + + //move node Dom + var targetObj, target_ulObj; + if (targetNodeIsRoot) { + targetObj = setting.treeObj; + target_ulObj = targetObj; + } else { + if (!isSilent && moveType == consts.move.TYPE_INNER) { + view.expandCollapseNode(setting, targetNode, true, false); + } else if (!isSilent) { + view.expandCollapseNode(setting, targetNode.getParentNode(), true, false); + } + targetObj = $$(targetNode, setting); + target_ulObj = $$(targetNode, consts.id.UL, setting); + if (!!targetObj.get(0) && !target_ulObj.get(0)) { + var ulstr = []; + view.makeUlHtml(setting, targetNode, ulstr, ''); + targetObj.append(ulstr.join('')); + } + target_ulObj = $$(targetNode, consts.id.UL, setting); + } + var nodeDom = $$(node, setting); + if (!nodeDom.get(0)) { + nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join(''); + } else if (!targetObj.get(0)) { + nodeDom.remove(); + } + if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) { + target_ulObj.append(nodeDom); + } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) { + targetObj.before(nodeDom); + } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) { + targetObj.after(nodeDom); + } + + //repair the data after move + var i, l, + tmpSrcIndex = -1, + tmpTargetIndex = 0, + oldNeighbor = null, + newNeighbor = null, + oldLevel = node.level; + var oldChildren = data.nodeChildren(setting, oldParentNode); + var targetParentChildren = data.nodeChildren(setting, targetParentNode); + var targetChildren = data.nodeChildren(setting, targetNode); + if (node.isFirstNode) { + tmpSrcIndex = 0; + if (oldChildren.length > 1) { + oldNeighbor = oldChildren[1]; + oldNeighbor.isFirstNode = true; + } + } else if (node.isLastNode) { + tmpSrcIndex = oldChildren.length - 1; + oldNeighbor = oldChildren[tmpSrcIndex - 1]; + oldNeighbor.isLastNode = true; + } else { + for (i = 0, l = oldChildren.length; i < l; i++) { + if (oldChildren[i].tId == node.tId) { + tmpSrcIndex = i; + break; + } + } + } + if (tmpSrcIndex >= 0) { + oldChildren.splice(tmpSrcIndex, 1); + } + if (moveType != consts.move.TYPE_INNER) { + for (i = 0, l = targetParentChildren.length; i < l; i++) { + if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i; + } + } + if (moveType == consts.move.TYPE_INNER) { + if (!targetChildren) { + targetChildren = data.nodeChildren(setting, targetNode, []); + } + if (targetChildren.length > 0) { + newNeighbor = targetChildren[targetChildren.length - 1]; + newNeighbor.isLastNode = false; + } + targetChildren.splice(targetChildren.length, 0, node); + node.isLastNode = true; + node.isFirstNode = (targetChildren.length == 1); + } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) { + targetParentChildren.splice(tmpTargetIndex, 0, node); + newNeighbor = targetNode; + newNeighbor.isFirstNode = false; + node.parentTId = targetNode.parentTId; + node.isFirstNode = true; + node.isLastNode = false; + + } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) { + targetParentChildren.splice(tmpTargetIndex + 1, 0, node); + newNeighbor = targetNode; + newNeighbor.isLastNode = false; + node.parentTId = targetNode.parentTId; + node.isFirstNode = false; + node.isLastNode = true; + + } else { + if (moveType == consts.move.TYPE_PREV) { + targetParentChildren.splice(tmpTargetIndex, 0, node); + } else { + targetParentChildren.splice(tmpTargetIndex + 1, 0, node); + } + node.parentTId = targetNode.parentTId; + node.isFirstNode = false; + node.isLastNode = false; + } + data.fixPIdKeyValue(setting, node); + data.setSonNodeLevel(setting, node.getParentNode(), node); + + //repair node what been moved + view.setNodeLineIcos(setting, node); + view.repairNodeLevelClass(setting, node, oldLevel); + + //repair node's old parentNode dom + if (!setting.data.keep.parent && oldChildren.length < 1) { + //old parentNode has no child nodes + data.nodeIsParent(setting, oldParentNode, false); + oldParentNode.open = false; + var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting), + tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting), + tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting); + view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU); + view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU); + tmp_ulObj.css("display", "none"); + + } else if (oldNeighbor) { + //old neigbor node + view.setNodeLineIcos(setting, oldNeighbor); + } + + //new neigbor node + if (newNeighbor) { + view.setNodeLineIcos(setting, newNeighbor); + } + + //repair checkbox / radio + if (!!setting.check && setting.check.enable && view.repairChkClass) { + view.repairChkClass(setting, oldParentNode); + view.repairParentChkClassWithSelf(setting, oldParentNode); + if (oldParentNode != node.parent) + view.repairParentChkClassWithSelf(setting, node); + } + + //expand parents after move + if (!isSilent) { + view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag); + } + }, + removeEditBtn: function (setting, node) { + $$(node, consts.id.EDIT, setting).unbind().remove(); + }, + removeRemoveBtn: function (setting, node) { + $$(node, consts.id.REMOVE, setting).unbind().remove(); + }, + removeTreeDom: function (setting, node) { + node.isHover = false; + view.removeEditBtn(setting, node); + view.removeRemoveBtn(setting, node); + tools.apply(setting.view.removeHoverDom, [setting.treeId, node]); + }, + repairNodeLevelClass: function (setting, node, oldLevel) { + if (oldLevel === node.level) return; + var liObj = $$(node, setting), + aObj = $$(node, consts.id.A, setting), + ulObj = $$(node, consts.id.UL, setting), + oldClass = consts.className.LEVEL + oldLevel, + newClass = consts.className.LEVEL + node.level; + liObj.removeClass(oldClass); + liObj.addClass(newClass); + aObj.removeClass(oldClass); + aObj.addClass(newClass); + ulObj.removeClass(oldClass); + ulObj.addClass(newClass); + }, + selectNodes: function (setting, nodes) { + for (var i = 0, l = nodes.length; i < l; i++) { + view.selectNode(setting, nodes[i], i > 0); + } + } + }, + + _z = { + tools: _tools, + view: _view, + event: _event, + data: _data + }; + $.extend(true, $.fn.zTree.consts, _consts); + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.exSetting(_setting); + data.addInitBind(_bindEvent); + data.addInitUnBind(_unbindEvent); + data.addInitCache(_initCache); + data.addInitNode(_initNode); + data.addInitProxy(_eventProxy); + data.addInitRoot(_initRoot); + data.addZTreeTools(_zTreeTools); + + var _cancelPreSelectedNode = view.cancelPreSelectedNode; + view.cancelPreSelectedNode = function (setting, node) { + var list = data.getRoot(setting).curSelectedList; + for (var i = 0, j = list.length; i < j; i++) { + if (!node || node === list[i]) { + view.removeTreeDom(setting, list[i]); + if (node) break; + } + } + if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments); + } + + var _createNodes = view.createNodes; + view.createNodes = function (setting, level, nodes, parentNode, index) { + if (_createNodes) { + _createNodes.apply(view, arguments); + } + if (!nodes) return; + if (view.repairParentChkClassWithSelf) { + view.repairParentChkClassWithSelf(setting, parentNode); + } + } + + var _makeNodeUrl = view.makeNodeUrl; + view.makeNodeUrl = function (setting, node) { + return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments)); + } + + var _removeNode = view.removeNode; + view.removeNode = function (setting, node) { + var root = data.getRoot(setting); + if (root.curEditNode === node) root.curEditNode = null; + if (_removeNode) { + _removeNode.apply(view, arguments); + } + } + + var _selectNode = view.selectNode; + view.selectNode = function (setting, node, addFlag) { + var root = data.getRoot(setting); + if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { + return false; + } + if (_selectNode) _selectNode.apply(view, arguments); + view.addHoverDom(setting, node); + return true; + } + + var _uCanDo = tools.uCanDo; + tools.uCanDo = function (setting, e) { + var root = data.getRoot(setting); + if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) { + return true; + } + if (root.curEditNode) { + view.editNodeBlur = false; + root.curEditInput.focus(); + } + return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true); + } +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.min.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.min.js new file mode 100644 index 0000000..25d2a02 --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.exedit.min.js @@ -0,0 +1,53 @@ +/* + * JQuery zTree exedit v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function(B){var I={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},v={onHoverOverNode:function(a,b){var c=i.getSetting(a.data.treeId),d=i.getRoot(c);if(d.curHoverNode!=b)v.onHoverOutNode(a);d.curHoverNode=b;e.addHoverDom(c,b)},onHoverOutNode:function(a){var a= +i.getSetting(a.data.treeId),b=i.getRoot(a);if(b.curHoverNode&&!i.isSelectedNode(a,b.curHoverNode))e.removeTreeDom(a,b.curHoverNode),b.curHoverNode=null},onMousedownNode:function(a,b){function c(a){if(m.dragFlag==0&&Math.abs(N-a.clientX)1){var o=n[0].parentTId?i.nodeChildren(f,n[0].getParentNode()):i.getNodes(f);g=[];for(b=0,c=o.length;b-1&&p+1!==b&&(j=!1),g.push(o[b]),p=b),n.length===g.length){n=g;break}}j&&(H=n[0].getPreNode(),Q=n[n.length-1].getNextNode());C=q("
                      ", +f);for(b=0,c=n.length;b0),e.removeTreeDom(f,g),b>f.edit.drag.maxShowNodeNum-1||(j=q("
                    • ",f),j.append(q(g,d.id.A,f).clone()),j.css("padding","0"),j.children("#"+g.tId+d.id.A).removeClass(d.node.CURSELECTED),C.append(j),b==f.edit.drag.maxShowNodeNum-1&&(j=q("
                    • ...
                    • ",f),C.append(j)));C.attr("id",n[0].tId+d.id.UL+"_tmp");C.addClass(f.treeObj.attr("class"));C.appendTo(L);u=q("", +f);u.attr("id","zTreeMove_arrow_tmp");u.appendTo(L);f.treeObj.trigger(d.event.DRAG,[a,f.treeId,n])}if(m.dragFlag==1){t&&u.attr("id")==a.target.id&&w&&a.clientX+G.scrollLeft()+2>B("#"+w+d.id.A,t).offset().left?(g=B("#"+w+d.id.A,t),a.target=g.length>0?g.get(0):a.target):t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER)); +w=t=null;J=!1;h=f;g=i.getSettings();for(var z in g)if(g[z].treeId&&g[z].edit.enable&&g[z].treeId!=f.treeId&&(a.target.id==g[z].treeId||B(a.target).parents("#"+g[z].treeId).length>0))J=!0,h=g[z];z=G.scrollTop();j=G.scrollLeft();p=h.treeObj.offset();b=h.treeObj.get(0).scrollHeight;g=h.treeObj.get(0).scrollWidth;c=a.clientY+z-p.top;var E=h.treeObj.height()+p.top-a.clientY-z,r=a.clientX+j-p.left,s=h.treeObj.width()+p.left-a.clientX-j,p=cf.edit.drag.borderMin,o=Ef.edit.drag.borderMin,F=rf.edit.drag.borderMin,v=sf.edit.drag.borderMin,E=c>f.edit.drag.borderMin&&E>f.edit.drag.borderMin&&r>f.edit.drag.borderMin&&s>f.edit.drag.borderMin,r=p&&h.treeObj.scrollTop()<=0,s=o&&h.treeObj.scrollTop()+h.treeObj.height()+10>=b,M=F&&h.treeObj.scrollLeft()<=0,P=v&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=g;if(a.target&&k.isChildOrSelf(a.target,h.treeId)){for(var D=a.target;D&&D.tagName&&!k.eqs(D.tagName,"li")&&D.id!= +h.treeId;)D=D.parentNode;var R=!0;for(b=0,c=n.length;b0){R=!1;break}if(R&&a.target&&k.isChildOrSelf(a.target,D.id+d.id.A))t=B(D),w=D.id}g=n[0];if(E&&k.isChildOrSelf(a.target,h.treeId)){if(!t&&(a.target.id==h.treeId||r||s||M||P)&&(J||!J&&g.parentTId))t=h.treeObj;p?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):o&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);F?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):v&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+ +10);t&&t!=h.treeObj&&t.offset().left=-0.2)&&g?(j=1-u.width(),b=E-u.height()/2,x=d.move.TYPE_PREV):(M==0||z>=M&&z<=1.2)&&c?(j=1-u.width(),b=v==null||i.nodeIsParent(f,A)&&A.open?E+F.height()-u.height()/2:v.offset().top-u.height()/2,x=d.move.TYPE_NEXT):p?(j=5-u.width(),b=E,x=d.move.TYPE_INNER):o(),t){u.css({display:"block",top:b+"px",left:r+j+"px"});F.addClass(d.node.TMPTARGET_NODE+"_"+x);if(S!=w||T!=x)K=(new Date).getTime();if(A&&i.nodeIsParent(f, +A)&&x==d.move.TYPE_INNER&&(z=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(z=!1),z))window.zTreeMoveTimer=setTimeout(function(){x==d.move.TYPE_INNER&&A&&i.nodeIsParent(f,A)&&!A.open&&(new Date).getTime()-K>h.edit.drag.autoOpenTime&&k.apply(h.callback.beforeDragOpen,[h.treeId,A],!0)&&(e.switchNode(h,A),h.edit.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND, +[h.treeId,A]))},h.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId}}else if(x=d.move.TYPE_INNER,t&&k.apply(h.edit.drag.inner,[h.treeId,n,null],!!h.edit.drag.inner)?t.addClass(d.node.TMPTARGET_TREE):t=null,u.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;S=w;T=x;f.treeObj.trigger(d.event.DRAGMOVE,[a,f.treeId,n])}return!1}function l(a){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId= +null;T=S=null;G.unbind("mousemove",c);G.unbind("mouseup",l);G.unbind("selectstart",g);L.css("cursor","");t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));k.showIfameMask(f,!1);y.showHoverDom=!0;if(m.dragFlag!=0){m.dragFlag=0;var b,j,o;for(b=0,j=n.length;b0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(b)for(var d=q("iframe",a),g=0,e=d.length;g",a);j.appendTo(q("body",a));c.dragMaskList.push(j)}}},view:{addEditBtn:function(a,b){if(!(b.editNameFlag|| +q(b,d.id.EDIT,a).length>0)&&k.apply(a.edit.showRenameBtn,[a.treeId,b],a.edit.showRenameBtn)){var c=q(b,d.id.A,a),l="";c.append(l);q(b,d.id.EDIT,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeEditName,[a.treeId,b],!0)==!1)return!1;e.editNode(a,b);return!1}).show()}},addRemoveBtn:function(a, +b){if(!(b.editNameFlag||q(b,d.id.REMOVE,a).length>0)&&k.apply(a.edit.showRemoveBtn,[a.treeId,b],a.edit.showRemoveBtn)){var c=q(b,d.id.A,a),l="";c.append(l);q(b,d.id.REMOVE,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeRemove,[a.treeId,b],!0)==!1)return!1;e.removeNode(a,b);a.treeObj.trigger(d.event.REMOVE, +[a.treeId,b]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(a,b){if(i.getRoots().showHoverDom)b.isHover=!0,a.edit.enable&&(e.addEditBtn(a,b),e.addRemoveBtn(a,b)),k.apply(a.view.addHoverDom,[a.treeId,b])},cancelCurEditNode:function(a,b,c){var l=i.getRoot(a),g=l.curEditNode;if(g){var o=l.curEditInput,b=b?b:c?i.nodeName(a,g):o.val();if(k.apply(a.callback.beforeRename,[a.treeId,g,b,c],!0)===!1)return!1;i.nodeName(a,g,b);q(g,d.id.A,a).removeClass(d.node.CURSELECTED_EDIT); +o.unbind();e.setNodeName(a,g);g.editNameFlag=!1;l.curEditNode=null;l.curEditInput=null;e.selectNode(a,g,!1);a.treeObj.trigger(d.event.RENAME,[a.treeId,g,c])}return l.noSelection=!0},editNode:function(a,b){var c=i.getRoot(a);e.editNodeBlur=!1;if(i.isSelectedNode(a,b)&&c.curEditNode==b&&b.editNameFlag)setTimeout(function(){k.inputFocus(c.curEditInput)},0);else{b.editNameFlag=!0;e.removeTreeDom(a,b);e.cancelCurEditNode(a);e.selectNode(a,b,!1);q(b,d.id.SPAN,a).html("");var l=q(b,d.id.INPUT,a);l.attr("value",i.nodeName(a,b));a.edit.editNameSelectAll?k.inputSelect(l):k.inputFocus(l);l.bind("blur",function(){e.editNodeBlur||e.cancelCurEditNode(a)}).bind("keydown",function(b){b.keyCode=="13"?(e.editNodeBlur=!0,e.cancelCurEditNode(a)):b.keyCode=="27"&&e.cancelCurEditNode(a,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});q(b,d.id.A,a).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=l; +c.noSelection=!1;c.curEditNode=b}},moveNode:function(a,b,c,l,g,k){var j=i.getRoot(a);if(b!=c&&(!a.data.keep.leaf||!b||i.nodeIsParent(a,b)||l!=d.move.TYPE_INNER)){var f=c.parentTId?c.getParentNode():j,m=b===null||b==j;m&&b===null&&(b=j);if(m)l=d.move.TYPE_INNER;j=b.parentTId?b.getParentNode():j;if(l!=d.move.TYPE_PREV&&l!=d.move.TYPE_NEXT)l=d.move.TYPE_INNER;if(l==d.move.TYPE_INNER)if(m)c.parentTId=null;else{if(!i.nodeIsParent(a,b))i.nodeIsParent(a,b,!0),b.open=!!b.open,e.setNodeLineIcos(a,b);c.parentTId= +b.tId}var y;m?y=m=a.treeObj:(!k&&l==d.move.TYPE_INNER?e.expandCollapseNode(a,b,!0,!1):k||e.expandCollapseNode(a,b.getParentNode(),!0,!1),m=q(b,a),y=q(b,d.id.UL,a),m.get(0)&&!y.get(0)&&(y=[],e.makeUlHtml(a,b,y,""),m.append(y.join(""))),y=q(b,d.id.UL,a));var r=q(c,a);r.get(0)?m.get(0)||r.remove():r=e.appendNodes(a,c.level,[c],null,-1,!1,!0).join("");y.get(0)&&l==d.move.TYPE_INNER?y.append(r):m.get(0)&&l==d.move.TYPE_PREV?m.before(r):m.get(0)&&l==d.move.TYPE_NEXT&&m.after(r);var s;y=-1;var r=0,n=null, +m=null,B=c.level,v=i.nodeChildren(a,f),C=i.nodeChildren(a,j),u=i.nodeChildren(a,b);if(c.isFirstNode){if(y=0,v.length>1)n=v[1],n.isFirstNode=!0}else if(c.isLastNode)y=v.length-1,n=v[y-1],n.isLastNode=!0;else for(j=0,s=v.length;j=0&&v.splice(y,1);if(l!=d.move.TYPE_INNER)for(j=0,s=C.length;j0)m=u[u.length-1],m.isLastNode=!1;u.splice(u.length,0,c);c.isLastNode=!0;c.isFirstNode= +u.length==1}else b.isFirstNode&&l==d.move.TYPE_PREV?(C.splice(r,0,c),m=b,m.isFirstNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!0,c.isLastNode=!1):b.isLastNode&&l==d.move.TYPE_NEXT?(C.splice(r+1,0,c),m=b,m.isLastNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(l==d.move.TYPE_PREV?C.splice(r,0,c):C.splice(r+1,0,c),c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!1);i.fixPIdKeyValue(a,c);i.setSonNodeLevel(a,c.getParentNode(),c);e.setNodeLineIcos(a,c);e.repairNodeLevelClass(a, +c,B);!a.data.keep.parent&&v.length<1?(i.nodeIsParent(a,f,!1),f.open=!1,b=q(f,d.id.UL,a),l=q(f,d.id.SWITCH,a),j=q(f,d.id.ICON,a),e.replaceSwitchClass(f,l,d.folder.DOCU),e.replaceIcoClass(f,j,d.folder.DOCU),b.css("display","none")):n&&e.setNodeLineIcos(a,n);m&&e.setNodeLineIcos(a,m);a.check&&a.check.enable&&e.repairChkClass&&(e.repairChkClass(a,f),e.repairParentChkClassWithSelf(a,f),f!=c.parent&&e.repairParentChkClassWithSelf(a,c));k||e.expandCollapseParentNode(a,c.getParentNode(),!0,g)}},removeEditBtn:function(a, +b){q(b,d.id.EDIT,a).unbind().remove()},removeRemoveBtn:function(a,b){q(b,d.id.REMOVE,a).unbind().remove()},removeTreeDom:function(a,b){b.isHover=!1;e.removeEditBtn(a,b);e.removeRemoveBtn(a,b);k.apply(a.view.removeHoverDom,[a.treeId,b])},repairNodeLevelClass:function(a,b,c){if(c!==b.level){var e=q(b,a),g=q(b,d.id.A,a),a=q(b,d.id.UL,a),c=d.className.LEVEL+c,b=d.className.LEVEL+b.level;e.removeClass(c);e.addClass(b);g.removeClass(c);g.addClass(b);a.removeClass(c);a.addClass(b)}},selectNodes:function(a, +b){for(var c=0,d=b.length;c0)}},event:{},data:{setSonNodeLevel:function(a,b,c){if(c){var d=i.nodeChildren(a,c);c.level=b?b.level+1:0;if(d)for(var b=0,g=d.length;b0)switch(o=i.getNodeCache(c,g),j){case "mousedownNode":f=v.onMousedownNode;break;case "hoverOverNode":f=v.onHoverOverNode; +break;case "hoverOutNode":f=v.onHoverOutNode}return{stop:!1,node:o,nodeEventType:j,nodeEventCallback:f,treeEventType:"",treeEventCallback:null}});i.addInitRoot(function(a){var a=i.getRoot(a),b=i.getRoots();a.curEditNode=null;a.curEditInput=null;a.curHoverNode=null;a.dragFlag=0;a.dragNodeShowBefore=[];a.dragMaskList=[];b.showHoverDom=!0});i.addZTreeTools(function(a,b){b.cancelEditName=function(a){i.getRoot(this.setting).curEditNode&&e.cancelCurEditNode(this.setting,a?a:null,!0)};b.copyNode=function(b, +l,g,o){if(!l)return null;var j=i.nodeIsParent(a,b);if(b&&!j&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;var f=this,m=k.clone(l);if(!b)b=null,g=d.move.TYPE_INNER;g==d.move.TYPE_INNER?(l=function(){e.addNodes(f.setting,b,-1,[m],o)},k.canAsync(this.setting,b)?e.asyncNode(this.setting,b,o,l):l()):(e.addNodes(this.setting,b.parentNode,-1,[m],o),e.moveNode(this.setting,b,m,g,!1,o));return m};b.editName=function(a){a&&a.tId&&a===i.getNodeCache(this.setting,a.tId)&&(a.parentTId&&e.expandCollapseParentNode(this.setting, +a.getParentNode(),!0),e.editNode(this.setting,a))};b.moveNode=function(b,l,g,o){function j(){e.moveNode(m.setting,b,l,g,!1,o)}if(!l)return l;var f=i.nodeIsParent(a,b);if(b&&!f&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;else if(b&&(l.parentTId==b.tId&&g==d.move.TYPE_INNER||q(l,this.setting).find("#"+b.tId).length>0))return null;else b||(b=null);var m=this;k.canAsync(this.setting,b)&&g===d.move.TYPE_INNER?e.asyncNode(this.setting,b,o,j):j();return l};b.setEditable=function(a){this.setting.edit.enable= +a;return this.refresh()}});var N=e.cancelPreSelectedNode;e.cancelPreSelectedNode=function(a,b){for(var c=i.getRoot(a).curSelectedList,d=0,g=c.length;d"); + }, + showNode: function (setting, node, options) { + data.isHidden(setting, node, false); + data.initShowForExCheck(setting, node); + $$(node, setting).show(); + }, + showNodes: function (setting, nodes, options) { + if (!nodes || nodes.length == 0) { + return; + } + var pList = {}, i, j; + for (i = 0, j = nodes.length; i < j; i++) { + var n = nodes[i]; + if (!pList[n.parentTId]) { + var pn = n.getParentNode(); + pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode(); + } + view.showNode(setting, n, options); + } + for (var tId in pList) { + var children = data.nodeChildren(setting, pList[tId]); + view.setFirstNodeForShow(setting, children); + view.setLastNodeForShow(setting, children); + } + }, + hideNode: function (setting, node, options) { + data.isHidden(setting, node, true); + node.isFirstNode = false; + node.isLastNode = false; + data.initHideForExCheck(setting, node); + view.cancelPreSelectedNode(setting, node); + $$(node, setting).hide(); + }, + hideNodes: function (setting, nodes, options) { + if (!nodes || nodes.length == 0) { + return; + } + var pList = {}, i, j; + for (i = 0, j = nodes.length; i < j; i++) { + var n = nodes[i]; + if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) { + var pn = n.getParentNode(); + pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode(); + } + view.hideNode(setting, n, options); + } + for (var tId in pList) { + var children = data.nodeChildren(setting, pList[tId]); + view.setFirstNodeForHide(setting, children); + view.setLastNodeForHide(setting, children); + } + }, + setFirstNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + var isHidden = data.isHidden(setting, children[0], false); + if (children.length > 0 && !isHidden) { + children[0].isFirstNode = true; + } else if (children.length > 0) { + view.setFirstNodeForHide(setting, children); + } + }, + setLastNode: function (setting, parentNode) { + var children = data.nodeChildren(setting, parentNode); + var isHidden = data.isHidden(setting, children[0]); + if (children.length > 0 && !isHidden) { + children[children.length - 1].isLastNode = true; + } else if (children.length > 0) { + view.setLastNodeForHide(setting, children); + } + }, + setFirstNodeForHide: function (setting, nodes) { + var n, i, j; + for (i = 0, j = nodes.length; i < j; i++) { + n = nodes[i]; + if (n.isFirstNode) { + break; + } + var isHidden = data.isHidden(setting, n); + if (!isHidden && !n.isFirstNode) { + n.isFirstNode = true; + view.setNodeLineIcos(setting, n); + break; + } else { + n = null; + } + } + return n; + }, + setFirstNodeForShow: function (setting, nodes) { + var n, i, j, first, old; + for (i = 0, j = nodes.length; i < j; i++) { + n = nodes[i]; + var isHidden = data.isHidden(setting, n); + if (!first && !isHidden && n.isFirstNode) { + first = n; + break; + } else if (!first && !isHidden && !n.isFirstNode) { + n.isFirstNode = true; + first = n; + view.setNodeLineIcos(setting, n); + } else if (first && n.isFirstNode) { + n.isFirstNode = false; + old = n; + view.setNodeLineIcos(setting, n); + break; + } else { + n = null; + } + } + return {"new": first, "old": old}; + }, + setLastNodeForHide: function (setting, nodes) { + var n, i; + for (i = nodes.length - 1; i >= 0; i--) { + n = nodes[i]; + if (n.isLastNode) { + break; + } + var isHidden = data.isHidden(setting, n); + if (!isHidden && !n.isLastNode) { + n.isLastNode = true; + view.setNodeLineIcos(setting, n); + break; + } else { + n = null; + } + } + return n; + }, + setLastNodeForShow: function (setting, nodes) { + var n, i, j, last, old; + for (i = nodes.length - 1; i >= 0; i--) { + n = nodes[i]; + var isHidden = data.isHidden(setting, n); + if (!last && !isHidden && n.isLastNode) { + last = n; + break; + } else if (!last && !isHidden && !n.isLastNode) { + n.isLastNode = true; + last = n; + view.setNodeLineIcos(setting, n); + } else if (last && n.isLastNode) { + n.isLastNode = false; + old = n; + view.setNodeLineIcos(setting, n); + break; + } else { + n = null; + } + } + return {"new": last, "old": old}; + } + }, + + _z = { + view: _view, + data: _data + }; + $.extend(true, $.fn.zTree._z, _z); + + var zt = $.fn.zTree, + tools = zt._z.tools, + consts = zt.consts, + view = zt._z.view, + data = zt._z.data, + event = zt._z.event, + $$ = tools.$; + + data.isHidden = function (setting, node, newIsHidden) { + if (!node) { + return false; + } + var key = setting.data.key.isHidden; + if (typeof newIsHidden !== 'undefined') { + if (typeof newIsHidden === "string") { + newIsHidden = tools.eqs(checked, "true"); + } + newIsHidden = !!newIsHidden; + node[key] = newIsHidden; + } + return node[key]; + }; + + data.exSetting(_setting); + data.addInitNode(_initNode); + data.addBeforeA(_beforeA); + data.addZTreeTools(_zTreeTools); + +// Override method in core + var _dInitNode = data.initNode; + data.initNode = function (setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) { + var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting), + children = tmpPNode[setting.data.key.children]; + data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children); + data.tmpHideLastNode = view.setLastNodeForHide(setting, children); + if (openFlag) { + view.setNodeLineIcos(setting, data.tmpHideFirstNode); + view.setNodeLineIcos(setting, data.tmpHideLastNode); + } + isFirstNode = (data.tmpHideFirstNode === node); + isLastNode = (data.tmpHideLastNode === node); + if (_dInitNode) _dInitNode.apply(data, arguments); + if (openFlag && isLastNode) { + view.clearOldLastNode(setting, node, openFlag); + } + }; + + var _makeChkFlag = data.makeChkFlag; + if (!!_makeChkFlag) { + data.makeChkFlag = function (setting, node) { + if (!!node && !!data.isHidden(setting, node)) { + return; + } + _makeChkFlag.apply(data, arguments); + } + } + + var _getTreeCheckedNodes = data.getTreeCheckedNodes; + if (!!_getTreeCheckedNodes) { + data.getTreeCheckedNodes = function (setting, nodes, checked, results) { + if (!!nodes && nodes.length > 0) { + var p = nodes[0].getParentNode(); + if (!!p && !!data.isHidden(setting, p)) { + return []; + } + } + return _getTreeCheckedNodes.apply(data, arguments); + } + } + + var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes; + if (!!_getTreeChangeCheckedNodes) { + data.getTreeChangeCheckedNodes = function (setting, nodes, results) { + if (!!nodes && nodes.length > 0) { + var p = nodes[0].getParentNode(); + if (!!p && !!data.isHidden(setting, p)) { + return []; + } + } + return _getTreeChangeCheckedNodes.apply(data, arguments); + } + } + + var _expandCollapseSonNode = view.expandCollapseSonNode; + if (!!_expandCollapseSonNode) { + view.expandCollapseSonNode = function (setting, node, expandFlag, animateFlag, callback) { + if (!!node && !!data.isHidden(setting, node)) { + return; + } + _expandCollapseSonNode.apply(view, arguments); + } + } + + var _setSonNodeCheckBox = view.setSonNodeCheckBox; + if (!!_setSonNodeCheckBox) { + view.setSonNodeCheckBox = function (setting, node, value, srcNode) { + if (!!node && !!data.isHidden(setting, node)) { + return; + } + _setSonNodeCheckBox.apply(view, arguments); + } + } + + var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf; + if (!!_repairParentChkClassWithSelf) { + view.repairParentChkClassWithSelf = function (setting, node) { + if (!!node && !!data.isHidden(setting, node)) { + return; + } + _repairParentChkClassWithSelf.apply(view, arguments); + } + } +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/lib/ztree/js/jquery.ztree.exhide.min.js b/src/main/resources/static/lib/ztree/js/jquery.ztree.exhide.min.js new file mode 100644 index 0000000..f4ae540 --- /dev/null +++ b/src/main/resources/static/lib/ztree/js/jquery.ztree.exhide.min.js @@ -0,0 +1,23 @@ +/* + * JQuery zTree exHideNodes v3.5.37 + * http://treejs.cn/ + * + * Copyright (c) 2010 Hunter.z + * + * Licensed same as jquery - MIT License + * http://www.opensource.org/licenses/mit-license.php + * + * email: hunter.z@263.net + * Date: 2018-08-21 + */ +(function(j){j.extend(!0,j.fn.zTree._z,{view:{clearOldFirstNode:function(c,a){for(var b=a.getNextNode();b;){if(b.isFirstNode){b.isFirstNode=!1;e.setNodeLineIcos(c,b);break}if(b.isLastNode)break;b=b.getNextNode()}},clearOldLastNode:function(c,a,b){for(a=a.getPreNode();a;){if(a.isLastNode){a.isLastNode=!1;b&&e.setNodeLineIcos(c,a);break}if(a.isFirstNode)break;a=a.getPreNode()}},makeDOMNodeMainBefore:function(c,a,b){a=d.isHidden(a,b);c.push("
                    • ")},showNode:function(c,a){d.isHidden(c,a,!1);d.initShowForExCheck(c,a);k(a,c).show()},showNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g0&&!f?b[0].isFirstNode=!0:b.length>0&&e.setFirstNodeForHide(c,b)},setLastNode:function(c,a){var b=d.nodeChildren(c,a),f=d.isHidden(c,b[0]);b.length>0&&!f?b[b.length-1].isLastNode=!0:b.length>0&&e.setLastNodeForHide(c,b)},setFirstNodeForHide:function(c,a){var b,f,g;for(f=0,g=a.length;f=0;f--){b=a[f];if(b.isLastNode)break;if(!d.isHidden(c,b)&&!b.isLastNode){b.isLastNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setLastNodeForShow:function(c, +a){var b,f,g,i;for(f=a.length-1;f>=0;f--){b=a[f];var h=d.isHidden(c,b);if(!g&&!h&&b.isLastNode){g=b;break}else if(!g&&!h&&!b.isLastNode)b.isLastNode=!0,g=b,e.setNodeLineIcos(c,b);else if(g&&b.isLastNode){b.isLastNode=!1;i=b;e.setNodeLineIcos(c,b);break}}return{"new":g,old:i}}},data:{initHideForExCheck:function(c,a){if(d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck=="undefined")a._nocheck=!!a.nocheck,a.nocheck=!0;a.check_Child_State=-1;e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c, +a)}},initShowForExCheck:function(c,a){if(!d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck!="undefined")a.nocheck=a._nocheck,delete a._nocheck;if(e.setChkClass){var b=k(a,l.id.CHECK,c);e.setChkClass(c,b,a)}e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,a)}}}});var j=j.fn.zTree,m=j._z.tools,l=j.consts,e=j._z.view,d=j._z.data,k=m.$;d.isHidden=function(c,a,b){if(!a)return!1;c=c.data.key.isHidden;typeof b!=="undefined"&&(typeof b==="string"&&(b=m.eqs(checked,"true")),a[c]= +!!b);return a[c]};d.exSetting({data:{key:{isHidden:"isHidden"}}});d.addInitNode(function(c,a,b){a=d.isHidden(c,b);d.isHidden(c,b,a);d.initHideForExCheck(c,b)});d.addBeforeA(function(){});d.addZTreeTools(function(c,a){a.showNodes=function(a,b){e.showNodes(c,a,b)};a.showNode=function(a,b){a&&e.showNodes(c,[a],b)};a.hideNodes=function(a,b){e.hideNodes(c,a,b)};a.hideNode=function(a,b){a&&e.hideNodes(c,[a],b)};var b=a.checkNode;if(b)a.checkNode=function(f,e,i,h){(!f||!d.isHidden(c,f))&&b.apply(a,arguments)}}); +var n=d.initNode;d.initNode=function(c,a,b,f,g,i,h){var j=(f?f:d.getRoot(c))[c.data.key.children];d.tmpHideFirstNode=e.setFirstNodeForHide(c,j);d.tmpHideLastNode=e.setLastNodeForHide(c,j);h&&(e.setNodeLineIcos(c,d.tmpHideFirstNode),e.setNodeLineIcos(c,d.tmpHideLastNode));g=d.tmpHideFirstNode===b;i=d.tmpHideLastNode===b;n&&n.apply(d,arguments);h&&i&&e.clearOldLastNode(c,b,h)};var o=d.makeChkFlag;if(o)d.makeChkFlag=function(c,a){(!a||!d.isHidden(c,a))&&o.apply(d,arguments)};var p=d.getTreeCheckedNodes; +if(p)d.getTreeCheckedNodes=function(c,a,b,f){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return p.apply(d,arguments)};var q=d.getTreeChangeCheckedNodes;if(q)d.getTreeChangeCheckedNodes=function(c,a,b){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return q.apply(d,arguments)};var r=e.expandCollapseSonNode;if(r)e.expandCollapseSonNode=function(c,a,b,f,g){(!a||!d.isHidden(c,a))&&r.apply(e,arguments)};var s=e.setSonNodeCheckBox;if(s)e.setSonNodeCheckBox= +function(c,a,b,f){(!a||!d.isHidden(c,a))&&s.apply(e,arguments)};var t=e.repairParentChkClassWithSelf;if(t)e.repairParentChkClassWithSelf=function(c,a){(!a||!d.isHidden(c,a))&&t.apply(e,arguments)}})(jQuery); diff --git a/src/main/resources/templates/common.html b/src/main/resources/templates/common.html new file mode 100644 index 0000000..7aa7a2f --- /dev/null +++ b/src/main/resources/templates/common.html @@ -0,0 +1,35 @@ +CDN管理系统 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/copyright.html b/src/main/resources/templates/copyright.html new file mode 100644 index 0000000..267b938 --- /dev/null +++ b/src/main/resources/templates/copyright.html @@ -0,0 +1 @@ +
                      ${copyright}
                      \ No newline at end of file diff --git a/src/main/resources/templates/example/index.html b/src/main/resources/templates/example/index.html new file mode 100644 index 0000000..ffb8883 --- /dev/null +++ b/src/main/resources/templates/example/index.html @@ -0,0 +1,122 @@ + + + +<#include "/common.html"/> + + + + +
                      + + <#include "/header.html"/> + <#include "/menu.html"/> + +
                      + +
                      +
                      + 演示模块 +
                      + +
                      +
                      +
                      + +
                      + + +
                      + + +
                    • + + + + + + + + + + <#list page.list as example> + + + + + + + + + +
                      模块名称描述所属管理员操作
                      ${example.name} + ${example.descr} + + ${example.admin.name} + +
                      + +
                      +
                      + +
                      +
                      +
                      + + <#include '/copyright.html'/> + + + + +
                      + + + +
                      + + <#include '/script.html'/> + + + + \ No newline at end of file diff --git a/src/main/resources/templates/header.html b/src/main/resources/templates/header.html new file mode 100644 index 0000000..ccbafb4 --- /dev/null +++ b/src/main/resources/templates/header.html @@ -0,0 +1,55 @@ +
                      + + + + + +
                      + + + diff --git a/src/main/resources/templates/menu.html b/src/main/resources/templates/menu.html new file mode 100644 index 0000000..5376421 --- /dev/null +++ b/src/main/resources/templates/menu.html @@ -0,0 +1,18 @@ +
                      +
                      + + +
                      +
                      diff --git a/src/main/resources/templates/script.html b/src/main/resources/templates/script.html new file mode 100644 index 0000000..e967c30 --- /dev/null +++ b/src/main/resources/templates/script.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/server.html b/src/main/resources/templates/server.html new file mode 100644 index 0000000..50b19d5 --- /dev/null +++ b/src/main/resources/templates/server.html @@ -0,0 +1,16 @@ + + + +

                      + CDN套餐购买 +

                      +

                      + 服务器购买 +

                      +

                      + 云主机购买 +

                      + + + + \ No newline at end of file diff --git a/src/test/java/com/cym/test/MainTest.java b/src/test/java/com/cym/test/MainTest.java new file mode 100644 index 0000000..ad6c361 --- /dev/null +++ b/src/test/java/com/cym/test/MainTest.java @@ -0,0 +1,23 @@ +package com.cym.test; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.cym.CdnWebUI; +import com.cym.utils.JpaHelper; + +@SpringBootTest(classes = CdnWebUI.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class MainTest { + + @Autowired + JpaHelper jpaHelper; + + + @Test + public void test() throws Exception { + + } + + +}