mirror of
https://github.com/eyebluecn/tank-front
synced 2024-04-21 12:31:55 +00:00
preference index engines
This commit is contained in:
@@ -132,3 +132,7 @@ a {
|
||||
height: 60px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.relative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -174,6 +174,12 @@ let LangZh = {
|
||||
enterZipMaxNumLimit: "zip最大数量限制必填!",
|
||||
enterZipMaxSizeLimit: "zip大小限制必填!",
|
||||
enterUserDefaultSizeLimit: "默认用户空间大小必填!",
|
||||
engine: "{}号引擎",
|
||||
engineReg: "引擎格式",
|
||||
engineSuffix: "匹配后缀",
|
||||
enginePreview: "预览方式",
|
||||
previewCurrent: "本站预览",
|
||||
previewOpen: "新标签打开"
|
||||
},
|
||||
share: {
|
||||
shareDetail: "分享详情",
|
||||
|
||||
@@ -17,5 +17,11 @@
|
||||
max-height: 30px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.preview-tip {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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,5 +1,5 @@
|
||||
.castle-widget-info-cell {
|
||||
|
||||
word-break: break-all;
|
||||
margin-bottom: 10px;
|
||||
.info-cell-name {
|
||||
color: #99a9bf;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user