mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-17 07:41:26 +00:00
Add wiki history page (#7061)
* add wiki history page * update button color * update wiki history page * code optimize * code optimize * update style * optimize code * remove wiki-history-page --------- Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
This commit is contained in:
@@ -598,7 +598,7 @@ module.exports = function (webpackEnv) {
|
|||||||
loader: 'svg-sprite-loader', options: {}
|
loader: 'svg-sprite-loader', options: {}
|
||||||
},
|
},
|
||||||
{ loader: 'svgo-loader', options: {
|
{ loader: 'svgo-loader', options: {
|
||||||
plugins:[
|
plugins: [
|
||||||
'removeTitle',
|
'removeTitle',
|
||||||
'removeStyleElement',
|
'removeStyleElement',
|
||||||
'cleanupIDs',
|
'cleanupIDs',
|
||||||
|
@@ -57,6 +57,16 @@ class MainPanel extends Component {
|
|||||||
return { ...props, docUuid: window.seafile.docUuid, currentPageConfig };
|
return { ...props, docUuid: window.seafile.docUuid, currentPageConfig };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleClickHistory = () => {
|
||||||
|
const { wikiId, permission } = window.wiki.config;
|
||||||
|
if (permission !== 'rw') return;
|
||||||
|
|
||||||
|
const { siteRoot } = window.app.config;
|
||||||
|
const { currentPageConfig } = this.state;
|
||||||
|
const historyUrl = `${siteRoot}wiki/file_revisions/${wikiId}/?page_id=${currentPageConfig.id}`;
|
||||||
|
window.location.href = historyUrl;
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { permission, pathExist, isDataLoading, config, onUpdatePage, isUpdateBySide } = this.props;
|
const { permission, pathExist, isDataLoading, config, onUpdatePage, isUpdateBySide } = this.props;
|
||||||
const { currentPageConfig = {} } = this.state;
|
const { currentPageConfig = {} } = this.state;
|
||||||
@@ -83,7 +93,14 @@ class MainPanel extends Component {
|
|||||||
<DocInfo initContext={true}/>
|
<DocInfo initContext={true}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{username && wikiPermission !== 'public' && <Account />}
|
{username && wikiPermission !== 'public' && (
|
||||||
|
<div className='d-flex align-items-center'>
|
||||||
|
<div className='wiki2-file-history-button' onClick={this.handleClickHistory}>
|
||||||
|
<i className='sf3-font sf3-font-history'/>
|
||||||
|
</div>
|
||||||
|
<Account />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="main-panel-center">
|
<div className="main-panel-center">
|
||||||
<div className={`cur-view-content ${isViewingFile ? 'o-hidden' : ''}`}>
|
<div className={`cur-view-content ${isViewingFile ? 'o-hidden' : ''}`}>
|
||||||
|
@@ -39,6 +39,22 @@ body {
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.wiki2-main-panel .wiki2-main-panel-north .wiki2-file-history-button {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
margin-right: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wiki2-main-panel .wiki2-main-panel-north .wiki2-file-history-button:hover {
|
||||||
|
background-color: #EFEFEF;
|
||||||
|
}
|
||||||
|
|
||||||
.main-panel-center .cur-view-content {
|
.main-panel-center .cur-view-content {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
28
seahub/templates/wiki/wiki_file_revisions.html
Normal file
28
seahub/templates/wiki/wiki_file_revisions.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base_for_react.html" %}
|
||||||
|
{% load render_bundle from webpack_loader %}
|
||||||
|
|
||||||
|
{% block extra_style %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}sdoc-editor/sdoc-editor-font.css" />
|
||||||
|
{% render_bundle 'sdocFileHistory' 'css'%}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_script %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.app.config.lang = '{{LANGUAGE_CODE}}';
|
||||||
|
window.fileHistory = {
|
||||||
|
pageOptions: {
|
||||||
|
isWiki2: true,
|
||||||
|
wikiConfig: '{{ wiki_config|safe }}',
|
||||||
|
repoID: '{{ repo.id }}',
|
||||||
|
repoName: '{{ repo.name }}',
|
||||||
|
fileName: '{{ file_name }}',
|
||||||
|
filePath: '{{ filePath }}',
|
||||||
|
docUuid: '{{ file_uuid }}',
|
||||||
|
assetsUrl: '{{ assets_url }}',
|
||||||
|
seadocAccessToken: '{{ seadoc_access_token }}',
|
||||||
|
seadocServerUrl: '{{ seadoc_server_url }}',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% render_bundle 'sdocFileHistory' 'js'%}
|
||||||
|
{% endblock %}
|
@@ -207,7 +207,7 @@ from seahub.api2.endpoints.repo_related_users import RepoRelatedUsersView
|
|||||||
from seahub.api2.endpoints.repo_auto_delete import RepoAutoDeleteView
|
from seahub.api2.endpoints.repo_auto_delete import RepoAutoDeleteView
|
||||||
from seahub.seadoc.views import sdoc_revision, sdoc_revisions, sdoc_to_docx
|
from seahub.seadoc.views import sdoc_revision, sdoc_revisions, sdoc_to_docx
|
||||||
from seahub.ocm.settings import OCM_ENDPOINT
|
from seahub.ocm.settings import OCM_ENDPOINT
|
||||||
from seahub.wiki2.views import wiki_view, wiki_publish_view
|
from seahub.wiki2.views import wiki_view, wiki_publish_view, wiki_history_view
|
||||||
from seahub.api2.endpoints.wiki2 import Wikis2View, Wiki2View, Wiki2ConfigView, Wiki2PagesView, Wiki2PageView, \
|
from seahub.api2.endpoints.wiki2 import Wikis2View, Wiki2View, Wiki2ConfigView, Wiki2PagesView, Wiki2PageView, \
|
||||||
Wiki2DuplicatePageView, WikiPageTrashView, Wiki2PublishView, Wiki2PublishConfigView, Wiki2PublishPageView, \
|
Wiki2DuplicatePageView, WikiPageTrashView, Wiki2PublishView, Wiki2PublishConfigView, Wiki2PublishPageView, \
|
||||||
WikiSearch, WikiConvertView
|
WikiSearch, WikiConvertView
|
||||||
@@ -743,6 +743,7 @@ urlpatterns = [
|
|||||||
|
|
||||||
re_path(r'^wikis/(?P<wiki_id>[^/]+)/$', wiki_view, name='wiki'),
|
re_path(r'^wikis/(?P<wiki_id>[^/]+)/$', wiki_view, name='wiki'),
|
||||||
re_path(r'^wiki/publish/(?P<publish_url>[-0-9a-zA-Z]+)/$', wiki_publish_view, name='wiki-publish'),
|
re_path(r'^wiki/publish/(?P<publish_url>[-0-9a-zA-Z]+)/$', wiki_publish_view, name='wiki-publish'),
|
||||||
|
re_path(r'^wiki/file_revisions/(?P<wiki_id>[^/]+)/$', wiki_history_view, name='wiki-history'),
|
||||||
|
|
||||||
path('avatar/', include('seahub.avatar.urls')),
|
path('avatar/', include('seahub.avatar.urls')),
|
||||||
path('group/', include('seahub.group.urls')),
|
path('group/', include('seahub.group.urls')),
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import posixpath
|
import posixpath
|
||||||
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from constance import config
|
from constance import config
|
||||||
@@ -19,6 +20,7 @@ from seahub.wiki2.utils import check_wiki_permission, get_wiki_config
|
|||||||
|
|
||||||
from seahub.utils.repo import get_repo_owner, is_repo_admin, is_repo_owner, is_group_repo_staff
|
from seahub.utils.repo import get_repo_owner, is_repo_admin, is_repo_owner, is_group_repo_staff
|
||||||
from seahub.settings import SEADOC_SERVER_URL
|
from seahub.settings import SEADOC_SERVER_URL
|
||||||
|
from seahub.seadoc.utils import gen_seadoc_access_token
|
||||||
|
|
||||||
# Get an instance of a logger
|
# Get an instance of a logger
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -145,3 +147,44 @@ def wiki_publish_view(request, publish_url):
|
|||||||
"seadoc_server_url": SEADOC_SERVER_URL,
|
"seadoc_server_url": SEADOC_SERVER_URL,
|
||||||
"permission": 'public'
|
"permission": 'public'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def wiki_history_view(request, wiki_id):
|
||||||
|
""" view wiki history page. for wiki2
|
||||||
|
"""
|
||||||
|
# get wiki object or 404
|
||||||
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
|
if not wiki:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
username = request.user.username
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
|
page_id = request.GET.get('page_id')
|
||||||
|
|
||||||
|
if page_id:
|
||||||
|
wiki_config = get_wiki_config(wiki.repo_id, username)
|
||||||
|
pages = wiki_config.get('pages', [])
|
||||||
|
page_info = next(filter(lambda t: t['id'] == page_id, pages), {})
|
||||||
|
|
||||||
|
# perm check
|
||||||
|
if not check_wiki_permission(wiki, username):
|
||||||
|
return render_permission_error(request, 'Permission denied.')
|
||||||
|
|
||||||
|
repo_id = wiki.repo_id
|
||||||
|
repo = seafile_api.get_repo(repo_id)
|
||||||
|
file_uuid = page_info['docUuid']
|
||||||
|
file_name = page_info['name']
|
||||||
|
filePath = page_info['path']
|
||||||
|
wiki_config = json.dumps(page_info)
|
||||||
|
|
||||||
|
return render(request, "wiki/wiki_file_revisions.html", {
|
||||||
|
'repo': repo,
|
||||||
|
"wiki_config": wiki_config,
|
||||||
|
"file_uuid": file_uuid,
|
||||||
|
"file_name": file_name,
|
||||||
|
"filePath": filePath,
|
||||||
|
'assets_url': '/api/v2.1/seadoc/download-image/' + file_uuid,
|
||||||
|
"seadoc_access_token": gen_seadoc_access_token(file_uuid, file_name, username, permission='rw'),
|
||||||
|
"seadoc_server_url": SEADOC_SERVER_URL
|
||||||
|
})
|
||||||
|
Reference in New Issue
Block a user