diff --git a/frontend/config/webpack.config.dev.js b/frontend/config/webpack.config.dev.js index 30cadb6e63..c47821f64c 100644 --- a/frontend/config/webpack.config.dev.js +++ b/frontend/config/webpack.config.dev.js @@ -134,6 +134,11 @@ module.exports = { require.resolve('react-dev-utils/webpackHotDevClient'), paths.appSrc + "/view-file-pdf.js", ], + viewFileSVG: [ + require.resolve('./polyfills'), + require.resolve('react-dev-utils/webpackHotDevClient'), + paths.appSrc + "/view-file-svg.js", + ], orgAdmin: [ require.resolve('./polyfills'), require.resolve('react-dev-utils/webpackHotDevClient'), diff --git a/frontend/config/webpack.config.prod.js b/frontend/config/webpack.config.prod.js index ddbb9d506f..b5e7dbc37f 100644 --- a/frontend/config/webpack.config.prod.js +++ b/frontend/config/webpack.config.prod.js @@ -75,6 +75,7 @@ module.exports = { viewFileXmind: [require.resolve('./polyfills'), paths.appSrc + "/view-file-xmind.js"], viewFileVideo: [require.resolve('./polyfills'), paths.appSrc + "/view-file-video.js"], viewFilePDF: [require.resolve('./polyfills'), paths.appSrc + "/view-file-pdf.js"], + viewFileSVG: [require.resolve('./polyfills'), paths.appSrc + "/view-file-svg.js"], orgAdmin: [require.resolve('./polyfills'), paths.appSrc + "/pages/org-admin"], viewFileUMind: [require.resolve('./polyfills'), paths.appSrc + "/view-file-umind.js"], sysAdmin: [require.resolve('./polyfills'), paths.appSrc + "/pages/sys-admin"], diff --git a/frontend/src/css/svg-file-view.css b/frontend/src/css/svg-file-view.css new file mode 100644 index 0000000000..08a7d6cf9b --- /dev/null +++ b/frontend/src/css/svg-file-view.css @@ -0,0 +1,16 @@ +.svg-file-view { + position: relative; + text-align: center; +} +.svg-file-view:before { + content: ' '; + display: inline-block; + vertical-align: middle; + height: 100%; + font-size: 0; + line-height: 0; +} +#svg-view { + max-width: 100%; + max-height: 100%; +} diff --git a/frontend/src/view-file-svg.js b/frontend/src/view-file-svg.js new file mode 100644 index 0000000000..32eb2a6473 --- /dev/null +++ b/frontend/src/view-file-svg.js @@ -0,0 +1,123 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import watermark from 'watermark-dom'; +import { seafileAPI } from './utils/seafile-api'; +import { siteName } from './utils/constants'; +import FileInfo from './components/file-view/file-info'; +import FileToolbar from './components/file-view/file-toolbar'; +import FileViewTip from './components/file-view/file-view-tip'; +import CommentPanel from './components/file-view/comment-panel'; + +import './css/file-view.css'; +import './css/svg-file-view.css'; + +const { isStarred, isLocked, lockedByMe, + repoID, filePath, err, enableWatermark, userNickName, + // the following are only for svg file view + fileName, rawPath +} = window.app.pageOptions; + +class ViewFileSVG extends React.Component { + + constructor(props) { + super(props); + this.state = { + isStarred: isStarred, + isLocked: isLocked, + lockedByMe: lockedByMe, + isCommentPanelOpen: false + }; + } + + toggleCommentPanel = () => { + this.setState({ + isCommentPanelOpen: !this.state.isCommentPanelOpen + }); + } + + toggleStar = () => { + if (this.state.isStarred) { + seafileAPI.unStarItem(repoID, filePath).then((res) => { + this.setState({ + isStarred: false + }); + }); + } else { + seafileAPI.starItem(repoID, filePath).then((res) => { + this.setState({ + isStarred: true + }); + }); + } + } + + toggleLockFile = () => { + if (this.state.isLocked) { + seafileAPI.unlockfile(repoID, filePath).then((res) => { + this.setState({ + isLocked: false, + lockedByMe: false + }); + }); + } else { + seafileAPI.lockfile(repoID, filePath).then((res) => { + this.setState({ + isLocked: true, + lockedByMe: true + }); + }); + } + } + + render() { + return ( +