├── README.md └── TreeView └── TreeView.js /README.md: -------------------------------------------------------------------------------- 1 | # BaiduNetdiskPlugin-WEB(userscript) 2 | 百度网盘Web端插件(油猴脚本) 3 | 4 | 使用方法可参见:[Greasy Fork](https://greasyfork.org/zh-CN) 5 | 6 | 7 | 8 | --- 9 | ## 列表 10 | ### TreeView(文件树视图) 11 | > 文件树视图查看文件(目前仅支持分享文件页面) 12 | 13 | [Greasy Fork安装](https://greasyfork.org/zh-CN/scripts/374406-zfdev-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E6%96%87%E4%BB%B6%E6%A0%91%E8%A7%86%E5%9B%BE) 14 | 15 | ![文件树视图](https://ws1.sinaimg.cn/large/6260f60dgy1fx95ncdqpej20qp0hgdhb.jpg) 16 | -------------------------------------------------------------------------------- /TreeView/TreeView.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpBNTlBOEI1NDc1REExMUU2OTM4MkI1QjIwMkY4Nzg2MyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMEQ2QzQwMURCRjQxMUU4QUEwMkUxQkU3Q0REQTE2OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMEQ2QzQwMERCRjQxMUU4QUEwMkUxQkU3Q0REQTE2OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmI2ODI5YTYzLWNmYTMtYWM0ZS04ZjBhLWIzMjJkOGJmMGZjMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBNTlBOEI1NDc1REExMUU2OTM4MkI1QjIwMkY4Nzg2MyIvPiA8L3Jk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 3 | // @name ZFDev-百度网盘文件树视图 4 | // @namespace https://zfdev.com/ 5 | // @version 0.1 6 | // @description 添加文件树视图,全局查看文件详情 7 | // @author ZFDev 8 | // @match https://pan.baidu.com/s/1* 9 | // @match https://yun.baidu.com/s/1* 10 | // @require https://cdn.staticfile.org/html2canvas/0.5.0-beta4/html2canvas.js 11 | // @grant GM_addStyle 12 | // @run-at document-idle 13 | // ==/UserScript== 14 | 15 | (function() { 16 | 'use strict'; 17 | 18 | GM_addStyle(` 19 | .zfdev-tree-manager{ 20 | background: white; 21 | } 22 | .zfdev-tree-manager .treeview-node { 23 | cursor: unset; 24 | -webkit-user-select: none; 25 | -moz-user-select: none; 26 | -ms-user-select: none; 27 | user-select: none; 28 | height: 30px; 29 | position: relative; 30 | } 31 | .zfdev-tree-manager .treeview-node .treeview-txt{ 32 | cursor: auto; 33 | -webkit-user-select: auto; 34 | -moz-user-select: auto; 35 | -ms-user-select: auto; 36 | user-select: auto; 37 | } 38 | 39 | .zfdev-tree-manager .treeview-node:not(.treeview-node-on) { 40 | border-bottom: 1px solid #f2f6fd; 41 | } 42 | .zfdev-tree-manager .treeview-node:hover { 43 | background: #e5f0fb; 44 | /* border-color: #BBD4EF #fff; */ 45 | } 46 | 47 | .zfdev-tree-manager .treeview-node .treeview-node-handler { 48 | display: inline-block; 49 | min-width: 60%; 50 | width: auto; 51 | } 52 | .zfdev-tree-manager .treeview-node .treeview-size,.zfdev-tree-manager .treeview-node .treeview-time{ 53 | position: relative; 54 | display: inline-block; 55 | color: #666; 56 | } 57 | .zfdev-tree-manager .treeview-node .treeview-size{ 58 | width:16%; 59 | } 60 | .zfdev-tree-manager .treeview-node .treeview-time{ 61 | width:23%; 62 | } 63 | .zfdev-tree-manager .treeview-node .treeview-txt{ 64 | width: 80%; 65 | padding-right: 10px; 66 | white-space: nowrap; 67 | text-overflow: ellipsis; 68 | overflow: hidden; 69 | } 70 | 71 | /* 生成图片 */ 72 | #gengrate-image-copy-dom li,#gengrate-image-copy-dom ul.treeview, { 73 | width: max-content; 74 | } 75 | #gengrate-image-copy-dom .treeview-node{ 76 | padding-right: 60px; 77 | height: 30px; 78 | border-bottom: 1px solid #f2f6fd; 79 | } 80 | #gengrate-image-copy-dom .treeview-node-handler{ 81 | margin-right: 0!important; 82 | } 83 | #gengrate-image-copy-dom .treeview-node span { 84 | width: 100%; 85 | } 86 | 87 | /* 图片框 */ 88 | #zfdev-treeview-img-div{ 89 | max-height: 800px; 90 | position: absolute; 91 | z-index: 99999999; 92 | top: 50%; 93 | left: 50%; 94 | transform: translate(-50%,-50%); 95 | box-sizing: border-box; 96 | -webkit-box-shadow: 0 0.5em 1em 0.5em rgba(0,0,0,.19); 97 | box-shadow: 0 0.5em 1em 0.5em rgba(0,0,0,.19); 98 | border-bottom-left-radius: .3em; 99 | border-bottom-right-radius: .3em; 100 | padding: 10px; 101 | } 102 | #zfdev-treeview-img-div em{ 103 | height: 25px; 104 | width: 25px; 105 | padding: 0; 106 | margin: 0; 107 | line-height: 25px; 108 | font-size: 12px; 109 | } 110 | 111 | #zfdev-treeview-img-div > div > a{ 112 | border-radius: 50%; 113 | position: absolute; 114 | right: -20px; 115 | width: 25px; 116 | line-height: 25px; 117 | height: 25px; 118 | background-color: white; 119 | box-shadow: rgba(0, 0, 0, 0.19) 0px 0.3px 1em 0.3px; 120 | border: 1px solid rgb(192, 217, 254); 121 | padding: 0px; 122 | margin-right: 0px; 123 | text-align: center; 124 | } 125 | 126 | 127 | `); 128 | GM_addStyle('@font-face{font-family:"iconfont-zfdev-filetree";src:url(data:font/truetype;charset=utf-8;base64,AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzI8fUhsAAABfAAAAFZjbWFws/QcPQAAAeQAAAGcZ2x5ZqQfxqgAAAOMAAABjGhlYWQTLAKJAAAA4AAAADZoaGVhB94DhQAAALwAAAAkaG10eBAAAAAAAAHUAAAAEGxvY2EBAgCUAAADgAAAAAptYXhwARcARQAAARgAAAAgbmFtZYx+aQAAAAUYAAADIXBvc3QPWfb4AAAIPAAAAEoAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAQAAQAAAAEAAEEtmIxfDzz1AAsEAAAAAADYBl9GAAAAANgGX0YAAP+ABAADgAAAAAgAAgAAAAAAAAABAAAABAA5AAkAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQQAAZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5gfmegOA/4AAXAOAAIAAAAABAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAUAAAADAAAALAAAAAQAAAFoAAEAAAAAAGIAAwABAAAALAADAAoAAAFoAAQANgAAAAgACAACAADmB+Yx5nr//wAA5gfmMeZ6//8AAAAAAAAAAQAIAAgACAAAAAMAAQACAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAA0AAAAAAAAAAMAAOYHAADmBwAAAAMAAOYxAADmMQAAAAEAAOZ6AADmegAAAAIAAAAAADwAlADGAAAAAgAA/4wD9AN0AAsAHgAAAQYABxYAFzYANyYAEwEHBiIvAiY0NjIfAQE2MhYUAgDU/uUFBQEb1NQBGwUF/uU+/rYEChsKA6QJExoKkQE3ChoTA3QF/uXU1P7lBQUBG9TUARv+of62BAoKBKQKGhMJkQE3ChQaAAAACQAA/5QD1gM8ABUAGgAeACMAJwAsADAANAA4AAABFSM1MzUjNSMRIRUzNSMVIzUzFTM1Ex0BITUHITUhBR0BITUHITUhBR0BITUHITUhARUhNQchNSEB1urq6iQBDgIC6uoCEQHsJP5cAaT+OAHsJP5cAaT+OAHsJP5cAaT8cQHSOf6eAWIBDyvMJJ/9WCt7LNArewEMNmSaajrMNmSaajrANmSaajoDPdLSrIkAAAACAAD/gAQAA4AACwAXAAABHgEXDgEHLgEnPgE3BgAHFgAXNgA3JgACAL79BQX9vr79BQX9vtr+3wUFASHa2gEhBQX+3wNABf2+vv0FBf2+vv1FBf7f2tr+3wUFASHa2gEhAAAAAAASAN4AAQAAAAAAAAAVAAAAAQAAAAAAAQAXABUAAQAAAAAAAgAHACwAAQAAAAAAAwAXADMAAQAAAAAABAAXAEoAAQAAAAAABQALAGEAAQAAAAAABgAXAGwAAQAAAAAACgArAIMAAQAAAAAACwATAK4AAwABBAkAAAAqAMEAAwABBAkAAQAuAOsAAwABBAkAAgAOARkAAwABBAkAAwAuAScAAwABBAkABAAuAVUAAwABBAkABQAWAYMAAwABBAkABgAuAZkAAwABBAkACgBWAccAAwABBAkACwAmAh0KQ3JlYXRlZCBieSBpY29uZm9udAppY29uZm9udC16ZmRldi1maWxldHJlZVJlZ3VsYXJpY29uZm9udC16ZmRldi1maWxldHJlZWljb25mb250LXpmZGV2LWZpbGV0cmVlVmVyc2lvbiAxLjBpY29uZm9udC16ZmRldi1maWxldHJlZUdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAAoAQwByAGUAYQB0AGUAZAAgAGIAeQAgAGkAYwBvAG4AZgBvAG4AdAAKAGkAYwBvAG4AZgBvAG4AdAAtAHoAZgBkAGUAdgAtAGYAaQBsAGUAdAByAGUAZQBSAGUAZwB1AGwAYQByAGkAYwBvAG4AZgBvAG4AdAAtAHoAZgBkAGUAdgAtAGYAaQBsAGUAdAByAGUAZQBpAGMAbwBuAGYAbwBuAHQALQB6AGYAZABlAHYALQBmAGkAbABlAHQAcgBlAGUAVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG4AZgBvAG4AdAAtAHoAZgBkAGUAdgAtAGYAaQBsAGUAdAByAGUAZQBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAQIBAwEEAQUACXh1YW56aG9uZwdzaHV4aW5nCnVuc2VsZWN0ZWQAAAAA) format("truetype");font-weight:normal;font-style:normal;}.iconfont-zfdev-filetree{font-family:"iconfont-zfdev-filetree" !important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;}.icon-shuxing:before{content:"\\e67a";}.icon-xuanzhong:before{content:"\\e631";}.icon-unselected:before{content:"\\e607";}'); 129 | 130 | 131 | /** 132 | * 设置内部log函数 133 | */ 134 | let log = function() { 135 | console.log.apply(console, arguments); 136 | }; 137 | /** 138 | * 文件类型图标Class 139 | * @type {Object} 140 | */ 141 | let filesIcon = { 142 | "bt": ["fileicon-small-bt", "fileicon-large-bt", "fileicon-middle-bt"], 143 | "torrent": ["fileicon-small-bt", "fileicon-large-bt", "fileicon-middle-bt"], 144 | "dws": ["fileicon-small-dws", "fileicon-large-dws", "fileicon-middle-dws"], 145 | "dwt": ["fileicon-small-dws", "fileicon-large-dws", "fileicon-middle-dws"], 146 | "dxf": ["fileicon-small-dws", "fileicon-large-dws", "fileicon-middle-dws"], 147 | "dwg": ["fileicon-small-dws", "fileicon-large-dws", "fileicon-middle-dws"], 148 | "cad": ["fileicon-small-dws", "fileicon-large-dws", "fileicon-middle-dws"], 149 | "as": ["fileicon-small-code", "fileicon-large-code"], 150 | "sh": ["fileicon-small-code", "fileicon-large-code"], 151 | "c": ["fileicon-small-code", "fileicon-large-code"], 152 | "cpp": ["fileicon-small-code", "fileicon-large-code"], 153 | "h": ["fileicon-small-code", "fileicon-large-code"], 154 | "cs": ["fileicon-small-code", "fileicon-large-code"], 155 | "asp": ["fileicon-small-code", "fileicon-large-code"], 156 | "css": ["fileicon-small-code", "fileicon-large-code"], 157 | "pas": ["fileicon-small-code", "fileicon-large-code"], 158 | "diff": ["fileicon-small-code", "fileicon-large-code"], 159 | "patch": ["fileicon-small-code", "fileicon-large-code"], 160 | "erl": ["fileicon-small-code", "fileicon-large-code"], 161 | "groovy": ["fileicon-small-code", "fileicon-large-code"], 162 | "java": ["fileicon-small-code", "fileicon-large-code"], 163 | "jsp": ["fileicon-small-code", "fileicon-large-code"], 164 | "js": ["fileicon-small-code", "fileicon-large-code"], 165 | "json": ["fileicon-small-code", "fileicon-large-code"], 166 | "pl": ["fileicon-small-code", "fileicon-large-code"], 167 | "php": ["fileicon-small-code", "fileicon-large-code"], 168 | "py": ["fileicon-small-code", "fileicon-large-code"], 169 | "rb": ["fileicon-small-code", "fileicon-large-code"], 170 | "sass": ["fileicon-small-code", "fileicon-large-code"], 171 | "scss": ["fileicon-small-code", "fileicon-large-code"], 172 | "scala": ["fileicon-small-code", "fileicon-large-code"], 173 | "sql": ["fileicon-small-code", "fileicon-large-code"], 174 | "vb": ["fileicon-small-code", "fileicon-large-code"], 175 | "xml": ["fileicon-small-code", "fileicon-large-code"], 176 | "xhtml": ["fileicon-small-code", "fileicon-large-code"], 177 | "html": ["fileicon-small-code", "fileicon-large-code"], 178 | "htm": ["fileicon-small-code", "fileicon-large-code"], 179 | "md": ["fileicon-small-code", "fileicon-large-code"], 180 | "less": ["fileicon-small-code", "fileicon-large-code"], 181 | "lua": ["fileicon-small-code", "fileicon-large-code"], 182 | "go": ["fileicon-small-code", "fileicon-large-code"], 183 | "bat": ["fileicon-small-code", "fileicon-large-code"], 184 | "wml": ["fileicon-small-code", "fileicon-large-code"], 185 | "txt": ["fileicon-small-txt", "fileicon-large-txt", "fileicon-middle-txt"], 186 | "rtf": ["fileicon-small-txt", "fileicon-large-txt", "fileicon-middle-txt"], 187 | "pdf": ["fileicon-small-pdf", "fileicon-large-pdf", "fileicon-middle-pdf"], 188 | "doc": ["fileicon-small-doc", "fileicon-large-doc", "fileicon-middle-doc"], 189 | "docx": ["fileicon-small-doc", "fileicon-large-doc", "fileicon-middle-doc"], 190 | "ppt": ["fileicon-small-ppt", "fileicon-large-ppt", "fileicon-middle-ppt"], 191 | "pptx": ["fileicon-small-ppt", "fileicon-large-ppt", "fileicon-middle-ppt"], 192 | "xls": ["fileicon-small-xls", "fileicon-large-xls", "fileicon-middle-xls"], 193 | "xlsx": ["fileicon-small-xls", "fileicon-large-xls", "fileicon-middle-xls"], 194 | "vsd": ["fileicon-small-vsd", "fileicon-large-vsd", "fileicon-middle-vsd"], 195 | "jpg": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 196 | "jpeg": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 197 | "livp": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 198 | "gif": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 199 | "bmp": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 200 | "png": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 201 | "jpe": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 202 | "cur": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 203 | "svgz": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 204 | "tif": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 205 | "tiff": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 206 | "ico": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 207 | "heic": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 208 | "heif": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 209 | "avci": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 210 | "mmap": ["fileicon-small-mmap", "fileicon-large-mmap", "fileicon-middle-mmap"], 211 | "xmind": ["fileicon-small-xmind", "fileicon-large-xmind", "fileicon-middle-xmind"], 212 | "mm": ["fileicon-small-mm", "fileicon-large-mm", "fileicon-middle-mm"], 213 | "wma": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 214 | "wav": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 215 | "mp3": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 216 | "aac": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 217 | "ra": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 218 | "ram": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 219 | "mp2": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 220 | "ogg": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 221 | "aif": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 222 | "mpega": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 223 | "amr": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 224 | "mid": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 225 | "midi": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 226 | "m4a": ["fileicon-small-mp3", "fileicon-large-mp3", "fileicon-middle-mp3"], 227 | "jpg": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 228 | "jpeg": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 229 | "gif": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 230 | "bmp": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 231 | "png": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 232 | "jpe": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 233 | "cur": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 234 | "svgz": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 235 | "tif": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 236 | "tiff": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 237 | "ico": ["fileicon-small-pic", "default-large", "fileicon-middle-pic"], 238 | "exe": ["fileicon-sys-s-exe", "fileicon-sys-l-exe"], 239 | "msi": ["fileicon-sys-s-exe", "fileicon-sys-l-exe"], 240 | "dmg": ["fileicon-sys-s-exe", "fileicon-sys-l-dmg"], 241 | "pkg": ["fileicon-sys-s-exe", "fileicon-sys-l-dmg"], 242 | "psd": ["fileicon-sys-s-psd", "fileicon-sys-l-psd"], 243 | "apk": ["fileicon-sys-s-apk", "fileicon-sys-l-apk"], 244 | "key": ["fileicon-sys-s-key", "fileicon-sys-l-key"], 245 | "ai": ["fileicon-sys-s-ai", "fileicon-sys-l-ai"], 246 | "ipa": ["fileicon-sys-s-ipa", "fileicon-sys-l-ipa"], 247 | "pages": ["fileicon-sys-s-pages", "fileicon-sys-l-pages"], 248 | "numbers": ["fileicon-sys-s-numbers", "fileicon-sys-l-numbers"], 249 | "eot": ["fileicon-sys-s-fonts", "fileicon-sys-l-fonts"], 250 | "ttf": ["fileicon-sys-s-fonts", "fileicon-sys-l-fonts"], 251 | "woff": ["fileicon-sys-s-fonts", "fileicon-sys-l-fonts"], 252 | "eps": ["fileicon-sys-s-eps", "fileicon-sys-l-eps"], 253 | "lnk": ["fileicon-sys-s-links", "fileicon-sys-l-links"], 254 | "link": ["fileicon-sys-s-links", "fileicon-sys-l-links"], 255 | "swf": ["fileicon-sys-s-swf", "fileicon-sys-l-swf"], 256 | "php": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 257 | "c": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 258 | "js": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 259 | "css": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 260 | "html": ["fileicon-sys-s-web", "fileicon-sys-l-web"], 261 | "htm": ["fileicon-sys-s-web", "fileicon-sys-l-web"], 262 | "xhtml": ["fileicon-sys-s-web", "fileicon-sys-l-web"], 263 | "java": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 264 | "cc": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 265 | "python": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 266 | "json": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 267 | "sh": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 268 | "bat": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 269 | "ejs": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 270 | "xml": ["fileicon-sys-s-code", "fileicon-sys-l-code"], 271 | "ts": ["fileicon-sys-s-video", "fileicon-sys-l-video"], 272 | "wmv": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 273 | "rmvb": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 274 | "mpeg4": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 275 | "mpeg2": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 276 | "flv": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 277 | "avi": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 278 | "3gp": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 279 | "mpga": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 280 | "qt": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 281 | "rm": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 282 | "wmz": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 283 | "wmd": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 284 | "wvx": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 285 | "wmx": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 286 | "wm": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 287 | "mpg": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 288 | "mp4": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 289 | "mkv": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 290 | "mpeg": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 291 | "mov": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 292 | "asf": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 293 | "m4v": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 294 | "m3u8": ["fileicon-small-video", "fileicon-large-video", "fileicon-middle-video"], 295 | "rar": ["fileicon-small-zip", "fileicon-large-zip", "fileicon-middle-zip"], 296 | "zip": ["fileicon-small-zip", "fileicon-large-zip", "fileicon-middle-zip"], 297 | "other": ["default-small", "default-large", ] 298 | }; 299 | 300 | /** 301 | * 文件排序算法 302 | * @param a 303 | * @param b 304 | * @returns {number} 305 | */ 306 | const name_re = new RegExp().compile(/(^[\d]*)/); 307 | const name_re2 = new RegExp().compile(/\d/g); 308 | 309 | /** 310 | * 数组文件排序算法1 Array.sort 311 | */ 312 | function listSort(a, b) { 313 | // 需同为文件或同为文件夹 314 | if (a.isdir === b.isdir) { 315 | // 获取开头的数字 316 | let key = "server_filename"; 317 | let n1 = a[key].match(name_re), 318 | n2 = b[key].match(name_re); 319 | if (n1 === null || n2 === null) { 320 | // 开头不是数字,用本地排序 321 | return (a[key] + "").localeCompare(b[key] + "") 322 | } else { 323 | // 转为数字比较大小 324 | return parseInt(n1.join("")) - parseInt(n2.join("")); 325 | } 326 | } else { 327 | // 文件夹排前面 328 | return a.isdir ? -1 : 1; 329 | } 330 | } 331 | /** 332 | * 排数组文件排序算法2 Array.sort 333 | */ 334 | function listSort2(a, b) { 335 | if (a.isdir === b.isdir) { 336 | // 获取文件名中所有数字 337 | let key = "server_filename"; 338 | let n1 = a[key].match(name_re2), 339 | n2 = b[key].match(name_re2); 340 | if (n1 === null || n2 === null) { 341 | // 开头不是数字,用本地排序 342 | return (a[key] + "").localeCompare(b[key] + "") 343 | } else { 344 | // 拼接所有数字,并比较大小 345 | return parseInt(n1.join("")) - parseInt(n2.join("")); 346 | } 347 | } else { 348 | // 文件夹排前面 349 | return a.isdir ? -1 : 1; 350 | } 351 | } 352 | 353 | /** 354 | * 修改Location.hash 实现网盘当前路径跳转 355 | * @param {[type]} path 目标路径 356 | * @return {[type]} 无返回 357 | */ 358 | function pathChange(path) { 359 | // 父路径,用于隐藏完整路径 360 | let parentPath = yunData.FILEINFO[0].parent_path; 361 | 362 | let old = location.hash.split("&"); 363 | let newArr = []; 364 | // 添加路径 365 | path = path.substring(0, path.lastIndexOf("/")); 366 | if (path === decodeURIComponent(parentPath)) { 367 | path = "/"; 368 | } 369 | // 添加父路径 370 | newArr.push("#list/path=" + encodeURIComponent(path)); 371 | if (parentPath) { 372 | newArr.push("parentPath=" + parentPath); 373 | } 374 | // 将其他属性重新合并 375 | old.forEach(function(item, i) { 376 | let data = item.split("="); 377 | if (data[0] === "#list/path") { 378 | // path 已生成 379 | } else if (data[0] === "parentPath") { 380 | // parentPath 已生成 381 | } else { 382 | newArr.push(item); 383 | } 384 | }); 385 | // 修改hash 386 | location.hash = newArr.join("&") 387 | } 388 | 389 | /** 390 | * 数字 转 文件大小文本 391 | * @param limit 392 | * @returns {string} 393 | */ 394 | function conver_size_int_to_str(limit) { 395 | let size = ""; 396 | let bit = 1; 397 | if (limit < Math.pow(1024, 1)) { //如果小于0.1KB转化成B 398 | size = limit.toFixed(bit) + "B"; 399 | } else if (limit < Math.pow(1024, 2)) { //如果小于0.1MB转化成KB 400 | size = (limit / Math.pow(1024, 1)).toFixed(bit) + "K"; 401 | } else if (limit < Math.pow(1024, 3)) { //如果小于0.1GB转化成MB 402 | size = (limit / (Math.pow(1024, 2))).toFixed(bit) + "M"; 403 | } else { //其他转化成GB 404 | size = (limit / (Math.pow(1024, 3))).toFixed(bit) + "G"; 405 | } 406 | let sizestr = size + ""; 407 | let len = sizestr.indexOf("."); 408 | let dec = sizestr.substr(len + 1, bit); 409 | if (dec === "00") { //当小数点后为00时 去掉小数部分 410 | return sizestr.substring(0, len) + sizestr.substr(len + bit + 1, 2); 411 | } 412 | return sizestr; 413 | } 414 | 415 | /** 416 | * 文件大小文本 转 数字 417 | * @param sizestr 418 | * @returns {number} 419 | */ 420 | function conver_size_str_to_int(sizestr) { 421 | let size = 0; 422 | if (sizestr.substring(sizestr.length - 2) === s.z) { 423 | size = parseInt(sizestr.substring(0, sizestr.length - 2)) * Math.pow(1024, 1); 424 | } else if (sizestr.substring(sizestr.length - 1) === s.v) { 425 | size = parseInt(sizestr.substring(0, sizestr.length - 1)) * Math.pow(1024, 2); 426 | } else if (sizestr.substring(sizestr.length - 1) === s.w) { 427 | size = parseInt(sizestr.substring(0, sizestr.length - 1)) * Math.pow(1024, 3); 428 | } else if (sizestr.substring(sizestr.length - 1) === s.aa) { 429 | size = parseInt(sizestr.substring(0, sizestr.length - 1)) * Math.pow(1024, 4); 430 | } else { 431 | 432 | } 433 | return size; 434 | } 435 | 436 | 437 | /** 438 | * 时间格式化 439 | * @return {[type]} 返回格式:2018-11-11 11:11 440 | */ 441 | Date.prototype.format = function() { 442 | return this.getFullYear() + '-' + (this.getMonth() + 1) + '-' + this.getDate() + " " + this.getHours() + ":" + this.getMinutes(); 443 | }; 444 | /** 445 | * 将时间戳转为格式化 446 | * @param {[type]} inputTime 时间字符串 447 | * @return {[type]} 返回格式:2018-11-11 11:11 448 | */ 449 | function formatDateTime(inputTime) { 450 | var date = new Date(inputTime); 451 | return date.format(); 452 | }; 453 | 454 | /* ------------------------------------------ 获取百度数据 - LOCAL - START --------------------------------------------------------- */ 455 | let get_uk = function() { 456 | return yunData.SHARE_UK; 457 | }; 458 | let get_shareid = function() { 459 | return yunData.SHARE_ID; 460 | }; 461 | 462 | /** 463 | * 从缓存中获取目录下的文件列表 464 | * @param {[type]} path 路径 465 | * @return {[type]} 存在返回文件列表,不存在返回false 466 | */ 467 | let getCacheData = function(path) { 468 | path = path.substring(0, 1) != "/" ? "/" + path : path; // 不是“/”开头要加上 469 | if (cache.list.data.hasOwnProperty(path)) { 470 | if (cache.list.data[path].hasMore) { 471 | // 如果列表还有未加载的返回false 472 | return false; 473 | } 474 | // 找到返回两次排序后的文件列表 475 | return cache.list.data[path].list.sort(listSort2).sort(listSort); 476 | } else { 477 | return false; 478 | } 479 | }; 480 | 481 | 482 | /* ------------------------------------------ 获取百度数据 - LOCAL - END --------------------------------------------------------- */ 483 | 484 | /* ------------------------------------------ 获取百度数据 - NET - START --------------------------------------------------------- */ 485 | /** 486 | * 网络 - 获取指定路径下的文件列表 487 | * @param {[type]} path 目标路径 488 | * @param {Number} [page=1] 当前页数,默认1 489 | * @return {[type]} 返回Promise对象 490 | */ 491 | let getList = function(path, page = 1) { 492 | return new Promise(function(resolve, reject) { 493 | if (page === 1) { 494 | // 页数等于1时,校验路径是否合法。并修正 495 | path = path.substring(0, 1) != "/" ? "/" + path : path; // 不是/开头要加上 496 | path = encodeURIComponent(path); 497 | } 498 | // 拼接URL,每次获取数量为100(多了没有效果) 499 | let uk = get_uk(), 500 | shareid = get_shareid(), 501 | url = `/share/list?uk=${uk}&shareid=${shareid}&page=${page}&num=100&dir=${path}`; 502 | // 发起Get请求 503 | $.ajax({ 504 | type: "GET", 505 | url: url, 506 | cache: false, 507 | async: true, 508 | success: function(res) { 509 | // 错误处理未考虑所有情况,待补充 510 | // 数量等于100时,可能还存在未获取的数据。需再次再次获取 511 | if (res && res.list.length === 100) { 512 | // 递归获取下一页, 成功后拼接数组 513 | getList(path, page + 1).then(res2 => { 514 | res.list.push.apply(res.list, res2.list); 515 | resolve(res); 516 | }) 517 | } else { 518 | resolve(res); 519 | } 520 | }, 521 | failure: function(result) { 522 | reject(false); 523 | }, 524 | error: function(result) { 525 | reject(false); 526 | }, 527 | 528 | }); 529 | }); 530 | }; 531 | 532 | 533 | 534 | 535 | /* ------------------------------------------ 获取百度数据 - NET - END --------------------------------------------------------- */ 536 | 537 | 538 | /* ------------------------------------------ 文件树管理 - START --------------------------------------------------------- */ 539 | 540 | /** 541 | * 添加节点 542 | */ 543 | let addNode = function(node, item, level) { 544 | 545 | 546 | 547 | }, 548 | /** 549 | * 获取节点 550 | */ 551 | getItme = function(node) { 552 | 553 | 554 | 555 | }, 556 | /** 557 | * 获取节点 558 | */ 559 | setState = function(node) { 560 | 561 | 562 | 563 | }, 564 | /** 565 | * 根据文件信息生成HTML 566 | * @param {[type]} item 文件(夹)信息 567 | * @param {[type]} level 所在目录层次 568 | * @param {[type]} index 当前文件所在的文件序号,1开始 569 | * @return {[type]} 返回HTML 570 | */ 571 | itemToHTML = function(item, level, index) { 572 | /* 573 | width: 60%;display: inline-block; 574 | style="width:70%" 575 | */ 576 | let html = ` 577 |
  • 578 |
    579 | 580 | ${item.isdir ? '' : ''+index+'.'} 581 | 582 | ${item.isdir ? '' : getIconHTML(item.server_filename)} 583 | 584 | 587 | ${item.server_filename} 588 | 589 | 590 |
    ${item.isdir ? '' : conver_size_int_to_str(item.size)}
    591 |
    ${item.isdir ? '' : formatDateTime(item.server_mtime*1000)}
    592 |
    593 | 595 |
  • 596 | ` 597 | return html; 598 | }, 599 | /** 600 | * 文件列表生成HTML 601 | * @param {[type]} list 文件列表 602 | * @param {[type]} level 当前所在目录层次 603 | * @return {[type]} 返回HTML 604 | */ 605 | listToHTML = function(list, level) { 606 | let html = ""; 607 | let fileIndex = 0; 608 | for (let i = 0; i < list.length; i++) { 609 | if (!list[i].isdir) fileIndex++; 610 | html += itemToHTML(list[i], level, fileIndex); 611 | } 612 | return html; 613 | 614 | }, 615 | /** 616 | * 根据文件名后缀获取图标Class 617 | * @param {[type]} filename 文件名 618 | * @return {[type]} 返回Class名称 619 | */ 620 | getIcon = function(filename) { 621 | let t = filename.lastIndexOf('.'); 622 | if (t > 0) { 623 | let type = filename.substring(t + 1, filename.length); // “.” 后面内容 624 | if (filesIcon.hasOwnProperty(type)) { 625 | return filesIcon[type][0]; // 找到返回 626 | } 627 | } 628 | // 未找到返回通用Class 629 | return filesIcon.other[0]; 630 | }, 631 | /** 632 | * 生成IconHTML 633 | * @param {[type]} filename 文件名 634 | * @return {[type]} 返回HTML 635 | */ 636 | getIconHTML = function(filename) { 637 | let html = ` 638 | 645 | 646 | ` 647 | return html; 648 | }; 649 | 650 | 651 | 652 | /* ------------------------------------------ 文件树管理 - END --------------------------------------------------------- */ 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | /* ------------------------------------------ 初始化 - START --------------------------------------------------------- */ 663 | 664 | 665 | // 载入CSS 666 | require.loadCss('/sns/box-static/disk-share/pkg/plugin_aef2d24.css'); 667 | 668 | // 初始化 - 添加视图 669 | let treeHTML = '
    '; 670 | $('.KPDwCE').append(treeHTML); 671 | 672 | // 设置高度为列表视图的高度 673 | $("#zfdev-tree-manager .file-tree-container").css('height', $('#shareqr > div.KPDwCE div.zJMtAEb div.NHcGw').css('height')); 674 | // 监视其他视图的高度变化,实时调整高度 675 | (function() { 676 | var observer = new MutationObserver(function(mutations, observer) { 677 | mutations.forEach(function(mutation) { 678 | $("#zfdev-tree-manager .file-tree-container").css('height', mutation.target.style.height); 679 | }); 680 | }); 681 | var config = { 682 | attributes: true, 683 | attributeOldValue: false, 684 | attributeFilter: [ 685 | 'style' 686 | ] 687 | }; 688 | var el = document.querySelector('#shareqr > div.KPDwCE div.zJMtAEb div.NHcGw'); 689 | observer.observe(el, config); 690 | })(); 691 | 692 | let $manager = $("#zfdev-tree-manager"); 693 | 694 | /** 695 | * 点击行的处理事件 696 | * @param {[type]} e 传入JQuery对象 697 | * @return {[type]} 无返回 698 | */ 699 | let rowClick = function(e) { 700 | log("点击张开"); 701 | let ul = e.parent().parent().next(); // 文件列表ul 702 | let div = e.parent().parent(); // 文件所在div 703 | let textEle = e.next().next(); // 存储数据的元素(显示文件名) 704 | 705 | let name = textEle.attr('node-server_filename'); // 文件名 706 | 707 | // 空文件夹不响应 708 | if (div.hasClass('treenode-empty')) { 709 | return false; 710 | } 711 | // 判断是否展开收缩 712 | if (e.hasClass('minus')) { 713 | // 收缩 714 | ul.addClass('treeview-collapse'); 715 | e.removeClass('minus'); 716 | div.removeClass('_minus'); 717 | } else { 718 | // 展开 719 | let path = textEle.attr('node-path'), 720 | level = textEle.attr('node-level'), 721 | isdir = parseInt(textEle.attr('node-isdir')); 722 | 723 | if (isdir && ul.children().length === 0) { 724 | // 还没获取数据 725 | let cureentCache = getCacheData(path); // 查询缓存 726 | if (cureentCache) { 727 | // 使用缓存数据生成 728 | let html = listToHTML(cureentCache, parseInt(level) + 1); 729 | ul.append(html); 730 | } else { 731 | // 从网络获取 732 | e.addClass('treeview-leaf-loading'); // 设置加载动画 733 | getList(path).then(res => { 734 | e.removeClass('treeview-leaf-loading'); // 取消加载动画 735 | if (res && res.errno === 0) { 736 | // 成功的返回 737 | cache.list.data[path] = { 738 | hasMore: false, 739 | list: res.list.sort(listSort2).sort(listSort), 740 | names: undefined, 741 | share: 0 742 | }; // 保存到缓存 743 | let html = listToHTML(res.list, parseInt(level) + 1); 744 | ul.append(html); 745 | if (res.list.length === 0) { 746 | // 空文件夹,隐藏折叠图标 747 | div.addClass('treenode-empty'); 748 | } 749 | } else { 750 | // 失败的返回 751 | log('返回失败', res); 752 | } 753 | 754 | }, res => { 755 | // reject 756 | e.removeClass('treeview-leaf-loading'); 757 | }); 758 | } 759 | 760 | } 761 | // 设置已展开状态 762 | ul.removeClass('treeview-collapse'); 763 | e.addClass('minus'); 764 | div.addClass('_minus'); 765 | } 766 | }; 767 | /** 768 | * 点击treeview-node的处理事件 769 | */ 770 | $('body .zfdev-tree-manager').on('click', '.treeview-node', e => { 771 | log("点击张开"); 772 | e = $(e.currentTarget); // 转为JQuery对象 773 | rowClick(e.find('em')); // 处理行点击 774 | 775 | // 设置当前行选中 776 | $('.treeview-node-on').removeClass('treeview-node-on'); 777 | e.addClass('treeview-node-on'); 778 | 779 | // 跳转当前目录 780 | let path = e.find('.treeview-txt').attr('node-path'); 781 | pathChange(path); 782 | 783 | // 根据文件名,模拟点击选中文件。页面切换有延时 784 | setTimeout(function() { 785 | $('#shareqr div.zJMtAEb dd.JS-item-active .EOGexf').click(); // 取消已选中 786 | let name = e.find('.treeview-txt').attr('node-server_filename'); // 获取当前的文件名 787 | $('#shareqr div.zJMtAEb dd:not(.JS-item-active):has(.file-name > .text:Contains("' + name + '")) .EOGexf').click(); // 模拟点击 788 | }, 200); 789 | }); 790 | 791 | 792 | // 添加切换视图按钮 793 | let btnHTML = ''; 794 | $('#shareqr > div.module-toolbar div.list-grid-switch').append(btnHTML); 795 | 796 | /** 797 | * 文件树视图按钮点击事件 798 | */ 799 | $('#zfdev-tree-view-btn').click(function() { 800 | if ($('#zfdev-tree-manager').attr('value') === "true") { 801 | $('#shareqr > div.KPDwCE > div.zJMtAEb').css({ 802 | display: 'block' 803 | }); // 显示列表视图 804 | $('#shareqr > div.KPDwCE > div.fyQgAEb').css({ 805 | display: 'none' 806 | }); // 隐藏格子视图 807 | $('#zfdev-tree-manager').css({ 808 | display: 'none' 809 | }); // 隐藏文件树视图 810 | $('#zfdev-tree-manager').attr('value', false); // 设置未启用状态 811 | } else { 812 | $('#shareqr > div.KPDwCE > div.zJMtAEb').css({ 813 | display: 'none' 814 | }); // 列表视图 815 | $('#shareqr > div.KPDwCE > div.fyQgAEb').css({ 816 | display: 'none' 817 | }); // 格子视图 818 | // $('#shareqr > div.KPDwCE > div.QxJxtg').css({display: 'none'}); // 表头按钮 819 | // $('#shareqr > div.KPDwCE > div.JDeHdxb').css({display: 'none'}); // 路径导航 820 | $('#zfdev-tree-manager').css({ 821 | display: '' 822 | }); // 显示文件树视图 823 | $('#zfdev-tree-manager').attr('value', true); // 设置启用状态 824 | 825 | } 826 | }); 827 | /** 828 | * 点击默认的视图按钮,隐藏文件树视图 829 | */ 830 | $('#shareqr > div.KPDwCE > div.zJMtAEb, #shareqr > div.KPDwCE > div.fyQgAEb').click(function() { 831 | $('#zfdev-tree-manager').css({ 832 | display: 'none' 833 | }); // 隐藏文件树视图 834 | $('#shareqr > div.KPDwCE > div.QxJxtg').css({ 835 | display: '' 836 | }); // ??? 837 | 838 | }); 839 | 840 | /** 841 | * 初始化视图。获取首页文件列表,并生成文件树视图 842 | * @param {[type]} item 文件信息 843 | */ 844 | getCacheData('/').forEach(function(item) { 845 | let html = itemToHTML(item, 1); 846 | $manager.find('.treeview-root-content').append(html); 847 | }) 848 | 849 | 850 | 851 | /** 852 | * 列表右键菜单 853 | * @param {[type]} e require函数 854 | * @return {[type]} 无返回 855 | */ 856 | function listMenu(e) { 857 | var i = e("base:widget/libs/jquerypacket.js"), 858 | t = e("system-core:context/context.js").instanceForSystem, 859 | s = e("disk-share:widget/pageModule/list/listInit.js"), 860 | n = void 0, 861 | r = { 862 | treeTarget: "#zfdev-tree-manager", 863 | }, 864 | copyItem = {}, 865 | converItem = function(ele) { 866 | let item = { 867 | category: parseInt(ele.attr('node-path')), 868 | docpreview: ele.attr('node-docpreview'), 869 | fs_id: parseInt(ele.attr('node-fs_id')), 870 | isdir: parseInt(ele.attr('node-isdir')), 871 | local_ctime: parseInt(ele.attr('node-local_ctime')), 872 | local_mtime: parseInt(ele.attr('node-local_mtime')), 873 | md5: ele.attr('node-md5'), 874 | path: ele.attr('node-path'), 875 | server_ctime: parseInt(ele.attr('node-server_ctime')), 876 | server_filename: ele.attr('node-server_filename'), 877 | server_mtime: parseInt(ele.attr('node-server_mtime')), 878 | size: parseInt(ele.attr('node-size')), 879 | }; 880 | return item; 881 | }, 882 | o = { 883 | top: [{ 884 | // title: "打开", 885 | // action: function() { 886 | // s.isGridMode() ? i(this).closest(".cEefyz").find(".filename").trigger("click") : i(this).closest(".AuPKyz").find(".filename").trigger("click") 887 | // }, 888 | // display: function() { 889 | 890 | // // let ul = $(this).closest('.treeview-node'); 891 | // // let textEle = ul.find('.treeview-txt'); 892 | // // let path = textEle.attr('node-path'), 893 | // // level = textEle.attr('node-level'), 894 | // // isdir = parseInt(textEle.attr('node-isdir')); 895 | // // if (s.getCheckedIndexs().length > 1){ 896 | // // return "disable"; 897 | // // } 898 | // // var e = i(this).closest(".AuPKyz"); 899 | // // return s.isGridMode() && (e = i(this).closest(".cEefyz")), 900 | // // e.length && !e.hasClass("open-enable") ? "disable" : void 0 901 | // }, 902 | // keyboard: "o" 903 | // }, { 904 | // title: "复制", 905 | // action: function() { 906 | // let ul = $(this).closest('.treeview-node'); 907 | // let textEle = ul.find('.treeview-txt'); 908 | // copyItem = converItem(textEle); 909 | // return true; 910 | // }, 911 | // display: function() { 912 | // // if (s.getCheckedIndexs().length > 1) 913 | // // return "disable"; 914 | // // var e = i(this).closest(".AuPKyz"); 915 | // // return s.isGridMode() && (e = i(this).closest(".cEefyz")), 916 | // // e.length && !e.hasClass("open-enable") ? "disable" : void 0 917 | // }, 918 | // keyboard: "c" 919 | // }, { 920 | // title: "粘贴", 921 | // action: function() { 922 | // let ul = $(this).closest('.treeview-node'); 923 | // let textEle = ul.find('.treeview-txt'); 924 | // let item = converItem(textEle); 925 | // console.log('将', copyItem); 926 | // console.log('粘贴至', item); 927 | // // s.isGridMode() ? i(this).closest(".cEefyz").find(".filename").trigger("click") : i(this).closest(".AuPKyz").find(".filename").trigger("click") 928 | // }, 929 | // display: function() { 930 | 931 | // let ul = $(this).closest('.treeview-node'); 932 | // let textEle = ul.find('.treeview-txt'); 933 | // let item = converItem(textEle); 934 | // if (!item.isdir && copyItem) { 935 | // // return "disable"; 936 | // return false; 937 | // } 938 | // }, 939 | // keyboard: "p" 940 | // }, { 941 | // title: "复制名称", 942 | // action: function() { 943 | // let ul = $(this).closest('.treeview-node').next(); 944 | // let textEle = ul.find('.treeview-txt'); 945 | // ul.find("> li > .treeview-node:not(.treenode-empty) em.icon-operate:not(.minus)").click(); 946 | // return true; 947 | // }, 948 | // display: function() { 949 | // let node = $(this).closest('.treeview-node'); 950 | // let textEle = node.find('.treeview-txt'); 951 | // let item = converItem(textEle); 952 | // if (!item.isdir) { 953 | // // 不是文件夹不显示 954 | // // return "disable"; 955 | // return false; 956 | // } 957 | // }, 958 | // keyboard: "" 959 | // }, { 960 | title: "展开全部", 961 | action: function() { 962 | let ul = $(this).closest('.treeview-node').next(); 963 | let textEle = ul.find('.treeview-txt'); 964 | ul.find("> li > .treeview-node:not(.treenode-empty) em.icon-operate:not(.minus)").click(); 965 | return true; 966 | }, 967 | display: function() { 968 | let node = $(this).closest('.treeview-node'); 969 | let textEle = node.find('.treeview-txt'); 970 | let item = converItem(textEle); 971 | if (!item.isdir) { 972 | // 不是文件夹不显示 973 | // return "disable"; 974 | return false; 975 | } 976 | }, 977 | keyboard: "" 978 | }, { 979 | title: "折叠全部", 980 | action: function() { 981 | let ul = $(this).closest('.treeview-node').next(); 982 | let textEle = ul.find('.treeview-txt'); 983 | ul.find("> li > .treeview-node:not(.treenode-empty) em.icon-operate.minus").click(); 984 | 985 | return true; 986 | }, 987 | display: function() { 988 | let node = $(this).closest('.treeview-node'); 989 | let textEle = node.find('.treeview-txt'); 990 | let item = converItem(textEle); 991 | if (!item.isdir) { 992 | // 不是文件夹不显示 993 | // return "disable"; 994 | return false; 995 | } 996 | // if (s.getCheckedIndexs().length > 1) 997 | // return "disable"; 998 | // var e = i(this).closest(".AuPKyz"); 999 | // return s.isGridMode() && (e = i(this).closest(".cEefyz")), 1000 | // e.length && !e.hasClass("open-enable") ? "disable" : void 0 1001 | }, 1002 | keyboard: "" 1003 | }], 1004 | middle: [], 1005 | bottom: [] 1006 | }; 1007 | t.Broker.initMenuBroker({ 1008 | target: i(r.treeTarget)[0], 1009 | type: "zfdev-tree", 1010 | config: o, 1011 | events: { 1012 | beforeMenu: function() { 1013 | // 设置选中状态 1014 | let node = $(this).closest('.treeview-node'); 1015 | $('.treeview-node-on').removeClass('treeview-node-on'); 1016 | node.addClass('treeview-node-on'); 1017 | }, 1018 | afterMenu: function() { 1019 | s.lock(!0) 1020 | }, 1021 | menuHide: function() { 1022 | s.lock(!1) 1023 | } 1024 | } 1025 | }) 1026 | }; 1027 | listMenu(require); 1028 | 1029 | 1030 | /* ------------------------------------------ 初始化 - END --------------------------------------------------------- */ 1031 | 1032 | 1033 | 1034 | /* ------------------------------------------ 生成图片 - START --------------------------------------------------------- */ 1035 | function generateImage() { 1036 | 1037 | // img元素 1038 | let $img = $("#zfdev-tree-manager-img"); 1039 | if ($img.length === 0) { 1040 | let imgHTML = ` 1041 |
    1042 | 1043 |
    1044 | 1051 | 1058 | 1060 | 1061 | 1062 | 1063 | 1064 | 1065 |
    1066 |
    1067 | `; 1068 | $("body").prepend($(imgHTML)); 1069 | $img = $('#zfdev-tree-manager-img'); 1070 | /** 1071 | * 关闭 1072 | */ 1073 | $('#zfdev-treeview-img-close').click(function(){ 1074 | $('#zfdev-treeview-img-div').remove(); 1075 | }); 1076 | /** 1077 | * 下载 1078 | */ 1079 | $('#zfdev-treeview-img-download').click(function(){ 1080 | var link = document.createElement('a'); 1081 | link.href = $("#zfdev-tree-manager-img").attr('src'); 1082 | link.download = yunData.FILENAME + ".png"; 1083 | 1084 | var e = document.createEvent('MouseEvents'); 1085 | e.initEvent('click',true,true); 1086 | link.dispatchEvent(e); 1087 | link.remove(); 1088 | }); 1089 | /** 1090 | * 放大(新窗口查看) 1091 | */ 1092 | $('#zfdev-treeview-img-zoom').click(function(){ 1093 | let w = window.open('https://zfdev.com'); 1094 | w.document.write($("#zfdev-tree-manager-img")[0].outerHTML); 1095 | w.document.body.style.background="dimgrey"; 1096 | w.document.title = yunData.FILENAME; 1097 | w.document.title += " 预览图"; 1098 | }); 1099 | 1100 | }else{ 1101 | $('#zfdev-treeview-img-download').css('display', 'none'); 1102 | $('#zfdev-treeview-img-zoom').css('display', 'none'); 1103 | $('#zfdev-treeview-img-div').height(''); 1104 | } 1105 | // loading图片 1106 | $img[0].src = "/box-static/system-core/system/uiService/tip/img/loading-white_e1bf1df.gif"; 1107 | 1108 | 1109 | //要转换为图片的dom对象 1110 | var element = $('#zfdev-tree-manager .file-tree-container > .treeview-content '); 1111 | 1112 | // 克隆元素用于生成完成图片 1113 | var copyDom = element.clone(); 1114 | copyDom.css("background", "white"); // 设置背景 1115 | copyDom.addClass("zfdev-tree-manager"); 1116 | 1117 | copyDom.find(".treeview-time").remove(); // 删除日期 1118 | copyDom.attr('id', "gengrate-image-copy-dom"); // 设置id 1119 | copyDom.width("max-content"); // 设置宽度为内容的宽度 1120 | $(copyDom).find('.treeview-node-on').removeClass('treeview-node-on'); //去除选中状态 1121 | 1122 | $('body').append(copyDom); // 添加到Body 1123 | 1124 | // 计算框高,设置未偶数。(奇数会导致transform后模糊,未完成解决图片模糊问题) 1125 | let w = copyDom.width(); 1126 | w = w % 2 ? w + 1 : w; 1127 | copyDom.width(w + "px"); 1128 | let h = copyDom.height(); 1129 | h = h % 2 ? h + 1 : h; 1130 | h = h + 16; // 预留水印位置 1131 | copyDom.height(h + "px"); 1132 | 1133 | // 生成图片 1134 | html2image(copyDom, $img[0]); 1135 | 1136 | // 设置水印 1137 | function setWatermark(canvas, text, fsz) { 1138 | let context = canvas.getContext('2d'); 1139 | context.font = 'bold ' + fsz + 'px Arial'; // 字体 1140 | // context.textAlign = 'center'; 1141 | context.textBaseline = 'bottom'; 1142 | context.fillStyle = '#ccc'; // 填充颜色 1143 | context.strokeStyle = '#ccc'; // 线条颜色 1144 | context.fillText(text, context.canvas.width - 150, context.canvas.height - 2); 1145 | 1146 | context.lineWidth = 2; //设置边框宽度 1147 | context.strokeRect(0, 0, context.canvas.width, context.canvas.height); //加粗边框矩形 1148 | } 1149 | 1150 | /** 1151 | * create by lrj 1152 | * @param source 要转换为图片的dom对象 1153 | * @param image 要显示图片的img标签 1154 | */ 1155 | function html2image(source, image) { 1156 | html2canvas(source, { 1157 | allowTaint: false, 1158 | taintTest: false, 1159 | }).then(function(canvas) { 1160 | setWatermark(canvas, "由 ZFDev Manager 生成", 10); 1161 | var imageData = canvas.toDataURL(1); // 转为DATA URL格式 1162 | image.src = imageData; 1163 | source.remove(); // 删除复制的元素 1164 | $('#zfdev-treeview-img-download').css('display','block'); // 显示下载按钮 1165 | $('#zfdev-treeview-img-zoom').css('display','block'); // 显示下载按钮 1166 | 1167 | if (h>600){ 1168 | $('#zfdev-treeview-img-div').height('600px'); 1169 | } 1170 | }); 1171 | } 1172 | } 1173 | // 添加“生成文件树图片”按钮 1174 | let generateImageHTML = '预览图'; 1175 | let $generate_image_button = $(generateImageHTML); 1176 | $("#bd-main .module-share-header .slide-show-right .x-button-box").prepend($generate_image_button); 1177 | /** 1178 | * “生成文件树图片”按钮点击事件 1179 | */ 1180 | $generate_image_button.click(function() { 1181 | generateImage(); 1182 | }); 1183 | 1184 | 1185 | /* ------------------------------------------ 生成图片 - END --------------------------------------------------------- */ 1186 | 1187 | // 默认使用“文件树”视图 1188 | $('#zfdev-tree-view-btn').click(); 1189 | 1190 | 1191 | 1192 | })(); 1193 | --------------------------------------------------------------------------------