summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-08-05 19:20:26 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-08-05 19:20:26 +0900
commit5bbc95d6597625772ae305e6a81fb7b1ddace5b7 (patch)
tree50f8a7923f38600dae4ba93225fc0beb7c3032fe /src
parentFix test (diff)
downloadmisskey-5bbc95d6597625772ae305e6a81fb7b1ddace5b7.tar.gz
misskey-5bbc95d6597625772ae305e6a81fb7b1ddace5b7.tar.bz2
misskey-5bbc95d6597625772ae305e6a81fb7b1ddace5b7.zip
文字数が多い場合は動きを無効に
Diffstat (limited to 'src')
-rw-r--r--src/client/app/common/views/components/misskey-flavored-markdown.ts52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.ts b/src/client/app/common/views/components/misskey-flavored-markdown.ts
index 683b4e806c..69e727d6f3 100644
--- a/src/client/app/common/views/components/misskey-flavored-markdown.ts
+++ b/src/client/app/common/views/components/misskey-flavored-markdown.ts
@@ -1,5 +1,6 @@
import Vue from 'vue';
import * as emojilib from 'emojilib';
+import { length } from 'stringz';
import parse from '../../../../../mfm/parse';
import getAcct from '../../../../../misc/acct/render';
import { url } from '../../../config';
@@ -43,7 +44,7 @@ export default Vue.component('misskey-flavored-markdown', {
// Parse ast to DOM
const els = flatten(ast.map(token => {
switch (token.type) {
- case 'text':
+ case 'text': {
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
if (this.shouldBreak) {
@@ -54,41 +55,48 @@ export default Vue.component('misskey-flavored-markdown', {
} else {
return createElement('span', text.replace(/\n/g, ' '));
}
+ }
- case 'bold':
+ case 'bold': {
return createElement('b', token.bold);
+ }
- case 'big':
+ case 'big': {
+ const isLong = length(token.big) > 10;
return (createElement as any)('strong', {
attrs: {
style: 'display: inline-block; font-size: 200%;'
},
- directives: [this.$store.state.settings.disableAnimatedMfm ? {} : {
+ directives: [this.$store.state.settings.disableAnimatedMfm || isLong ? {} : {
name: 'animate-css',
value: { classes: 'tada', iteration: 'infinite' }
}]
}, token.big);
+ }
- case 'motion':
+ case 'motion': {
+ const isLong = length(token.motion) > 10;
return (createElement as any)('span', {
attrs: {
style: 'display: inline-block;'
},
- directives: [this.$store.state.settings.disableAnimatedMfm ? {} : {
+ directives: [this.$store.state.settings.disableAnimatedMfm || isLong ? {} : {
name: 'animate-css',
value: { classes: 'rubberBand', iteration: 'infinite' }
}]
}, token.motion);
+ }
- case 'url':
+ case 'url': {
return createElement(MkUrl, {
props: {
url: token.content,
target: '_blank'
}
});
+ }
- case 'link':
+ case 'link': {
return createElement('a', {
attrs: {
class: 'link',
@@ -97,8 +105,9 @@ export default Vue.component('misskey-flavored-markdown', {
title: token.url
}
}, token.title);
+ }
- case 'mention':
+ case 'mention': {
return (createElement as any)('a', {
attrs: {
href: `${url}/@${getAcct(token)}`,
@@ -110,16 +119,18 @@ export default Vue.component('misskey-flavored-markdown', {
value: token.content
}]
}, token.content);
+ }
- case 'hashtag':
+ case 'hashtag': {
return createElement('a', {
attrs: {
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
target: '_blank'
}
}, token.content);
+ }
- case 'code':
+ case 'code': {
return createElement('pre', {
class: 'code'
}, [
@@ -129,15 +140,17 @@ export default Vue.component('misskey-flavored-markdown', {
}
})
]);
+ }
- case 'inline-code':
+ case 'inline-code': {
return createElement('code', {
domProps: {
innerHTML: token.html
}
});
+ }
- case 'quote':
+ case 'quote': {
const text2 = token.quote.replace(/(\r\n|\n|\r)/g, '\n');
if (this.shouldBreak) {
@@ -156,27 +169,32 @@ export default Vue.component('misskey-flavored-markdown', {
}
}, text2.replace(/\n/g, ' '));
}
+ }
- case 'title':
+ case 'title': {
return createElement('div', {
attrs: {
class: 'title'
}
}, token.title);
+ }
- case 'emoji':
+ case 'emoji': {
const emoji = emojilib.lib[token.emoji];
return createElement('span', emoji ? emoji.char : token.content);
+ }
- case 'search':
+ case 'search': {
return createElement(MkGoogle, {
props: {
q: token.query
}
});
+ }
- default:
+ default: {
console.log('unknown ast type:', token.type);
+ }
}
}));