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:
@@ -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() {
|
||||||
|
@@ -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;
|
||||||
|
@@ -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]);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user