1
0
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:
yinjianfei-user
2024-11-25 16:24:30 +08:00
committed by GitHub
parent 4da1b47664
commit 78b829834b
6 changed files with 108 additions and 3 deletions

View File

@@ -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',

View File

@@ -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' : ''}`}>

View File

@@ -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;
} }

View 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 %}

View File

@@ -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')),

View File

@@ -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
})