From cc026d2895f0e15a69cdfa70d32a7ac3c179dc5a Mon Sep 17 00:00:00 2001 From: "java_cuibaocheng@163.com" Date: Thu, 9 May 2024 14:35:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/assets/images/backgrounds/1.jpg | Bin 0 -> 63634 bytes .../assets/images/backgrounds/thumbs/1.jpg | 0 .../bootstrap-fileupload/js/locales/zh-TW.js | 102 + .../js/vendor/codemirror/theme/abbott.css | 268 ++ .../js/vendor/safety/weather/black/0@1x.png | Bin 0 -> 2704 bytes .../js/vendor/safety/weather/black/0@2x.png | Bin 0 -> 7714 bytes .../js/vendor/safety/weather/black/1@1x.png | Bin 0 -> 2398 bytes .../js/vendor/safety/weather/black/1@2x.png | Bin 0 -> 6326 bytes .../js/vendor/safety/weather/white/0@1x.png | Bin 0 -> 941 bytes .../js/vendor/safety/weather/white/0@2x.png | Bin 0 -> 2284 bytes .../js/vendor/safety/weather/white/1@1x.png | Bin 0 -> 1351 bytes .../js/vendor/safety/weather/white/1@2x.png | Bin 0 -> 2760 bytes .../ueditor/dialogs/emotion/images/0.gif | Bin 0 -> 43 bytes .../zTree3/css/zTreeStyle/img/diy/1_close.png | Bin 0 -> 601 bytes .../css/zTreeStyle/img/zTreeStandard.png | Bin 0 -> 11173 bytes .../zTree3/css/zTreeStyle/zTreeStyle.css | 97 + .../static/assets/layuiadmin/json/说明.txt | 3 + .../layui/css/modules/layim/skin/1.jpg | Bin 0 -> 18386 bytes .../assets/layuiadmin/layui/images/face/0.gif | Bin 0 -> 2689 bytes .../assets/layuiadmin/layui/images/face/1.gif | Bin 0 -> 5514 bytes .../static/assets/layuiadmin/modules/ztree.js | 3809 +++++++++++++++++ .../assets/layuiadmin/tpl/system/说明.txt | 3 + 22 files changed, 4282 insertions(+) create mode 100644 src/main/resources/static/assets/images/backgrounds/1.jpg create mode 100644 src/main/resources/static/assets/images/backgrounds/thumbs/1.jpg create mode 100644 src/main/resources/static/assets/js/vendor/bootstrap-fileupload/js/locales/zh-TW.js create mode 100644 src/main/resources/static/assets/js/vendor/codemirror/theme/abbott.css create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/black/0@1x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/black/0@2x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/black/1@1x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/black/1@2x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/white/0@1x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/white/0@2x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/white/1@1x.png create mode 100644 src/main/resources/static/assets/js/vendor/safety/weather/white/1@2x.png create mode 100644 src/main/resources/static/assets/js/vendor/ueditor/dialogs/emotion/images/0.gif create mode 100644 src/main/resources/static/assets/js/vendor/zTree3/css/zTreeStyle/img/diy/1_close.png create mode 100644 src/main/resources/static/assets/js/vendor/zTree3/css/zTreeStyle/img/zTreeStandard.png create mode 100644 src/main/resources/static/assets/js/vendor/zTree3/css/zTreeStyle/zTreeStyle.css create mode 100644 src/main/resources/static/assets/layuiadmin/json/说明.txt create mode 100644 src/main/resources/static/assets/layuiadmin/layui/css/modules/layim/skin/1.jpg create mode 100644 src/main/resources/static/assets/layuiadmin/layui/images/face/0.gif create mode 100644 src/main/resources/static/assets/layuiadmin/layui/images/face/1.gif create mode 100644 src/main/resources/static/assets/layuiadmin/modules/ztree.js create mode 100644 src/main/resources/static/assets/layuiadmin/tpl/system/说明.txt diff --git a/src/main/resources/static/assets/images/backgrounds/1.jpg b/src/main/resources/static/assets/images/backgrounds/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..574218f6e4e6e1ff78d7ba231776e78594ef6af1 GIT binary patch literal 63634 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 + * + * NOTE: this file must be saved in UTF-8 encoding. + */ +(function ($) { + "use strict"; + + $.fn.fileinputLocales['zh-TW'] = { + fileSingle: '單一檔案', + filePlural: '複選檔案', + browseLabel: '瀏覽 …', + removeLabel: '移除', + removeTitle: '清除選取檔案', + cancelLabel: '取消', + cancelTitle: '取消上傳中檔案', + uploadLabel: '上傳', + uploadTitle: '上傳選取檔案', + msgNo: '沒有', + msgNoFilesSelected: '未選擇檔案', + msgCancelled: '取消', + zoomTitle: '詳細資料', + msgPlaceholder: '選擇 {files}...', + msgZoomModalHeading: '內容預覽', + msgFileRequired: '必須選擇壹個文件上傳.', + msgSizeTooSmall: '檔案 "{name}" ({size} KB) 必須大於限定大小 {minSize} KB.', + msgSizeTooLarge: '檔案 "{name}" ({size} KB) 大小超過上限 {maxSize} KB.', + msgFilesTooLess: '最少必須選擇 {n} {files} 來上傳. ', + msgFilesTooMany: '上傳的檔案數量 ({n}) 超過最大檔案上傳限制 {m}.', + msgFileNotFound: '檔案 "{name}" 未發現!', + msgFileSecured: '安全限制,禁止讀取檔案 "{name}".', + msgFileNotReadable: '文件 "{name}" 不可讀取.', + msgFilePreviewAborted: '檔案 "{name}" 預覽中止.', + msgFilePreviewError: '讀取 "{name}" 發生錯誤.', + msgInvalidFileName: '附檔名 "{name}" 包含非法字符.', + msgInvalidFileType: '檔案類型錯誤 "{name}". 只能使用 "{types}" 類型的檔案.', + msgInvalidFileExtension: '附檔名錯誤 "{name}". 只能使用 "{extensions}" 的檔案.', + msgFileTypes: { + 'image': 'image', + 'html': 'HTML', + 'text': 'text', + 'video': 'video', + 'audio': 'audio', + 'flash': 'flash', + 'pdf': 'PDF', + 'object': 'object' + }, + msgUploadAborted: '該文件上傳被中止', + msgUploadThreshold: '處理中...', + msgUploadBegin: '正在初始化...', + msgUploadEnd: '完成', + msgUploadEmpty: '無效的文件上傳.', + msgUploadError: '上傳錯誤', + msgValidationError: '驗證錯誤', + msgLoading: '載入第 {index} 個檔案,共 {files} …', + msgProgress: '載入第 {index} 個檔案,共 {files} - {name} - {percent}% 成功.', + msgSelected: '{n} {files} 選取', + msgFoldersNotAllowed: '只支援單檔拖曳! 無法使用 {n} 拖拽的資料夹.', + msgImageWidthSmall: '圖檔寬度"{name}"必須至少為{size}像素(px).', + msgImageHeightSmall: '圖檔高度"{name}"必須至少為{size}像素(px).', + msgImageWidthLarge: '圖檔寬度"{name}"不能超過{size}像素(px).', + msgImageHeightLarge: '圖檔高度"{name}"不能超過{size}像素(px).', + msgImageResizeError: '無法獲取的圖像尺寸調整。', + msgImageResizeException: '錯誤而調整圖像大小。
{errors}
', + msgAjaxError: '{operation} 發生錯誤. 請重試!', + msgAjaxProgressError: '{operation} 失敗', + ajaxOperations: { + deleteThumb: 'file delete', + uploadThumb: 'file upload', + uploadBatch: 'batch file upload', + uploadExtra: 'form data upload' + }, + dropZoneTitle: '拖曳檔案至此 …', + dropZoneClickTitle: '
(或點擊{files}按鈕選擇文件)', + fileActionSettings: { + removeTitle: '刪除檔案', + uploadTitle: '上傳檔案', + uploadRetryTitle: '重試', + downloadTitle: '下載檔案', + zoomTitle: '詳細資料', + dragTitle: '移動 / 重置', + indicatorNewTitle: '尚未上傳', + indicatorSuccessTitle: '上傳成功', + indicatorErrorTitle: '上傳失敗', + indicatorLoadingTitle: '上傳中 ...' + }, + previewZoomButtonTitles: { + prev: '預覽上壹個文件', + next: '預覽下壹個文件', + toggleheader: '縮放', + fullscreen: '全屏', + borderless: '無邊界模式', + close: '關閉當前預覽' + } + }; +})(window.jQuery); diff --git a/src/main/resources/static/assets/js/vendor/codemirror/theme/abbott.css b/src/main/resources/static/assets/js/vendor/codemirror/theme/abbott.css new file mode 100644 index 0000000..3e516a6 --- /dev/null +++ b/src/main/resources/static/assets/js/vendor/codemirror/theme/abbott.css @@ -0,0 +1,268 @@ +/* + * abbott.css + * A warm, dark theme for prose and code, with pastels and pretty greens. + * + * Ported from abbott.vim (https://github.com/bcat/abbott.vim) version 2.1. + * Original design and CodeMirror port by Jonathan Rascher. + * + * This theme shares the following color palette with the Vim color scheme. + * + * Brown shades: + * bistre: #231c14 + * chocolate: #3c3022 + * cocoa: #745d42 + * vanilla_cream: #fef3b4 + * + * Red shades: + * crimson: #d80450 + * cinnabar: #f63f05 + * + * Green shades: + * dark_olive: #273900 + * forest_green: #24a507 + * chartreuse: #a0ea00 + * pastel_chartreuse: #d8ff84 + * + * Yellow shades: + * marigold: #fbb32f + * lemon_meringue: #fbec5d + * + * Blue shades: + * cornflower_blue: #3f91f1 + * periwinkle_blue: #8ccdf0 + * + * Magenta shades: + * french_pink: #ec6c99 + * lavender: #e6a2f3 + * + * Cyan shades: + * zomp: #39a78d + * seafoam_green: #00ff7f + */ + +/* Style the UI: */ + +/* Equivalent to Vim's Normal group. */ +.cm-s-abbott.CodeMirror { + background: #231c14 /* bistre */; + color: #d8ff84 /* pastel_chartreuse */; +} + +/* Roughly equivalent to Vim's LineNr group. */ +.cm-s-abbott .CodeMirror-gutters { + background: #231c14 /* bistre */; + border: none; +} +.cm-s-abbott .CodeMirror-linenumber { color: #fbec5d /* lemon_meringue */; } + +.cm-s-abbott .CodeMirror-guttermarker { color: #f63f05 /* cinnabar */; } + +/* Roughly equivalent to Vim's FoldColumn group. */ +.cm-s-abbott .CodeMirror-guttermarker-subtle { color: #fbb32f /* marigold */; } + +/* + * Roughly equivalent to Vim's CursorColumn group. (We use a brighter color + * since Vim's cursorcolumn option highlights a whole column, whereas + * CodeMirror's rule just highlights a thin line.) + */ +.cm-s-abbott .CodeMirror-ruler { border-color: #745d42 /* cocoa */; } + +/* Equivalent to Vim's Cursor group in insert mode. */ +.cm-s-abbott .CodeMirror-cursor { border-color: #a0ea00 /* chartreuse */; } + +/* Equivalent to Vim's Cursor group in normal mode. */ +.cm-s-abbott.cm-fat-cursor .CodeMirror-cursor, +.cm-s-abbott .cm-animate-fat-cursor { + /* + * CodeMirror doesn't allow changing the foreground color of the character + * under the cursor, so we can't use a reverse video effect for the cursor. + * Instead, make it semitransparent. + */ + background: rgba(160, 234, 0, 0.5) /* chartreuse */; +} +.cm-s-abbott.cm-fat-cursor .CodeMirror-cursors { + /* + * Boost the z-index so the fat cursor shows up on top of text and + * matchingbracket/matchingtag highlights. + */ + z-index: 3; +} + +/* Equivalent to Vim's Cursor group in replace mode. */ +.cm-s-abbott .CodeMirror-overwrite .CodeMirror-cursor { + border-bottom: 1px solid #a0ea00 /* chartreuse */; + border-left: none; + width: auto; +} + +/* Roughly equivalent to Vim's CursorIM group. */ +.cm-s-abbott .CodeMirror-secondarycursor { + border-color: #00ff7f /* seafoam_green */; +} + +/* Roughly equivalent to Vim's Visual group. */ +.cm-s-abbott .CodeMirror-selected, +.cm-s-abbott.CodeMirror-focused .CodeMirror-selected { + background: #273900 /* dark_olive */; +} +.cm-s-abbott .CodeMirror-line::selection, +.cm-s-abbott .CodeMirror-line > span::selection, +.cm-s-abbott .CodeMirror-line > span > span::selection { + background: #273900 /* dark_olive */; +} +.cm-s-abbott .CodeMirror-line::-moz-selection, +.cm-s-abbott .CodeMirror-line > span::-moz-selection, +.cm-s-abbott .CodeMirror-line > span > span::-moz-selection { + background: #273900 /* dark_olive */; +} + +/* Roughly equivalent to Vim's SpecialKey group. */ +.cm-s-abbott .cm-tab { color: #00ff7f /* seafoam_green */; } + +/* Equivalent to Vim's Search group. */ +.cm-s-abbott .cm-searching { + background: #fef3b4 /* vanilla_cream */ !important; + color: #231c14 /* bistre */ !important; +} + +/* Style syntax highlighting modes: */ + +/* Equivalent to Vim's Comment group. */ +.cm-s-abbott span.cm-comment { + color: #fbb32f /* marigold */; + font-style: italic; +} + +/* Equivalent to Vim's String group. */ +.cm-s-abbott span.cm-string, +.cm-s-abbott span.cm-string-2 { + color: #e6a2f3 /* lavender */; +} + +/* Equivalent to Vim's Constant group. */ +.cm-s-abbott span.cm-number, +.cm-s-abbott span.cm-string.cm-url { color: #f63f05 /* cinnabar */; } + +/* Roughly equivalent to Vim's SpecialKey group. */ +.cm-s-abbott span.cm-invalidchar { color: #00ff7f /* seafoam_green */; } + +/* Equivalent to Vim's Special group. */ +.cm-s-abbott span.cm-atom { color: #fef3b4 /* vanilla_cream */; } + +/* Equivalent to Vim's Delimiter group. */ +.cm-s-abbott span.cm-bracket, +.cm-s-abbott span.cm-punctuation { + color: #fef3b4 /* vanilla_cream */; +} + +/* Equivalent Vim's Operator group. */ +.cm-s-abbott span.cm-operator { font-weight: bold; } + +/* Roughly equivalent to Vim's Identifier group. */ +.cm-s-abbott span.cm-def, +.cm-s-abbott span.cm-variable, +.cm-s-abbott span.cm-variable-2, +.cm-s-abbott span.cm-variable-3 { + color: #8ccdf0 /* periwinkle_blue */; +} + +/* Roughly equivalent to Vim's Function group. */ +.cm-s-abbott span.cm-builtin, +.cm-s-abbott span.cm-property, +.cm-s-abbott span.cm-qualifier { + color: #3f91f1 /* cornflower_blue */; +} + +/* Equivalent to Vim's Type group. */ +.cm-s-abbott span.cm-type { color: #24a507 /* forest_green */; } + +/* Equivalent to Vim's Keyword group. */ +.cm-s-abbott span.cm-keyword { + color: #d80450 /* crimson */; + font-weight: bold; +} + +/* Equivalent to Vim's PreProc group. */ +.cm-s-abbott span.cm-meta { color: #ec6c99 /* french_pink */; } + +/* Equivalent to Vim's htmlTagName group (linked to Statement). */ +.cm-s-abbott span.cm-tag { + color: #d80450 /* crimson */; + font-weight: bold; +} + +/* Equivalent to Vim's htmlArg group (linked to Type). */ +.cm-s-abbott span.cm-attribute { color: #24a507 /* forest_green */; } + +/* Equivalent to Vim's htmlH1, markdownH1, etc. groups (linked to Title). */ +.cm-s-abbott span.cm-header { + color: #d80450 /* crimson */; + font-weight: bold; +} + +/* Equivalent to Vim's markdownRule group (linked to PreProc). */ +.cm-s-abbott span.cm-hr { color: #ec6c99 /* french_pink */; } + +/* Roughly equivalent to Vim's Underlined group. */ +.cm-s-abbott span.cm-link { color: #e6a2f3 /* lavender */; } + +/* Equivalent to Vim's diffRemoved group. */ +.cm-s-abbott span.cm-negative { + background: #d80450 /* crimson */; + color: #231c14 /* bistre */; +} + +/* Equivalent to Vim's diffAdded group. */ +.cm-s-abbott span.cm-positive { + background: #a0ea00 /* chartreuse */; + color: #231c14 /* bistre */; + font-weight: bold; +} + +/* Equivalent to Vim's Error group. */ +.cm-s-abbott span.cm-error { + background: #d80450 /* crimson */; + color: #231c14 /* bistre */; +} + +/* Style addons: */ + +/* Equivalent to Vim's MatchParen group. */ +.cm-s-abbott span.CodeMirror-matchingbracket { + background: #745d42 /* cocoa */ !important; + color: #231c14 /* bistre */ !important; + font-weight: bold; +} + +/* + * Roughly equivalent to Vim's Error group. (Vim doesn't seem to have a direct + * equivalent in its own matchparen plugin, but many syntax highlighting plugins + * mark mismatched brackets as Error.) + */ +.cm-s-abbott span.CodeMirror-nonmatchingbracket { + background: #d80450 /* crimson */ !important; + color: #231c14 /* bistre */ !important; +} + +.cm-s-abbott .CodeMirror-matchingtag, +.cm-s-abbott .cm-matchhighlight { + outline: 1px solid #39a78d /* zomp */; +} + +/* Equivalent to Vim's CursorLine group. */ +.cm-s-abbott .CodeMirror-activeline-background, +.cm-s-abbott .CodeMirror-activeline-gutter { + background: #3c3022 /* chocolate */; +} + +/* Equivalent to Vim's CursorLineNr group. */ +.cm-s-abbott .CodeMirror-activeline-gutter .CodeMirror-linenumber { + color: #d8ff84 /* pastel_chartreuse */; + font-weight: bold; +} + +/* Roughly equivalent to Vim's Folded group. */ +.cm-s-abbott .CodeMirror-foldmarker { + color: #f63f05 /* cinnabar */; + text-shadow: none; +} diff --git a/src/main/resources/static/assets/js/vendor/safety/weather/black/0@1x.png b/src/main/resources/static/assets/js/vendor/safety/weather/black/0@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4faa9c5bb17c45f9e49b413e7984ae62d9c76ffb GIT binary patch literal 2704 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 KMNUMnLSTaN|3B;i literal 0 HcmV?d00001 diff --git a/src/main/resources/static/assets/js/vendor/safety/weather/black/0@2x.png b/src/main/resources/static/assets/js/vendor/safety/weather/black/0@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aa994ea55767d69edd9ff60ac8dd5b26f8fafb29 GIT binary patch literal 7714 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 Q?f?J)07*qoM6N<$g83_?@c;k- literal 0 HcmV?d00001 diff --git a/src/main/resources/static/assets/js/vendor/safety/weather/black/1@2x.png b/src/main/resources/static/assets/js/vendor/safety/weather/black/1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf5548b0a8bcadb7706ed5bb323727f96a6063e GIT binary patch literal 6326 zcmV;n7)j@eP)Py2a7jc#RCodHT?>#L)phOeU9E&1LyG@L$oe3Ii6N2zV<2FG3xeY$1QFyy2FjHf z%H`Njr79t*U^{UL`BXtUg&jMoRLY6@noxXG1oM*-!Nx`q2oVUh=)0hwl?WsxvD)dE zd+vRw=gsRL^^8_4!47ZKeQ)32yYJlhUiZw-uF~XP)c$YdQ?qxCqzlr-UF=dfB~7wt zU0?DChaZ0Cf4z&++$X7|`=poMbh2sFlB1H5cdkxyx6q~OhZEfc`@+PvYZGa4hwSEMMH$a zC-QP1(JCm_63E>}UU8w4%q{Mff^eK;UYNJu`spD%x9+;3(a1li3xmr78IT9nOJi(9 z^RhJAe0YAq9d^|_=P@nJhILO~xnt|_jZy&Hike%KM_9Kh;cY9cf;~;$Kcq*Wy1hy_ zo@HZFm<=1AJ|Y<&{(jPM7wChP$K4i4b3H)JMFWtX7^m_?28t&9aMC~V+j`Msr@da7 z^+St4nT`zK;?m?u12;gFRr0{c8yB9EtvKc*`dg1U{A25b2tC7QduyZuXu4tT;%{VW z`mj7{9SMMef0KH!tr~j44GdIQk2sLRuP<{wxmo}Yu~DG*^yJ*iNgH2Z`+dRk(r9z? zT?EzWw39Shb>x&!Oz+fuyxEO6`r-y7DT64e5@H73qk1z^~qRT8@O+wVJYvc@N6Bi+ z;n$08k8b{W9B%B)A4gFXQk;k_DMX$J4S531l>-{`V*a1KTomBb^;Wid^V0|J+P?Eq zndm1J%foL?nD1z$cGdpO`wJ)9!+)f})`~;Z{`Iy0Ciu zeFpZlZR-!C9-T%jJ1LfFzit0gwU9B7ufHO+s17x9E59s+Vco!pLg*i~utaJ3n?K-Mw_{5-C;* zi{&W`Mp^|b+|ax`IORd@Ku7rpVAJcZvM_GtqDhUB{04v=9=M|`@VLdWSf1Lg1os@X zQ9JM7tb`S`D1;UYGKr@uoYD{WdQmX`%6rTkY5sZnKGzgQUr|FP1T&rT%{PcD3{Lp4 z9yXw8xF@MhV<4L7y{t-avgG~32oR+ec4N8S^F2APjn6Yxu{0hRh1fDPQg`Re>0k5t;1}^l8!c)6BK{l{y=tt9` z?&a1}m~|^3{)8Ys%j0Q)1AG4hP~h3ZMG^9y>ce7%d}Dazc*f{e+EN(#qRa0BAWUAJ z%%0~8P>}r02Ook7zS{%E)c%Bqd?Ru17X|>M{qJj!9F#lv+XN^C-7Lz5pe-m4G*acY zx+tw4Y4ybTcxzp7LZ z8PO&0^|~y5q;xs|2v*9oXnfC$h$1s@-POl>;F&KE!n!2*&Z zz6DJ3#2vbE<)V{24Lcs~v@p&snULo0{FWIUg6K!il>@50fJv$agq;VNAd{+GbfhdO zsdfQ9n$U*Zb)H@H=2;8#`fHodmixLZWbxfhv!fkntrteF@F;{HzVjADcOz!0u)& zek;pQQ@{izQr*dPQuIZ%?E{S;)852Qd-XSIMZv9!`d@=w>kE$u<)JQ+b`D z^A_M>&MII{9x^*jhO;)c7p_pl5gIQb?=MwOnHhRp_((&?q?$x>1@bdtZ=JKD6^|Sz z&$z#6(-eabaUc(h1Hh4@fQC4z@xa!DE0%Gi3eOY_ET zMM;oSP(3BsAq6}k@Zp0Scz{i+z-ugZVkMfi0&B)@_9^C#PwVRfy$wmo+@wR!Yzy$@`XXfFosn3^fv|{`khEUt}n5b9ou$N5EsC#;3^JH#NSqK_-q$o5f4g?=LkH7!yi<7} zoa&o0%1IHy?2IeNGra`!O+F2{>hnO?A zjt5f%EWm9!5EwEx^0dR=1RgZxsgEh*K&H)IwdSPhFNc0Op_J>6hJgF zAznZuP}}T>5Cy~mB`FO_VMiVm2W{yO8}MwAy=41UDbDXvJ)Wo(CfQ0HP#nX?7f41L zZdJsnt-a!l6CAy-r;I}i5MhSq&Gpj<<^3lSl7*Kk=WXfb6IzJJl$R~|TqviB;@@+6hNXY2>AzzNSO9#f1`ZTxVt zN1-+MD&y&gxN2|laYkQu)#M@5gSOt^F2!Ed%EMQKRNHIB+?|~_^5@qsyYE6=zgJt9 zW?AQdXj(y$p?X{lF_i$hh=nHZ1^6?7Z>xC!>syvE`e;xKu zJ5v45j`)IxJoNIp8bn{-Iz0T!+NBRHWU=2X6mvL{nKdMXIR+pVGaL%ecD2H#4qqwM z0G_f6bBJ0R>VVk~TGgoIN{MY^|Jc5)mwZL2Pj+egggku9Eso>v&ue_NwEE>Y zFOWX~cD5w?R-W{KZ~8BNdOZtsiwxkib%jwxiALpUqDs~TWGEIQ23D7ol-?*hB(G_E zIb|q%PzY#C69IzkNqKC$e(Fbm>xYQAzuKl{_kD0jBe|;K-0w@)`k}1mo273_lJj(g ztN!QS&r4zcsSHG%HbJNcrVL!{kEOyGu@2YNbs9g8SLff-=YOYJ-@m$~|2E9f7R?x5 ztXg*e^rSKJMfpkj)iQIU`ycbq7Apd4m)>{WNZu$tHperrZid(DWx#||$Id)7i}DPQ z;}y;bf)@G5diGVAi#^9=0W?HImfFMeM(VDCbmC)2pZMw3)a@<0dg;9<%F388?}RUw zkA>&@;g<3*a&zhS!e-TrcMr+?fMd8FASv>?M?+8=X&{5XuGRSSegKMA>OYEKvX@Hn zzGngC%swOEs!PO^KTo_uz^qQC?JbZ@k{zZm$q49@*FF8HcpaKGK)d z^;-q=jqKS?K{-}Xv~obJD&v_|^Bl*A9c3C%0#b%+;nOr*HT~rI)A3oEHd#he8h0DE z4>blw6-Yy#Htl!9mOpe!e;_iQ25(LRi!v9+6hH-7oJq9Ok&*gqo4mcmRsY5vPH zLm$Drd3{GO0Fx5jkWy#X7@pZHYT$LY8|96Slm#M1GG=d-cBHf;g?(M4EojKM^TRmM zI3DS#ae@n_isGfuo@HF9Vvj0&>kuh}`S!MAVJfnxBmGz#A0keY34Jd?r4 z{F)SYT53;2-r|Za{%J?*j?OKVaiuf+rhgsPaERZwQ3pEu@yjnNeT!Y$6ycSpD_^+l zX-WEYbf8!-Cqy;mG11^@b=v3zI zk%-37l)zhZnwJl!yhXOYw2NlHyX(KmrA>Ze7s`trsrkwke0@UNm++wMm(=XWZv3t< z`>KaQ2})LKl1#etg@1caQkHkGqNWvj(5lv)0H%%Y>-2HV*gn?R#0Tbl(1U9!Tr8-G zS6~6VsXuq|{=r};=TH^1;y`{*bxWl($Ghp)|-kK&+c$QB&4CU4p? z7=M~>9Y~Tdqwl!2T`@46aneN_s6UC zT9r;^l1RGZ`5!za`CZVQPjmwk;0a*cFl`j{_3;3V7S6|u)a4+tL6lE)S)}T_E61yo z)bv;9-l9*Ro;hd1Su#=WBaRkb#T(2>j~VVZ3M_EQyUflG~`uTK5;dGhJ0a(iGv0j@+R&0ELgtT-nW#zPZ+lB)D4q7NCQtO#Pcah!@9451~ctRoTAl ze9&po_H_L6^Oj3z%w2F-5URu$AeS_eVA|}@ERru?{w0#(H!lGwcu;~%8oBEwb+iwG z1CK(Gj%G$y^{wG8x=s))3MWgmoX8D1=;8CxF>~Cce%#%TUnbLc>WYF~i52+TCJAP* zJ$J|LlJo*KM)n*@m4LIo%?jXZ14WZDx7=b3o}h!8c!jf%M^B4hil%*rr*7@FdUVo2 z5g<{%V*2>Zxw9@z(^Gea{Z{cEuNXLEPnY8D5uoYkm;r3toARO~ty%%< z3U41K9EZnNu}0q=wJ0EFI)Zb?lP@}C$AKMf)K@ws)&60JMn8;OWsv)^ddhJZ)Fn&h zZTtLAih?ds@2(rZ6SZaA_9rBn;zPHpAV?P-_~8_MyH2~cuj;ca8Ixl|aROZhD;qPM zps>C#8~FH)x%QEM*|IF@YQ@m~uoEuY+BeaCN@l}g6LxBwl;Z_e3}kkZawd|(E4B}1 z;Ja;%4I1)A9L^ZfkoN|mkMWGt#-RvojEy_pFp%|qvYVp7n^;64JG)%D^v)wkw(t56 z*>7gU1Ic6QazI)Hk+TyFhcejHR+qb6m;A*TI|a8j@}N~Mj#oH)hq(VZ26JnhuQ)J< z`i6TibkYxVfL^|myRI)u&zpYg!ewgT#fdp|;nHfl9N(sYbIW~_)Vz3LMHPH6apKJ~ znL#wp7}wU0gxi=@#BP|{)V#t3}pslPy`wvwHE)ppVm16LkIH_78Mk5K+y;~XjS8k1VyW}FU5%ZFLJSPHetHRFU&`BX{1T^7ss7;*>y4|Ml7Y! zsh}ExPQBaMt$FVDqj!$v^8F}xPG}MiB$Sh{13LDP?d$aHr%71_!?E?MR3~wZD_cZb znI(OfANR4#eq2aK$&5*1kdt$F_6SRh=F= zge|rYbya-apV_20X9p)=nl3=|!Z*`X>p%0V>#?1FpA`lP z;P(w*T{5&#{)2}TUa(d^#z+@Tk`Pn0~=K)6RDO=o`BhFnR%V~imb1-XRagknA5`@Jws(k;Dn;MHyK{F?kA`*Qgq_^(Pqexay| zUooW#FU~9-;*f7QD3;iVYq6Ii<5^;f{5h(BPbZ|e9e2tV@&WDsYwgCc|1y%EaW5MD z*_zYxBs*8&I#>R_;F(gS$)&;wl9XA(G4#Px&XGugsRA>d&nm3nPT=vq>SG!QCU^dQXsONog96y7uR=sEgoeYFPXJV`R(f7 zqEWL5!rK7Pc9Ro?R3Ye{8eN*qjxFizx2a4-a7qMVQ3-ZVE~IE?_ocdc|B};f3n!T9WS)38;RV zxo}|i--qcJ2J@4oJK;=QM@at7nnUMml*|6q~ z8ISs?-}h8?HxtN>D04a@fE~70-}^KOv-w}e*gg@AU2X5!Eq#DPB}bcKgQqYuSvD|+ zg|-N=<9xq{$}mOJbFek$qQeiGCS+&WKL@MBSo?>#cGTI-ogSHUGj_8D8q0%pX4o)5 zuji~_vbub13vgjp-q~G)p`Fay#^s*Y5o@QZiSb!30Bs9!Rp|{pD+Lv8nQ>|b*d=jV zwUtu7j#;@GsZ{oVce|cXi7Roo+)w0kqh|u{q>+!R>;aS%hKwsQ z4%q{=1vcQGCa_}^(!8hmz}7sL+MY~a5w%SA=29Z!xfi$4iRpCmGm#xF0FRls$zUx6 zcb~WXU`Hp`lCJ{D9>9i{eHB1<{}*%C#SJg9cdbCrHr(@e9-xccHvx{>3ZQ=;qme)J z0az_FYQ50{*jv&+?@KF?)dfWCrk>#5yHy%~7A+2cD`?UAgve@5$U!qQA_y+H>!CY> z%`%3-nkMA#dF|Y#2zq}R8KFzti5m3Ly4M-4i3mBhn2-adA6~^ga@T`Ck|ioOK(0su ze87kZBO`-s36@QUxabTykMsfF3@5LHd=$c_%OEn+*U<^14aPx-rb$FWRCodHT}_J|MHsH?o`CMoY%m70h84to%m&dMLOhrdF$Y1BC`bq*5=Bq` z0VO|RQ4i|LW1@&i2!bwRz(a(Pcu4TDiex8QgNKl8AW^b2y9Rb<%IB$>p7hN0d~{Du z_sn(`4Ba)=RqtER(^XxcZ%HwtPA%qhYhop@LMaKr`A;QP^BUcOQ~LfR(q8KtOlHv z&eZ<^6F7pRc`_60|4BOnpT*2Afy6H zE-FWUoy$y~kvp#63lrbuv#}GP@EWdNee9*GQpb^zBk(_DGDBh0l2YDBoOwseuO@ci zItxEbOKdJS0+c%Ht}dQGhTNS%J^fT{ISe5P-;O^4$lT=Yq0>^Hsf36c`O%>hK;Vmo z^KT2KK7^J#BWoIO#3do+N4fl=FNaOUPzhMOvi-S=EPsKzeQ&(@nURKX#e%Cc?@#Qx z`Ky@}+fx||0V{>=TZO88jK;@1rdl%Xs>kyWTTp0>of6XhU@Cv}j%lgJ30PU&_9|K! zC(%0JVp`c`)0216QhRr5_Vy1Z^>9ojrqsSoD_6FCiudLFjR!taQjaok%p>z^3O6Gq z;J+)=PpnII8VWvZO0khnN6Jf^lsxwEp5?y>)pKA1RtwYn(Wd_i?fI>PDl<;;(Oo|wQe3<(tfKAP^RF~8E!R>~4YZzNc8724k z+eGcF6~vAQ+xZs!R=C^!#HfZfq7Y=^@O z)`dnu%GY|09d#u@k7`ycg^fA36B^D45io$~xU=0xQM*?`7*e+2N5H)ig#&oRu(Rt} z0_u|~7i?#%GkE=ku#<*Kor9ewbplHOrxEKjSse-LN4R~4V@5*Ousj;L;v?jQt5V5x^B|qq=Cyuk^Uy6I){J*T0E?`f@>kxV<-wKr6u7bEZqEuP=2OWmM-r7*LNnzp`o~UHqsV&?jqDugGrdaUfdlQH?F{eaL0JjCj zC*DdT0v_g?0Bj1e1jPJa)c3&&$=!%0@$Wqpi$;?)W?fP#j>FVh@yKRJZw0mB$Nm!V zg(vn7_uQ)y@L@TOF&X=1ABf0ECC4-K z38-2El0hHspDGD(EdhxU;1(Qh)D+WW3F(kpv7C}5_D_TdhNG{_G#9j|Y(4uT| zdZbgbhq)$z=6ur$Lvp$HFxLcVTgo)&Yh5e|aA_hjr!Y-`He?N3%CShdLNE<4E_%kp zH37tghO8|%@gU&Gx`{lIaXYH4x$5ANoB@UOiyg#gXtXJ?n6Mm5wJd1xvD3;-i@ zrUcq_nh_wje()LEL;(Nb;RU!X@!mS42rSjHZA!F_0DWKq4lihW%6bMz0GI|H2GK?U zCDl%j5O#oWaM*PU==m-X)1c&>S!)6UEWO6E<<2iZ0s5Bm%^+ zleH{{2UbB0&<@9TV9xli=e5_c2=LSmV%XVrB|uyI!?7KmquY?K2=K_09_P+8#Dv&{IXi&(gd%_uctV79<#Bc}=(mnlG>$LFzgD0{kNM_=n@>Q6-(+2u)R;2joQ`MPm3YVd7@I1o+9YN1FT52);L7 z0{mh)5s}S5zYnG1J^VjT6a7onnYwqIO!4P6>itklfL|#dUO@Z#=suqq)pbW)w*x@t zxOyRI0^Oe?-Uo_!fw<3NdX?xXZ)!c_}^IWkuvHR9p_+uSniJbtC2wrKi zorbKnEoCVV(4wqAd|3DRuvWN4oU4@eqU0Ud?+r^^A%5Cv`tE1hfJ`gRtaJdav?*zq$xKPx)0ZBwbRA>d&SzTycMHD_~c8yIfwupte)g-$c8(*X;hT8lp1z&7UwMB$hiufpk zFDhC=DfolZmxB1Hf)PYiOi@7}f^IfzX$$>%s_ow0O;Waz79qvjCfS|wn+)9YTHW5}2NzjOG{QajEjpYS79=Zk9?U%xa^`;^*sZ6@OPr zItth=mby&IaCE4f8S~JIA&D$MQL2 z<);y{G6Lyzdc&Pt|NV@>t-5TM0rJJ=dSh#41Sog)JwVvy1_lc`>qg&8-4z5fnZ!;k zo7dfUAm-fLcwNGb?Ua7P&z13TE|G zEykvejvc*oo8OHr#Z>ZCk5aUy-cE6`DIBru_2bqaL7aQit&x>J2H~KU+;5q{;l0n3 zPLvu-r(;ie;>(2-K}>Bf^ed{W9DPzz!G}hHE7?{L{q9O#nRwnqe^p%xTx`80fTOiK zF*B3cR<&o36a+S~O&<9wxIr*Kkeknsfkdm9e(ikeC3M}cu~s?umdA4Qxi4z9cVj2; zs&mbafm2<~#0%+U>>IylLdSqF1T;}i0?TQ_&zQh5!ao8_Bnr#vj9=L)NUScEKe0Jo zD9-eBU}HYMO<*NQkkT_x_ z_y-cfv2eIA?I2r;mt~lHasHlV8y+bw?#Z>7Vf`H>Lm7qH@t!5&PxH9q8@V@<9b@+04Fv4 zpi?4SuHq&*TDVd&i<8UZ^-%+Oyd{V)3j{i%gK=b|Ki3EJC6t(x@knG~s(7haBJkFF zA|Ob7sPPsFfK3du@XLB2f#vgKXV<{^3Ih5gDCli8E=A6oWx@-A7EydXEY5(&`%q-~ zA}M}<&0+^I7V3lc_5s7hSl9>54_zV`bH<2&hw?zFd~MYEr*PNc{?b*lVg@uwot|1Z z-FpO;rahTk4i@v}Eu!_sQt(=@jDQxlwe7e?LX3dK-}<}RKkU|796d(vi}seif?E>M zfOU=qiN~8h6Bv0F5dD$J;9ph)Sr!AUm1buz+;jWin_nR&o?G4K`#1h|wPEANr$eFM z8+LtFC7=y;U{4tn#}x59sN2q(T_-ijb67UVDfr;Aa5#LYlD#7Wrh^$H@#vz;eT1{s zUQ_0EsZXbTSK#H&&i->we7hoGI@HhcoR=Ttl(^fJ)ms9{IVAZLoza1>k!f;H{nbRk zbdH-*zoPtp%*Y7HJYvcnmrQfmIDeyn_*5Td9NU#B)PxXZ)bQE4Vg0z0$571puvG zjKsq0RgG<9L^l;urc%c{+S-EALixOWzs4!yqeI~hu}J7XM(kroc`7O9n0!WMvO1sb z6^spq)0dVZt;L_yy#15F9+fC_)^9M|o^H?EU z0Ei8Tw|Q%6rU>?y9dzAHvnT-K!=a66`48Jwp<3b#4gkZ?0kK&Brzpk#3gy?^0RUn@XZ)SP z_uE0+%`^@5fRT}b4pP}ZyOb{#1V8Gqn-yi3Yy|;;yIG?qwWpw=#dZlH>2gM=?WFHk z+6CRvL?m<%TIUURR{%3$=j`U;M*4YsKzwN6MkxQs&Ir!WI>X0ZT;>G;rbodf%EOo_ zSDX=aLpqZsp#|IS5aVPy7hc z%_WXjn-(Sjm-PVI`Z>{^jw&C_sy$#vmpxdccVj;j3VJ z`pO~~(aN&$Ei=XypS)JT_8?tWC*0}ayTeJ z8h~hYpbZuOh=Y7{vqH!_9uHri`(|aPrU4M7t#?cHFyFk%EwVTvM;ZW4V{4sYW{3x| z%?rs4r2*iaN_?NwkZO%(!W(vp$iU}}W%hn9F%$Xpxv44$gMZsi^4KYhz#1k-q1c}2+0opbG0`8rJQyOooQ9zZ@fR!7c7 zt5fO@H_B$EOz?upl|4XK5+K}+*J8^5gl?tAvuFuSML9e5m?c1=OHHE(5vFb^l+Ua8 z1##Z!X5lea>7P!fe(7czOOZ|X09ON$t{kzxcx2!!rBu|dWd)vs-46h?r;++tJbuXU zRz;eXONJt*%@%gF93rJ!D!K1;WYE@^gdMFDmzc@rerjG8Zl!&SHg1plMW}t!cZ^07TXDgv6$T7fk07x7p2&9g_?Da7L zZYafNg*D)}JY~bWt_++30ZpPOpV6 zgdmUifVn{Qr6yB{y%fOX@4a{U%8TbupTnRg2jq%5u<^$}rB2!2+S(IwQ>D`TDov?M zdwWkp%9UQI9UJcdCqlm;caxx2$Rc-NLA%-`YL%b+d^i5b3YunUNVAwqYPZAT*@pS< zYb6cHcA(+P#T(K9L?fXc2)6vd3~?`%!76+NRoPxFh5bWYN6*W+R-KUho#BBGOft1k zBeoU%mS*#W2edN{Kq4CYlB&`R*%>PGn)7!#@jtQ}dfMj;3|bAw@#FnhCnv-PP181F zSK!a$iKT9SJ@TC}R}kpVsOe`x?@=IC%J1RE7FQn14FoP>csf_ai-P|g^% zBwOj2mL4x@F(%O$!;a&}n~{Dk8m;LWMa%{Kes+~4(0CGrs{lw_O_a9Ra^R4w2h-=7 zR;SHgL0cuZL<~(&&$^y9_2L4s~Jnv09wCv z0A>M@)Hqk3D2-~hv{4OkrRE`-cMbq;?W>>1Sm3HBN23+;RzCiU-@p3p%K%9G#GL=i zTb1#iw2H!Z>Qc|Tp?bp12HY|Dvdi?e>e)gKaP}{MNANl{_Ouf<#{@|>oOdOOiQibr zvPvpb10?R&l`oSo13)I$){EaFQ$qf)9@c39OKTrvd2lale1f!R*rW0w6Qi@Y-!SC9?}vuZz=O63J$MMw7#UAXn>3D%a>n&GFJ(Jlm9@pkH;gS{cuaakUwYjZY~XA z=4-dVbIl#O?#Z;gJwRrVE>nGD;}#jame=$-c%)Hets{69v@1M-42txo!0+_|`M}O$eN342J*8rbZIR9!(OZTXrGT+%S0FnT< zm;W6GWqduOdgRjp7xcZhjzBnH9{payL0He2d5#W+5K6WF6DFBFy!u~GGvXP_@V9kL z0U#&u@p|}EIDg%%in2p)&crTXXHOp-7fc}=JBl(vI!VdE*Adu^F~PRandrQ{a>kn# zKlOJ7dW%uMtedGGkf{{;MJ2mF>XXUGt^Y46ocH=W1CN@Kv19-w)7WqbHjffTIM zZ7Gw)m;Y{qHF(Y}bxQz{%txZ(Al|OqgO@cvXjT|cmBUM2Twyoo3a}MZ56b|MOfP-J zd3<-Jhb?4WU#S9T}Z4wxCPGE0|25;PxI0l zE&U9p&wtX^8F&Q$EsurS4uDiP#)ihJixYR^HGu6Hq&@MS04U}n3I6D!hKBp+i{)F< zkQ@O(7xdCAFYj!@Tdj8ih;}{QU1xqCv7CqM8ybIYr{eWGI|_i#6y`|5XV5pGM|=|= z6L#&*w}?S6W&8ObFforcEvfxeb9483+qum!C<_3Yl}jW-OSEae2|Z#n_N`bAKnyKz z$fRNRKNNl#y>Y+7#gna_J^waKr<8JK2Ov}UQ>R{U8at~7HPY4rjCB~iSE09TWn&FQ))pzd~=L9 z!Gz&+E7SzV)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ--$_J4RCwB?l0Qh?U>Jv=3mDW`xPoRlZg47s^hk#c>Tuv92pw){9g3YCdL5hu zPl^tKlA{iS!zGjsQlXPxhk_ub9SW5~g#>Fr4ipy;F_I1%TS(#S(A+iGdab2D_=ey2 zzVGw>dEXSV48y1Z#n@V})Z4_~`uO11LoSgJ;-@hTLj*w}f*=rgmR<_oc7z)Vq1%qo zZKu)>ASE|^-{;BuBM!UznV-=3a02ra8bGlfqy_NQ3wd+&joE_6egI#-!hQg=h4zpp z;M296ygNxTJ+86mLvIJXc(C!M=TaJWLajhppjQ$b;~2$BXMvVGB=iMv=}M6I9o9{cNofcv$kC$ufoz@ zz2&1CkhSd^L)mW3%^jkPvz10%8Ca;U>$W3is*d=RW~z?RZAT0&RM!C|IY^3Wnk~te zWi?k)rfCX5`E`)ObUMvd6z7G_E(jr7XZi|C)=2!PQos#>QmOPvQIz|CD+t5zdAVGE n9N(mtO2jh%aB#ixlr9WEN&f;$&YfZ*=#esOnqhu{tYf=h6BcW3zCn>F*JyMA=9 zI$Hbes#D?0ic%`eCMGW@PGaKWg^*6N8kDgs7U^@~Jn1m)iW@N18WyvpNUqmNcrPI3Y#Ri>q7dfcjA0`CQJQPRv z93Ju@g2iM|VQG_AnX(C!YE<|otj>Y%t~3wFd|9$=oJj#ew<0i%PNM0mtqXpZtV?GLkh`_pJ{z_ z%S*3y3oPMI!)ik|n^y83JT7B+t-_z>NO8=nf2}0%w>JWyz9~+$^BAK}qdy})aRN5z zuO_<0-qB+0!4d6A6NMYS%lL}2%@*5Ie#~dtpp8%(Q-{Ih+vx<->Pb?+R+#h3JRk6u z!*pT9&Pz%Ivw2=d7+7-TAxNxPD=R4(x-;QLRNjkGXk%`Q_ej=xw9xUnU`!?_I4H=f zLl9I;*|!23DN!jq+=(}g4&ivnx$fJ#4JVeDC*QhJ_;W62Teq>L-fd>DgM#f^fi>m8 zMS>X;9skRUnF&f)l|=)KgLm^~(^xOE-(*|E^si5%S1z(&8=lMiJC)MQ?T0&H8*Uvg zIAfujn+Gq^A^27N3iqbjlqqIPqAC@b&f7%`#|R3t{JAUrwZ`A)3Od)YMt;ft^=7`X z#-YFS;1KuvK2GU$)Q!+MQ8o$fsTH`+tJl7DdlW0-^)X8E++T?x{?nI^Q1L5(39zLJ z+a189uG>4bOl9BlyA7A7midT+kqjd}QaJGUPEA8!!QCH?t!MozI z%5?x4NR`70iEVeV-cD*eL>7SsR+3g(XSM5T(q*0GaeM`7wVY6nXMxWG1%3*`=d8R# zn-?J@>$@SHx(JMuyw;*sH~gCQcl@;;?9hF-6LK5y&((C4-;;320+3uM$8y=<7#GL2 zdf;_dCXW8kle*K^l|Aw~sxtw-5;pgWzS@BHsMOjEd$UW}A(p30@(2tT!eAy@X$cd& zWIWDtSp@2w;LX~kl(1W}-gH_TN$G|2UDF8~IJ&jREkV&!v}!jHFouB~ z5U;cFhR`{NApCj}gWB7=B>4>5sDHI3#>7-s96H2HK~-3Qt8J@PR#WNWYTe1;fGs&Z z%k>HLcjkt;PfFPn+9dki) zk*LTyV!c|NW`JA&a*|m%VN5F<>Wa$j)M|?pOG$TuhI+fss7Q?k4OGZTiYUjZHTAL5 zCbKrRQ?_nnCO;-iU@4sf*tvs^gLXy}>%Y@SV@B807Zcn=dKZ-NXD+syb2#+AG3WqANRB2wT-5SW#(fu-pa@+HQIx}om z2d3NDL+?ffJQ4ijMoNoj^f6>;{uf5mqLeing1qf&vjWLzFsvhk*4iOOsWb;1UcA6ggXwBlossE8uTPGR9bt43z#u2;u^m@|e2!;PIf@iz*5}$8CRAoS=O8AqWc>rtz@UMsOUOH| z)g10Vhdy}2yB5!<>69Z?*!xRZ!f4)hz?ENKs$11iLUE^Rt=qEoB(E3xOt$zTB#teu zj<#VOn!Fp7pCkY^6uNw4m)sPHU+rV{)w&iML;|o{NyLN-&bfvjXa}Zq zTe%Sw{!(7}hq32Sr;)fdkOX;o_hPdIC5ZsTG1)W-lydr?^^1XPgWhcO4om~3SfmE= zP$l$eQ1{=E?;=`B9>lqC{qo{!D|R8rZc-XFS*&dqt&|8^kvyW^b%rirV;@O{jpxUs zG>7iwbTD~H2{@8f1@p zrcz5jL%5w#^PWx{^|5U0kNI(5H~(GDc3l)l??Lz=zsKyOk?Du3c9k4FFrg5gkj5g( z%3XBv%+377i@~z)lje2pmlUrcze*TLA(JSNx?zrRXmXlwB_XqHI_2X<&N#XcS#Irr zIp9jZ*+pW|1F12P#Pdl?;)8aXOx5MTf=$^FkV95A&KJVZG!7dWJEN7!wx_`Cj;RRU zK4|8#5dl(?bX)x|jd89=?7x6^2+5UdAW|d8kMBS+xYd(ys|7GEGdRP|t|&|K7OfRA zv&7io4pRerW041!|=7h57sX++!R)A(3#&)3*NAfp*!m58%q9 zF-cK%z+IJ^qShH|vON4)V?~FRJ$}zO7`^k6$E3qV-}Z4_{I?V$hn_V~5qQ)io8o zotdtN_9R%CY}JFumAUQkVp#N6WG4;G!{4u%siCybN&}oC?&K1)GFt`hZZ+l-*KVfo zv}rAFr`nwzm-uiJh9E~lQ#?rnA9a*seGiU~_3XX+D{)%rPckwKWHMum1Q zzX2V@9wJF%b=%Vd9KAhpJ@we2F-W1)M~n0Wt!_=F|DXako_J~lw{H_#qZzWWpxqb6+|Umd?5`V3c{>7{im;!5wONI&^^91uSwff=EnxG`JZ8M*Rp0UMgRUwS96(2sO;y_ip zSQ&u~t)Q2ff-73B9HUZ}G&Q#gMRP)guVu~b#;+82OS;ZRWgx@WXa5%M@0RWL>bA|+ zO1qR*b5p4E*yHbpg(I{|>A<#5tQ^E}>`hP`dVvcn~*Rs&4ihO7`s_`v_mA z@m(yv5Wl#y_3yPFj}C@)wGd*w1wt;e66!M-kAWbPL&LNb+E1EFHmt=(Nn&Q-sDs=2 z)n;2A2SLQ|qhG3^aB6`bB4upjb6Fuxo#xkCf*}HEhl*b#M~0Phh%xJ;Xwh)-W8^SD z0`~7%%>uq#Db@#9uH_$oa(QGK%Aybi*hOvk7J{;{g@G-db5e=BV}je8QgVu3%hLPw zfGmw0cgzv9f`C8956R!PM~q`0K*B52i1C(uWbs&f8e`vV@ug$^-3GiplnM{(+>m8O zuDG>pztYFhBuLFW9104y^>>zdPAcDdm~Xq7XI$OYW1CjCzW` z{JdW2g@n04`ydNePS5ils|fhTfUd4I+(2H5;`O^bp)Iu1W5jZHCG@*OYtZ>%QRT|RDifu|=3Yslr=Y3u|qN{9cUf#iYjoNBb zq};$LV@u2{*AW{;5X6(8ctf}|Z4ajzW3czE=jK92+|pCYKJ_R!vN8YWq_&);?Bj&? zlOkY|*w`=xgK>+|86^bFVSB2=V3@(qihb+w^;jOY^}x_$nNYEK{7V+%OnzeRNdR#z zi*d(+I44<0E|dl9*mWitUjvv)k8w zc~oZmwQZ9=5UNszeTjKOn|19k0bN7zPd|`A|CX&U7gQZnm-`CXuf9aJ;-vVB+PA^9 zEa41aw}Of{V=5tS8_D?@i*urkoKA~6Uhky=r0n*o2h*wQG-prU#8)vpN9yceKqLUM%C^e?>&ZANywU-szlXptd^4>~X4 z*D}!NhwfH)5kE;`kqyqU`zhVUcHYT54aLd)E_C{>U{*ex!fgobuDRYx3DW60;SQJr<(O|gsslMh2Q+$XDF~Zn-AS>(8eYvX0I;{%aS*%wzk&7>-?1f zt92*o-g&;SUcnMl7|Ev8*(Tdl-{(s6;YqGW*wTp zBZW=y3D+TXtC=g;b((A{MNM2()IagyrtGZ6XGo@I$9DE!X5k)7v7KlJ8cq&)C9w0$ zJ|G*0I5Ehz=1vYsW+SE{{CKa2&8dS2kG9xWLF>i>+1JmM)aN7fpU7_Lm3Ta5`B>kGfXAYUNjDMrq&D0cczaFWCV)Q4$k(kQWUiqRVKI3xz^adofQ^oAyP2vou8O@t`^z|1}n@pg1sUIxE74bg8uZ#B5%DV zvo|gv*;8(Pu%#A^p_dMS_>Tj2ck8=d^&cqTmG2O$L#Dm++p7Gcb6@Ds7w-KAO!7kQ zTc3h=8~9rTn<@D8-53-^jI4z-k}69kqO-Yu5Z~RFA(unE)r{zstcB6S-GxY>R=?kb z0&Jzl-r3fTNt$#D0bgtrV6F1DY15dqR4NUhVXC4olS`ia%vT!+r&M66P2ny1v99W-U^NU4Sm zoj_6D`E8TLA}ojvUU7eH!9F&{Z51V`q$q6ztCd?xmlivz&tJj}+U28vwxf*O*o2RU z9y~dwR>xD4Xs)mjY^X8pbUyrYNbMvJrR(e6{#9{ype+SA^(CKpszH~k2=Ll9&kE%L zt4<&(Ew;`tjxuX-LeG`2f1XQ*{&bl+MyJpt()3o&(&EjAsp9!OcYou?E9}w3mvI8y zN&cx?mIgsFhT7x#COK?A6PE!mCH6u{T5DJZN&~16GkFp<(1gmY_6)?<(IE?2VUYTR z;*D~i6=`G3vR_clj^uH>i-${IvlQcu{CjQxksNSxZp7|H#8;Jd;VANj^LXAKV>S;D z88k4dR13Fz7ToYKyX@nRBG9(%6TsVgxHiaOGUL+4FCYMQJc=CS(UbO3cJD!KpqiR% z1X2|h8tfrJb5gX%rQ8TUyvjZU_a=Q@1(1aU*E)zaKFEpAPlx?x7sR^qTt<%0g07A< zQrV^uPI$bKZw`d^3;u^wS+!IvQ>6FOrruGLVE*lGgeAL&fJrPrYk7QJ`vemY`j^MK zd#emxfl|P(%PmP22npQfpdO6x^T} z%U?kVm*<9KtOtTn#MAZieL=hp#1YNcWPP5?Km32`;$Deoo1 z71hc;9y@yL4j_w9i>vuAgeh+hSc=*upgBR%5gSYEr0jf%Q4~bPqgA<)2r1<7C++t_P6JNgkUgcRNAIFEf&vmc zz8mGL-2;-UFwf7e{Cr8eM8YWt@(ylFLh4S;3|jv-euj&mi%VTHCgz=vZ2lh0y?5%) z?{%4JD!W$A8rKe22)y8DiECtyi+N_;<8Q^2=`wwjrl7%!&vg5A+17938JNKMOOl$a zx1qiIadYam+(_cTS#!hAS#S82S7KXGPavQCC^r9RI{qd&jeg{|TQUh9W&9+WNt1He z|Bfu}CPHVc$EzGSyCEEA%{=t4T<7_5c^X^LP$zQmC8JIlPv|2K&Bl_A1k)MjC5u-* z56085?1)ymj-h`StbOin!pJyLtlacYMrjgy--yTccPpKJ`44cYzSe$?H!^j||GCKk~mh7a} z7DWQ=X(U+p?DAEhSD0z~&jOZN1(`d~Atbm`Jj;yw2$;oXpT3f;qOHL{(IP^wRH!&6_68fKyW@LZL z&T+FOC%={PGHn0^lxj!~PA~HPD0kU*&nG%i=R?Aq)%xQYKK#gve64hEV0(fNp%e1JBw9N76 z`1qJMcSo*g=v=M=|jfk(2a1 zAWH71iIuLi>QT-wTKb<1!vyrqRg0SxRZJ*5=@}=YC6OUvBfOfE*=5)1>9Q$n=E*xx zhpEKBOx3)yyE;H#Que}>P}eQ5*rC$E{_rf;^AaT}RZTc9^NgQ(7gc*$#}ALceO}w{ z=Kx<8VRsciLA90={8A=P6TD*%vEVqGI~6BED;g24;8I-lpmBYa+t|2%t6}*4{Fil= zrg8U)|4SY^`i51Ak>KvEtv0j*jjQ7>hni?nFNFHjOWyP^!;33L@ExR(lmAQiHmA44 zwR>|7FxORIWS#QPuNNHqZXk`mn~P++y;w3;) zmpzR&JXE&Ny7PC%{>CXhL4MVWG}E?{PDCO)R@MpJt@y?6%lBjAJ^0iCm7!>FhlON| z%iGIZxGp)iB_=BG7uwT6cGSBM{7HTce7CdlwY_(TeXC3V(JV>0psDOhQR9mIXHx>z zH@)}gFW7{#;7VwwxVTiPa3K|MyDT&PZx|Dv!j#0xoV{c841c>J;ZEQVofqXnIs}5d z49yl+Un`%UG0^FC_;dH#iA~_)-K?)=u$1APxy($xxkp01#2h@y$uW61mnRyKuzKdw z?KI`&0`(Aoa5l%e5IyCdf*SDie*ccbRE|24KS7N6$@yA&Iit~}qrl}`a!0T!h3123 z=zGsmE726dkrR~dEh#QjwN2S0$-<|eQi}H3VRMYCW`hF+Ia zkKQgtSO2HGDSKP&$?(s`oP(Xw&lXMB=k&c^JxgdWa$A^~2}g}%2`qek;+TtRE(Kqv zVUTF>Jo&@7dt9H)_yJm`f2*C^k29atfeCUG#iSXF;!471~5mlb}FYLlFLb!=h>BYh>Gz?y@2*yMcb+ z{@8a$vP58s^u=h4A?Uyz%8?Q7+8t6#jDR{4o5K0K#YZs==kWnA-hQc0|6M$N?Ua!a zh;|oiCoX7_oMdgRiY~#Z9{0xiKk@1j5==~YveDF;_ZRc+z9XN7l%Ocg#W5z*@9f@b z$o$>=G;AyOr)ObMmUpG$D$IXq@s_JhrGyy^eCp~@pD&p zZ*{2a!v)3h1VK7s_KW@ zXBqLRU__4^!@Aq*2L)F~YU9odTN!O%vgIlq!(tm&={q_2=oHe+yDI&OY775eYB%C` zi9q|YUC<(LhC`7Q&sHOSfN3w8fU(`66RpD~B*-7?K}llKQ|(psa}v1yX0|BMwvgwqW;QZH@^{^?%or+sDOBDeim1*`QGUdY;@ARs0t>i&+ETx}lSVwPDIrI$B5aGRQ$J8$3ZW5R`(R{Y!cSU+mCSXq+Z zw8w8k#fXQ8XO+i^UJeIb0OY;TpwsqVKUt)~D2JV?;9>WdZF7)pw15N4=;=8;(Vq&q zKDE$f1mXz z)c$(Oh}^0eYG2;l5bDHBuB}uIg-C71gviph&}c8-d2MA)ToW5J-HpfgsEP=HK^o!| zBjh`N&P#2q^HITYgsY0YU{*#r{K>3<5a<=4T8I=->F*TEa>{zhw!Q%JB=Jgv;G}YA zQc{B?C=F4p>t=vp!5+{Sdr*t=0x}#RUBE(;o&zM7V;r^sK`m=ulKBcJG2s0c9A6)e zdmF10-Ij?=BzZZCH0d)p?3Q+Bp0*^DZAFwOK(oJIkq(2Z1)~4n$oCb9`yU%lZwzeB z<-0AhUiG_m!=W2kNrLi6eSHVWEh)^Z5&?Pz5aLfbe`7y~MUdWw4 z4fac#wSIm3$own9Io?P4I>FuX1?Ms`Uj;7 z(X5I~5B?(C#gY_cBm-Cdg#d70xOVt#d0CXn8o`##4p5bh`afI|{%lo49rELFTN?$j|r%XqS}ra zpIY{02^cMw<}O0aVfmoi-U3X9_q)Z;-EmU+t1T@)ijhDdM7Jjt=X5xK)3n5E31hN+ z0%7;5R%Te{*kOfg&0~V-%>ft0w-m^jW_6pJ3czg@#$m<(HMgq>xu~ly;bl+=+2lvy zs4-+kUdVam&c*ep6Pt(_60>%6J*O&`$T!F!sv@W~1FTW)->&y3PY@)X(3iUfxi0m; zN8_(dJj$C!gD8b^%bx48&^rEqbQ5AcU9bMU)_auS&Bk92nY;Q8{+Wj#&=tJ=AIHeu z`K`fp@J;O6^|G`i&c9y#+qYc`=qFtq3}6)eihFHuISUA!?}buz#xw1No4q3$pb3;C zKvMtEwjjG5Kzk>Qxmg&a6rmn#EQFChipPzwK)EPr%CIE!{a8Qu4Haq;E7|ARGPMcBxMJr2jFgLqTFN{TwR~c68WeT{|b32o! zu_%!8aEl&|7F0Lv-5vORCFYY)b{62(#m_w-xBtn+qD`erpR+T}P+`Xc134$_9J#FW zx{;itRXII&aP({5Y{DCjViNk5_?Od z(A}e-kX`LQIC~GyZa32@+N&eOqY6~~+Is|+rR}=muHJgoe!MVzZ@F6K0T6^5(gu=O zVEu7Z4tIsDM}0T2YjGa2iQ~tYaoh9ls`6ev<$W(P#3!oTV!9)^KVc#`(y^Di>sLrt zuwCW(?VHC>{%pMs9`DPlnc@Bsxqhf8O7{hK5H=aHN4Wa$FdRd*P{ zEpTo+NI6QN?iFd0PiX?GM{QXAJ=^MPd+-*gJad=4GJ?!rL53HWX1)#lsL}W z;h2UmX>03_ro*}86A+x20=`RyvZLDe+4GxxWG^~z4=U`wj|>b*lmjZu%F@LD5)Ha^ zP2M%yKpD^=NfNEC+rO3-2#Jmk2fv4imSJfK_k=B0Wa_M&ELN@*kV#|+c-;Oh2fRL? z)ErW=oaBApET}sY_Ut`-(jH8F-06C8)Rl7*xFuG8JU?CagdXfCs#fggTdfKG#!Fy$!+(u9xUaOS-Sd$h6HKhXWhR| zO-;4lFZa{~E}lI$&>Uo175{t%u+=eQA5#DvTmL2zJO9+5t#`Jk$~R1=PwWR{QOl3? zZV-xMVqWZPUyzX%h4TYf(IF%$p=zi=QzcS$mTWAxJvqnZ`-_a?(J&RCbBHa03rvhG7XuD!1! zyW$z#*7(H+wUxTErlzLMR}MPJA~D25Ite*B-PkYawmcj(G$l06gF{36&CSimWQFVl zE?BiIQ0|g*Z)vabXjNrp;f4ogqx?z=9XexejtBRIymp&d+puNCag}e)i76?<;G`t3 zB#9AA%*;!^{*!B+b{6>$NL@WWLSLMcP5*&0l=A9o;M&rX)@nP?gGsDrwI1a5(=!bX z4O+Lyoh1f>qOy@V1&E!>^;0hY<<`r>c`sgk^;?i=SnC9qm?7ZY>GOk4>01s2G=xQn X3wf1`XyoU;TL_tNiW1dgpn(4aGkUu% literal 0 HcmV?d00001 diff --git a/src/main/resources/static/assets/js/vendor/zTree3/css/zTreeStyle/zTreeStyle.css b/src/main/resources/static/assets/js/vendor/zTree3/css/zTreeStyle/zTreeStyle.css new file mode 100644 index 0000000..4a1705b --- /dev/null +++ b/src/main/resources/static/assets/js/vendor/zTree3/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/assets/layuiadmin/json/说明.txt b/src/main/resources/static/assets/layuiadmin/json/说明.txt new file mode 100644 index 0000000..ff402e5 --- /dev/null +++ b/src/main/resources/static/assets/layuiadmin/json/说明.txt @@ -0,0 +1,3 @@ + +注意:这里是模拟的数据。 +实际应用时,请在模板文件(.html)中的 lay-url="" 和其它相关接口的 url 设置成你真实的接口地址 \ No newline at end of file diff --git a/src/main/resources/static/assets/layuiadmin/layui/css/modules/layim/skin/1.jpg b/src/main/resources/static/assets/layuiadmin/layui/css/modules/layim/skin/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9f99263d65a31247c966813d155b83f1ebbd1ba GIT binary patch literal 18386 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
`FtXG(OBw%kf#qS1^68svpOwv@mo8;P zDGCaXYN>-Qp0~Xx+rV_GI`^sF6U7K8(~zl=;$%)R)~gj@bP&VoMw_I4V?6f(!^$+;TlKZKNWRvr5bBw-5Huyw**;mBJ z$e)Q{?zFlcJ6(9*C`9kUZrt2~XFpTKnRkA%Zm|z`^-ujm+}lE&XVKZs-c=Znar+N+ CBC!|% literal 0 HcmV?d00001 diff --git a/src/main/resources/static/assets/layuiadmin/layui/images/face/1.gif b/src/main/resources/static/assets/layuiadmin/layui/images/face/1.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2b78b218996f70773540d0d3a8649d3c2d199a2 GIT binary patch literal 5514 zcmeI0X;f2Z8pm%|0tv}wF|q`>VUY-kh?astAQA;dB?6_fabYVUO9#+)7)Q(s2}KDA zighC_TBPE*AR-hSAO%6du#{TxXn-QNiVcVgN|Fij%v8I5oO9-!+)ww*d!7%!|9hVI z{|nx@!P_T>2oQmXY@j$fRCS-Fst#8Fl-Ji<_wt8B#oMn7hHBnZ4SIK-bRDmyJo~XxHIe<@S;}yGsph#%R&3pM=?m3xsA@drb+`R>L5S-6 zz>yk^YAiuB+oYNAZ_LF?#Sxmh?wKCnks9lU+z5q2ar+DGPfeziHw@J?S6jsf&!0cP zdJv^~b+7qw%%v2U$@--gvCCCsdk<_PHte%$Jmk_-lRDCrG;npxi~bPRgV?D7zN#&_ zCe2g*w7m0(@9fi`>xz@w^U1XtK2y!sP1)pEFP~|YwX*|ZH)_kL?|yde{AtyLq;?6r zrS5!RPuG*%o2S}r6<3x__s6NL<5VMzZyPSC`gf@xv3stwub#tO^-JmF&hTmZ_Q|h(Unn2|LQqcJljcz`CqNT-d#=P4TsI+`$f9Ch+HH6_=gXNx+LO~J;=#8M2bsj0pAsmE~jpC z+e9r#gRZAtL!FaYC?7{MaSw`>N^<&&ALWFFS+Qsk`6z^CS-}uaQG8o7OPH^h*N!^J zB?bn*FiR_2UPN3N6Xq3j4@!m%=yWd_((FOaO!^t=l&v`jJMzn0XXJy!`5gR078K1v9z+wE}3v}$MR=6 zIFTWuo=H)j?LKN}v%e&C+c=j~Y*=?dE}h{YLpr1Us*A?L@@)yGj!AMTkYgK|JtLTp zUWYwtNqJJ#_vQJ4FS9uod6LmbIk@-lL+QNel<(bl-msVKb!gj$+4V_uU<(q(x}GL@ zP{By=zzPD^M&24#*nggXldXc+BNE$8YZmMYeZm}wO7Pr>N#jQ-B(?~MM===Y3%&*=Az{%xjzo9W+X z`aYxYGyeyD21WR52Y^Qx#cLG+wFnJr4M0ddVvCPf0r+fTZ3%Hb=^BdjXJOs64!{j- z=8t&W0hH)!X479OfRW#}%z;G(K(o*q2{@ATH=C@;d9$e&vFpb-3t_8bq(m%AT5@Bi zGKi3|JlPKn^yD5RScM;yAK_GS4BiW0*wZ&o;~|Z$kQjO8WbdgJcAJw{tw!Ydd%mLV z?5ZPx4kl~B=EBi-Yvfii`n%!vDN)FMpTt8(Ew_zvl;e_+rl=Jxb0hxKtiGzC91`BW zqTyE4hbwpcrhAe4$e0eaKLebbF8(+pE&#b81IH#>A%oS!(rt_mamlx3=#H zfJ`;IZGvzuAmC!j{5rHu0AsnC&xJqi665{5&Q?zcb2^b9QInYSv`~04FS!aFd?!vT z?KXphV}y6&glQ}sz4LCID8Gpl_h}Ya87wsNA?=`Nl$ZW;|K?|kRPTx)u)uh~1X4b8 z&WAd9zsAXep^cMydzlIptr}~=83}fgrZaeGbNI#uc}5V>o9Fz&=fwToM4rGRP+`G| nqjLpT%jon>&iI|hI5DGFNqSH|Meaf1bVU=!q}mt-2YmkxGX3TC literal 0 HcmV?d00001 diff --git a/src/main/resources/static/assets/layuiadmin/modules/ztree.js b/src/main/resources/static/assets/layuiadmin/modules/ztree.js new file mode 100644 index 0000000..519020a --- /dev/null +++ b/src/main/resources/static/assets/layuiadmin/modules/ztree.js @@ -0,0 +1,3809 @@ +layui.define(function(exports) { + var $ = layui.$; + function zTree() { + 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, + autoLoad: true, + 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 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 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 _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 || "_self"); + }, + 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 !== '') { + if(setting.async.autoLoad) { + view.asyncNode(setting); + } + } + return zTreeTools; + } + }; + + var zt = $.fn.zTree, + $$ = tools.$, + consts = zt.consts; + } + + function checkbox() { + 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; + } + } + + function 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); + } + } + + zTree(); + checkbox(); + exedit(); + + exports('ztree', null); +}); \ No newline at end of file diff --git a/src/main/resources/static/assets/layuiadmin/tpl/system/说明.txt b/src/main/resources/static/assets/layuiadmin/tpl/system/说明.txt new file mode 100644 index 0000000..e9d0a23 --- /dev/null +++ b/src/main/resources/static/assets/layuiadmin/tpl/system/说明.txt @@ -0,0 +1,3 @@ + +注意: +该目录存放的是 layuiAdmin 的系统模板碎片,很多界面需要依赖到它,切勿随意剔除。 \ No newline at end of file