diff --git a/frontend/src/components/markdown-viewer.js b/frontend/src/components/markdown-viewer.js index 84daba32d7..1ff467b22a 100644 --- a/frontend/src/components/markdown-viewer.js +++ b/frontend/src/components/markdown-viewer.js @@ -38,7 +38,17 @@ class MarkdownContentViewer extends React.Component { onLinkClick = (event) => { event.preventDefault(); - this.props.onLinkClick(event); + let link = ''; + if (event.target.tagName !== 'A') { + let target = event.target.parentNode; + while (target.tagName !== 'A') { + target = target.parentNode; + } + link = target.href; + } else { + link = event.target.href; + } + this.props.onLinkClick(link); } render() { diff --git a/frontend/src/repo-wiki-mode.js b/frontend/src/repo-wiki-mode.js index 96c40a3690..09192a9df5 100644 --- a/frontend/src/repo-wiki-mode.js +++ b/frontend/src/repo-wiki-mode.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import moment from 'moment'; -import { gettext, repoID, siteRoot, initialPath, isDir, serviceUrl } from './utils/constants'; +import { gettext, repoID, siteRoot, initialPath, isDir, slug } from './utils/constants'; import { seafileAPI } from './utils/seafile-api'; import { Utils } from './utils/utils'; import collabServer from './utils/collab-server'; @@ -380,16 +380,17 @@ class Wiki extends Component { getThumbnail(0); } - onLinkClick = (event) => { - const url = event.path[2].href; + onLinkClick = (link) => { + const url = link; if (this.isInternalMarkdownLink(url)) { let path = this.getPathFromInternalMarkdownLink(url); this.showFile(path); } else if (this.isInternalDirLink(url)) { let path = this.getPathFromInternalDirLink(url); this.showDir(path); + } else { + window.open(url); } - window.open(url); } updateUsedRepoTags = (newUsedRepoTags) => { @@ -891,28 +892,29 @@ class Wiki extends Component { } isInternalMarkdownLink(url) { - var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '/file' + '.*\.md$'); + var re = new RegExp(siteRoot + 'library/' + repoID + '.*/*.md$'); return re.test(url); } isInternalDirLink(url) { - var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '/.*'); + var re = new RegExp(siteRoot + 'library/' + repoID + '.*'); return re.test(url); } getPathFromInternalMarkdownLink(url) { - var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '/file' + '(.*\.md)'); + var re = new RegExp(siteRoot + 'library/' + repoID + '/' + slug + '(.*/*.md)'); var array = re.exec(url); var path = decodeURIComponent(array[1]); return path; } - + getPathFromInternalDirLink(url) { - var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '(/.*)'); + var re = new RegExp(siteRoot + 'library/' + repoID + '/' + slug + '(/.*)'); var array = re.exec(url); var path = decodeURIComponent(array[1]); - var dirPath = path.substring(1); + var index = path.substring(1).indexOf('/'); + var dirPath = path.substring(index + 1); re = new RegExp('(^/.*)'); if (re.test(dirPath)) { path = dirPath; diff --git a/frontend/src/wiki.js b/frontend/src/wiki.js index af5b946429..52f064d86e 100644 --- a/frontend/src/wiki.js +++ b/frontend/src/wiki.js @@ -117,8 +117,8 @@ class Wiki extends Component { window.history.pushState({urlPath: fileUrl, filePath: filePath}, filePath, fileUrl); } - onLinkClick = (event) => { - const url = event.path[2].href; + onLinkClick = (link) => { + const url = link; if (this.isInternalMarkdownLink(url)) { let path = this.getPathFromInternalMarkdownLink(url); this.initMainPanelData(path); @@ -468,24 +468,24 @@ class Wiki extends Component { } isInternalMarkdownLink(url) { - var re = new RegExp(siteRoot + 'lib/' + repoID + '/file' + '.*\.md$'); + var re = new RegExp(siteRoot + 'library/' + repoID + '.*/*.md$'); return re.test(url); } isInternalDirLink(url) { - var re = new RegExp(siteRoot + 'library/' + repoID + '/.*'); + var re = new RegExp(siteRoot + 'library/' + repoID + '.*'); return re.test(url); } getPathFromInternalMarkdownLink(url) { - var re = new RegExp(siteRoot + 'lib/' + repoID + '/file' + '(.*\.md)'); + var re = new RegExp(siteRoot + 'library/' + repoID + '/' + slug + '(.*/*.md)'); var array = re.exec(url); var path = decodeURIComponent(array[1]); return path; } getPathFromInternalDirLink(url) { - var re = new RegExp(siteRoot + 'library/' + repoID + '(/.*)'); + var re = new RegExp(siteRoot + 'library/' + repoID + '/' + slug + '(/.*)'); var array = re.exec(url); var path = decodeURIComponent(array[1]);