├── .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 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
118 |
119 |
120 |
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 |
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(' + ')
');
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 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
155 |
156 |
157 |
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 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
118 |
119 |
120 |
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 |
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 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
155 |
156 |
157 |
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  
17 |
18 | 全景图查看插件 http://bbs.kodcloud.com/d/67
19 |
20 |
21 |
22 | ### psdViewer  
23 |
24 | PSD 文件预览插件 http://bbs.kodcloud.com/d/72
25 |
26 |
27 |
28 | ### xlsxViewer  
29 |
30 | XLSX(Excel) 文件预览插件 http://bbs.kodcloud.com/d/392
31 |
32 |
33 |
34 | ### docxViewer  
35 |
36 | DOCX(Word) 文件预览插件
37 |
38 |
39 |
40 | ### xProber  
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/
--------------------------------------------------------------------------------