소스 검색

Make links work even without protocol suffix, make them open in a new window

sbkwgh 6 년 전
부모
커밋
740e5051b3
2개의 변경된 파일28개의 추가작업 그리고 2개의 파일을 삭제
  1. 14 1
      frontend/src/components/InputEditorPreview.vue
  2. 14 1
      models/post.js

+ 14 - 1
frontend/src/components/InputEditorPreview.vue

@@ -25,6 +25,19 @@
 		sanitize: true
 	});
 
+	const renderer = new Marked.Renderer();
+	renderer.link = function (href, title, text) {
+		if(!href.match(/[a-z]+:\/\/.+/i)) {
+			href = 'http://' + href;
+		}
+
+		return `
+			<a href='${href}' ${title ? "title='" + title + "'" : "" } target='_blank' rel='noopener'>
+				${text}
+			</a>
+		`;
+	};
+
 	export default {
 		name: 'InputEditorPreview',
 		props: ['value', 'mentions'],
@@ -48,7 +61,7 @@
 					replacedMd = replacedMd.replace(regexp, `$1[@${mention}](/user/${mention})$2`)
 				})
 
-				let HTML = Marked(replacedMd);
+				let HTML = Marked(replacedMd, { renderer });
 
 				this.HTML = HTML;
 				this.$linkExpander(HTML, v => this.HTML = v);

+ 14 - 1
models/post.js

@@ -10,6 +10,19 @@ marked.setOptions({
 	sanitize: true
 });
 
+const renderer = new marked.Renderer();
+renderer.link = function (href, title, text) {
+	if(!href.match(/[a-z]+:\/\/.+/i)) {
+		href = 'http://' + href;
+	}
+
+	return `
+		<a href='${href}' ${title ? "title='" + title + "'" : "" } target='_blank' rel='noopener'>
+			${text}
+		</a>
+	`;
+};
+
 
 module.exports = (sequelize, DataTypes) => {
 	let Post = sequelize.define('Post', {
@@ -21,7 +34,7 @@ module.exports = (sequelize, DataTypes) => {
 					path: 'content'
 				})
 
-				let md = marked(val);
+				let md = marked(val, { renderer });
 
 				this.setDataValue('content', md)
 				this.setDataValue('plainText', cheerio(md).text())