1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-06 09:21:54 +00:00

Internal link repair (#2828)

This commit is contained in:
杨顺强
2019-01-15 15:17:40 +08:00
committed by Daniel Pan
parent 9340d4af38
commit 3c1bc00d82
3 changed files with 29 additions and 17 deletions

View File

@@ -38,7 +38,17 @@ class MarkdownContentViewer extends React.Component {
onLinkClick = (event) => { onLinkClick = (event) => {
event.preventDefault(); 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() { render() {

View File

@@ -1,7 +1,7 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import moment from 'moment'; 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 { seafileAPI } from './utils/seafile-api';
import { Utils } from './utils/utils'; import { Utils } from './utils/utils';
import collabServer from './utils/collab-server'; import collabServer from './utils/collab-server';
@@ -380,17 +380,18 @@ class Wiki extends Component {
getThumbnail(0); getThumbnail(0);
} }
onLinkClick = (event) => { onLinkClick = (link) => {
const url = event.path[2].href; const url = link;
if (this.isInternalMarkdownLink(url)) { if (this.isInternalMarkdownLink(url)) {
let path = this.getPathFromInternalMarkdownLink(url); let path = this.getPathFromInternalMarkdownLink(url);
this.showFile(path); this.showFile(path);
} else if (this.isInternalDirLink(url)) { } else if (this.isInternalDirLink(url)) {
let path = this.getPathFromInternalDirLink(url); let path = this.getPathFromInternalDirLink(url);
this.showDir(path); this.showDir(path);
} } else {
window.open(url); window.open(url);
} }
}
updateUsedRepoTags = (newUsedRepoTags) => { updateUsedRepoTags = (newUsedRepoTags) => {
this.setState({usedRepoTags: newUsedRepoTags}); this.setState({usedRepoTags: newUsedRepoTags});
@@ -891,28 +892,29 @@ class Wiki extends Component {
} }
isInternalMarkdownLink(url) { isInternalMarkdownLink(url) {
var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '/file' + '.*\.md$'); var re = new RegExp(siteRoot + 'library/' + repoID + '.*/*.md$');
return re.test(url); return re.test(url);
} }
isInternalDirLink(url) { isInternalDirLink(url) {
var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '/.*'); var re = new RegExp(siteRoot + 'library/' + repoID + '.*');
return re.test(url); return re.test(url);
} }
getPathFromInternalMarkdownLink(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 array = re.exec(url);
var path = decodeURIComponent(array[1]); var path = decodeURIComponent(array[1]);
return path; return path;
} }
getPathFromInternalDirLink(url) { getPathFromInternalDirLink(url) {
var re = new RegExp(serviceUrl + '/wiki/lib/' + repoID + '(/.*)'); var re = new RegExp(siteRoot + 'library/' + repoID + '/' + slug + '(/.*)');
var array = re.exec(url); var array = re.exec(url);
var path = decodeURIComponent(array[1]); 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('(^/.*)'); re = new RegExp('(^/.*)');
if (re.test(dirPath)) { if (re.test(dirPath)) {
path = dirPath; path = dirPath;

View File

@@ -117,8 +117,8 @@ class Wiki extends Component {
window.history.pushState({urlPath: fileUrl, filePath: filePath}, filePath, fileUrl); window.history.pushState({urlPath: fileUrl, filePath: filePath}, filePath, fileUrl);
} }
onLinkClick = (event) => { onLinkClick = (link) => {
const url = event.path[2].href; const url = link;
if (this.isInternalMarkdownLink(url)) { if (this.isInternalMarkdownLink(url)) {
let path = this.getPathFromInternalMarkdownLink(url); let path = this.getPathFromInternalMarkdownLink(url);
this.initMainPanelData(path); this.initMainPanelData(path);
@@ -468,24 +468,24 @@ class Wiki extends Component {
} }
isInternalMarkdownLink(url) { isInternalMarkdownLink(url) {
var re = new RegExp(siteRoot + 'lib/' + repoID + '/file' + '.*\.md$'); var re = new RegExp(siteRoot + 'library/' + repoID + '.*/*.md$');
return re.test(url); return re.test(url);
} }
isInternalDirLink(url) { isInternalDirLink(url) {
var re = new RegExp(siteRoot + 'library/' + repoID + '/.*'); var re = new RegExp(siteRoot + 'library/' + repoID + '.*');
return re.test(url); return re.test(url);
} }
getPathFromInternalMarkdownLink(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 array = re.exec(url);
var path = decodeURIComponent(array[1]); var path = decodeURIComponent(array[1]);
return path; return path;
} }
getPathFromInternalDirLink(url) { getPathFromInternalDirLink(url) {
var re = new RegExp(siteRoot + 'library/' + repoID + '(/.*)'); var re = new RegExp(siteRoot + 'library/' + repoID + '/' + slug + '(/.*)');
var array = re.exec(url); var array = re.exec(url);
var path = decodeURIComponent(array[1]); var path = decodeURIComponent(array[1]);