preference index engines

This commit is contained in:
Simba
2020-06-21 19:34:16 +08:00
parent 9d8d3d35da
commit 3b7da44cc7
7 changed files with 144 additions and 100 deletions
+4
View File
@@ -132,3 +132,7 @@ a {
height: 60px;
cursor: pointer;
}
.relative {
position: relative;
}
+6
View File
@@ -172,6 +172,12 @@ let LangEn = {
enterZipMaxNumLimit: "Please enter zip max num!",
enterZipMaxSizeLimit: "Please enter zip max size!",
enterUserDefaultSizeLimit: "Please enter user's default size!",
engine: "The number {} engine",
engineReg: "Engine format",
engineSuffix: "Engine suffix",
enginePreview: "Engine preview",
previewCurrent: "preview in current page",
previewOpen: "preview in new page"
},
share: {
shareDetail: "Share Detail",
+6
View File
@@ -174,6 +174,12 @@ let LangZh = {
enterZipMaxNumLimit: "zip最大数量限制必填!",
enterZipMaxSizeLimit: "zip大小限制必填!",
enterUserDefaultSizeLimit: "默认用户空间大小必填!",
engine: "{}号引擎",
engineReg: "引擎格式",
engineSuffix: "匹配后缀",
enginePreview: "预览方式",
previewCurrent: "本站预览",
previewOpen: "新标签打开"
},
share: {
shareDetail: "分享详情",
+6
View File
@@ -17,5 +17,11 @@
max-height: 30px;
cursor: pointer;
}
.preview-tip {
position: absolute;
right: 0;
top: 0;
margin-right: 0;
}
}
+94 -61
View File
@@ -1,35 +1,29 @@
import React from 'react';
import {Link, RouteComponentProps} from "react-router-dom";
import "./Index.less"
import React from "react";
import { Link, RouteComponentProps } from "react-router-dom";
import "./Index.less";
import TankComponent from "../../common/component/TankComponent";
import User from "../../common/model/user/User";
import Moon from "../../common/model/global/Moon";
import TankTitle from "../widget/TankTitle";
import {Button} from "antd";
import {EditOutlined, ThunderboltOutlined} from '@ant-design/icons';
import { Button, Divider, Tooltip, Tag } from "antd";
import { EditOutlined, ThunderboltOutlined } from "@ant-design/icons";
import InfoCell from "../widget/InfoCell";
import Preference from "../../common/model/preference/Preference";
import TankContentCard from '../widget/TankContentCard';
import TankContentCard from "../widget/TankContentCard";
import FileUtil from "../../common/util/FileUtil";
import ImagePreviewer from "../widget/previewer/ImagePreviewer";
import Lang from "../../common/model/global/Lang";
import SingleTextModal from "../widget/SingleTextModal";
import MessageBoxUtil from "../../common/util/MessageBoxUtil";
interface IProps extends RouteComponentProps {}
interface IProps extends RouteComponentProps {
}
interface IState {
}
interface IState {}
export default class Index extends TankComponent<IProps, IState> {
user: User = Moon.getSingleton().user;
user: User = Moon.getSingleton().user
preference: Preference = Moon.getSingleton().preference
preference: Preference = Moon.getSingleton().preference;
constructor(props: IProps) {
super(props);
@@ -38,52 +32,53 @@ export default class Index extends TankComponent<IProps, IState> {
}
componentDidMount() {
this.refresh()
this.refresh();
}
//refresh preference.
refresh() {
let that = this
let that = this;
that.preference.httpFetch(function () {
that.updateUI()
})
that.updateUI();
});
}
cleanup() {
let that = this;
let preference = this.preference;
let that = this
let preference = this.preference
SingleTextModal.open(Lang.t("preference.systemCleanupPrompt"), "", function (text: string) {
preference.httpSystemCleanup(text, function () {
MessageBoxUtil.success(Lang.t("operationSuccess"))
})
})
SingleTextModal.open(
Lang.t("preference.systemCleanupPrompt"),
"",
function (text: string) {
preference.httpSystemCleanup(text, function () {
MessageBoxUtil.success(Lang.t("operationSuccess"));
});
}
);
}
render() {
let that = this
return (
<div className="page-preference-index">
<TankTitle name={Lang.t("layout.setting")}>
<Link to={'/preference/edit'}>
<Button type={"primary"} icon={<EditOutlined/>}>{Lang.t("edit")}</Button>
<Link to={"/preference/edit"}>
<Button type={"primary"} icon={<EditOutlined />}>
{Lang.t("edit")}
</Button>
</Link>
<Button className={"ml10"} type={"primary"} danger={true}
onClick={this.cleanup.bind(this)}
icon={<ThunderboltOutlined/>}>{Lang.t("preference.systemCleanup")}</Button>
<Button
className={"ml10"}
type={"primary"}
danger={true}
onClick={this.cleanup.bind(this)}
icon={<ThunderboltOutlined />}
>
{Lang.t("preference.systemCleanup")}
</Button>
</TankTitle>
<TankContentCard>
@@ -93,33 +88,46 @@ export default class Index extends TankComponent<IProps, IState> {
<InfoCell name={Lang.t("preference.logo")}>
{this.preference.logoUrl && (
<img src={this.preference.logoUrl} alt="logo"
className="img-logo" onClick={() => {
ImagePreviewer.showSinglePhoto(this.preference.logoUrl!)
}}/>
<img
src={this.preference.logoUrl}
alt="logo"
className="img-logo"
onClick={() => {
ImagePreviewer.showSinglePhoto(this.preference.logoUrl!);
}}
/>
)}
</InfoCell>
<InfoCell name={'favicon'}>
<InfoCell name={"favicon"}>
{this.preference.faviconUrl && (
<img src={this.preference.faviconUrl} alt="logo"
className="img-favicon" onClick={() => {
ImagePreviewer.showSinglePhoto(this.preference.faviconUrl!)
}}/>
<img
src={this.preference.faviconUrl}
alt="logo"
className="img-favicon"
onClick={() => {
ImagePreviewer.showSinglePhoto(this.preference.faviconUrl!);
}}
/>
)}
</InfoCell>
<InfoCell name={Lang.t("preference.copyright")}>
<span dangerouslySetInnerHTML={{__html: this.preference.copyright}}/>
<span
dangerouslySetInnerHTML={{ __html: this.preference.copyright }}
/>
</InfoCell>
<InfoCell name={Lang.t("preference.extraInfo")}>
<span dangerouslySetInnerHTML={{__html: this.preference.record}}/>
<span
dangerouslySetInnerHTML={{ __html: this.preference.record }}
/>
</InfoCell>
<InfoCell name={Lang.t("preference.zipMaxNumLimit")}>
{this.preference.downloadDirMaxNum === -1 ? Lang.t("preference.noLimit") : this.preference.downloadDirMaxNum}
{this.preference.downloadDirMaxNum === -1
? Lang.t("preference.noLimit")
: this.preference.downloadDirMaxNum}
</InfoCell>
<InfoCell name={Lang.t("preference.zipMaxSizeLimit")}>
@@ -135,17 +143,42 @@ export default class Index extends TankComponent<IProps, IState> {
</InfoCell>
<InfoCell name={Lang.t("preference.docLink")}>
<a href={'https://tank-doc.eyeblue.cn/zh'} target="_blank">
<a href={"https://tank-doc.eyeblue.cn/zh"} target="_blank">
https://tank-doc.eyeblue.cn/zh
</a>
</InfoCell>
</TankContentCard>
<div className="mt20" />
<TankTitle name={Lang.t("preference.previewConfig")} />
{this.preference.previewConfig.previewEngines.map((engines, index) => (
<div key={index} className="relative mb10">
<TankContentCard>
<Divider orientation="left">
{Lang.t("preference.engine", index + 1)}
</Divider>
<Tooltip title={Lang.t("preference.enginePreview")}>
{engines.previewInSite ? (
<Tag className="preview-tip" color="warning">
{Lang.t("preference.previewCurrent")}
</Tag>
) : (
<Tag className="preview-tip" color="success">
{Lang.t("preference.previewOpen")}
</Tag>
)}
</Tooltip>
<InfoCell name={Lang.t("preference.engineReg")}>
{engines.url}
</InfoCell>
<InfoCell name={Lang.t("preference.engineSuffix")}>
{engines.extensions}
</InfoCell>
</TankContentCard>
</div>
))}
</div>
);
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
.castle-widget-info-cell {
word-break: break-all;
margin-bottom: 10px;
.info-cell-name {
color: #99a9bf;
+27 -38
View File
@@ -1,4 +1,4 @@
import "./ImagePreviewer.less"
import "./ImagePreviewer.less";
import MimeUtil from "../../../common/util/MimeUtil";
import MessageBoxUtil from "../../../common/util/MessageBoxUtil";
import Moon from "../../../common/model/global/Moon";
@@ -11,54 +11,49 @@ import DownloadToken from "../../../common/model/download/token/DownloadToken";
* 文件预览帮助器
*/
export default class PreviewerHelper {
/**
* 准备好一个文件url
*/
static prepareMatterUrl(matter: Matter, needTokenUrl: boolean, successCallback: (matterUrl: string) => void) {
static prepareMatterUrl(
matter: Matter,
needTokenUrl: boolean,
successCallback: (matterUrl: string) => void
) {
if (needTokenUrl) {
//获取一个临时的下载token.
let downloadToken = new DownloadToken()
let downloadToken = new DownloadToken();
downloadToken.httpFetchDownloadToken(matter.uuid!, function () {
let matterUrl = matter.getPreviewUrl(downloadToken.uuid!)
successCallback(matterUrl)
})
let matterUrl = matter.getPreviewUrl(downloadToken.uuid!);
successCallback(matterUrl);
});
} else {
successCallback(matter.getPreviewUrl())
successCallback(matter.getPreviewUrl());
}
}
/**
* 对一个文件进行预览,自动选择预览引擎
* @param matter 文件
*/
static preview(matter: Matter) {
let fileName: string = matter.name
let extension: string = MimeUtil.getExtensionWithoutDot(fileName)
let fileName: string = matter.name;
let extension: string = MimeUtil.getExtensionWithoutDot(fileName);
if (!extension) {
MessageBoxUtil.warning(fileName + " 没有后缀名,无法预览");
return
return;
}
//去选择预览引擎。
let previewConfig = Moon.getSingleton().preference.previewConfig
let previewConfig = Moon.getSingleton().preference.previewConfig;
let previewEngine: PreviewEngine | null = null
let previewEngine: PreviewEngine | null = null;
//寻找用户自定义的预览引擎
for (let engine of previewConfig.previewEngines) {
if (engine.canPreview(fileName)) {
previewEngine = engine
break
previewEngine = engine;
break;
}
}
@@ -67,8 +62,8 @@ export default class PreviewerHelper {
let defaultEngines = PreviewEngine.defaultPreviewEngines();
for (let engine of defaultEngines) {
if (engine.canPreview(fileName)) {
previewEngine = engine
break
previewEngine = engine;
break;
}
}
}
@@ -76,28 +71,22 @@ export default class PreviewerHelper {
if (previewEngine === null) {
MessageBoxUtil.warning(fileName + " 无法预览");
} else {
let targetUrl = previewEngine.url;
let targetUrl = previewEngine.url
const engine: PreviewEngine = previewEngine
let needToken: boolean = matter.privacy && (targetUrl.indexOf("{publicUrl}") !== -1 || targetUrl.indexOf("{encodePublicUrl}") !== -1)
const engine: PreviewEngine = previewEngine;
const needToken: boolean =
matter.privacy && targetUrl.indexOf("{url}") !== -1;
PreviewerHelper.prepareMatterUrl(matter, needToken, function (url) {
targetUrl = targetUrl.replace("{originUrl}", matter.getPreviewUrl());
targetUrl = targetUrl.replace("{url}", encodeURIComponent(url));
if (engine.previewInSite) {
BrowserPreviewer.show(fileName, targetUrl, matter.size)
BrowserPreviewer.show(fileName, targetUrl, matter.size);
} else {
window.open(targetUrl)
window.open(targetUrl);
}
})
});
}
}
}