diff --git a/frontend/config/webpack.config.dev.js b/frontend/config/webpack.config.dev.js index ae37eed6b2..2456afcc2d 100644 --- a/frontend/config/webpack.config.dev.js +++ b/frontend/config/webpack.config.dev.js @@ -154,6 +154,11 @@ module.exports = { require.resolve('react-dev-utils/webpackHotDevClient'), paths.appSrc + "/view-file-audio.js", ], + viewFileUnknown: [ + require.resolve('./polyfills'), + require.resolve('react-dev-utils/webpackHotDevClient'), + paths.appSrc + "/view-file-unknown.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 9c58796981..7d8ffcb3a1 100644 --- a/frontend/config/webpack.config.prod.js +++ b/frontend/config/webpack.config.prod.js @@ -79,6 +79,7 @@ module.exports = { viewFileSpreadsheet: [require.resolve('./polyfills'), paths.appSrc + "/view-file-spreadsheet.js"], viewFileSVG: [require.resolve('./polyfills'), paths.appSrc + "/view-file-svg.js"], viewFileAudio: [require.resolve('./polyfills'), paths.appSrc + "/view-file-audio.js"], + viewFileUnknown: [require.resolve('./polyfills'), paths.appSrc + "/view-file-unknown.js"], orgAdmin: [require.resolve('./polyfills'), paths.appSrc + "/pages/org-admin"], sysAdmin: [require.resolve('./polyfills'), paths.appSrc + "/pages/sys-admin"], }, diff --git a/frontend/src/view-file-unknown.js b/frontend/src/view-file-unknown.js new file mode 100644 index 0000000000..0772fa2042 --- /dev/null +++ b/frontend/src/view-file-unknown.js @@ -0,0 +1,115 @@ +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'; + +const { isStarred, isLocked, lockedByMe, + repoID, filePath, err, enableWatermark, userNickName +} = window.app.pageOptions; + +class ViewFileUnknown 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 ( +
+
+ + +
+
+ + {this.state.isCommentPanelOpen && + + } +
+
+ ); + } +} + +class FileContent extends React.Component { + + render() { + if (err) { + return ; + } + } +} + +if (enableWatermark) { + watermark.init({ + watermark_txt: `${siteName} ${userNickName}`, + watermark_alpha: 0.075 + }); +} + +ReactDOM.render ( + , + document.getElementById('wrapper') +); diff --git a/seahub/templates/unknown_file_view_react.html b/seahub/templates/unknown_file_view_react.html new file mode 100644 index 0000000000..88b1677b41 --- /dev/null +++ b/seahub/templates/unknown_file_view_react.html @@ -0,0 +1,14 @@ +{% extends 'file_view_react.html' %} +{% load render_bundle from webpack_loader %} +{% load seahub_tags %} + +{% block extra_style %} +{% render_bundle 'viewFileUnknown' 'css' %} +{% endblock %} + +{% block extra_data %} +{% endblock %} + +{% block render_bundle %} +{% render_bundle 'viewFileUnknown' 'js' %} +{% endblock %} diff --git a/seahub/utils/__init__.py b/seahub/utils/__init__.py index 7cef763780..ed42d3c99f 100644 --- a/seahub/utils/__init__.py +++ b/seahub/utils/__init__.py @@ -130,7 +130,7 @@ PREVIEW_FILEEXT = { MARKDOWN: ('markdown', 'md'), VIDEO: ('mp4', 'ogv', 'webm', 'mov'), AUDIO: ('mp3', 'oga', 'ogg'), - '3D': ('stl', 'obj'), + #'3D': ('stl', 'obj'), XMIND: ('xmind',), UMIND: ('umind',), } diff --git a/seahub/views/file.py b/seahub/views/file.py index 2672ee704b..4e2fc50057 100644 --- a/seahub/views/file.py +++ b/seahub/views/file.py @@ -588,10 +588,10 @@ def view_lib_file(request, repo_id, path): # handle file preview/edit according to file extention file_size = seafile_api.get_file_size(repo.store_id, repo.version, file_id) - template = 'view_file_%s.html' % filetype.lower() + # template = 'view_file_%s.html' % filetype.lower() + template = '%s_file_view_react.html' % filetype.lower() if filetype == TEXT or fileext in get_conf_text_ext(): - template = '%s_file_view_react.html' % filetype.lower() # get file size if file_size > FILE_PREVIEW_MAX_SIZE: @@ -691,13 +691,12 @@ def view_lib_file(request, repo_id, path): return_dict['can_edit_file'] = can_edit_file + template = 'view_file_%s.html' % filetype.lower() return render(request, template, return_dict) elif filetype in (VIDEO, AUDIO, PDF, SVG): return_dict['raw_path'] = raw_path send_file_access_msg(request, repo, path, 'web') - - template = '%s_file_view_react.html' % filetype.lower() return render(request, template, return_dict) elif filetype == DRAW: @@ -706,6 +705,7 @@ def view_lib_file(request, repo_id, path): template = 'view_file_draw_read.html' return render(request, template, return_dict) else: + template = 'view_file_%s.html' % filetype.lower() return render(request, template, return_dict) elif filetype == XMIND: @@ -724,14 +724,12 @@ def view_lib_file(request, repo_id, path): error_msg = _(u'Unable to view file') return_dict['err'] = error_msg - template = '%s_file_view_react.html' % filetype.lower() return render(request, template, return_dict) elif filetype == UMIND: return render(request, 'view_file_umind.html', return_dict) elif filetype == IMAGE: - template = '%s_file_view_react.html' % filetype.lower() if file_size > FILE_PREVIEW_MAX_SIZE: error_msg = _(u'File size surpasses %s, can not be opened online.') % \ @@ -768,8 +766,6 @@ def view_lib_file(request, repo_id, path): elif filetype in (DOCUMENT, SPREADSHEET): - template = '%s_file_view_react.html' % filetype.lower() - if repo.encrypted: return_dict['err'] = _(u'The library is encrypted, can not open file online.') return render(request, template, return_dict) @@ -854,7 +850,7 @@ def view_lib_file(request, repo_id, path): return render(request, template, return_dict) else: return_dict['err'] = "File preview unsupported" - return render(request, 'view_file_base.html', return_dict) + return render(request, template, return_dict) def view_history_file_common(request, repo_id, ret_dict): # check arguments