├── .gitattributes ├── KodBox ├── docxViewer │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ └── static │ │ ├── css │ │ └── typo.css │ │ ├── images │ │ └── icon.png │ │ ├── js │ │ └── mammoth.browser.min.js │ │ ├── main.js │ │ └── page.html ├── photoSphereViewer │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ └── static │ │ ├── css │ │ └── photo-sphere-viewer.min.css │ │ ├── images │ │ ├── icon.png │ │ └── loading.gif │ │ ├── js │ │ ├── doT.min.js │ │ ├── html5shiv.js │ │ ├── photo-sphere-viewer.min.js │ │ ├── polyfill.min.js │ │ ├── respond.min.js │ │ ├── three.min.js │ │ └── uevent.min.js │ │ ├── main.js │ │ └── page.html ├── psdViewer │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ └── static │ │ ├── images │ │ └── icon.png │ │ ├── json-viewer │ │ ├── jquery.json-viewer.css │ │ └── jquery.json-viewer.js │ │ ├── main.js │ │ └── psd.min.js ├── xProber │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ ├── static │ │ ├── icon.png │ │ └── screenshot.png │ └── xProber │ │ ├── index.php │ │ └── x.php.inc └── xlsxViewer │ ├── app.php │ ├── i18n │ ├── en.php │ └── zh-CN.php │ ├── package.json │ └── static │ ├── css │ ├── jexcel.css │ └── jsuites.css │ ├── images │ └── icon.png │ ├── js │ ├── jexcel.js │ ├── jsuites.js │ ├── jszip.js │ └── xlsx.js │ ├── main.js │ └── page.html ├── KodExplorer ├── docxViewer │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ └── static │ │ ├── css │ │ └── typo.css │ │ ├── images │ │ └── icon.png │ │ ├── js │ │ └── mammoth.browser.min.js │ │ ├── main.js │ │ └── page.html ├── photoSphereViewer │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ └── static │ │ ├── css │ │ └── photo-sphere-viewer.min.css │ │ ├── images │ │ ├── icon.png │ │ └── loading.gif │ │ ├── js │ │ ├── doT.min.js │ │ ├── html5shiv.js │ │ ├── photo-sphere-viewer.min.js │ │ ├── polyfill.min.js │ │ ├── respond.min.js │ │ ├── three.min.js │ │ └── uevent.min.js │ │ ├── main.js │ │ └── page.html ├── psdViewer │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ └── static │ │ ├── images │ │ └── icon.png │ │ ├── json-viewer │ │ ├── jquery.json-viewer.css │ │ └── jquery.json-viewer.js │ │ ├── main.js │ │ └── psd.min.js ├── xProber │ ├── app.php │ ├── i18n │ │ ├── en.php │ │ └── zh-CN.php │ ├── package.json │ ├── static │ │ ├── icon.png │ │ └── screenshot.png │ └── xProber │ │ ├── index.php │ │ └── x.php.inc └── xlsxViewer │ ├── app.php │ ├── i18n │ ├── en.php │ └── zh-CN.php │ ├── package.json │ └── static │ ├── css │ ├── jexcel.css │ └── jsuites.css │ ├── images │ └── icon.png │ ├── js │ ├── jexcel.js │ ├── jsuites.js │ ├── jszip.js │ └── xlsx.js │ ├── main.js │ └── page.html ├── LICENSE └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /KodBox/docxViewer/app.php: -------------------------------------------------------------------------------- 1 | hookRegist(array( 22 | 'user.commonJs.insert' => 'docxViewerPlugin.echoJs', 23 | )); 24 | } 25 | 26 | public function echoJs() { 27 | $this->echoFile('static/main.js'); 28 | } 29 | 30 | public function index() { 31 | $fileUrl = $this->filePathLink($this->in['path']) . '&name=/' . $this->in['name']; 32 | $fileName = $this->in['name']; 33 | include($this->pluginPath . 'static/page.html'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /KodBox/docxViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'DOCX document preview', 4 | 'docxViewer.meta.title' => 'DOCX document preview', 5 | 'docxViewer.meta.desc' => 'View .docx files online without a third-party interface', 6 | ); 7 | -------------------------------------------------------------------------------- /KodBox/docxViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'DOCX 文档预览', 4 | 'docxViewer.meta.title' => 'DOCX 文档预览', 5 | 'docxViewer.meta.desc' => 'DOCX 文档预览,无需借助第三方接口即可在线查看 .docx 文件', 6 | ); -------------------------------------------------------------------------------- /KodBox/docxViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "docxViewer", 3 | "name": "{{LNG['docxViewer.meta.name']}}", 4 | "title": "{{LNG['docxViewer.meta.title']}}", 5 | "version": "1.0", 6 | "category": "file", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG['docxViewer.meta.desc']}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "formStyle": { 17 | "className": "form-box-title-left", 18 | "tabs": { 19 | "{{LNG['admin.setting.base']}}": "pluginAuth,sep001,openWith", 20 | } 21 | }, 22 | "pluginAuth": { 23 | "type": "userSelect", 24 | "value": {"all": 1}, 25 | "display": "{{LNG['admin.plugin.auth']}}", 26 | "desc": "{{LNG['admin.plugin.authDesc']}}", 27 | "require": 1 28 | }, 29 | "sep001": "
", 30 | "openWith": { 31 | "type": "radio", 32 | "value": "dialog", 33 | "display": "{{LNG['admin.plugin.openWith']}}", 34 | "info1": { 35 | "dialog": "{{LNG['admin.plugin.openWithDilog']}}", 36 | "window": "{{LNG['admin.plugin.openWithWindow']}}" 37 | }, 38 | "info": { 39 | "dialog": "{{LNG['admin.plugin.openWithDilog']}}", 40 | "window": "{{LNG['admin.plugin.openWithWindow']}}" 41 | } 42 | }, 43 | "fileExt": { 44 | "type": "tags", 45 | "display": "{{LNG['admin.plugin.fileExt']}}", 46 | "desc": "{{LNG['admin.plugin.fileExtDesc']}}", 47 | "value": "docx", 48 | }, 49 | "fileSort": { 50 | "type": "number", 51 | "display": "{{LNG['admin.plugin.fileSort']}}", 52 | "desc": "{{LNG['admin.plugin.fileSortDesc']}}", 53 | "value": 10, 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /KodBox/docxViewer/static/css/typo.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /* 防止用户自定义背景颜色对网页的影响,添加让用户可以自定义字体 */ 4 | html { 5 | color: #333; 6 | background: #fff; 7 | -webkit-text-size-adjust: 100%; 8 | -ms-text-size-adjust: 100%; 9 | text-rendering: optimizelegibility; 10 | } 11 | 12 | /* 如果你的项目仅支持 IE9+ | Chrome | Firefox 等,推荐在 中添加 .borderbox 这个 class */ 13 | html.borderbox *, html.borderbox *:before, html.borderbox *:after { 14 | -moz-box-sizing: border-box; 15 | -webkit-box-sizing: border-box; 16 | box-sizing: border-box; 17 | } 18 | 19 | /* 内外边距通常让各个浏览器样式的表现位置不同 */ 20 | body, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, menu, nav, section { 21 | margin: 0; 22 | padding: 0; 23 | } 24 | 25 | /* 重设 HTML5 标签, IE 需要在 js 中 createElement(TAG) */ 26 | article, aside, details, figcaption, figure, footer, header, menu, nav, section { 27 | display: block; 28 | } 29 | 30 | /* HTML5 媒体文件跟 img 保持一致 */ 31 | audio, canvas, video { 32 | display: inline-block; 33 | } 34 | 35 | /* 要注意表单元素并不继承父级 font 的问题 */ 36 | body, button, input, select, textarea { 37 | font: 300 1em/1.8 PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif; 38 | } 39 | 40 | button::-moz-focus-inner, 41 | input::-moz-focus-inner { 42 | padding: 0; 43 | border: 0; 44 | } 45 | 46 | /* 去掉各Table cell 的边距并让其边重合 */ 47 | table { 48 | border-collapse: collapse; 49 | border-spacing: 0; 50 | } 51 | 52 | /* 去除默认边框 */ 53 | fieldset, img { 54 | border: 0; 55 | } 56 | 57 | /* 块/段落引用 */ 58 | blockquote { 59 | position: relative; 60 | color: #999; 61 | font-weight: 400; 62 | border-left: 1px solid #1abc9c; 63 | padding-left: 1em; 64 | margin: 1em 3em 1em 2em; 65 | } 66 | 67 | @media only screen and ( max-width: 640px ) { 68 | blockquote { 69 | margin: 1em 0; 70 | } 71 | } 72 | 73 | /* Firefox 以外,元素没有下划线,需添加 */ 74 | acronym, abbr { 75 | border-bottom: 1px dotted; 76 | font-variant: normal; 77 | text-decoration: none; 78 | } 79 | 80 | /* 添加鼠标问号,进一步确保应用的语义是正确的(要知道,交互他们也有洁癖,如果你不去掉,那得多花点口舌) */ 81 | abbr { 82 | cursor: help; 83 | } 84 | 85 | /* 一致的 del 样式 */ 86 | del { 87 | text-decoration: line-through; 88 | } 89 | 90 | address, caption, cite, code, dfn, em, th, var { 91 | font-style: normal; 92 | font-weight: 400; 93 | } 94 | 95 | /* 对齐是排版最重要的因素, 别让什么都居中 */ 96 | caption, th { 97 | text-align: left; 98 | } 99 | 100 | q:before, q:after { 101 | content: ''; 102 | } 103 | 104 | /* 统一上标和下标 */ 105 | sub, sup { 106 | font-size: 75%; 107 | line-height: 0; 108 | position: relative; 109 | } 110 | 111 | :root sub, :root sup { 112 | vertical-align: baseline; /* for ie9 and other modern browsers */ 113 | } 114 | 115 | sup { 116 | top: -0.5em; 117 | } 118 | 119 | sub { 120 | bottom: -0.25em; 121 | } 122 | 123 | /* 让链接在 hover 状态下显示下划线 */ 124 | a { 125 | color: #1abc9c; 126 | } 127 | 128 | a:hover { 129 | text-decoration: underline; 130 | } 131 | 132 | .typo a { 133 | border-bottom: 1px solid #1abc9c; 134 | } 135 | 136 | .typo a:hover { 137 | border-bottom-color: #555; 138 | color: #555; 139 | text-decoration: none; 140 | } 141 | 142 | /* 默认不显示下划线,保持页面简洁 */ 143 | ins, a { 144 | text-decoration: none; 145 | } 146 | 147 | /* 专名号:虽然 u 已经重回 html5 Draft,但在所有浏览器中都是可以使用的, 148 | * 要做到更好,向后兼容的话,添加 class="typo-u" 来显示专名号 149 | * 关于 标签:http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-u-element 150 | * 被放弃的是 4,之前一直搞错 http://www.w3.org/TR/html401/appendix/changes.html#idx-deprecated 151 | * 一篇关于 标签的很好文章:http://html5doctor.com/u-element/ 152 | */ 153 | u, .typo-u { 154 | text-decoration: underline; 155 | } 156 | 157 | /* 标记,类似于手写的荧光笔的作用 */ 158 | mark { 159 | background: #fffdd1; 160 | border-bottom: 1px solid #ffedce; 161 | padding: 2px; 162 | margin: 0 5px; 163 | } 164 | 165 | /* 代码片断 */ 166 | pre, code, pre tt { 167 | font-family: Courier, 'Courier New', monospace; 168 | } 169 | 170 | pre { 171 | background: #f8f8f8; 172 | border: 1px solid #ddd; 173 | padding: 1em 1.5em; 174 | display: block; 175 | -webkit-overflow-scrolling: touch; 176 | } 177 | 178 | /* 一致化 horizontal rule */ 179 | hr { 180 | border: none; 181 | border-bottom: 1px solid #cfcfcf; 182 | margin-bottom: 0.8em; 183 | height: 10px; 184 | } 185 | 186 | /* 底部印刷体、版本等标记 */ 187 | small, .typo-small, 188 | /* 图片说明 */ 189 | figcaption { 190 | font-size: 0.9em; 191 | color: #888; 192 | } 193 | 194 | strong, b { 195 | font-weight: bold; 196 | color: #000; 197 | } 198 | 199 | /* 可拖动文件添加拖动手势 */ 200 | [draggable] { 201 | cursor: move; 202 | } 203 | 204 | .clearfix:before, .clearfix:after { 205 | content: ""; 206 | display: table; 207 | } 208 | 209 | .clearfix:after { 210 | clear: both; 211 | } 212 | 213 | .clearfix { 214 | zoom: 1; 215 | } 216 | 217 | /* 强制文本换行 */ 218 | .textwrap, .textwrap td, .textwrap th { 219 | word-wrap: break-word; 220 | word-break: break-all; 221 | } 222 | 223 | .textwrap-table { 224 | table-layout: fixed; 225 | } 226 | 227 | /* 提供 serif 版本的字体设置: iOS 下中文自动 fallback 到 sans-serif */ 228 | .serif { 229 | font-family: Palatino, Optima, Georgia, serif; 230 | } 231 | 232 | /* 保证块/段落之间的空白隔行 */ 233 | .typo p, .typo pre, .typo ul, .typo ol, .typo dl, .typo form, .typo hr, .typo table, 234 | .typo-p, .typo-pre, .typo-ul, .typo-ol, .typo-dl, .typo-form, .typo-hr, .typo-table, blockquote { 235 | margin-bottom: 1.2em 236 | } 237 | 238 | h1, h2, h3, h4, h5, h6 { 239 | font-family: PingFang SC, Verdana, Helvetica Neue, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif; 240 | font-weight: 100; 241 | color: #000; 242 | line-height: 1.35; 243 | } 244 | 245 | /* 标题应该更贴紧内容,并与其他块区分,margin 值要相应做优化 */ 246 | .typo h1, .typo h2, .typo h3, .typo h4, .typo h5, .typo h6, 247 | .typo-h1, .typo-h2, .typo-h3, .typo-h4, .typo-h5, .typo-h6 { 248 | margin-top: 1.2em; 249 | margin-bottom: 0.6em; 250 | line-height: 1.35; 251 | } 252 | 253 | .typo h1, .typo-h1 { 254 | font-size: 2em; 255 | } 256 | 257 | .typo h2, .typo-h2 { 258 | font-size: 1.8em; 259 | } 260 | 261 | .typo h3, .typo-h3 { 262 | font-size: 1.6em; 263 | } 264 | 265 | .typo h4, .typo-h4 { 266 | font-size: 1.4em; 267 | } 268 | 269 | .typo h5, .typo h6, .typo-h5, .typo-h6 { 270 | font-size: 1.2em; 271 | } 272 | 273 | /* 在文章中,应该还原 ul 和 ol 的样式 */ 274 | .typo ul, .typo-ul { 275 | margin-left: 1.3em; 276 | list-style: disc; 277 | } 278 | 279 | .typo ol, .typo-ol { 280 | list-style: decimal; 281 | margin-left: 1.9em; 282 | } 283 | 284 | .typo li ul, .typo li ol, .typo-ul ul, .typo-ul ol, .typo-ol ul, .typo-ol ol { 285 | margin-bottom: 0.8em; 286 | margin-left: 2em; 287 | } 288 | 289 | .typo li ul, .typo-ul ul, .typo-ol ul { 290 | list-style: circle; 291 | } 292 | 293 | /* 同 ul/ol,在文章中应用 table 基本格式 */ 294 | .typo table th, .typo table td, .typo-table th, .typo-table td, .typo table caption { 295 | border: 1px solid #ddd; 296 | padding: 0.5em 1em; 297 | color: #666; 298 | } 299 | 300 | .typo table th, .typo-table th { 301 | background: #fbfbfb; 302 | } 303 | 304 | .typo table thead th, .typo-table thead th { 305 | background: #f1f1f1; 306 | } 307 | 308 | .typo table caption { 309 | border-bottom: none; 310 | } 311 | 312 | /* 去除 webkit 中 input 和 textarea 的默认样式 */ 313 | .typo-input, .typo-textarea { 314 | -webkit-appearance: none; 315 | border-radius: 0; 316 | } 317 | 318 | .typo-em, .typo em, legend, caption { 319 | color: #000; 320 | font-weight: inherit; 321 | } 322 | 323 | /* 着重号,只能在少量(少于100个字符)且全是全角字符的情况下使用 */ 324 | .typo-em { 325 | position: relative; 326 | } 327 | 328 | .typo-em:after { 329 | position: absolute; 330 | top: 0.65em; 331 | left: 0; 332 | width: 100%; 333 | overflow: hidden; 334 | white-space: nowrap; 335 | content: "・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"; 336 | } 337 | 338 | /* Responsive images */ 339 | .typo img { 340 | max-width: 100%; 341 | } 342 | -------------------------------------------------------------------------------- /KodBox/docxViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/docxViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodBox/docxViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | Events.bind("explorer.kodApp.before", function(appList) { 3 | appList.push({ 4 | name: "docxViewer", 5 | title: "{{LNG['docxViewer.meta.name']}}", 6 | icon: "{{pluginHost}}static/images/icon.png", 7 | ext: "{{config.fileExt}}", 8 | sort: "{{config.fileSort}}", 9 | callback: function() { 10 | core.openFile("{{pluginApi}}", "{{config.openWith}}", _.toArray(arguments)); 11 | } 12 | }); 13 | }); 14 | }); -------------------------------------------------------------------------------- /KodBox/docxViewer/static/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $fileName . ' - ' . LNG('common.copyright.name') . LNG('common.copyright.powerBy'); ?> 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 118 | 119 | 120 |
121 |
122 |
123 |
124 |
125 | 126 | 161 | 162 | -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/app.php: -------------------------------------------------------------------------------- 1 | hookRegist(array( 18 | 'user.commonJs.insert' => 'photoSphereViewerPlugin.echoJs', 19 | )); 20 | } 21 | 22 | public function echoJs() { 23 | $this->echoFile('static/main.js'); 24 | } 25 | 26 | public function index() { 27 | $fileUrl = $this->filePathLink($this->in['path']) . '&name=/' . $this->in['name']; 28 | $fileName = $this->in['name']; 29 | include($this->pluginPath . 'static/page.html'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'Photo Sphere Viewer', 4 | 'photoSphereViewer.meta.title' => 'Photo Sphere Viewer', 5 | 'photoSphereViewer.meta.desc' => 'A Plugin library to display Photo Sphere panoramas.', 6 | 7 | 'photoSphereViewer.page.navbar.autorotate' => 'Automatic rotation', 8 | 'photoSphereViewer.page.navbar.zoom' => 'Zoom', 9 | 'photoSphereViewer.page.navbar.zoomOut' => 'Zoom out', 10 | 'photoSphereViewer.page.navbar.zoomIn' => 'Zoom in', 11 | 'photoSphereViewer.page.navbar.download' => 'Download', 12 | 'photoSphereViewer.page.navbar.fullscreen' => 'Fullscreen', 13 | 'photoSphereViewer.page.navbar.markers' => 'Markers', 14 | 'photoSphereViewer.page.navbar.gyroscope' => 'Gyroscope', 15 | 'photoSphereViewer.page.navbar.stereo' => 'Stereo view', 16 | 'photoSphereViewer.page.navbar.stereo_notification' => 'Click anywhere to exit stereo view.', 17 | 'photoSphereViewer.page.navbar.please_rotate' => array('Please rotate your device', '(or tap to continue)'), 18 | 'photoSphereViewer.page.navbar.two_fingers' => array('Use two fingers to navigate') 19 | ); 20 | -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | '全景图查看器', 4 | 'photoSphereViewer.meta.title' => '全景图查看器', 5 | 'photoSphereViewer.meta.desc' => '球形全景图查看器', 6 | 7 | 'photoSphereViewer.page.navbar.autorotate' => '自动旋转视角', 8 | 'photoSphereViewer.page.navbar.zoom' => '缩放图像', 9 | 'photoSphereViewer.page.navbar.zoomOut' => '缩小', 10 | 'photoSphereViewer.page.navbar.zoomIn' => '放大', 11 | 'photoSphereViewer.page.navbar.download' => '下载', 12 | 'photoSphereViewer.page.navbar.fullscreen' => '全屏', 13 | 'photoSphereViewer.page.navbar.markers' => '标记', 14 | 'photoSphereViewer.page.navbar.gyroscope' => '陀螺仪', 15 | 'photoSphereViewer.page.navbar.stereo' => '立体视图', 16 | 'photoSphereViewer.page.navbar.stereo_notification' => '单击任意位置退出立体视图', 17 | 'photoSphereViewer.page.navbar.please_rotate' => array('请旋转你的设备', '(或点击继续)'), 18 | 'photoSphereViewer.page.navbar.two_fingers' => array('用两个手指切换视角') 19 | ); -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "photoSphereViewer", 3 | "name": "{{LNG['photoSphereViewer.meta.name']}}", 4 | "title": "{{LNG['photoSphereViewer.meta.title']}}", 5 | "version": "1.0", 6 | "category": "media,file", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG['photoSphereViewer.meta.desc']}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "formStyle": { 17 | "className": "form-box-title-left", 18 | "tabs": { 19 | "{{LNG['admin.setting.base']}}": "pluginAuth,sep001,openWith", 20 | } 21 | }, 22 | "pluginAuth": { 23 | "type": "userSelect", 24 | "value": {"all": 1}, 25 | "display": "{{LNG['admin.plugin.auth']}}", 26 | "desc": "{{LNG['admin.plugin.authDesc']}}", 27 | "require": 1 28 | }, 29 | "sep001": "
", 30 | "openWith": { 31 | "type": "radio", 32 | "value": "dialog", 33 | "display": "{{LNG['admin.plugin.openWith']}}", 34 | "info1": { 35 | "dialog": "{{LNG['admin.plugin.openWithDilog']}}", 36 | "window": "{{LNG['admin.plugin.openWithWindow']}}" 37 | }, 38 | "info": { 39 | "dialog": "{{LNG['admin.plugin.openWithDilog']}}", 40 | "window": "{{LNG['admin.plugin.openWithWindow']}}" 41 | } 42 | }, 43 | "fileExt": { 44 | "type": "tags", 45 | "display": "{{LNG['admin.plugin.fileExt']}}", 46 | "desc": "{{LNG['admin.plugin.fileExtDesc']}}", 47 | "value": "jpg,jpeg,png,bmp,gif,svg,webp", 48 | }, 49 | "fileSort": { 50 | "type": "number", 51 | "display": "{{LNG['admin.plugin.fileSort']}}", 52 | "desc": "{{LNG['admin.plugin.fileSortDesc']}}", 53 | "value": 10, 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/css/photo-sphere-viewer.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Photo Sphere Viewer 3.5.0 3 | * Copyright (c) 2014-2015 Jérémy Heleine 4 | * Copyright (c) 2015-2018 Damien "Mistic" Sorel 5 | * Licensed under MIT (https://opensource.org/licenses/MIT) 6 | */ 7 | .psv-container{width:100%;height:100%;margin:0;padding:0;position:relative;background:radial-gradient(#fff 0,#fdfdfd 16%,#fbfbfb 33%,#f8f8f8 49%,#efefef 66%,#dfdfdf 82%,#bfbfbf 100%);overflow:hidden}.psv-canvas-container{position:absolute;top:0;left:0;z-index:0;-webkit-transition:opacity linear .1s;transition:opacity linear .1s}.psv-canvas{display:block}.psv-loader-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100}.psv-loader{position:relative;text-align:center;color:rgba(61,61,61,.7);width:150px;height:150px;border:10px solid transparent}.psv-loader::before{content:'';display:inline-block;height:100%;vertical-align:middle}.psv-loader,.psv-loader-image,.psv-loader-text{display:inline-block;vertical-align:middle}.psv-loader-canvas{position:absolute;top:0;left:0;width:100%;height:100%}.psv-loader-text{font:14px sans-serif}.psv-navbar{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;z-index:90;bottom:-40px;left:0;width:100%;height:40px;background:rgba(61,61,61,.5);-webkit-transition:bottom ease-in-out .1s;transition:bottom ease-in-out .1s}.psv-navbar--open{bottom:0}.psv-navbar,.psv-navbar *{-webkit-box-sizing:content-box;box-sizing:content-box}.psv-caption{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;color:rgba(255,255,255,.7);overflow:hidden;text-align:center}.psv-caption-icon{height:20px;width:20px;cursor:pointer}.psv-caption-icon *{fill:rgba(255,255,255,.7)}.psv-caption-content{display:inline-block;padding:10px;font:16px sans-serif;white-space:nowrap}.psv-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:10px;position:relative;cursor:pointer;height:20px;width:20px;background:0 0;color:rgba(255,255,255,.7)}.psv-button--active{background:rgba(255,255,255,.2)}.psv-button--disabled{pointer-events:none;opacity:.5}.psv-button .psv-button-svg{width:100%;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.psv-button .psv-button-svg *{fill:rgba(255,255,255,.7)}.psv-button--hover-scale:not(.psv-button--disabled):hover .psv-button-svg{-webkit-transform:scale(1.2);transform:scale(1.2)}.psv-hud{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;z-index:10;width:100%;height:100%}.psv-hud-svg-container{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20}.psv-marker{cursor:pointer;display:none}.psv-marker--normal{position:absolute;top:0;left:0;z-index:30;background-size:contain;background-repeat:no-repeat}.psv-marker--transparent{display:block;opacity:0}.psv-marker--visible{display:block}.psv-panel{position:absolute;z-index:90;right:0;height:100%;width:400px;max-width:calc(100% - 24px);background:rgba(10,10,10,.7);-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.1s;transition-duration:.1s;cursor:default;margin-left:9px}.psv-container--has-navbar .psv-panel{height:calc(100% - 40px)}.psv-panel-close-button{display:none;position:absolute;top:0;left:-24px;width:24px;height:24px;background:rgba(0,0,0,.9)}.psv-panel-close-button::after,.psv-panel-close-button::before{content:'';position:absolute;top:50%;left:4px;width:15px;height:1px;background-color:#fff;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-transition-property:width,left,-webkit-transform;transition-property:width,left,-webkit-transform;transition-property:width,left,transform;transition-property:width,left,transform,-webkit-transform}.psv-panel-close-button::before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.psv-panel-close-button::after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.psv-panel-close-button:hover::after,.psv-panel-close-button:hover::before{left:0;width:23px}.psv-panel-close-button:hover::before{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.psv-panel-close-button:hover::after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.psv-panel-resizer{display:none;position:absolute;top:0;left:-9px;width:9px;height:100%;background-color:rgba(0,0,0,.9);cursor:col-resize}.psv-panel-resizer::before{content:'';position:absolute;top:50%;left:1px;margin-top:-14.5px;width:1px;height:1px;-webkit-box-shadow:1px 0 #fff,3px 0 #fff,5px 0 #fff,1px 2px #fff,3px 2px #fff,5px 2px #fff,1px 4px #fff,3px 4px #fff,5px 4px #fff,1px 6px #fff,3px 6px #fff,5px 6px #fff,1px 8px #fff,3px 8px #fff,5px 8px #fff,1px 10px #fff,3px 10px #fff,5px 10px #fff,1px 12px #fff,3px 12px #fff,5px 12px #fff,1px 14px #fff,3px 14px #fff,5px 14px #fff,1px 16px #fff,3px 16px #fff,5px 16px #fff,1px 18px #fff,3px 18px #fff,5px 18px #fff,1px 20px #fff,3px 20px #fff,5px 20px #fff,1px 22px #fff,3px 22px #fff,5px 22px #fff,1px 24px #fff,3px 24px #fff,5px 24px #fff,1px 26px #fff,3px 26px #fff,5px 26px #fff,1px 28px #fff,3px 28px #fff,5px 28px #fff;box-shadow:1px 0 #fff,3px 0 #fff,5px 0 #fff,1px 2px #fff,3px 2px #fff,5px 2px #fff,1px 4px #fff,3px 4px #fff,5px 4px #fff,1px 6px #fff,3px 6px #fff,5px 6px #fff,1px 8px #fff,3px 8px #fff,5px 8px #fff,1px 10px #fff,3px 10px #fff,5px 10px #fff,1px 12px #fff,3px 12px #fff,5px 12px #fff,1px 14px #fff,3px 14px #fff,5px 14px #fff,1px 16px #fff,3px 16px #fff,5px 16px #fff,1px 18px #fff,3px 18px #fff,5px 18px #fff,1px 20px #fff,3px 20px #fff,5px 20px #fff,1px 22px #fff,3px 22px #fff,5px 22px #fff,1px 24px #fff,3px 24px #fff,5px 24px #fff,1px 26px #fff,3px 26px #fff,5px 26px #fff,1px 28px #fff,3px 28px #fff,5px 28px #fff;background:0 0}.psv-panel-content{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;color:#dcdcdc;font:16px sans-serif;overflow:auto}.psv-panel-content:not(.psv-panel-content--no-margin){padding:1em}.psv-panel-content--no-interaction{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.psv-panel--open{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;-webkit-transition-duration:.2s;transition-duration:.2s}.psv-panel--open .psv-panel-close-button,.psv-panel--open .psv-panel-resizer{display:block}.psv-tooltip{position:absolute;z-index:50;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:200px;background-color:rgba(61,61,61,.8);border-radius:4px;padding:.5em 1em;opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.1s;transition-duration:.1s}.psv-tooltip-content{color:#fff;font:14px sans-serif;text-shadow:0 1px #000}.psv-tooltip-arrow{position:absolute;height:0;width:0;border:7px solid transparent}.psv-tooltip--bottom-center{-webkit-box-shadow:0 3px 0 rgba(90,90,90,.7);box-shadow:0 3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--bottom-center .psv-tooltip-arrow{border-bottom-color:rgba(61,61,61,.8)}.psv-tooltip--center-left{-webkit-box-shadow:-3px 0 0 rgba(90,90,90,.7);box-shadow:-3px 0 0 rgba(90,90,90,.7);-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--center-left .psv-tooltip-arrow{border-left-color:rgba(61,61,61,.8)}.psv-tooltip--top-center{-webkit-box-shadow:0 -3px 0 rgba(90,90,90,.7);box-shadow:0 -3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--top-center .psv-tooltip-arrow{border-top-color:rgba(61,61,61,.8)}.psv-tooltip--center-right{-webkit-box-shadow:3px 0 0 rgba(90,90,90,.7);box-shadow:3px 0 0 rgba(90,90,90,.7);-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--center-right .psv-tooltip-arrow{border-right-color:rgba(61,61,61,.8)}.psv-tooltip--bottom-left{-webkit-box-shadow:-3px 3px 0 rgba(90,90,90,.7);box-shadow:-3px 3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--bottom-left .psv-tooltip-arrow{border-bottom-color:rgba(61,61,61,.8)}.psv-tooltip--bottom-right{-webkit-box-shadow:3px 3px 0 rgba(90,90,90,.7);box-shadow:3px 3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--bottom-right .psv-tooltip-arrow{border-bottom-color:rgba(61,61,61,.8)}.psv-tooltip--top-left{-webkit-box-shadow:-3px -3px 0 rgba(90,90,90,.7);box-shadow:-3px -3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--top-left .psv-tooltip-arrow{border-top-color:rgba(61,61,61,.8)}.psv-tooltip--top-right{-webkit-box-shadow:3px -3px 0 rgba(90,90,90,.7);box-shadow:3px -3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--top-right .psv-tooltip-arrow{border-top-color:rgba(61,61,61,.8)}.psv-tooltip--visible{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;-webkit-transition-duration:.1s;transition-duration:.1s}.psv-notification{position:absolute;z-index:100;bottom:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:0 2em;opacity:0;-webkit-transition-property:opacity,bottom;transition-property:opacity,bottom;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.2s;transition-duration:.2s}.psv-notification-content{max-width:50em;background-color:rgba(61,61,61,.8);border-radius:4px;padding:.5em 1em;font:14px sans-serif;color:#fff}.psv-notification--visible{opacity:100;bottom:80px}.psv-overlay{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;z-index:110;top:0;left:0;bottom:0;right:0;background:radial-gradient(#fff 0,#fdfdfd 16%,#fbfbfb 33%,#f8f8f8 49%,#efefef 66%,#dfdfdf 82%,#bfbfbf 100%);opacity:.8}.psv-overlay-image{margin-bottom:4vh}.psv-overlay-image svg{width:50vw}@media screen and (orientation:landscape){.psv-overlay-image svg{width:25vw}}.psv-overlay-text{font:30px sans-serif;text-align:center}.psv-overlay-subtext{font:20px sans-serif;opacity:.8;text-align:center}.psv-markers-list-title{font:24px sans-serif;margin:1em 0;text-align:center;text-shadow:2px 1px #000}.psv-markers-list{list-style:none;margin:0;padding:0;overflow:hidden}.psv-markers-list-item{clear:both;min-height:20px;padding:.5em 1em;cursor:pointer;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.psv-markers-list-item::before{content:'';position:absolute;top:0;left:0;height:100%;width:10px;margin-left:-10px}.psv-markers-list-item:nth-child(odd),.psv-markers-list-item:nth-child(odd)::before{background:rgba(255,255,255,.1)}.psv-markers-list-item:nth-child(even),.psv-markers-list-item:nth-child(even)::before{background:0 0}.psv-markers-list-item:hover{-webkit-transform:translateX(10px);transform:translateX(10px);-webkit-transition:-webkit-transform .1s ease-in-out;transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out}.psv-markers-list-image{float:left;width:20px}.psv-markers-list-name{margin:0;padding:0}.psv-markers-list-image+.psv-markers-list-name{padding-left:calc(20px + .5em)}.psv-autorotate-button{width:25px;height:25px;padding:7.5px}.psv-zoom-button{cursor:default;width:128px}.psv-zoom-button-minus,.psv-zoom-button-plus{float:left;position:relative;cursor:pointer;width:16px;height:16px}.psv-zoom-button-minus .psv-button-svg,.psv-zoom-button-plus .psv-button-svg{position:relative;top:20%}.psv-zoom-button-range{float:left;padding:9.5px 8px}.psv-zoom-button-line{position:relative;cursor:pointer;width:80px;height:1px;background:rgba(255,255,255,.7);-webkit-transition:all .3s ease;transition:all .3s ease}.psv-zoom-button-handle{position:absolute;border-radius:50%;top:-3px;width:7px;height:7px;background:rgba(255,255,255,.7);-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.psv-zoom-button:not(.psv-button--disabled):hover .psv-zoom-button-line{-webkit-box-shadow:0 0 2px rgba(255,255,255,.7);box-shadow:0 0 2px rgba(255,255,255,.7)}.psv-zoom-button:not(.psv-button--disabled):hover .psv-zoom-button-handle{-webkit-transform:scale(1.3);transform:scale(1.3)}@media (max-width:600px){.psv-zoom-button{width:auto;padding:0}.psv-zoom-button-range{display:none}.psv-zoom-button-minus,.psv-zoom-button-plus{width:20px;height:20px;padding:10px}.psv-zoom-button-minus .psv-button-svg,.psv-zoom-button-plus .psv-button-svg{top:0}}@media (max-width:600px){.psv-is-touch .psv-zoom-button{display:none}} -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/photoSphereViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/photoSphereViewer/static/images/loading.gif -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/js/doT.min.js: -------------------------------------------------------------------------------- 1 | /* Laura Doktorova https://github.com/olado/doT */ 2 | !function(){"use strict";function e(n,t,r){return("string"==typeof t?t:t.toString()).replace(n.define||a,function(e,t,o,a){return 0===t.indexOf("def.")&&(t=t.substring(4)),t in r||(":"===o?(n.defineParams&&a.replace(n.defineParams,function(e,n,o){r[t]={arg:n,text:o}}),t in r||(r[t]=a)):new Function("def","def['"+t+"']="+a)(r)),""}).replace(n.use||a,function(t,o){n.useParams&&(o=o.replace(n.useParams,function(e,n,t,o){if(r[t]&&r[t].arg&&o){var a=(t+":"+o).replace(/'|\\/g,"_");return r.__exp=r.__exp||{},r.__exp[a]=r[t].text.replace(new RegExp("(^|[^\\w$])"+r[t].arg+"([^\\w$])","g"),"$1"+o+"$2"),n+"def.__exp['"+a+"']"}}));var a=new Function("def","return "+o)(r);return a?e(n,a,r):a})}function n(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}var t,r={name:"doT",version:"1.1.1",templateSettings:{evaluate:/\{\{([\s\S]+?(\}?)+)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,encode:/\{\{!([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,useParams:/(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,defineParams:/^\s*([\w$]+):([\s\S]+)/,conditional:/\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,varname:"it",strip:!0,append:!0,selfcontained:!1,doNotSkipEncoded:!1},template:void 0,compile:void 0,log:!0};r.encodeHTMLSource=function(e){var n={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},t=e?/[&<>"'\/]/g:/&(?!#?\w+;)|<|>|"|'|\//g;return function(e){return e?e.toString().replace(t,function(e){return n[e]||e}):""}},t=function(){return this||(0,eval)("this")}(),"undefined"!=typeof module&&module.exports?module.exports=r:"function"==typeof define&&define.amd?define(function(){return r}):t.doT=r;var o={append:{start:"'+(",end:")+'",startencode:"'+encodeHTML("},split:{start:"';out+=(",end:");out+='",startencode:"';out+=encodeHTML("}},a=/$^/;r.template=function(c,i,u){i=i||r.templateSettings;var d,s,p=i.append?o.append:o.split,l=0,f=i.use||i.define?e(i,c,u||{}):c;f=("var out='"+(i.strip?f.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):f).replace(/'|\\/g,"\\$&").replace(i.interpolate||a,function(e,t){return p.start+n(t)+p.end}).replace(i.encode||a,function(e,t){return d=!0,p.startencode+n(t)+p.end}).replace(i.conditional||a,function(e,t,r){return t?r?"';}else if("+n(r)+"){out+='":"';}else{out+='":r?"';if("+n(r)+"){out+='":"';}out+='"}).replace(i.iterate||a,function(e,t,r,o){return t?(l+=1,s=o||"i"+l,t=n(t),"';var arr"+l+"="+t+";if(arr"+l+"){var "+r+","+s+"=-1,l"+l+"=arr"+l+".length-1;while("+s+"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); 8 | if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;dn;n++)o(e,e._deferreds[n]);e._deferreds=null}function u(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,i(n,e))})}catch(o){if(t)return;t=!0,i(n,o)}}var c=setTimeout;t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,t){var r=new this.constructor(n);return o(this,new function(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}(e,t,r)),r},t.prototype["finally"]=e,t.all=function(e){return new t(function(n,t){function o(e,f){try{if(f&&("object"==typeof f||"function"==typeof f)){var u=f.then;if("function"==typeof u)return void u.call(f,function(n){o(e,n)},t)}r[e]=f,0==--i&&n(r)}catch(c){t(c)}}if(!e||"undefined"==typeof e.length)throw new TypeError("Promise.all accepts an array");var r=Array.prototype.slice.call(e);if(0===r.length)return n([]);for(var i=r.length,f=0;r.length>f;f++)o(f,r[f])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(n){n(e)})},t.reject=function(e){return new t(function(n,t){t(e)})},t.race=function(e){return new t(function(n,t){for(var o=0,r=e.length;r>o;o++)e[o].then(n,t)})},t._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){c(e,0)},t._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var l=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"Promise"in l?l.Promise.prototype["finally"]||(l.Promise.prototype["finally"]=e):l.Promise=t}); 2 | -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/js/respond.min.js: -------------------------------------------------------------------------------- 1 | /*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl 2 | * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT 3 | * */ 4 | 5 | !function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;bb;b++)if(e=this.__events[a][b],"object"==typeof e?e.handleEvent(g):e.apply(this,f),g.isPropagationStopped())return g;if(this.__once&&a in this.__once){for(b=0,d=this.__once[a].length;d>b;b++)if(e=this.__once[a][b],"object"==typeof e?e.handleEvent(g):e.apply(this,f),g.isPropagationStopped())return delete this.__once[a],g;delete this.__once[a]}return g},change:function(a,b){var d,e,f,g=Array.prototype.slice.call(arguments,1),h=new c.Event(a,g);if(g.push(h),this.__events&&a in this.__events)for(d=0,e=this.__events[a].length;e>d;d++)if(g[0]=b,f=this.__events[a][d],b="object"==typeof f?f.handleEvent(h):f.apply(this,g),h.isPropagationStopped())return b;return b}},c.mixin=function(a,b){b=b||{},a="function"==typeof a?a.prototype:a,["on","off","once","trigger","change"].forEach(function(d){var e=b[d]||d;a[e]=c.prototype[d]}),Object.defineProperties(a,{__events:{value:null,writable:!0},__once:{value:null,writable:!0}})},c}); -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | Events.bind("explorer.kodApp.before", function(appList) { 3 | appList.push({ 4 | name: "photoSphereViewer", 5 | title: "{{LNG['photoSphereViewer.meta.name']}}", 6 | icon: "{{pluginHost}}static/images/icon.png", 7 | ext: "{{config.fileExt}}", 8 | sort: "{{config.fileSort}}", 9 | callback: function() { 10 | core.openFile("{{pluginApi}}", "{{config.openWith}}", _.toArray(arguments)); 11 | } 12 | }); 13 | }); 14 | }); -------------------------------------------------------------------------------- /KodBox/photoSphereViewer/static/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $fileName . ' - ' . LNG('common.copyright.name') . LNG('common.copyright.powerBy'); ?> 9 | 10 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 30 | 31 | 32 |
33 | 56 | 57 | -------------------------------------------------------------------------------- /KodBox/psdViewer/app.php: -------------------------------------------------------------------------------- 1 | hookRegist(array( 18 | 'user.commonJs.insert' => 'psdViewerPlugin.echoJs' 19 | )); 20 | } 21 | 22 | public function echoJs() { 23 | $this->echoFile('static/main.js'); 24 | } 25 | } -------------------------------------------------------------------------------- /KodBox/psdViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'PSD Viewer', 4 | 'psdViewer.meta.title' => 'PSD Viewer', 5 | 'psdViewer.meta.desc' => 'Preview PSD files online, view PSD file layer information, and support converting PSD to PNG download', 6 | 7 | 'psdViewer.contextMenu.psdTool' => 'PSD Tool', 8 | 'psdViewer.contextMenu.viewPsd' => 'Online preview', 9 | 'psdViewer.contextMenu.viewPsdLayer' => 'View layer information', 10 | 'psdViewer.contextMenu.downloadAsPng' => 'Convert to PNG and download', 11 | 12 | 'psdViewer.dialog.viewPsdLayer.title' => 'layer information' 13 | ); -------------------------------------------------------------------------------- /KodBox/psdViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'PSD 看图', 4 | 'psdViewer.meta.title' => 'PSD 看图', 5 | 'psdViewer.meta.desc' => '在线预览 PSD 文件,查看 PSD 文件图层信息,并支持将 PSD 转换为 PNG 下载', 6 | 7 | 'psdViewer.contextMenu.psdTool' => 'PSD 工具', 8 | 'psdViewer.contextMenu.viewPsd' => '在线预览', 9 | 'psdViewer.contextMenu.viewPsdLayer' => '查看图层信息', 10 | 'psdViewer.contextMenu.downloadAsPng' => '转换为 PNG 并下载', 11 | 12 | 'psdViewer.dialog.viewPsdLayer.title' => '图层信息' 13 | ); -------------------------------------------------------------------------------- /KodBox/psdViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "psdViewer", 3 | "name": "{{LNG['psdViewer.meta.name']}}", 4 | "title": "{{LNG['psdViewer.meta.title']}}", 5 | "version": "1.0", 6 | "category": "file,tools", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG['psdViewer.meta.desc']}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "pluginAuth": { 17 | "type": "userSelect", 18 | "value": "all:1", 19 | "display": "{{LNG['Plugin.config.auth']}}", 20 | "desc": "{{LNG['Plugin.config.authDesc']}}", 21 | "require": 1 22 | }, 23 | 24 | "fileExt": { 25 | "type": "tags", 26 | "display": "{{LNG['Plugin.Config.fileExt']}}", 27 | "desc": "{{LNG['Plugin.Config.fileExtDesc']}}", 28 | "value": "psd" 29 | }, 30 | "fileSort": { 31 | "type": "number", 32 | "display": "{{LNG['Plugin.Config.fileSort']}}", 33 | "desc": "{{LNG['Plugin.Config.fileSortDesc']}}", 34 | "value": 100 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /KodBox/psdViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/psdViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodBox/psdViewer/static/json-viewer/jquery.json-viewer.css: -------------------------------------------------------------------------------- 1 | /* Syntax highlighting for JSON objects */ 2 | ul.json-dict,ol.json-array{list-style-type:none;margin:0 0 0 1px;border-left:1px dotted #ccc;padding-left:2em}.json-string{color:#0b7500}.json-literal{color:#1a01cc;font-weight:700}a.json-toggle{position:relative;color:inherit;text-decoration:none}a.json-toggle:focus{outline:0}a.json-toggle:before{color:#aaa;content:"\25BC";position:absolute;display:inline-block;width:1em;left:-1em}a.json-toggle.collapsed:before{transform:rotate(-90deg);-ms-transform:rotate(-90deg);-webkit-transform:rotate(-90deg)}a.json-placeholder{color:#aaa;padding:0 1em;text-decoration:none}a.json-placeholder:hover{text-decoration:underline} -------------------------------------------------------------------------------- /KodBox/psdViewer/static/json-viewer/jquery.json-viewer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery json-viewer 3 | * @author: Alexandre Bodelot 4 | */ 5 | !function(a){function b(a){return a instanceof Object&&Object.keys(a).length>0}function c(a){var b=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return b.test(a)}function d(a,e){var g,h,i,j,f="";if("string"==typeof a)a=a.replace(/&/g,"&").replace(//g,">"),f+=c(a)?''+a+"":'"'+a+'"';else if("number"==typeof a)f+=''+a+"";else if("boolean"==typeof a)f+=''+a+"";else if(null===a)f+='null';else if(a instanceof Array)if(a.length>0){for(f+='[
    ',g=0;g",b(a[g])&&(f+=''),f+=d(a[g],e),g";f+="
]"}else f+="[]";else if("object"==typeof a)if(h=Object.keys(a).length,h>0){f+='{
    ';for(i in a)a.hasOwnProperty(i)&&(f+="
  • ",j=e.withQuotes?'"'+i+'"':i,f+=b(a[i])?''+j+"":j,f+=": "+d(a[i],e),--h>0&&(f+=","),f+="
  • ");f+="
}"}else f+="{}";return f}a.fn.jsonViewer=function(c,e){return e=e||{},this.each(function(){var f=d(c,e);b(c)&&(f=''+f),a(this).html(f),a(this).off("click"),a(this).on("click","a.json-toggle",function(){var c,d,b=a(this).toggleClass("collapsed").siblings("ul.json-dict, ol.json-array");return b.toggle(),b.is(":visible")?b.siblings(".json-placeholder").remove():(c=b.children("li").length,d=c+(c>1?" items":" item"),b.after(''+d+"")),!1}),a(this).on("click","a.json-placeholder",function(){return a(this).siblings("a.json-toggle").click(),!1}),1==e.collapsed&&a(this).find("a.json-toggle").click()})}}(jQuery); -------------------------------------------------------------------------------- /KodBox/psdViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | if(!$.supportCanvas()) return; 3 | 4 | // 事件响应 5 | var menuAction = function(arg, action) { 6 | Tips.loading(); 7 | try { 8 | var fileUrl = core.path2url(arg[0]); 9 | var fileName = (arg[2]).replace(/&/g, '&').replace(//g, '>'); 10 | requireAsync("{{pluginHost}}static/psd.min", function(plugin) { 11 | var PSD = requirePSD("psd"); 12 | PSD.fromURL(fileUrl).then(function(psd) { 13 | Tips.close(); 14 | switch (action) { 15 | case "view-psd-layer": 16 | var data = psd.tree().export(); 17 | if ($.artDialog) { 18 | requireAsync([ 19 | "{{pluginHost}}static/json-viewer/jquery.json-viewer.js", 20 | "{{pluginHost}}static/json-viewer/jquery.json-viewer.css" 21 | ], function() { 22 | var dialog = $.artDialog({ 23 | title: fileName + " - {{LNG['psdViewer.dialog.viewPsdLayer.title']}}", 24 | content: "
", 25 | ok: true 26 | }); 27 | $("#psd-layer-info").jsonViewer(data); 28 | dialog.position('50%', '50%'); 29 | }); 30 | } else { 31 | alert(JSON.stringify(data), undefined, 2); 32 | } 33 | break; 34 | 35 | case "download-as-png": 36 | download(psd.image.toBase64(), fileName + ".png"); 37 | break; 38 | 39 | default: 40 | $("body").append('
' + fileName + '
'); 41 | 42 | $(".view-img").off().on('click', function () { 43 | $(this).fadeOut(200); 44 | }); 45 | } 46 | }); 47 | }); 48 | } catch (e) { 49 | Tips.close("Error"); 50 | // Tips.notify.tips("Error", "error", 6000); 51 | } 52 | }; 53 | 54 | // 右键扩展菜单响应 55 | function expandMenuAction(action) { 56 | var param = kodApp.pathAction.makeParamItem(), 57 | path = param.path, 58 | name = param.name, 59 | ext = pathTools.pathExt(name), 60 | args = new Array(path, ext, name); 61 | menuAction(args, action); 62 | } 63 | 64 | // 右键菜单配置 65 | var contextMenuOptions = { 66 | "psdViewerTool": { 67 | name: "{{LNG['psdViewer.contextMenu.psdTool']}}", 68 | className: "psdViewerTool", 69 | icon: "{{pluginHost}}static/images/icon.png", 70 | items: { 71 | "view-psd": { 72 | name: "{{LNG['psdViewer.contextMenu.viewPsd']}}", 73 | className: "view-psd", 74 | icon: "{{pluginHost}}static/images/icon.png", 75 | callback: expandMenuAction 76 | }, 77 | "view-psd-layer": { 78 | name: "{{LNG['psdViewer.contextMenu.viewPsdLayer']}}", 79 | className: "view-psd-layer", 80 | icon: "icon-external-link", 81 | callback: expandMenuAction 82 | }, 83 | "download-as-png": { 84 | name: "{{LNG['psdViewer.contextMenu.downloadAsPng']}}", 85 | className: "download-as-png", 86 | icon: "icon-cloud-download", 87 | callback: expandMenuAction 88 | }, 89 | } 90 | } 91 | }; 92 | 93 | // 载入菜单 94 | function loadMenu(menu, menuType) { 95 | // 菜单尚未初始化则初始化 96 | if(!menu.PsdViewer) { 97 | $.contextMenu.menuAdd(contextMenuOptions, menu, ".open-with", false); 98 | menu.PsdViewer = true; 99 | } 100 | 101 | var name = kodApp.pathAction.makeParamItem().name, 102 | ext = pathTools.pathExt(name), 103 | allowExt = $.inArray(ext, ("{{config.fileExt}}").split(",")); 104 | 105 | // 非支持的格式,隐藏扩展菜单 106 | if (allowExt == -1) { 107 | $.contextMenu.menuItemHide(menu, "psdViewerTool"); 108 | } else { 109 | $.contextMenu.menuItemShow(menu, "psdViewerTool"); 110 | } 111 | } 112 | 113 | // 挂载右键菜单 114 | Events.bind("rightMenu.beforeShow@.menu-path-file", loadMenu); 115 | Events.bind("rightMenu.beforeShow@.menu-path-guest-file", loadMenu); 116 | Events.bind("rightMenu.beforeShow@.menu-simple-file", loadMenu); 117 | Events.bind("rightMenu.beforeShow@.menu-tree-file", loadMenu); 118 | 119 | // 挂载打开方式 120 | Events.bind('explorer.kodApp.before', function(appList) { 121 | appList.push({ 122 | name: "psdView", 123 | icon: "{{pluginHost}}static/images/icon.png", 124 | title: "{{LNG['psdViewer.meta.name']}}", 125 | ext: "{{config.fileExt}}", 126 | sort: "{{config.fileSort}}", 127 | callback:function() { 128 | menuAction(arguments); 129 | } 130 | }); 131 | }); 132 | }); 133 | -------------------------------------------------------------------------------- /KodBox/xProber/app.php: -------------------------------------------------------------------------------- 1 | hookRegist(array( 18 | 'user.view.options.after' => 'xProberPlugin.addMenu', 19 | )); 20 | } 21 | 22 | public function addMenu($options) { 23 | $config = $this->getConfig(); 24 | $menu = array( 25 | 'name' => 'xProber', 26 | 'icon' => $this->appIcon(), 27 | 'url' => $this->pluginApi, 28 | 'target' => '_blank',//_blank=新页面; 空/self=当前页面;inline=当前页面frame; 29 | 'subMenu' => $config['menuSubMenu'], 30 | 'use' => '1' 31 | ); 32 | return ActionCall('admin.setting.addMenu', $options, $menu); 33 | } 34 | 35 | public function index() { 36 | header('Location: '.$this->pluginHost . 'xProber/'); 37 | } 38 | } 39 | 40 | // class xProberPlugin extends PluginBase { 41 | // function __construct() { 42 | // parent::__construct(); 43 | // } 44 | 45 | // public function regiest() { 46 | // $this->hookRegiest(array( 47 | // 'templateCommonHeader' => 'xProberPlugin.addMenu' 48 | // )); 49 | // } 50 | 51 | // public function addMenu() { 52 | // $config = $this->getConfig(); 53 | // $subMenu = $config['menuSubMenu']; 54 | 55 | // navbar_menu_add(array( 56 | // 'name' => LNG('xProber.meta.name'), 57 | // 'icon' => $this->appIcon(), 58 | // 'url' => 'javascript:(core.openWindow("' . $this->pluginApi . '", "' . LNG('xProber.meta.name') . '"))', 59 | // 'target' => '', 60 | // 'subMenu' => $subMenu, 61 | // 'use' => '1' 62 | // )); 63 | // } 64 | 65 | // public function index() { 66 | // header('Location: ' . $this->pluginHost . 'xProber/'); 67 | // } 68 | // } -------------------------------------------------------------------------------- /KodBox/xProber/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'X Prober', 4 | 'xProber.meta.title' => 'X Prober', 5 | 'xProber.meta.desc' => 'show your server information and readable easily.' 6 | ); -------------------------------------------------------------------------------- /KodBox/xProber/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'X 探针', 4 | 'xProber.meta.title' => 'X 探针', 5 | 'xProber.meta.desc' => '十分直观地为您显示服务器的信息' 6 | ); -------------------------------------------------------------------------------- /KodBox/xProber/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "xProber", 3 | "name": "{{LNG['xProber.meta.name']}}", 4 | "title": "{{LNG['xProber.meta.title']}}", 5 | "version": "2.4.2", 6 | "source": { 7 | "thumb": "", 8 | "icon": "{{pluginHost}}static/icon.png", 9 | "screenshoot": ["{{pluginHost}}static/screenshot.png"] 10 | }, 11 | "category": "tools,safe", 12 | "description": "{{LNG['xProber.meta.desc']}}", 13 | "keywords": "", 14 | "auther": { 15 | "copyright": "INN STUDIO", 16 | "homePage": "https://github.com/kmvan/x-prober" 17 | }, 18 | "configItem": { 19 | "pluginAuth": { 20 | "type": "userSelect", 21 | "value": {"role": "1"}, 22 | "display": "{{LNG['admin.plugin.auth']}}", 23 | "desc": "{{LNG['admin.plugin.authDesc']}}", 24 | "require": 1 25 | }, 26 | "menuSubMenu": { 27 | "type": "switch", 28 | "value": 1, 29 | "display": "{{LNG['admin.setting.subMenu']}}" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /KodBox/xProber/static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/xProber/static/icon.png -------------------------------------------------------------------------------- /KodBox/xProber/static/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/xProber/static/screenshot.png -------------------------------------------------------------------------------- /KodBox/xProber/xProber/index.php: -------------------------------------------------------------------------------- 1 | hookRegist(array( 22 | 'user.commonJs.insert' => 'xlsxViewerPlugin.echoJs', 23 | )); 24 | } 25 | 26 | public function echoJs() { 27 | $this->echoFile('static/main.js'); 28 | } 29 | 30 | public function index() { 31 | $fileUrl = $this->filePathLink($this->in['path']) . '&name=/' . $this->in['name']; 32 | $fileName = $this->in['name']; 33 | include($this->pluginPath . 'static/page.html'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /KodBox/xlsxViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'XLSX document preview', 4 | 'xlsxViewer.meta.title' => 'XLSX document preview', 5 | 'xlsxViewer.meta.desc' => 'View .xlsx files online without a third-party interface', 6 | ); 7 | -------------------------------------------------------------------------------- /KodBox/xlsxViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'XLSX 文档预览', 4 | 'xlsxViewer.meta.title' => 'XLSX 文档预览', 5 | 'xlsxViewer.meta.desc' => 'XLSX 文档预览,无需借助第三方接口即可在线查看 .xlsx 文件', 6 | ); -------------------------------------------------------------------------------- /KodBox/xlsxViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "xlsxViewer", 3 | "name": "{{LNG['xlsxViewer.meta.name']}}", 4 | "title": "{{LNG['xlsxViewer.meta.title']}}", 5 | "version": "1.0", 6 | "category": "file", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG['xlsxViewer.meta.desc']}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "formStyle": { 17 | "className": "form-box-title-left", 18 | "tabs": { 19 | "{{LNG['admin.setting.base']}}": "pluginAuth,sep001,openWith", 20 | } 21 | }, 22 | "pluginAuth": { 23 | "type": "userSelect", 24 | "value": {"all": 1}, 25 | "display": "{{LNG['admin.plugin.auth']}}", 26 | "desc": "{{LNG['admin.plugin.authDesc']}}", 27 | "require": 1 28 | }, 29 | "sep001": "
", 30 | "openWith": { 31 | "type": "radio", 32 | "value": "dialog", 33 | "display": "{{LNG['admin.plugin.openWith']}}", 34 | "info1": { 35 | "dialog": "{{LNG['admin.plugin.openWithDilog']}}", 36 | "window": "{{LNG['admin.plugin.openWithWindow']}}" 37 | }, 38 | "info": { 39 | "dialog": "{{LNG['admin.plugin.openWithDilog']}}", 40 | "window": "{{LNG['admin.plugin.openWithWindow']}}" 41 | } 42 | }, 43 | "fileExt": { 44 | "type": "tags", 45 | "display": "{{LNG['admin.plugin.fileExt']}}", 46 | "desc": "{{LNG['admin.plugin.fileExtDesc']}}", 47 | "value": "xls,xlsx,xlsb,ods,csv,fods,csv", 48 | }, 49 | "fileSort": { 50 | "type": "number", 51 | "display": "{{LNG['admin.plugin.fileSort']}}", 52 | "desc": "{{LNG['admin.plugin.fileSortDesc']}}", 53 | "value": 10, 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /KodBox/xlsxViewer/static/css/jexcel.css: -------------------------------------------------------------------------------- 1 | /** 2 | * (c) jExcel v3.6.3 3 | * 4 | * Author: Paul Hodel 5 | * Website: https://bossanova.uk/jexcel/ 6 | * Description: Create amazing web based spreadsheets. 7 | * 8 | * This software is distribute under MIT License 9 | */ 10 | :root { 11 | --jexcel-border-color:#000; 12 | } 13 | 14 | .jexcel_container { 15 | display:inline-block; 16 | padding-right:2px; 17 | box-sizing: border-box; 18 | overscroll-behavior: contain; 19 | } 20 | 21 | .jexcel_container.fullscreen { 22 | position:fixed; 23 | top:0px; 24 | left:0px; 25 | width:100%; 26 | height:100%; 27 | z-index:2001; 28 | } 29 | 30 | .jexcel_container.fullscreen .jexcel_content { 31 | overflow:auto; 32 | width:100%; 33 | height:100%; 34 | background-color:#ffffff; 35 | } 36 | 37 | .jexcel_container.fullscreen.with-toolbar { 38 | height: calc(100% - 46px); 39 | } 40 | 41 | .jexcel_content { 42 | display:inline-block; 43 | box-sizing: border-box; 44 | padding-right:2px; 45 | position:relative; 46 | } 47 | 48 | .jexcel { 49 | border-collapse:separate; 50 | table-layout:fixed; 51 | white-space: nowrap; 52 | empty-cells:show; 53 | border:0px; 54 | background-color:#fff; 55 | width:0; 56 | 57 | border-top:1px solid transparent; 58 | border-left:1px solid transparent; 59 | border-right:1px solid #ccc; 60 | border-bottom:1px solid #ccc; 61 | } 62 | 63 | .jexcel > thead > tr > td 64 | { 65 | border-top:1px solid #ccc; 66 | border-left:1px solid #ccc; 67 | border-right:1px solid transparent; 68 | border-bottom:1px solid transparent; 69 | background-color:#f3f3f3; 70 | padding:2px; 71 | cursor:pointer; 72 | box-sizing: border-box; 73 | overflow: hidden; 74 | position: sticky; 75 | top: 0; 76 | z-index:2000; 77 | } 78 | 79 | .with-toolbar .jexcel > thead > tr > td 80 | { 81 | top:42px; 82 | } 83 | 84 | .jexcel > thead.draggable > tr > td::before 85 | { 86 | content:'\00a0'; 87 | width:100%; 88 | height:3px; 89 | position:absolute; 90 | bottom:0px; 91 | left:0px; 92 | cursor:move; 93 | } 94 | 95 | .jexcel > thead.resizable > tr > td::after 96 | { 97 | content:'\00a0'; 98 | width:3px; 99 | height:100%; 100 | position:absolute; 101 | top:0px; 102 | right:0px; 103 | cursor:col-resize; 104 | } 105 | 106 | .jexcel > thead > tr > td.dragging 107 | { 108 | background-color:#fff; 109 | opacity:0.5; 110 | } 111 | 112 | .jexcel > thead > tr > td:first-child:after, 113 | .jexcel > thead > tr.jexcel_nested > td::before, 114 | .jexcel > thead > tr.jexcel_nested > td::after 115 | { 116 | cursor:default; 117 | } 118 | 119 | .jexcel > thead > tr > td.selected 120 | { 121 | background-color:#dcdcdc; 122 | } 123 | 124 | .jexcel > thead > tr > td.arrow-up 125 | { 126 | background-repeat:no-repeat; 127 | background-position:center right 5px; 128 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 14l5-5 5 5H7z' fill='gray'/%3E%3C/svg%3E"); 129 | text-decoration:underline; 130 | } 131 | 132 | .jexcel > thead > tr > td.arrow-down 133 | { 134 | background-repeat:no-repeat; 135 | background-position:center right 5px; 136 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E"); 137 | text-decoration:underline; 138 | } 139 | 140 | .jexcel > tbody > tr > td:first-child 141 | { 142 | position:relative; 143 | background-color:#f3f3f3; 144 | text-align:center; 145 | } 146 | 147 | .jexcel > tbody.resizable > tr > td:first-child::before 148 | { 149 | content:'\00a0'; 150 | width:100%; 151 | height:3px; 152 | position:absolute; 153 | bottom:0px; 154 | left:0px; 155 | cursor:row-resize; 156 | } 157 | 158 | .jexcel > tbody.draggable > tr > td:first-child::after 159 | { 160 | content:'\00a0'; 161 | width:3px; 162 | height:100%; 163 | position:absolute; 164 | top:0px; 165 | right:0px; 166 | cursor:move; 167 | } 168 | 169 | .jexcel > tbody > tr.dragging > td 170 | { 171 | background-color:#eee; 172 | opacity:0.5; 173 | } 174 | 175 | .jexcel > tbody > tr > td 176 | { 177 | border-top:1px solid #ccc; 178 | border-left:1px solid #ccc; 179 | border-right:1px solid transparent; 180 | border-bottom:1px solid transparent; 181 | padding:4px; 182 | white-space: nowrap; 183 | box-sizing: border-box; 184 | line-height:1em; 185 | } 186 | 187 | .jexcel > tbody > tr > td:last-child 188 | { 189 | overflow:hidden; 190 | } 191 | 192 | .jexcel > tbody > tr > td > img 193 | { 194 | display:inline-block; 195 | max-width:100px; 196 | } 197 | 198 | .jexcel > tbody > tr > td.readonly 199 | { 200 | color:rgba(0,0,0,0.3) 201 | } 202 | .jexcel > tbody > tr.selected > td:first-child 203 | { 204 | background-color:#dcdcdc; 205 | } 206 | .jexcel > tbody > tr > td > select, 207 | .jexcel > tbody > tr > td > input, 208 | .jexcel > tbody > tr > td > textarea 209 | { 210 | border:0px; 211 | border-radius:0px; 212 | outline:0px; 213 | width:100%; 214 | margin:0px; 215 | padding:0px; 216 | background-color:transparent; 217 | box-sizing: border-box; 218 | } 219 | 220 | .jexcel > tbody > tr > td > textarea 221 | { 222 | resize: none; 223 | padding-top:6px !important; 224 | } 225 | 226 | .jexcel > tbody > tr > td > input[type=checkbox] 227 | { 228 | width:12px; 229 | margin-top:2px; 230 | } 231 | .jexcel > tbody > tr > td > input[type=radio] 232 | { 233 | width:12px; 234 | margin-top:2px; 235 | } 236 | 237 | .jexcel > tbody > tr > td > select 238 | { 239 | -webkit-appearance: none; 240 | -moz-appearance: none; 241 | appearance: none; 242 | background-repeat: no-repeat; 243 | background-position-x: 100%; 244 | background-position-y: 40%; 245 | background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+); 246 | } 247 | 248 | .jexcel > tbody > tr > td.dropdown 249 | { 250 | background-repeat: no-repeat; 251 | background-position:top 50% right 5px; 252 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E"); 253 | text-overflow: ellipsis; 254 | overflow-x:hidden; 255 | } 256 | 257 | .jexcel > tbody > tr > td.dropdown.jexcel_comments 258 | { 259 | background:url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E") top 50% right 5px no-repeat, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=') top right no-repeat; 260 | } 261 | 262 | .jexcel > tbody > tr > td > .color 263 | { 264 | width:90%; 265 | height:10px; 266 | margin:auto; 267 | } 268 | 269 | .jexcel .highlight { 270 | background-color:rgba(0,0,0,0.05); 271 | } 272 | 273 | .jexcel .highlight-top { 274 | border-top:1px solid #000; /* var(--jexcel-border-color);*/ 275 | box-shadow: 0px -1px #ccc; 276 | } 277 | 278 | .jexcel .highlight-left { 279 | border-left:1px solid #000; /* var(--jexcel-border-color);*/ 280 | box-shadow: -1px 0px #ccc; 281 | } 282 | 283 | .jexcel .highlight-right { 284 | border-right:1px solid #000; /* var(--jexcel-border-color);*/ 285 | } 286 | 287 | .jexcel .highlight-bottom { 288 | border-bottom:1px solid #000; /* var(--jexcel-border-color);*/ 289 | } 290 | 291 | .jexcel .highlight-top.highlight-left { 292 | box-shadow: -1px -1px #ccc; 293 | -webkit-box-shadow: -1px -1px #ccc; 294 | -moz-box-shadow: -1px -1px #ccc; 295 | } 296 | 297 | .jexcel .highlight-selected 298 | { 299 | background-color:rgba(0,0,0,0.0); 300 | } 301 | .jexcel .selection 302 | { 303 | background-color:rgba(0,0,0,0.05); 304 | } 305 | .jexcel .selection-left 306 | { 307 | border-left:1px dotted #000; 308 | } 309 | .jexcel .selection-right 310 | { 311 | border-right:1px dotted #000; 312 | } 313 | .jexcel .selection-top 314 | { 315 | border-top:1px dotted #000; 316 | } 317 | .jexcel .selection-bottom 318 | { 319 | border-bottom:1px dotted #000; 320 | } 321 | .jexcel_corner 322 | { 323 | position:absolute; 324 | background-color: rgb(0, 0, 0); 325 | height: 1px; 326 | width: 1px; 327 | border: 1px solid rgb(255, 255, 255); 328 | top:-2000px; 329 | left:-2000px; 330 | cursor:crosshair; 331 | box-sizing: initial; 332 | z-index:7000; 333 | padding: 2px; 334 | } 335 | 336 | .jexcel .editor 337 | { 338 | outline:0px solid transparent; 339 | overflow:visible; 340 | white-space: nowrap; 341 | text-align:left; 342 | padding:0px; 343 | box-sizing: border-box; 344 | overflow:visible !important; 345 | } 346 | 347 | .jexcel .editor > input 348 | { 349 | padding-left:4px; 350 | } 351 | 352 | .jexcel .editor .jupload 353 | { 354 | position:fixed; 355 | top:100%; 356 | z-index:8000; 357 | user-select:none; 358 | -webkit-font-smoothing: antialiased; 359 | font-size: .875rem; 360 | letter-spacing: .2px; 361 | -webkit-border-radius: 4px; 362 | border-radius: 4px; 363 | -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); 364 | box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); 365 | padding:10px; 366 | background-color:#fff; 367 | width:300px; 368 | min-height:225px; 369 | margin-top:2px; 370 | } 371 | 372 | .jexcel .editor .jupload img 373 | { 374 | width:100%; 375 | height:auto; 376 | } 377 | 378 | .jexcel .editor .jclose:after 379 | { 380 | position:absolute; 381 | top:0; 382 | right:0; 383 | margin:10px; 384 | content:'close'; 385 | font-family:'Material icons'; 386 | font-size:24px; 387 | width:24px; 388 | height:24px; 389 | line-height:24px; 390 | cursor:pointer; 391 | text-shadow: 0px 0px 5px #fff; 392 | } 393 | 394 | .jexcel, .jexcel td, .jexcel_corner 395 | { 396 | -webkit-touch-callout: none; 397 | -webkit-user-select: none; 398 | -khtml-user-select: none; 399 | -moz-user-select: none; 400 | -ms-user-select: none; 401 | user-select: none; 402 | -webkit-user-drag: none; 403 | -khtml-user-drag: none; 404 | -moz-user-drag: none; 405 | -o-user-drag: none; 406 | user-drag: none; 407 | } 408 | 409 | .jexcel_textarea 410 | { 411 | position:absolute; 412 | top:-999px; 413 | left:-999px; 414 | width:1px; 415 | height:1px; 416 | } 417 | .jexcel .dragline 418 | { 419 | position:absolute; 420 | } 421 | .jexcel .dragline div 422 | { 423 | position:relative; 424 | top:-6px; 425 | height:5px; 426 | width:22px; 427 | } 428 | .jexcel .dragline div:hover 429 | { 430 | cursor:move; 431 | } 432 | 433 | .jexcel .onDrag 434 | { 435 | background-color:rgba(0,0,0,0.6); 436 | } 437 | 438 | .jexcel .error 439 | { 440 | border:1px solid red; 441 | } 442 | 443 | .jexcel thead td.resizing 444 | { 445 | border-right-style:dotted !important; 446 | border-right-color:red !important; 447 | } 448 | 449 | .jexcel tbody tr.resizing > td 450 | { 451 | border-bottom-style:dotted !important; 452 | border-bottom-color:red !important; 453 | } 454 | 455 | .jexcel tbody td.resizing 456 | { 457 | border-right-style:dotted !important; 458 | border-right-color:red !important; 459 | } 460 | 461 | .jexcel .jdropdown-header 462 | { 463 | border:0px !important; 464 | outline:none !important; 465 | width:100% !important; 466 | height:100% !important; 467 | padding:0px !important; 468 | padding-left:8px !important; 469 | } 470 | 471 | .jexcel .jdropdown-container 472 | { 473 | margin-top:1px; 474 | } 475 | 476 | .jexcel .jdropdown-container-header { 477 | padding: 0px; 478 | margin: 0px; 479 | height: inherit; 480 | } 481 | 482 | .jexcel .jdropdown-picker 483 | { 484 | border:0px !important; 485 | padding:0px !important; 486 | width:inherit; 487 | height:inherit; 488 | } 489 | 490 | .jexcel .jexcel_comments 491 | { 492 | background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII='); 493 | background-repeat: no-repeat; 494 | background-position: top right; 495 | } 496 | 497 | .jexcel .sp-replacer 498 | { 499 | margin: 2px; 500 | border:0px; 501 | } 502 | 503 | .jexcel > thead > tr.jexcel_filter > td > input 504 | { 505 | border:0px; 506 | width:100%; 507 | outline:none; 508 | } 509 | 510 | .jexcel_about 511 | { 512 | text-transform:uppercase; 513 | display:none; 514 | float:right; 515 | font-size:0.7em; 516 | padding:2px; 517 | } 518 | 519 | .jexcel_filter 520 | { 521 | display:flex; 522 | justify-content:space-between; 523 | margin-bottom:4px; 524 | } 525 | 526 | .jexcel_filter > div 527 | { 528 | padding:8px; 529 | align-items:center; 530 | } 531 | 532 | .jexcel_pagination 533 | { 534 | display:flex; 535 | justify-content:space-between; 536 | align-items:center; 537 | } 538 | 539 | .jexcel_pagination > div 540 | { 541 | display:flex; 542 | padding:10px; 543 | } 544 | 545 | .jexcel_pagination > div:last-child 546 | { 547 | padding-right:10px; 548 | padding-top:10px; 549 | } 550 | 551 | .jexcel_pagination > div > div 552 | { 553 | text-align:center; 554 | width:36px; 555 | height:36px; 556 | line-height:34px; 557 | border:1px solid #ccc; 558 | box-sizing: border-box; 559 | margin-left:2px; 560 | cursor:pointer; 561 | } 562 | 563 | .jexcel_page_selected 564 | { 565 | font-weight:bold; 566 | background-color:#f3f3f3; 567 | } 568 | 569 | .jexcel_toolbar 570 | { 571 | display:flex; 572 | background-color:#f3f3f3; 573 | border:1px solid #ccc; 574 | padding:4px; 575 | margin:0px 2px 4px 1px; 576 | position:sticky; 577 | top:0px; 578 | z-index:8001; 579 | } 580 | 581 | .jexcel_toolbar:empty 582 | { 583 | display:none; 584 | } 585 | 586 | .jexcel_toolbar i.jexcel_toolbar_item 587 | { 588 | width:24px; 589 | height:24px; 590 | padding:4px; 591 | cursor:pointer; 592 | display:inline-block; 593 | } 594 | 595 | .jexcel_toolbar i.jexcel_toolbar_item:hover 596 | { 597 | background-color:#ddd; 598 | } 599 | 600 | .jexcel_toolbar select.jexcel_toolbar_item 601 | { 602 | margin-left:2px; 603 | margin-right:2px; 604 | display:inline-block; 605 | border:0px; 606 | background-color:transparent; 607 | padding-right:10px; 608 | } 609 | 610 | .jexcel .dragging-left 611 | { 612 | background-repeat: no-repeat; 613 | background-position:top 50% left 0px; 614 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M14 7l-5 5 5 5V7z'/%3E%3Cpath fill='none' d='M24 0v24H0V0h24z'/%3E%3C/svg%3E"); 615 | } 616 | 617 | .jexcel .dragging-right 618 | { 619 | background-repeat: no-repeat; 620 | background-position:top 50% right 0px; 621 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 17l5-5-5-5v10z'/%3E%3Cpath fill='none' d='M0 24V0h24v24H0z'/%3E%3C/svg%3E"); 622 | } 623 | 624 | .jexcel_tabs > .jexcel_tab 625 | { 626 | display:none; 627 | } 628 | 629 | .jexcel_tabs > .jexcel_tab_link 630 | { 631 | display:inline-block; 632 | padding:10px; 633 | padding-left:20px; 634 | padding-right:20px; 635 | margin-right:5px; 636 | margin-bottom:5px; 637 | background-color:#f3f3f3; 638 | cursor:pointer; 639 | } 640 | 641 | .jexcel_tabs > .jexcel_tab_link.selected 642 | { 643 | background-color:#ddd; 644 | } 645 | 646 | .jexcel_hidden_index tr > td:first-child, .jexcel_hidden_index colgroup > col:first-child 647 | { 648 | display:none; 649 | } -------------------------------------------------------------------------------- /KodBox/xlsxViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodBox/xlsxViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodBox/xlsxViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | Events.bind("explorer.kodApp.before", function(appList) { 3 | appList.push({ 4 | name: "xlsxViewer", 5 | title: "{{LNG['xlsxViewer.meta.name']}}", 6 | icon: "{{pluginHost}}static/images/icon.png", 7 | ext: "{{config.fileExt}}", 8 | sort: "{{config.fileSort}}", 9 | callback: function() { 10 | core.openFile("{{pluginApi}}", "{{config.openWith}}", _.toArray(arguments)); 11 | } 12 | }); 13 | }); 14 | }); -------------------------------------------------------------------------------- /KodBox/xlsxViewer/static/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $fileName . ' - ' . LNG('common.copyright.name') . LNG('common.copyright.powerBy'); ?> 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 155 | 156 | 157 |
158 |
159 |
160 |
161 |
162 | 163 | 219 | 220 | -------------------------------------------------------------------------------- /KodExplorer/docxViewer/app.php: -------------------------------------------------------------------------------- 1 | hookRegiest(array( 22 | 'user.commonJs.insert' => 'docxViewerPlugin.echoJs' 23 | )); 24 | } 25 | 26 | public function echoJs($st, $act) { 27 | if ($this->isFileExtence($st, $act)) { 28 | $this->echoFile('static/main.js'); 29 | } 30 | } 31 | 32 | public function index() { 33 | $path = _DIR($this->in['path']); 34 | $fileUrl = _make_file_proxy($path); 35 | $fileName = get_path_this(rawurldecode($this->in['path'])); 36 | $fileName = htmlspecialchars($fileName); 37 | include($this->pluginPath . 'static/page.html'); 38 | } 39 | } -------------------------------------------------------------------------------- /KodExplorer/docxViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'DOCX document preview', 4 | 'docxViewer.meta.title' => 'DOCX document preview', 5 | 'docxViewer.meta.desc' => 'View .docx files online without a third-party interface', 6 | ); -------------------------------------------------------------------------------- /KodExplorer/docxViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'DOCX 文档预览', 4 | 'docxViewer.meta.title' => 'DOCX 文档预览', 5 | 'docxViewer.meta.desc' => 'DOCX 文档预览,无需借助第三方接口即可在线查看 .docx 文件', 6 | ); -------------------------------------------------------------------------------- /KodExplorer/docxViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "docxViewer", 3 | "name": "{{LNG.docxViewer.meta.name}}", 4 | "title": "{{LNG.docxViewer.meta.title}}", 5 | "version": "1.0", 6 | "category": "file", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG.docxViewer.meta.desc}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "formStyle": { 17 | "className": "form-box-title-left", 18 | "tabs": [{ 19 | "name": "{{LNG.Plugin.tab.basic}}", 20 | "field": ["pluginAuth", "pluginAuthOpen", "sep001", "openWith"] 21 | }] 22 | }, 23 | "pluginAuth": { 24 | "type": "userSelect", 25 | "value": "all:1", 26 | "display": "{{LNG.Plugin.config.auth}}", 27 | "desc": "{{LNG.Plugin.config.authDesc}}", 28 | "require": 1 29 | }, 30 | "sep001": "
", 31 | "openWith": { 32 | "type": "radio", 33 | "value": "dialog", 34 | "display": "{{LNG.Plugin.Config.openWith}}", 35 | "info": [ 36 | ["dialog", "{{LNG.Plugin.Config.openWithDilog}}"], 37 | ["window", "{{LNG.Plugin.Config.openWithWindow}}"] 38 | ] 39 | }, 40 | "fileExt": { 41 | "type": "tags", 42 | "display": "{{LNG.Plugin.Config.fileExt}}", 43 | "desc": "{{LNG.Plugin.Config.fileExtDesc}}", 44 | "value": "docx" 45 | }, 46 | "fileSort": { 47 | "type": "number", 48 | "display": "{{LNG.Plugin.Config.fileSort}}", 49 | "desc": "{{LNG.Plugin.Config.fileSortDesc}}", 50 | "value": 10 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /KodExplorer/docxViewer/static/css/typo.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /* 防止用户自定义背景颜色对网页的影响,添加让用户可以自定义字体 */ 4 | html { 5 | color: #333; 6 | background: #fff; 7 | -webkit-text-size-adjust: 100%; 8 | -ms-text-size-adjust: 100%; 9 | text-rendering: optimizelegibility; 10 | } 11 | 12 | /* 如果你的项目仅支持 IE9+ | Chrome | Firefox 等,推荐在 中添加 .borderbox 这个 class */ 13 | html.borderbox *, html.borderbox *:before, html.borderbox *:after { 14 | -moz-box-sizing: border-box; 15 | -webkit-box-sizing: border-box; 16 | box-sizing: border-box; 17 | } 18 | 19 | /* 内外边距通常让各个浏览器样式的表现位置不同 */ 20 | body, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, menu, nav, section { 21 | margin: 0; 22 | padding: 0; 23 | } 24 | 25 | /* 重设 HTML5 标签, IE 需要在 js 中 createElement(TAG) */ 26 | article, aside, details, figcaption, figure, footer, header, menu, nav, section { 27 | display: block; 28 | } 29 | 30 | /* HTML5 媒体文件跟 img 保持一致 */ 31 | audio, canvas, video { 32 | display: inline-block; 33 | } 34 | 35 | /* 要注意表单元素并不继承父级 font 的问题 */ 36 | body, button, input, select, textarea { 37 | font: 300 1em/1.8 PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif; 38 | } 39 | 40 | button::-moz-focus-inner, 41 | input::-moz-focus-inner { 42 | padding: 0; 43 | border: 0; 44 | } 45 | 46 | /* 去掉各Table cell 的边距并让其边重合 */ 47 | table { 48 | border-collapse: collapse; 49 | border-spacing: 0; 50 | } 51 | 52 | /* 去除默认边框 */ 53 | fieldset, img { 54 | border: 0; 55 | } 56 | 57 | /* 块/段落引用 */ 58 | blockquote { 59 | position: relative; 60 | color: #999; 61 | font-weight: 400; 62 | border-left: 1px solid #1abc9c; 63 | padding-left: 1em; 64 | margin: 1em 3em 1em 2em; 65 | } 66 | 67 | @media only screen and ( max-width: 640px ) { 68 | blockquote { 69 | margin: 1em 0; 70 | } 71 | } 72 | 73 | /* Firefox 以外,元素没有下划线,需添加 */ 74 | acronym, abbr { 75 | border-bottom: 1px dotted; 76 | font-variant: normal; 77 | text-decoration: none; 78 | } 79 | 80 | /* 添加鼠标问号,进一步确保应用的语义是正确的(要知道,交互他们也有洁癖,如果你不去掉,那得多花点口舌) */ 81 | abbr { 82 | cursor: help; 83 | } 84 | 85 | /* 一致的 del 样式 */ 86 | del { 87 | text-decoration: line-through; 88 | } 89 | 90 | address, caption, cite, code, dfn, em, th, var { 91 | font-style: normal; 92 | font-weight: 400; 93 | } 94 | 95 | /* 对齐是排版最重要的因素, 别让什么都居中 */ 96 | caption, th { 97 | text-align: left; 98 | } 99 | 100 | q:before, q:after { 101 | content: ''; 102 | } 103 | 104 | /* 统一上标和下标 */ 105 | sub, sup { 106 | font-size: 75%; 107 | line-height: 0; 108 | position: relative; 109 | } 110 | 111 | :root sub, :root sup { 112 | vertical-align: baseline; /* for ie9 and other modern browsers */ 113 | } 114 | 115 | sup { 116 | top: -0.5em; 117 | } 118 | 119 | sub { 120 | bottom: -0.25em; 121 | } 122 | 123 | /* 让链接在 hover 状态下显示下划线 */ 124 | a { 125 | color: #1abc9c; 126 | } 127 | 128 | a:hover { 129 | text-decoration: underline; 130 | } 131 | 132 | .typo a { 133 | border-bottom: 1px solid #1abc9c; 134 | } 135 | 136 | .typo a:hover { 137 | border-bottom-color: #555; 138 | color: #555; 139 | text-decoration: none; 140 | } 141 | 142 | /* 默认不显示下划线,保持页面简洁 */ 143 | ins, a { 144 | text-decoration: none; 145 | } 146 | 147 | /* 专名号:虽然 u 已经重回 html5 Draft,但在所有浏览器中都是可以使用的, 148 | * 要做到更好,向后兼容的话,添加 class="typo-u" 来显示专名号 149 | * 关于 标签:http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-u-element 150 | * 被放弃的是 4,之前一直搞错 http://www.w3.org/TR/html401/appendix/changes.html#idx-deprecated 151 | * 一篇关于 标签的很好文章:http://html5doctor.com/u-element/ 152 | */ 153 | u, .typo-u { 154 | text-decoration: underline; 155 | } 156 | 157 | /* 标记,类似于手写的荧光笔的作用 */ 158 | mark { 159 | background: #fffdd1; 160 | border-bottom: 1px solid #ffedce; 161 | padding: 2px; 162 | margin: 0 5px; 163 | } 164 | 165 | /* 代码片断 */ 166 | pre, code, pre tt { 167 | font-family: Courier, 'Courier New', monospace; 168 | } 169 | 170 | pre { 171 | background: #f8f8f8; 172 | border: 1px solid #ddd; 173 | padding: 1em 1.5em; 174 | display: block; 175 | -webkit-overflow-scrolling: touch; 176 | } 177 | 178 | /* 一致化 horizontal rule */ 179 | hr { 180 | border: none; 181 | border-bottom: 1px solid #cfcfcf; 182 | margin-bottom: 0.8em; 183 | height: 10px; 184 | } 185 | 186 | /* 底部印刷体、版本等标记 */ 187 | small, .typo-small, 188 | /* 图片说明 */ 189 | figcaption { 190 | font-size: 0.9em; 191 | color: #888; 192 | } 193 | 194 | strong, b { 195 | font-weight: bold; 196 | color: #000; 197 | } 198 | 199 | /* 可拖动文件添加拖动手势 */ 200 | [draggable] { 201 | cursor: move; 202 | } 203 | 204 | .clearfix:before, .clearfix:after { 205 | content: ""; 206 | display: table; 207 | } 208 | 209 | .clearfix:after { 210 | clear: both; 211 | } 212 | 213 | .clearfix { 214 | zoom: 1; 215 | } 216 | 217 | /* 强制文本换行 */ 218 | .textwrap, .textwrap td, .textwrap th { 219 | word-wrap: break-word; 220 | word-break: break-all; 221 | } 222 | 223 | .textwrap-table { 224 | table-layout: fixed; 225 | } 226 | 227 | /* 提供 serif 版本的字体设置: iOS 下中文自动 fallback 到 sans-serif */ 228 | .serif { 229 | font-family: Palatino, Optima, Georgia, serif; 230 | } 231 | 232 | /* 保证块/段落之间的空白隔行 */ 233 | .typo p, .typo pre, .typo ul, .typo ol, .typo dl, .typo form, .typo hr, .typo table, 234 | .typo-p, .typo-pre, .typo-ul, .typo-ol, .typo-dl, .typo-form, .typo-hr, .typo-table, blockquote { 235 | margin-bottom: 1.2em 236 | } 237 | 238 | h1, h2, h3, h4, h5, h6 { 239 | font-family: PingFang SC, Verdana, Helvetica Neue, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif; 240 | font-weight: 100; 241 | color: #000; 242 | line-height: 1.35; 243 | } 244 | 245 | /* 标题应该更贴紧内容,并与其他块区分,margin 值要相应做优化 */ 246 | .typo h1, .typo h2, .typo h3, .typo h4, .typo h5, .typo h6, 247 | .typo-h1, .typo-h2, .typo-h3, .typo-h4, .typo-h5, .typo-h6 { 248 | margin-top: 1.2em; 249 | margin-bottom: 0.6em; 250 | line-height: 1.35; 251 | } 252 | 253 | .typo h1, .typo-h1 { 254 | font-size: 2em; 255 | } 256 | 257 | .typo h2, .typo-h2 { 258 | font-size: 1.8em; 259 | } 260 | 261 | .typo h3, .typo-h3 { 262 | font-size: 1.6em; 263 | } 264 | 265 | .typo h4, .typo-h4 { 266 | font-size: 1.4em; 267 | } 268 | 269 | .typo h5, .typo h6, .typo-h5, .typo-h6 { 270 | font-size: 1.2em; 271 | } 272 | 273 | /* 在文章中,应该还原 ul 和 ol 的样式 */ 274 | .typo ul, .typo-ul { 275 | margin-left: 1.3em; 276 | list-style: disc; 277 | } 278 | 279 | .typo ol, .typo-ol { 280 | list-style: decimal; 281 | margin-left: 1.9em; 282 | } 283 | 284 | .typo li ul, .typo li ol, .typo-ul ul, .typo-ul ol, .typo-ol ul, .typo-ol ol { 285 | margin-bottom: 0.8em; 286 | margin-left: 2em; 287 | } 288 | 289 | .typo li ul, .typo-ul ul, .typo-ol ul { 290 | list-style: circle; 291 | } 292 | 293 | /* 同 ul/ol,在文章中应用 table 基本格式 */ 294 | .typo table th, .typo table td, .typo-table th, .typo-table td, .typo table caption { 295 | border: 1px solid #ddd; 296 | padding: 0.5em 1em; 297 | color: #666; 298 | } 299 | 300 | .typo table th, .typo-table th { 301 | background: #fbfbfb; 302 | } 303 | 304 | .typo table thead th, .typo-table thead th { 305 | background: #f1f1f1; 306 | } 307 | 308 | .typo table caption { 309 | border-bottom: none; 310 | } 311 | 312 | /* 去除 webkit 中 input 和 textarea 的默认样式 */ 313 | .typo-input, .typo-textarea { 314 | -webkit-appearance: none; 315 | border-radius: 0; 316 | } 317 | 318 | .typo-em, .typo em, legend, caption { 319 | color: #000; 320 | font-weight: inherit; 321 | } 322 | 323 | /* 着重号,只能在少量(少于100个字符)且全是全角字符的情况下使用 */ 324 | .typo-em { 325 | position: relative; 326 | } 327 | 328 | .typo-em:after { 329 | position: absolute; 330 | top: 0.65em; 331 | left: 0; 332 | width: 100%; 333 | overflow: hidden; 334 | white-space: nowrap; 335 | content: "・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"; 336 | } 337 | 338 | /* Responsive images */ 339 | .typo img { 340 | max-width: 100%; 341 | } 342 | -------------------------------------------------------------------------------- /KodExplorer/docxViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/docxViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodExplorer/docxViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | kodApp.add({ 3 | name: "docxViewer", 4 | title: "{{LNG.docxViewer.meta.name}}", 5 | icon: "{{pluginHost}}static/images/icon.png", 6 | ext: "{{config.fileExt}}", 7 | sort: "{{config.fileSort}}", 8 | callback: function(path, ext) { 9 | var url = '{{pluginApi}}&path=' + core.pathCommon(path); 10 | if ('window' == "{{config.openWith}}" && !core.isFileView()) { 11 | window.open(url); 12 | } else { 13 | core.openDialog(url, core.icon(ext), htmlEncode(core.pathThis(path))); 14 | } 15 | } 16 | }); 17 | }); -------------------------------------------------------------------------------- /KodExplorer/docxViewer/static/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $fileName . ' - ' . LNG('kod_name') . LNG('kod_power_by'); ?> 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 118 | 119 | 120 |
121 |
122 |
123 |
124 |
125 | 126 | 161 | 162 | -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/app.php: -------------------------------------------------------------------------------- 1 | hookRegiest(array( 10 | 'user.commonJs.insert' => 'photoSphereViewerPlugin.echoJs' 11 | )); 12 | } 13 | 14 | public function echoJs($st,$act) { 15 | if ($this->isFileExtence($st,$act)) { 16 | $this->echoFile('static/main.js'); 17 | } 18 | } 19 | 20 | public function index() { 21 | $path = _DIR($this->in['path']); 22 | $fileUrl = _make_file_proxy($path); 23 | $fileName = get_path_this(rawurldecode($this->in['path'])); 24 | include($this->pluginPath.'static/page.html'); 25 | } 26 | } -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'Photo Sphere Viewer', 4 | 'photoSphereViewer.meta.title' => 'Photo Sphere Viewer', 5 | 'photoSphereViewer.meta.desc' => 'A Plugin library to display Photo Sphere panoramas.', 6 | 7 | 'photoSphereViewer.page.navbar.autorotate' => 'Automatic rotation', 8 | 'photoSphereViewer.page.navbar.zoom' => 'Zoom', 9 | 'photoSphereViewer.page.navbar.zoomOut' => 'Zoom out', 10 | 'photoSphereViewer.page.navbar.zoomIn' => 'Zoom in', 11 | 'photoSphereViewer.page.navbar.download' => 'Download', 12 | 'photoSphereViewer.page.navbar.fullscreen' => 'Fullscreen', 13 | 'photoSphereViewer.page.navbar.markers' => 'Markers', 14 | 'photoSphereViewer.page.navbar.gyroscope' => 'Gyroscope', 15 | 'photoSphereViewer.page.navbar.stereo' => 'Stereo view', 16 | 'photoSphereViewer.page.navbar.stereo_notification' => 'Click anywhere to exit stereo view.', 17 | 'photoSphereViewer.page.navbar.please_rotate' => array('Please rotate your device', '(or tap to continue)'), 18 | 'photoSphereViewer.page.navbar.two_fingers' => array('Use two fingers to navigate') 19 | ); 20 | -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | '全景图查看器', 4 | 'photoSphereViewer.meta.title' => '全景图查看器', 5 | 'photoSphereViewer.meta.desc' => '球形全景图查看器', 6 | 7 | 'photoSphereViewer.page.navbar.autorotate' => '自动旋转视角', 8 | 'photoSphereViewer.page.navbar.zoom' => '缩放图像', 9 | 'photoSphereViewer.page.navbar.zoomOut' => '缩小', 10 | 'photoSphereViewer.page.navbar.zoomIn' => '放大', 11 | 'photoSphereViewer.page.navbar.download' => '下载', 12 | 'photoSphereViewer.page.navbar.fullscreen' => '全屏', 13 | 'photoSphereViewer.page.navbar.markers' => '标记', 14 | 'photoSphereViewer.page.navbar.gyroscope' => '陀螺仪', 15 | 'photoSphereViewer.page.navbar.stereo' => '立体视图', 16 | 'photoSphereViewer.page.navbar.stereo_notification' => '单击任意位置退出立体视图', 17 | 'photoSphereViewer.page.navbar.please_rotate' => array('请旋转你的设备', '(或点击继续)'), 18 | 'photoSphereViewer.page.navbar.two_fingers' => array('用两个手指切换视角') 19 | ); -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "photoSphereViewer", 3 | "name": "{{LNG.photoSphereViewer.meta.name}}", 4 | "title": "{{LNG.photoSphereViewer.meta.title}}", 5 | "version": "1.0", 6 | "category": "media,file", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG.photoSphereViewer.meta.desc}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "formStyle": { 17 | "className": "form-box-title-left", 18 | "tabs": [{ 19 | "name": "{{LNG.Plugin.tab.basic}}", 20 | "field": ["pluginAuth", "pluginAuthOpen", "sep001", "openWith"] 21 | }] 22 | }, 23 | "pluginAuth": { 24 | "type": "userSelect", 25 | "value": "all:1", 26 | "display": "{{LNG.Plugin.config.auth}}", 27 | "desc": "{{LNG.Plugin.config.authDesc}}", 28 | "require": 1 29 | }, 30 | "sep001": "
", 31 | "openWith": { 32 | "type": "radio", 33 | "value": "dialog", 34 | "display": "{{LNG.Plugin.Config.openWith}}", 35 | "info": [ 36 | ["dialog", "{{LNG.Plugin.Config.openWithDilog}}"], 37 | ["window", "{{LNG.Plugin.Config.openWithWindow}}"] 38 | ] 39 | }, 40 | "fileExt": { 41 | "type": "tags", 42 | "display": "{{LNG.Plugin.Config.fileExt}}", 43 | "desc": "{{LNG.Plugin.Config.fileExtDesc}}", 44 | "value": "jpg,jpeg,png,bmp,gif,svg,webp" 45 | }, 46 | "fileSort": { 47 | "type": "number", 48 | "display": "{{LNG.Plugin.Config.fileSort}}", 49 | "desc": "{{LNG.Plugin.Config.fileSortDesc}}", 50 | "value": 10 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/css/photo-sphere-viewer.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Photo Sphere Viewer 3.5.0 3 | * Copyright (c) 2014-2015 Jérémy Heleine 4 | * Copyright (c) 2015-2018 Damien "Mistic" Sorel 5 | * Licensed under MIT (https://opensource.org/licenses/MIT) 6 | */ 7 | .psv-container{width:100%;height:100%;margin:0;padding:0;position:relative;background:radial-gradient(#fff 0,#fdfdfd 16%,#fbfbfb 33%,#f8f8f8 49%,#efefef 66%,#dfdfdf 82%,#bfbfbf 100%);overflow:hidden}.psv-canvas-container{position:absolute;top:0;left:0;z-index:0;-webkit-transition:opacity linear .1s;transition:opacity linear .1s}.psv-canvas{display:block}.psv-loader-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100}.psv-loader{position:relative;text-align:center;color:rgba(61,61,61,.7);width:150px;height:150px;border:10px solid transparent}.psv-loader::before{content:'';display:inline-block;height:100%;vertical-align:middle}.psv-loader,.psv-loader-image,.psv-loader-text{display:inline-block;vertical-align:middle}.psv-loader-canvas{position:absolute;top:0;left:0;width:100%;height:100%}.psv-loader-text{font:14px sans-serif}.psv-navbar{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;z-index:90;bottom:-40px;left:0;width:100%;height:40px;background:rgba(61,61,61,.5);-webkit-transition:bottom ease-in-out .1s;transition:bottom ease-in-out .1s}.psv-navbar--open{bottom:0}.psv-navbar,.psv-navbar *{-webkit-box-sizing:content-box;box-sizing:content-box}.psv-caption{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;color:rgba(255,255,255,.7);overflow:hidden;text-align:center}.psv-caption-icon{height:20px;width:20px;cursor:pointer}.psv-caption-icon *{fill:rgba(255,255,255,.7)}.psv-caption-content{display:inline-block;padding:10px;font:16px sans-serif;white-space:nowrap}.psv-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:10px;position:relative;cursor:pointer;height:20px;width:20px;background:0 0;color:rgba(255,255,255,.7)}.psv-button--active{background:rgba(255,255,255,.2)}.psv-button--disabled{pointer-events:none;opacity:.5}.psv-button .psv-button-svg{width:100%;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.psv-button .psv-button-svg *{fill:rgba(255,255,255,.7)}.psv-button--hover-scale:not(.psv-button--disabled):hover .psv-button-svg{-webkit-transform:scale(1.2);transform:scale(1.2)}.psv-hud{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;z-index:10;width:100%;height:100%}.psv-hud-svg-container{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20}.psv-marker{cursor:pointer;display:none}.psv-marker--normal{position:absolute;top:0;left:0;z-index:30;background-size:contain;background-repeat:no-repeat}.psv-marker--transparent{display:block;opacity:0}.psv-marker--visible{display:block}.psv-panel{position:absolute;z-index:90;right:0;height:100%;width:400px;max-width:calc(100% - 24px);background:rgba(10,10,10,.7);-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.1s;transition-duration:.1s;cursor:default;margin-left:9px}.psv-container--has-navbar .psv-panel{height:calc(100% - 40px)}.psv-panel-close-button{display:none;position:absolute;top:0;left:-24px;width:24px;height:24px;background:rgba(0,0,0,.9)}.psv-panel-close-button::after,.psv-panel-close-button::before{content:'';position:absolute;top:50%;left:4px;width:15px;height:1px;background-color:#fff;-webkit-transition:.2s ease-in-out;transition:.2s ease-in-out;-webkit-transition-property:width,left,-webkit-transform;transition-property:width,left,-webkit-transform;transition-property:width,left,transform;transition-property:width,left,transform,-webkit-transform}.psv-panel-close-button::before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.psv-panel-close-button::after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.psv-panel-close-button:hover::after,.psv-panel-close-button:hover::before{left:0;width:23px}.psv-panel-close-button:hover::before{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.psv-panel-close-button:hover::after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.psv-panel-resizer{display:none;position:absolute;top:0;left:-9px;width:9px;height:100%;background-color:rgba(0,0,0,.9);cursor:col-resize}.psv-panel-resizer::before{content:'';position:absolute;top:50%;left:1px;margin-top:-14.5px;width:1px;height:1px;-webkit-box-shadow:1px 0 #fff,3px 0 #fff,5px 0 #fff,1px 2px #fff,3px 2px #fff,5px 2px #fff,1px 4px #fff,3px 4px #fff,5px 4px #fff,1px 6px #fff,3px 6px #fff,5px 6px #fff,1px 8px #fff,3px 8px #fff,5px 8px #fff,1px 10px #fff,3px 10px #fff,5px 10px #fff,1px 12px #fff,3px 12px #fff,5px 12px #fff,1px 14px #fff,3px 14px #fff,5px 14px #fff,1px 16px #fff,3px 16px #fff,5px 16px #fff,1px 18px #fff,3px 18px #fff,5px 18px #fff,1px 20px #fff,3px 20px #fff,5px 20px #fff,1px 22px #fff,3px 22px #fff,5px 22px #fff,1px 24px #fff,3px 24px #fff,5px 24px #fff,1px 26px #fff,3px 26px #fff,5px 26px #fff,1px 28px #fff,3px 28px #fff,5px 28px #fff;box-shadow:1px 0 #fff,3px 0 #fff,5px 0 #fff,1px 2px #fff,3px 2px #fff,5px 2px #fff,1px 4px #fff,3px 4px #fff,5px 4px #fff,1px 6px #fff,3px 6px #fff,5px 6px #fff,1px 8px #fff,3px 8px #fff,5px 8px #fff,1px 10px #fff,3px 10px #fff,5px 10px #fff,1px 12px #fff,3px 12px #fff,5px 12px #fff,1px 14px #fff,3px 14px #fff,5px 14px #fff,1px 16px #fff,3px 16px #fff,5px 16px #fff,1px 18px #fff,3px 18px #fff,5px 18px #fff,1px 20px #fff,3px 20px #fff,5px 20px #fff,1px 22px #fff,3px 22px #fff,5px 22px #fff,1px 24px #fff,3px 24px #fff,5px 24px #fff,1px 26px #fff,3px 26px #fff,5px 26px #fff,1px 28px #fff,3px 28px #fff,5px 28px #fff;background:0 0}.psv-panel-content{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;color:#dcdcdc;font:16px sans-serif;overflow:auto}.psv-panel-content:not(.psv-panel-content--no-margin){padding:1em}.psv-panel-content--no-interaction{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.psv-panel--open{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;-webkit-transition-duration:.2s;transition-duration:.2s}.psv-panel--open .psv-panel-close-button,.psv-panel--open .psv-panel-resizer{display:block}.psv-tooltip{position:absolute;z-index:50;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:200px;background-color:rgba(61,61,61,.8);border-radius:4px;padding:.5em 1em;opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.1s;transition-duration:.1s}.psv-tooltip-content{color:#fff;font:14px sans-serif;text-shadow:0 1px #000}.psv-tooltip-arrow{position:absolute;height:0;width:0;border:7px solid transparent}.psv-tooltip--bottom-center{-webkit-box-shadow:0 3px 0 rgba(90,90,90,.7);box-shadow:0 3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--bottom-center .psv-tooltip-arrow{border-bottom-color:rgba(61,61,61,.8)}.psv-tooltip--center-left{-webkit-box-shadow:-3px 0 0 rgba(90,90,90,.7);box-shadow:-3px 0 0 rgba(90,90,90,.7);-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--center-left .psv-tooltip-arrow{border-left-color:rgba(61,61,61,.8)}.psv-tooltip--top-center{-webkit-box-shadow:0 -3px 0 rgba(90,90,90,.7);box-shadow:0 -3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--top-center .psv-tooltip-arrow{border-top-color:rgba(61,61,61,.8)}.psv-tooltip--center-right{-webkit-box-shadow:3px 0 0 rgba(90,90,90,.7);box-shadow:3px 0 0 rgba(90,90,90,.7);-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--center-right .psv-tooltip-arrow{border-right-color:rgba(61,61,61,.8)}.psv-tooltip--bottom-left{-webkit-box-shadow:-3px 3px 0 rgba(90,90,90,.7);box-shadow:-3px 3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--bottom-left .psv-tooltip-arrow{border-bottom-color:rgba(61,61,61,.8)}.psv-tooltip--bottom-right{-webkit-box-shadow:3px 3px 0 rgba(90,90,90,.7);box-shadow:3px 3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--bottom-right .psv-tooltip-arrow{border-bottom-color:rgba(61,61,61,.8)}.psv-tooltip--top-left{-webkit-box-shadow:-3px -3px 0 rgba(90,90,90,.7);box-shadow:-3px -3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--top-left .psv-tooltip-arrow{border-top-color:rgba(61,61,61,.8)}.psv-tooltip--top-right{-webkit-box-shadow:3px -3px 0 rgba(90,90,90,.7);box-shadow:3px -3px 0 rgba(90,90,90,.7);-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.psv-tooltip--top-right .psv-tooltip-arrow{border-top-color:rgba(61,61,61,.8)}.psv-tooltip--visible{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;-webkit-transition-duration:.1s;transition-duration:.1s}.psv-notification{position:absolute;z-index:100;bottom:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:0 2em;opacity:0;-webkit-transition-property:opacity,bottom;transition-property:opacity,bottom;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.2s;transition-duration:.2s}.psv-notification-content{max-width:50em;background-color:rgba(61,61,61,.8);border-radius:4px;padding:.5em 1em;font:14px sans-serif;color:#fff}.psv-notification--visible{opacity:100;bottom:80px}.psv-overlay{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;z-index:110;top:0;left:0;bottom:0;right:0;background:radial-gradient(#fff 0,#fdfdfd 16%,#fbfbfb 33%,#f8f8f8 49%,#efefef 66%,#dfdfdf 82%,#bfbfbf 100%);opacity:.8}.psv-overlay-image{margin-bottom:4vh}.psv-overlay-image svg{width:50vw}@media screen and (orientation:landscape){.psv-overlay-image svg{width:25vw}}.psv-overlay-text{font:30px sans-serif;text-align:center}.psv-overlay-subtext{font:20px sans-serif;opacity:.8;text-align:center}.psv-markers-list-title{font:24px sans-serif;margin:1em 0;text-align:center;text-shadow:2px 1px #000}.psv-markers-list{list-style:none;margin:0;padding:0;overflow:hidden}.psv-markers-list-item{clear:both;min-height:20px;padding:.5em 1em;cursor:pointer;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.psv-markers-list-item::before{content:'';position:absolute;top:0;left:0;height:100%;width:10px;margin-left:-10px}.psv-markers-list-item:nth-child(odd),.psv-markers-list-item:nth-child(odd)::before{background:rgba(255,255,255,.1)}.psv-markers-list-item:nth-child(even),.psv-markers-list-item:nth-child(even)::before{background:0 0}.psv-markers-list-item:hover{-webkit-transform:translateX(10px);transform:translateX(10px);-webkit-transition:-webkit-transform .1s ease-in-out;transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out}.psv-markers-list-image{float:left;width:20px}.psv-markers-list-name{margin:0;padding:0}.psv-markers-list-image+.psv-markers-list-name{padding-left:calc(20px + .5em)}.psv-autorotate-button{width:25px;height:25px;padding:7.5px}.psv-zoom-button{cursor:default;width:128px}.psv-zoom-button-minus,.psv-zoom-button-plus{float:left;position:relative;cursor:pointer;width:16px;height:16px}.psv-zoom-button-minus .psv-button-svg,.psv-zoom-button-plus .psv-button-svg{position:relative;top:20%}.psv-zoom-button-range{float:left;padding:9.5px 8px}.psv-zoom-button-line{position:relative;cursor:pointer;width:80px;height:1px;background:rgba(255,255,255,.7);-webkit-transition:all .3s ease;transition:all .3s ease}.psv-zoom-button-handle{position:absolute;border-radius:50%;top:-3px;width:7px;height:7px;background:rgba(255,255,255,.7);-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.psv-zoom-button:not(.psv-button--disabled):hover .psv-zoom-button-line{-webkit-box-shadow:0 0 2px rgba(255,255,255,.7);box-shadow:0 0 2px rgba(255,255,255,.7)}.psv-zoom-button:not(.psv-button--disabled):hover .psv-zoom-button-handle{-webkit-transform:scale(1.3);transform:scale(1.3)}@media (max-width:600px){.psv-zoom-button{width:auto;padding:0}.psv-zoom-button-range{display:none}.psv-zoom-button-minus,.psv-zoom-button-plus{width:20px;height:20px;padding:10px}.psv-zoom-button-minus .psv-button-svg,.psv-zoom-button-plus .psv-button-svg{top:0}}@media (max-width:600px){.psv-is-touch .psv-zoom-button{display:none}} -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/photoSphereViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/photoSphereViewer/static/images/loading.gif -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/js/doT.min.js: -------------------------------------------------------------------------------- 1 | /* Laura Doktorova https://github.com/olado/doT */ 2 | !function(){"use strict";function e(n,t,r){return("string"==typeof t?t:t.toString()).replace(n.define||a,function(e,t,o,a){return 0===t.indexOf("def.")&&(t=t.substring(4)),t in r||(":"===o?(n.defineParams&&a.replace(n.defineParams,function(e,n,o){r[t]={arg:n,text:o}}),t in r||(r[t]=a)):new Function("def","def['"+t+"']="+a)(r)),""}).replace(n.use||a,function(t,o){n.useParams&&(o=o.replace(n.useParams,function(e,n,t,o){if(r[t]&&r[t].arg&&o){var a=(t+":"+o).replace(/'|\\/g,"_");return r.__exp=r.__exp||{},r.__exp[a]=r[t].text.replace(new RegExp("(^|[^\\w$])"+r[t].arg+"([^\\w$])","g"),"$1"+o+"$2"),n+"def.__exp['"+a+"']"}}));var a=new Function("def","return "+o)(r);return a?e(n,a,r):a})}function n(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}var t,r={name:"doT",version:"1.1.1",templateSettings:{evaluate:/\{\{([\s\S]+?(\}?)+)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,encode:/\{\{!([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,useParams:/(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,defineParams:/^\s*([\w$]+):([\s\S]+)/,conditional:/\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,varname:"it",strip:!0,append:!0,selfcontained:!1,doNotSkipEncoded:!1},template:void 0,compile:void 0,log:!0};r.encodeHTMLSource=function(e){var n={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},t=e?/[&<>"'\/]/g:/&(?!#?\w+;)|<|>|"|'|\//g;return function(e){return e?e.toString().replace(t,function(e){return n[e]||e}):""}},t=function(){return this||(0,eval)("this")}(),"undefined"!=typeof module&&module.exports?module.exports=r:"function"==typeof define&&define.amd?define(function(){return r}):t.doT=r;var o={append:{start:"'+(",end:")+'",startencode:"'+encodeHTML("},split:{start:"';out+=(",end:");out+='",startencode:"';out+=encodeHTML("}},a=/$^/;r.template=function(c,i,u){i=i||r.templateSettings;var d,s,p=i.append?o.append:o.split,l=0,f=i.use||i.define?e(i,c,u||{}):c;f=("var out='"+(i.strip?f.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):f).replace(/'|\\/g,"\\$&").replace(i.interpolate||a,function(e,t){return p.start+n(t)+p.end}).replace(i.encode||a,function(e,t){return d=!0,p.startencode+n(t)+p.end}).replace(i.conditional||a,function(e,t,r){return t?r?"';}else if("+n(r)+"){out+='":"';}else{out+='":r?"';if("+n(r)+"){out+='":"';}out+='"}).replace(i.iterate||a,function(e,t,r,o){return t?(l+=1,s=o||"i"+l,t=n(t),"';var arr"+l+"="+t+";if(arr"+l+"){var "+r+","+s+"=-1,l"+l+"=arr"+l+".length-1;while("+s+"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); 8 | if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;dn;n++)o(e,e._deferreds[n]);e._deferreds=null}function u(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,i(n,e))})}catch(o){if(t)return;t=!0,i(n,o)}}var c=setTimeout;t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,t){var r=new this.constructor(n);return o(this,new function(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}(e,t,r)),r},t.prototype["finally"]=e,t.all=function(e){return new t(function(n,t){function o(e,f){try{if(f&&("object"==typeof f||"function"==typeof f)){var u=f.then;if("function"==typeof u)return void u.call(f,function(n){o(e,n)},t)}r[e]=f,0==--i&&n(r)}catch(c){t(c)}}if(!e||"undefined"==typeof e.length)throw new TypeError("Promise.all accepts an array");var r=Array.prototype.slice.call(e);if(0===r.length)return n([]);for(var i=r.length,f=0;r.length>f;f++)o(f,r[f])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(n){n(e)})},t.reject=function(e){return new t(function(n,t){t(e)})},t.race=function(e){return new t(function(n,t){for(var o=0,r=e.length;r>o;o++)e[o].then(n,t)})},t._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){c(e,0)},t._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var l=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"Promise"in l?l.Promise.prototype["finally"]||(l.Promise.prototype["finally"]=e):l.Promise=t}); 2 | -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/js/respond.min.js: -------------------------------------------------------------------------------- 1 | /*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl 2 | * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT 3 | * */ 4 | 5 | !function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;bb;b++)if(e=this.__events[a][b],"object"==typeof e?e.handleEvent(g):e.apply(this,f),g.isPropagationStopped())return g;if(this.__once&&a in this.__once){for(b=0,d=this.__once[a].length;d>b;b++)if(e=this.__once[a][b],"object"==typeof e?e.handleEvent(g):e.apply(this,f),g.isPropagationStopped())return delete this.__once[a],g;delete this.__once[a]}return g},change:function(a,b){var d,e,f,g=Array.prototype.slice.call(arguments,1),h=new c.Event(a,g);if(g.push(h),this.__events&&a in this.__events)for(d=0,e=this.__events[a].length;e>d;d++)if(g[0]=b,f=this.__events[a][d],b="object"==typeof f?f.handleEvent(h):f.apply(this,g),h.isPropagationStopped())return b;return b}},c.mixin=function(a,b){b=b||{},a="function"==typeof a?a.prototype:a,["on","off","once","trigger","change"].forEach(function(d){var e=b[d]||d;a[e]=c.prototype[d]}),Object.defineProperties(a,{__events:{value:null,writable:!0},__once:{value:null,writable:!0}})},c}); -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | kodApp.add({ 3 | name: "photoSphereViewer", 4 | title: "{{LNG.photoSphereViewer.meta.name}}", 5 | icon: "{{pluginHost}}static/images/icon.png", 6 | ext: "{{config.fileExt}}", 7 | sort: "{{config.fileSort}}", 8 | callback: function(path, ext) { 9 | var url = '{{pluginApi}}&path=' + core.pathCommon(path); 10 | if ('window' == "{{config.openWith}}" && !core.isFileView()) { 11 | window.open(url); 12 | } else { 13 | core.openDialog(url, core.icon(ext), htmlEncode(core.pathThis(path))); 14 | } 15 | } 16 | }); 17 | }); -------------------------------------------------------------------------------- /KodExplorer/photoSphereViewer/static/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $fileName . ' - ' . LNG('kod_name') . LNG('kod_power_by'); ?> 9 | 10 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 30 | 31 | 32 |
33 | 56 | 57 | -------------------------------------------------------------------------------- /KodExplorer/psdViewer/app.php: -------------------------------------------------------------------------------- 1 | hookRegiest(array( 19 | 'user.commonJs.insert' => 'psdViewerPlugin.echoJs' 20 | )); 21 | } 22 | public function echoJs($st, $act) { 23 | if ($this->isFileExtence($st, $act)) { 24 | $this->echoFile('static/main.js'); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /KodExplorer/psdViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'PSD Viewer', 4 | 'psdViewer.meta.title' => 'PSD Viewer', 5 | 'psdViewer.meta.desc' => 'Preview PSD files online, view PSD file layer information, and support converting PSD to PNG download', 6 | 7 | 'psdViewer.contextMenu.psdTool' => 'PSD Tool', 8 | 'psdViewer.contextMenu.viewPsd' => 'Online preview', 9 | 'psdViewer.contextMenu.viewPsdLayer' => 'View layer information', 10 | 'psdViewer.contextMenu.downloadAsPng' => 'Convert to PNG and download', 11 | 12 | 'psdViewer.dialog.viewPsdLayer.title' => 'layer information' 13 | ); -------------------------------------------------------------------------------- /KodExplorer/psdViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'PSD 看图', 4 | 'psdViewer.meta.title' => 'PSD 看图', 5 | 'psdViewer.meta.desc' => '在线预览 PSD 文件,查看 PSD 文件图层信息,并支持将 PSD 转换为 PNG 下载', 6 | 7 | 'psdViewer.contextMenu.psdTool' => 'PSD 工具', 8 | 'psdViewer.contextMenu.viewPsd' => '在线预览', 9 | 'psdViewer.contextMenu.viewPsdLayer' => '查看图层信息', 10 | 'psdViewer.contextMenu.downloadAsPng' => '转换为 PNG 并下载', 11 | 12 | 'psdViewer.dialog.viewPsdLayer.title' => '图层信息' 13 | ); -------------------------------------------------------------------------------- /KodExplorer/psdViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "psdViewer", 3 | "name": "{{LNG.psdViewer.meta.name}}", 4 | "title": "{{LNG.psdViewer.meta.title}}", 5 | "version": "1.0", 6 | "category": "file,tools", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG.psdViewer.meta.desc}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "pluginAuth": { 17 | "type": "userSelect", 18 | "value": "all:1", 19 | "display": "{{LNG.Plugin.config.auth}}", 20 | "desc": "{{LNG.Plugin.config.authDesc}}", 21 | "require": 1 22 | }, 23 | 24 | "fileExt": { 25 | "type": "tags", 26 | "display": "{{LNG.Plugin.Config.fileExt}}", 27 | "desc": "{{LNG.Plugin.Config.fileExtDesc}}", 28 | "value": "psd" 29 | }, 30 | "fileSort": { 31 | "type": "number", 32 | "display": "{{LNG.Plugin.Config.fileSort}}", 33 | "desc": "{{LNG.Plugin.Config.fileSortDesc}}", 34 | "value": 100 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /KodExplorer/psdViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/psdViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodExplorer/psdViewer/static/json-viewer/jquery.json-viewer.css: -------------------------------------------------------------------------------- 1 | /* Syntax highlighting for JSON objects */ 2 | ul.json-dict,ol.json-array{list-style-type:none;margin:0 0 0 1px;border-left:1px dotted #ccc;padding-left:2em}.json-string{color:#0b7500}.json-literal{color:#1a01cc;font-weight:700}a.json-toggle{position:relative;color:inherit;text-decoration:none}a.json-toggle:focus{outline:0}a.json-toggle:before{color:#aaa;content:"\25BC";position:absolute;display:inline-block;width:1em;left:-1em}a.json-toggle.collapsed:before{transform:rotate(-90deg);-ms-transform:rotate(-90deg);-webkit-transform:rotate(-90deg)}a.json-placeholder{color:#aaa;padding:0 1em;text-decoration:none}a.json-placeholder:hover{text-decoration:underline} -------------------------------------------------------------------------------- /KodExplorer/psdViewer/static/json-viewer/jquery.json-viewer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery json-viewer 3 | * @author: Alexandre Bodelot 4 | */ 5 | !function(a){function b(a){return a instanceof Object&&Object.keys(a).length>0}function c(a){var b=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return b.test(a)}function d(a,e){var g,h,i,j,f="";if("string"==typeof a)a=a.replace(/&/g,"&").replace(//g,">"),f+=c(a)?''+a+"":'"'+a+'"';else if("number"==typeof a)f+=''+a+"";else if("boolean"==typeof a)f+=''+a+"";else if(null===a)f+='null';else if(a instanceof Array)if(a.length>0){for(f+='[
    ',g=0;g",b(a[g])&&(f+=''),f+=d(a[g],e),g";f+="
]"}else f+="[]";else if("object"==typeof a)if(h=Object.keys(a).length,h>0){f+='{
    ';for(i in a)a.hasOwnProperty(i)&&(f+="
  • ",j=e.withQuotes?'"'+i+'"':i,f+=b(a[i])?''+j+"":j,f+=": "+d(a[i],e),--h>0&&(f+=","),f+="
  • ");f+="
}"}else f+="{}";return f}a.fn.jsonViewer=function(c,e){return e=e||{},this.each(function(){var f=d(c,e);b(c)&&(f=''+f),a(this).html(f),a(this).off("click"),a(this).on("click","a.json-toggle",function(){var c,d,b=a(this).toggleClass("collapsed").siblings("ul.json-dict, ol.json-array");return b.toggle(),b.is(":visible")?b.siblings(".json-placeholder").remove():(c=b.children("li").length,d=c+(c>1?" items":" item"),b.after(''+d+"")),!1}),a(this).on("click","a.json-placeholder",function(){return a(this).siblings("a.json-toggle").click(),!1}),1==e.collapsed&&a(this).find("a.json-toggle").click()})}}(jQuery); -------------------------------------------------------------------------------- /KodExplorer/psdViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | var menuAction = function(action, option) { 3 | var path; 4 | if (action.path !== undefined) { 5 | path = action.path; 6 | } else { 7 | path = ui.path.makeParam().path; 8 | } 9 | 10 | if (!!path) { 11 | try { 12 | var fileUrl = core.path2url(path); 13 | var fileName = pathTools.pathThis(path).replace(/&/g, '&').replace(//g, '>'); 14 | require.async("{{pluginHost}}static/psd.min", function(plugin) { 15 | var PSD = requirePSD("psd"); 16 | PSD.fromURL(fileUrl).then(function(psd) { 17 | switch (action) { 18 | case "view-psd-layer": 19 | var data = psd.tree().export(); 20 | if ($.artDialog) { 21 | require.async([ 22 | "{{pluginHost}}static/json-viewer/jquery.json-viewer.js", 23 | "{{pluginHost}}static/json-viewer/jquery.json-viewer.css" 24 | ], function() { 25 | var dialog = $.artDialog({ 26 | title: fileName + " - {{LNG.psdViewer.dialog.viewPsdLayer.title}}", 27 | content: "
", 28 | ok: true 29 | }); 30 | $("#psd-layer-info").jsonViewer(data); 31 | dialog.position('50%', '50%'); 32 | }); 33 | } else { 34 | alert(JSON.stringify(data), undefined, 2); 35 | } 36 | break; 37 | case "download-as-png": 38 | download(psd.image.toBase64(), fileName + ".png"); 39 | break; 40 | default: 41 | MaskView.image(psd.image.toBase64()); 42 | $("#windowMaskView").css({ 43 | background: "#000" // 部分主题打开遮罩的背景是蓝色.. 44 | }); 45 | } 46 | }); 47 | }); 48 | } catch (e) { 49 | Tips.tips("Error", "error"); 50 | } 51 | } 52 | }; 53 | 54 | var option = { 55 | "psdViewerTool": { 56 | name: "{{LNG.psdViewer.contextMenu.psdTool}}", 57 | className: "psdViewerTool", 58 | icon: "{{pluginHost}}static/images/icon.png", 59 | items: { 60 | "view-psd": { 61 | name: "{{LNG.psdViewer.contextMenu.viewPsd}}", 62 | className: "view-psd", 63 | icon: "{{pluginHost}}static/images/icon.png", 64 | callback: menuAction 65 | }, 66 | "view-psd-layer": { 67 | name: "{{LNG.psdViewer.contextMenu.viewPsdLayer}}", 68 | className: "view-psd-layer", 69 | icon: "icon-external-link", 70 | callback: menuAction 71 | }, 72 | "download-as-png": { 73 | name: "{{LNG.psdViewer.contextMenu.downloadAsPng}}", 74 | className: "download-as-png", 75 | icon: "icon-picture", 76 | callback: menuAction 77 | }, 78 | } 79 | } 80 | }; 81 | 82 | var menuAdd = function() { 83 | $.contextMenu.menuAdd(option, ".menu-file", false, ".down"); 84 | $.contextMenu.menuAdd(option, ".toolbar-path-more", false, ".others"); 85 | }; 86 | 87 | // 非支持的格式不显示菜单项 88 | Hook.bind("rightMenu.show.menu-file,rightMenu.show.menu-tree-file", function($menuAt, $theMenu) { 89 | var param = $(".context-menu-active").hasClass("menu-tree-file") ? ui.tree.makeParam() : ui.path.makeParam(); 90 | var ext = core.pathExt(param.path); 91 | var allowExt = "{{config.fileExt}}"; 92 | var hideClass = "hidden"; 93 | 94 | if (inArray(allowExt.split(","), ext)) { 95 | $theMenu.find(".psdViewerTool").removeClass(hideClass); 96 | } else { 97 | $theMenu.find(".psdViewerTool").addClass(hideClass); 98 | } 99 | }); 100 | 101 | menuAdd(); 102 | 103 | kodApp.add({ 104 | name: "psdView", 105 | icon: "{{pluginHost}}static/images/icon.png", 106 | title: "{{LNG.psdViewer.meta.name}}", 107 | ext: "{{config.fileExt}}", 108 | sort: "{{config.fileSort}}", 109 | callback: function(path, ext) { 110 | var action = { 111 | action: "view-psd", 112 | path: path 113 | }; 114 | menuAction(action); 115 | } 116 | }); 117 | }); -------------------------------------------------------------------------------- /KodExplorer/xProber/app.php: -------------------------------------------------------------------------------- 1 | hookRegiest(array( 17 | 'templateCommonHeader' => 'xProberPlugin.addMenu' 18 | )); 19 | } 20 | 21 | public function addMenu() { 22 | $config = $this->getConfig(); 23 | $subMenu = $config['menuSubMenu']; 24 | 25 | navbar_menu_add(array( 26 | 'name' => LNG('xProber.meta.name'), 27 | 'icon' => $this->appIcon(), 28 | 'url' => 'javascript:(core.openWindow("' . $this->pluginApi . '", "' . LNG('xProber.meta.name') . '"))', 29 | 'target' => '', 30 | 'subMenu' => $subMenu, 31 | 'use' => '1' 32 | )); 33 | } 34 | 35 | public function index() { 36 | header('Location: ' . $this->pluginHost . 'xProber/'); 37 | } 38 | } -------------------------------------------------------------------------------- /KodExplorer/xProber/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'X Prober', 4 | 'xProber.meta.title' => 'X Prober', 5 | 'xProber.meta.desc' => 'show your server information and readable easily.' 6 | ); -------------------------------------------------------------------------------- /KodExplorer/xProber/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'X 探针', 4 | 'xProber.meta.title' => 'X 探针', 5 | 'xProber.meta.desc' => '十分直观地为您显示服务器的信息' 6 | ); -------------------------------------------------------------------------------- /KodExplorer/xProber/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "xProber", 3 | "name": "{{LNG.xProber.meta.name}}", 4 | "title": "{{LNG.xProber.meta.title}}", 5 | "version": "2.4.2", 6 | "source": { 7 | "thumb": "", 8 | "icon": "{{pluginHost}}static/icon.png", 9 | "screenshoot": ["{{pluginHost}}static/screenshot.png"] 10 | }, 11 | "category": "tools,safe", 12 | "description": "{{LNG.xProber.meta.desc}}", 13 | "keywords": "", 14 | "auther": { 15 | "copyright": "INN STUDIO", 16 | "homePage": "https://github.com/kmvan/x-prober" 17 | }, 18 | "configItem": { 19 | "pluginAuth": { 20 | "type": "userSelect", 21 | "value": "role:1", 22 | "display": "{{LNG.Plugin.config.auth}}", 23 | "desc": "{{LNG.Plugin.config.authDesc}}", 24 | "require": 1 25 | }, 26 | "menuSubMenu": { 27 | "type": "switch", 28 | "value": 1, 29 | "display": "{{LNG.menu_sub_menu}}" 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /KodExplorer/xProber/static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/xProber/static/icon.png -------------------------------------------------------------------------------- /KodExplorer/xProber/static/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/xProber/static/screenshot.png -------------------------------------------------------------------------------- /KodExplorer/xProber/xProber/index.php: -------------------------------------------------------------------------------- 1 | hookRegiest(array( 22 | 'user.commonJs.insert' => 'xlsxViewerPlugin.echoJs' 23 | )); 24 | } 25 | 26 | public function echoJs($st, $act) { 27 | if ($this->isFileExtence($st, $act)) { 28 | $this->echoFile('static/main.js'); 29 | } 30 | } 31 | 32 | public function index() { 33 | $path = _DIR($this->in['path']); 34 | $fileUrl = _make_file_proxy($path); 35 | $fileName = get_path_this(rawurldecode($this->in['path'])); 36 | $fileName = htmlspecialchars($fileName); 37 | include($this->pluginPath . 'static/page.html'); 38 | } 39 | } -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/i18n/en.php: -------------------------------------------------------------------------------- 1 | 'Excel document preview', 4 | 'xlsxViewer.meta.title' => 'Excel document preview', 5 | 'xlsxViewer.meta.desc' => 'View .xlsx files online without a third-party interface', 6 | ); -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/i18n/zh-CN.php: -------------------------------------------------------------------------------- 1 | 'Excel 文档预览', 4 | 'xlsxViewer.meta.title' => 'Excel 文档预览', 5 | 'xlsxViewer.meta.desc' => 'Excel 文档预览,无需借助第三方接口即可在线查看 .xlsx 文件', 6 | ); -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "xlsxViewer", 3 | "name": "{{LNG.xlsxViewer.meta.name}}", 4 | "title": "{{LNG.xlsxViewer.meta.title}}", 5 | "version": "1.0", 6 | "category": "file", 7 | "source": { 8 | "icon": "{{pluginHost}}static/images/icon.png" 9 | }, 10 | "description": "{{LNG.xlsxViewer.meta.desc}}", 11 | "auther": { 12 | "copyright": "mengkun", 13 | "homePage": "https://mkblog.cn" 14 | }, 15 | "configItem": { 16 | "formStyle": { 17 | "className": "form-box-title-left", 18 | "tabs": [{ 19 | "name": "{{LNG.Plugin.tab.basic}}", 20 | "field": ["pluginAuth", "pluginAuthOpen", "sep001", "openWith"] 21 | }] 22 | }, 23 | "pluginAuth": { 24 | "type": "userSelect", 25 | "value": "all:1", 26 | "display": "{{LNG.Plugin.config.auth}}", 27 | "desc": "{{LNG.Plugin.config.authDesc}}", 28 | "require": 1 29 | }, 30 | "sep001": "
", 31 | "openWith": { 32 | "type": "radio", 33 | "value": "dialog", 34 | "display": "{{LNG.Plugin.Config.openWith}}", 35 | "info": [ 36 | ["dialog", "{{LNG.Plugin.Config.openWithDilog}}"], 37 | ["window", "{{LNG.Plugin.Config.openWithWindow}}"] 38 | ] 39 | }, 40 | "fileExt": { 41 | "type": "tags", 42 | "display": "{{LNG.Plugin.Config.fileExt}}", 43 | "desc": "{{LNG.Plugin.Config.fileExtDesc}}", 44 | "value": "xls,xlsx,xlsb,ods,csv,fods,csv" 45 | }, 46 | "fileSort": { 47 | "type": "number", 48 | "display": "{{LNG.Plugin.Config.fileSort}}", 49 | "desc": "{{LNG.Plugin.Config.fileSortDesc}}", 50 | "value": 10 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/static/css/jexcel.css: -------------------------------------------------------------------------------- 1 | /** 2 | * (c) jExcel v3.6.3 3 | * 4 | * Author: Paul Hodel 5 | * Website: https://bossanova.uk/jexcel/ 6 | * Description: Create amazing web based spreadsheets. 7 | * 8 | * This software is distribute under MIT License 9 | */ 10 | :root { 11 | --jexcel-border-color:#000; 12 | } 13 | 14 | .jexcel_container { 15 | display:inline-block; 16 | padding-right:2px; 17 | box-sizing: border-box; 18 | overscroll-behavior: contain; 19 | } 20 | 21 | .jexcel_container.fullscreen { 22 | position:fixed; 23 | top:0px; 24 | left:0px; 25 | width:100%; 26 | height:100%; 27 | z-index:2001; 28 | } 29 | 30 | .jexcel_container.fullscreen .jexcel_content { 31 | overflow:auto; 32 | width:100%; 33 | height:100%; 34 | background-color:#ffffff; 35 | } 36 | 37 | .jexcel_container.fullscreen.with-toolbar { 38 | height: calc(100% - 46px); 39 | } 40 | 41 | .jexcel_content { 42 | display:inline-block; 43 | box-sizing: border-box; 44 | padding-right:2px; 45 | position:relative; 46 | } 47 | 48 | .jexcel { 49 | border-collapse:separate; 50 | table-layout:fixed; 51 | white-space: nowrap; 52 | empty-cells:show; 53 | border:0px; 54 | background-color:#fff; 55 | width:0; 56 | 57 | border-top:1px solid transparent; 58 | border-left:1px solid transparent; 59 | border-right:1px solid #ccc; 60 | border-bottom:1px solid #ccc; 61 | } 62 | 63 | .jexcel > thead > tr > td 64 | { 65 | border-top:1px solid #ccc; 66 | border-left:1px solid #ccc; 67 | border-right:1px solid transparent; 68 | border-bottom:1px solid transparent; 69 | background-color:#f3f3f3; 70 | padding:2px; 71 | cursor:pointer; 72 | box-sizing: border-box; 73 | overflow: hidden; 74 | position: sticky; 75 | top: 0; 76 | z-index:2000; 77 | } 78 | 79 | .with-toolbar .jexcel > thead > tr > td 80 | { 81 | top:42px; 82 | } 83 | 84 | .jexcel > thead.draggable > tr > td::before 85 | { 86 | content:'\00a0'; 87 | width:100%; 88 | height:3px; 89 | position:absolute; 90 | bottom:0px; 91 | left:0px; 92 | cursor:move; 93 | } 94 | 95 | .jexcel > thead.resizable > tr > td::after 96 | { 97 | content:'\00a0'; 98 | width:3px; 99 | height:100%; 100 | position:absolute; 101 | top:0px; 102 | right:0px; 103 | cursor:col-resize; 104 | } 105 | 106 | .jexcel > thead > tr > td.dragging 107 | { 108 | background-color:#fff; 109 | opacity:0.5; 110 | } 111 | 112 | .jexcel > thead > tr > td:first-child:after, 113 | .jexcel > thead > tr.jexcel_nested > td::before, 114 | .jexcel > thead > tr.jexcel_nested > td::after 115 | { 116 | cursor:default; 117 | } 118 | 119 | .jexcel > thead > tr > td.selected 120 | { 121 | background-color:#dcdcdc; 122 | } 123 | 124 | .jexcel > thead > tr > td.arrow-up 125 | { 126 | background-repeat:no-repeat; 127 | background-position:center right 5px; 128 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 14l5-5 5 5H7z' fill='gray'/%3E%3C/svg%3E"); 129 | text-decoration:underline; 130 | } 131 | 132 | .jexcel > thead > tr > td.arrow-down 133 | { 134 | background-repeat:no-repeat; 135 | background-position:center right 5px; 136 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E"); 137 | text-decoration:underline; 138 | } 139 | 140 | .jexcel > tbody > tr > td:first-child 141 | { 142 | position:relative; 143 | background-color:#f3f3f3; 144 | text-align:center; 145 | } 146 | 147 | .jexcel > tbody.resizable > tr > td:first-child::before 148 | { 149 | content:'\00a0'; 150 | width:100%; 151 | height:3px; 152 | position:absolute; 153 | bottom:0px; 154 | left:0px; 155 | cursor:row-resize; 156 | } 157 | 158 | .jexcel > tbody.draggable > tr > td:first-child::after 159 | { 160 | content:'\00a0'; 161 | width:3px; 162 | height:100%; 163 | position:absolute; 164 | top:0px; 165 | right:0px; 166 | cursor:move; 167 | } 168 | 169 | .jexcel > tbody > tr.dragging > td 170 | { 171 | background-color:#eee; 172 | opacity:0.5; 173 | } 174 | 175 | .jexcel > tbody > tr > td 176 | { 177 | border-top:1px solid #ccc; 178 | border-left:1px solid #ccc; 179 | border-right:1px solid transparent; 180 | border-bottom:1px solid transparent; 181 | padding:4px; 182 | white-space: nowrap; 183 | box-sizing: border-box; 184 | line-height:1em; 185 | } 186 | 187 | .jexcel > tbody > tr > td:last-child 188 | { 189 | overflow:hidden; 190 | } 191 | 192 | .jexcel > tbody > tr > td > img 193 | { 194 | display:inline-block; 195 | max-width:100px; 196 | } 197 | 198 | .jexcel > tbody > tr > td.readonly 199 | { 200 | color:rgba(0,0,0,0.3) 201 | } 202 | .jexcel > tbody > tr.selected > td:first-child 203 | { 204 | background-color:#dcdcdc; 205 | } 206 | .jexcel > tbody > tr > td > select, 207 | .jexcel > tbody > tr > td > input, 208 | .jexcel > tbody > tr > td > textarea 209 | { 210 | border:0px; 211 | border-radius:0px; 212 | outline:0px; 213 | width:100%; 214 | margin:0px; 215 | padding:0px; 216 | background-color:transparent; 217 | box-sizing: border-box; 218 | } 219 | 220 | .jexcel > tbody > tr > td > textarea 221 | { 222 | resize: none; 223 | padding-top:6px !important; 224 | } 225 | 226 | .jexcel > tbody > tr > td > input[type=checkbox] 227 | { 228 | width:12px; 229 | margin-top:2px; 230 | } 231 | .jexcel > tbody > tr > td > input[type=radio] 232 | { 233 | width:12px; 234 | margin-top:2px; 235 | } 236 | 237 | .jexcel > tbody > tr > td > select 238 | { 239 | -webkit-appearance: none; 240 | -moz-appearance: none; 241 | appearance: none; 242 | background-repeat: no-repeat; 243 | background-position-x: 100%; 244 | background-position-y: 40%; 245 | background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+); 246 | } 247 | 248 | .jexcel > tbody > tr > td.dropdown 249 | { 250 | background-repeat: no-repeat; 251 | background-position:top 50% right 5px; 252 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E"); 253 | text-overflow: ellipsis; 254 | overflow-x:hidden; 255 | } 256 | 257 | .jexcel > tbody > tr > td.dropdown.jexcel_comments 258 | { 259 | background:url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E") top 50% right 5px no-repeat, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=') top right no-repeat; 260 | } 261 | 262 | .jexcel > tbody > tr > td > .color 263 | { 264 | width:90%; 265 | height:10px; 266 | margin:auto; 267 | } 268 | 269 | .jexcel .highlight { 270 | background-color:rgba(0,0,0,0.05); 271 | } 272 | 273 | .jexcel .highlight-top { 274 | border-top:1px solid #000; /* var(--jexcel-border-color);*/ 275 | box-shadow: 0px -1px #ccc; 276 | } 277 | 278 | .jexcel .highlight-left { 279 | border-left:1px solid #000; /* var(--jexcel-border-color);*/ 280 | box-shadow: -1px 0px #ccc; 281 | } 282 | 283 | .jexcel .highlight-right { 284 | border-right:1px solid #000; /* var(--jexcel-border-color);*/ 285 | } 286 | 287 | .jexcel .highlight-bottom { 288 | border-bottom:1px solid #000; /* var(--jexcel-border-color);*/ 289 | } 290 | 291 | .jexcel .highlight-top.highlight-left { 292 | box-shadow: -1px -1px #ccc; 293 | -webkit-box-shadow: -1px -1px #ccc; 294 | -moz-box-shadow: -1px -1px #ccc; 295 | } 296 | 297 | .jexcel .highlight-selected 298 | { 299 | background-color:rgba(0,0,0,0.0); 300 | } 301 | .jexcel .selection 302 | { 303 | background-color:rgba(0,0,0,0.05); 304 | } 305 | .jexcel .selection-left 306 | { 307 | border-left:1px dotted #000; 308 | } 309 | .jexcel .selection-right 310 | { 311 | border-right:1px dotted #000; 312 | } 313 | .jexcel .selection-top 314 | { 315 | border-top:1px dotted #000; 316 | } 317 | .jexcel .selection-bottom 318 | { 319 | border-bottom:1px dotted #000; 320 | } 321 | .jexcel_corner 322 | { 323 | position:absolute; 324 | background-color: rgb(0, 0, 0); 325 | height: 1px; 326 | width: 1px; 327 | border: 1px solid rgb(255, 255, 255); 328 | top:-2000px; 329 | left:-2000px; 330 | cursor:crosshair; 331 | box-sizing: initial; 332 | z-index:7000; 333 | padding: 2px; 334 | } 335 | 336 | .jexcel .editor 337 | { 338 | outline:0px solid transparent; 339 | overflow:visible; 340 | white-space: nowrap; 341 | text-align:left; 342 | padding:0px; 343 | box-sizing: border-box; 344 | overflow:visible !important; 345 | } 346 | 347 | .jexcel .editor > input 348 | { 349 | padding-left:4px; 350 | } 351 | 352 | .jexcel .editor .jupload 353 | { 354 | position:fixed; 355 | top:100%; 356 | z-index:8000; 357 | user-select:none; 358 | -webkit-font-smoothing: antialiased; 359 | font-size: .875rem; 360 | letter-spacing: .2px; 361 | -webkit-border-radius: 4px; 362 | border-radius: 4px; 363 | -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); 364 | box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); 365 | padding:10px; 366 | background-color:#fff; 367 | width:300px; 368 | min-height:225px; 369 | margin-top:2px; 370 | } 371 | 372 | .jexcel .editor .jupload img 373 | { 374 | width:100%; 375 | height:auto; 376 | } 377 | 378 | .jexcel .editor .jclose:after 379 | { 380 | position:absolute; 381 | top:0; 382 | right:0; 383 | margin:10px; 384 | content:'close'; 385 | font-family:'Material icons'; 386 | font-size:24px; 387 | width:24px; 388 | height:24px; 389 | line-height:24px; 390 | cursor:pointer; 391 | text-shadow: 0px 0px 5px #fff; 392 | } 393 | 394 | .jexcel, .jexcel td, .jexcel_corner 395 | { 396 | -webkit-touch-callout: none; 397 | -webkit-user-select: none; 398 | -khtml-user-select: none; 399 | -moz-user-select: none; 400 | -ms-user-select: none; 401 | user-select: none; 402 | -webkit-user-drag: none; 403 | -khtml-user-drag: none; 404 | -moz-user-drag: none; 405 | -o-user-drag: none; 406 | user-drag: none; 407 | } 408 | 409 | .jexcel_textarea 410 | { 411 | position:absolute; 412 | top:-999px; 413 | left:-999px; 414 | width:1px; 415 | height:1px; 416 | } 417 | .jexcel .dragline 418 | { 419 | position:absolute; 420 | } 421 | .jexcel .dragline div 422 | { 423 | position:relative; 424 | top:-6px; 425 | height:5px; 426 | width:22px; 427 | } 428 | .jexcel .dragline div:hover 429 | { 430 | cursor:move; 431 | } 432 | 433 | .jexcel .onDrag 434 | { 435 | background-color:rgba(0,0,0,0.6); 436 | } 437 | 438 | .jexcel .error 439 | { 440 | border:1px solid red; 441 | } 442 | 443 | .jexcel thead td.resizing 444 | { 445 | border-right-style:dotted !important; 446 | border-right-color:red !important; 447 | } 448 | 449 | .jexcel tbody tr.resizing > td 450 | { 451 | border-bottom-style:dotted !important; 452 | border-bottom-color:red !important; 453 | } 454 | 455 | .jexcel tbody td.resizing 456 | { 457 | border-right-style:dotted !important; 458 | border-right-color:red !important; 459 | } 460 | 461 | .jexcel .jdropdown-header 462 | { 463 | border:0px !important; 464 | outline:none !important; 465 | width:100% !important; 466 | height:100% !important; 467 | padding:0px !important; 468 | padding-left:8px !important; 469 | } 470 | 471 | .jexcel .jdropdown-container 472 | { 473 | margin-top:1px; 474 | } 475 | 476 | .jexcel .jdropdown-container-header { 477 | padding: 0px; 478 | margin: 0px; 479 | height: inherit; 480 | } 481 | 482 | .jexcel .jdropdown-picker 483 | { 484 | border:0px !important; 485 | padding:0px !important; 486 | width:inherit; 487 | height:inherit; 488 | } 489 | 490 | .jexcel .jexcel_comments 491 | { 492 | background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII='); 493 | background-repeat: no-repeat; 494 | background-position: top right; 495 | } 496 | 497 | .jexcel .sp-replacer 498 | { 499 | margin: 2px; 500 | border:0px; 501 | } 502 | 503 | .jexcel > thead > tr.jexcel_filter > td > input 504 | { 505 | border:0px; 506 | width:100%; 507 | outline:none; 508 | } 509 | 510 | .jexcel_about 511 | { 512 | text-transform:uppercase; 513 | display:none; 514 | float:right; 515 | font-size:0.7em; 516 | padding:2px; 517 | } 518 | 519 | .jexcel_filter 520 | { 521 | display:flex; 522 | justify-content:space-between; 523 | margin-bottom:4px; 524 | } 525 | 526 | .jexcel_filter > div 527 | { 528 | padding:8px; 529 | align-items:center; 530 | } 531 | 532 | .jexcel_pagination 533 | { 534 | display:flex; 535 | justify-content:space-between; 536 | align-items:center; 537 | } 538 | 539 | .jexcel_pagination > div 540 | { 541 | display:flex; 542 | padding:10px; 543 | } 544 | 545 | .jexcel_pagination > div:last-child 546 | { 547 | padding-right:10px; 548 | padding-top:10px; 549 | } 550 | 551 | .jexcel_pagination > div > div 552 | { 553 | text-align:center; 554 | width:36px; 555 | height:36px; 556 | line-height:34px; 557 | border:1px solid #ccc; 558 | box-sizing: border-box; 559 | margin-left:2px; 560 | cursor:pointer; 561 | } 562 | 563 | .jexcel_page_selected 564 | { 565 | font-weight:bold; 566 | background-color:#f3f3f3; 567 | } 568 | 569 | .jexcel_toolbar 570 | { 571 | display:flex; 572 | background-color:#f3f3f3; 573 | border:1px solid #ccc; 574 | padding:4px; 575 | margin:0px 2px 4px 1px; 576 | position:sticky; 577 | top:0px; 578 | z-index:8001; 579 | } 580 | 581 | .jexcel_toolbar:empty 582 | { 583 | display:none; 584 | } 585 | 586 | .jexcel_toolbar i.jexcel_toolbar_item 587 | { 588 | width:24px; 589 | height:24px; 590 | padding:4px; 591 | cursor:pointer; 592 | display:inline-block; 593 | } 594 | 595 | .jexcel_toolbar i.jexcel_toolbar_item:hover 596 | { 597 | background-color:#ddd; 598 | } 599 | 600 | .jexcel_toolbar select.jexcel_toolbar_item 601 | { 602 | margin-left:2px; 603 | margin-right:2px; 604 | display:inline-block; 605 | border:0px; 606 | background-color:transparent; 607 | padding-right:10px; 608 | } 609 | 610 | .jexcel .dragging-left 611 | { 612 | background-repeat: no-repeat; 613 | background-position:top 50% left 0px; 614 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M14 7l-5 5 5 5V7z'/%3E%3Cpath fill='none' d='M24 0v24H0V0h24z'/%3E%3C/svg%3E"); 615 | } 616 | 617 | .jexcel .dragging-right 618 | { 619 | background-repeat: no-repeat; 620 | background-position:top 50% right 0px; 621 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 17l5-5-5-5v10z'/%3E%3Cpath fill='none' d='M0 24V0h24v24H0z'/%3E%3C/svg%3E"); 622 | } 623 | 624 | .jexcel_tabs > .jexcel_tab 625 | { 626 | display:none; 627 | } 628 | 629 | .jexcel_tabs > .jexcel_tab_link 630 | { 631 | display:inline-block; 632 | padding:10px; 633 | padding-left:20px; 634 | padding-right:20px; 635 | margin-right:5px; 636 | margin-bottom:5px; 637 | background-color:#f3f3f3; 638 | cursor:pointer; 639 | } 640 | 641 | .jexcel_tabs > .jexcel_tab_link.selected 642 | { 643 | background-color:#ddd; 644 | } 645 | 646 | .jexcel_hidden_index tr > td:first-child, .jexcel_hidden_index colgroup > col:first-child 647 | { 648 | display:none; 649 | } -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/static/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengkunsoft/KodPlugins/88ae90f12278fb9966125d5f2834e1163dd16d3b/KodExplorer/xlsxViewer/static/images/icon.png -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/static/main.js: -------------------------------------------------------------------------------- 1 | kodReady.push(function() { 2 | kodApp.add({ 3 | name: "xlsxViewer", 4 | title: "{{LNG.xlsxViewer.meta.name}}", 5 | icon: "{{pluginHost}}static/images/icon.png", 6 | ext: "{{config.fileExt}}", 7 | sort: "{{config.fileSort}}", 8 | callback: function(path, ext) { 9 | var url = '{{pluginApi}}&path=' + core.pathCommon(path); 10 | if ('window' == "{{config.openWith}}" && !core.isFileView()) { 11 | window.open(url); 12 | } else { 13 | core.openDialog(url, core.icon(ext), htmlEncode(core.pathThis(path))); 14 | } 15 | } 16 | }); 17 | }); -------------------------------------------------------------------------------- /KodExplorer/xlsxViewer/static/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?php echo $fileName . ' - ' . LNG('kod_name') . LNG('kod_power_by'); ?> 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 155 | 156 | 157 |
158 |
159 |
160 |
161 |
162 | 163 | 215 | 216 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 mengkunsoft 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KodPlugins 2 | 3 | 可道云插件收藏 4 | 5 | ## 插件安装方法 6 | 7 | 下载后,将 **对应版本的插件 文件夹** 上传至可道云的 `plugins` 文件夹下,在插件中心启用插件并刷新页面即可! 8 | 9 | 10 | 11 | ## 插件列表 12 | 13 | 以下是自制的可道云插件,部分插件暂未支持新版的 `KodBox`,正在迁移中。 14 | 15 | 16 | ### photoSphereViewer ![](https://img.shields.io/badge/KodBox-%E2%88%9A-brightgreen) ![](https://img.shields.io/badge/KodExplorer-%E2%88%9A-brightgreen) 17 | 18 | 全景图查看插件 http://bbs.kodcloud.com/d/67 19 | 20 | 21 | 22 | ### psdViewer ![](https://img.shields.io/badge/KodBox-%E2%88%9A-brightgreen) ![](https://img.shields.io/badge/KodExplorer-%E2%88%9A-brightgreen) 23 | 24 | PSD 文件预览插件 http://bbs.kodcloud.com/d/72 25 | 26 | 27 | 28 | ### xlsxViewer ![](https://img.shields.io/badge/KodBox-%E2%88%9A-brightgreen) ![](https://img.shields.io/badge/KodExplorer-%E2%88%9A-brightgreen) 29 | 30 | XLSX(Excel) 文件预览插件 http://bbs.kodcloud.com/d/392 31 | 32 | 33 | 34 | ### docxViewer ![](https://img.shields.io/badge/KodBox-%E2%88%9A-brightgreen) ![](https://img.shields.io/badge/KodExplorer-%E2%88%9A-brightgreen) 35 | 36 | DOCX(Word) 文件预览插件 37 | 38 | 39 | 40 | ### xProber ![](https://img.shields.io/badge/KodBox-%E2%88%9A-brightgreen) ![](https://img.shields.io/badge/KodExplorer-%E2%88%9A-brightgreen) 41 | 42 | 服务器探针插件 http://bbs.kodcloud.com/d/82 43 | 44 | 45 | 46 | ## 相关插件仓库 47 | 48 | 以下是其它的第三方插件收藏 49 | 50 | | 仓库地址 | 仓库作者 | 包含的插件 | 51 | |--|--|--| 52 | | https://github.com/zhtengw/kodexplorer-plugins | Aten Zhang | Office 编辑、PDF 编辑、流程图编辑、图像编辑、CAD 看图等 | 53 | | https://github.com/hiteochew/kodexplorer-plugins-imageExif | hiteochew | EXIF 查看器 | 54 | | https://github.com/hiteochew/kodexplorer-plugins-meituxiuxiu | hiteochew | 美图秀秀 | 55 | | https://github.com/hiteochew/kodexplorer-plugins-zoho | hiteochew | Office 编辑 | 56 | | https://github.com/cngege/KodNES | cngege | NES 模拟器(KodBox 版) | 57 | | https://github.com/nathalis/KodExplorer-NES-emulator-plugin | nathalis | NES 模拟器 | 58 | | https://github.com/nathalis/KodExplorer-uPLAYER-media-plugin | nathalis | uPLAYER 媒体播放器 | 59 | | https://github.com/nathalis/KodExplorer-custom-desktop | nathalis | 仅支持 `KodExplorer 4.4`! 将桌面修改为自由桌面 | 60 | | https://github.com/paulhybryant/kodexplorer-plugins-naotu | paulhybryant | 百度脑图 | 61 | | https://github.com/venlentine/torrentView | venlentine | torrent 种子信息查看器 | 62 | | https://github.com/paulhybryant/kodexplorer-plugins-doc2pdf | paulhybryant | 转换 doc 文件为 pdf(需配置好`openOffice`) | 63 | 64 | ## 官方链接 65 | 66 | 可道云官网 http://kodcloud.com/ 67 | 68 | 可道云插件开发文档 http://doc.kodcloud.com/#/plugins/main 69 | 70 | 可道云论坛 http://bbs.kodcloud.com/ --------------------------------------------------------------------------------