import React from 'react';
import ReactDOM from 'react-dom';
import Account from './components/common/account';
import { serviceURL, gettext, siteRoot, mediaUrl, logoPath, logoWidth, logoHeight, siteTitle } from './utils/constants';
import { Button } from 'reactstrap';
import { seafileAPI } from './utils/seafile-api';
import { Utils } from './utils/utils';
import Loading from './components/loading';
import SaveSharedFileDialog from './components/dialog/save-shared-file-dialog';
import toaster from './components/toast';
import watermark from 'watermark-dom';
import MarkdownViewer from '@seafile/seafile-editor/dist/viewer/markdown-viewer';
import './css/shared-file-view.css';
import './assets/css/fa-solid.css';
import './assets/css/fa-regular.css';
import './assets/css/fontawesome.css';
let loginUser = window.app.pageOptions.name;
const { repoID, sharedToken, trafficOverLimit, fileName, fileSize, rawPath, sharedBy, siteName, enableWatermark, download } = window.shared.pageOptions;
class SharedFileViewMarkdown extends React.Component {
constructor(props) {
super(props);
this.state = {
markdownContent: '',
loading: true,
showSaveSharedFileDialog: false,
};
}
handleSaveSharedFileDialog = () => {
this.setState({
showSaveSharedFileDialog: true
});
}
toggleCancel = () => {
this.setState({
showSaveSharedFileDialog: false
});
}
handleSaveSharedFile = () => {
toaster.success(gettext('Successfully saved'), {
duration: 3
});
}
componentDidMount() {
seafileAPI.getFileContent(rawPath).then((res) => {
this.setState({
markdownContent: res.data,
loading: false
});
});
if (trafficOverLimit == 'True') {
toaster.danger(gettext('File download is disabled: the share link traffic of owner is used up.'), {
duration: 3
});
}
}
changeImageURL = (innerNode) => {
if (innerNode.type == 'image') {
let imageUrl = innerNode.data.src;
const re = new RegExp(serviceURL + '/lib/' + repoID +'/file.*raw=1');
// different repo
if (!re.test(imageUrl)) {
return;
}
// get image path
let index = imageUrl.indexOf('/file');
let index2 = imageUrl.indexOf('?');
const imagePath = imageUrl.substring(index + 5, index2);
// change image url
innerNode.data.src = serviceURL + '/view-image-via-share-link/?token=' + sharedToken + '&path=' + imagePath;
}
return innerNode;
}
modifyValueBeforeRender = (value) => {
let nodes = value.document.nodes;
let newNodes = Utils.changeMarkdownNodes(nodes, this.changeImageURL);
value.document.nodes = newNodes;
return value;
}
render() {
if (this.state.loading) {
return
{gettext('Shared by:')}{' '}{sharedBy}