文字数が多い場合は動きを無効に
This commit is contained in:
		
							parent
							
								
									005d25a07b
								
							
						
					
					
						commit
						5bbc95d659
					
				
					 2 changed files with 36 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue