0
0

Implement new MFM syntax

This commit is contained in:
syuilo 2018-08-03 23:27:37 +09:00
parent 42fbc7ab66
commit d456e5e45c
5 changed files with 49 additions and 1 deletions

View File

@ -56,7 +56,18 @@ export default Vue.component('misskey-flavored-markdown', {
} }
case 'bold': case 'bold':
return createElement('strong', token.bold); return createElement('b', token.bold);
case 'big':
return (createElement as any)('strong', {
attrs: {
style: 'display: inline-block; font-size: 200%;'
},
directives: [{
name: 'animate-css',
value: { classes: 'tada', iteration: 'infinite' }
}]
}, token.big);
case 'url': case 'url':
return createElement(MkUrl, { return createElement(MkUrl, {

View File

@ -11,6 +11,12 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
document.body.appendChild(b); document.body.appendChild(b);
}, },
big({ document }, { big }) {
const b = document.createElement('strong');
b.textContent = big;
document.body.appendChild(b);
},
code({ document }, { code }) { code({ document }, { code }) {
const pre = document.createElement('pre'); const pre = document.createElement('pre');
const inner = document.createElement('code'); const inner = document.createElement('code');

View File

@ -0,0 +1,20 @@
/**
* Bold
*/
export type TextElementBig = {
type: 'big'
content: string
big: string
};
export default function(text: string) {
const match = text.match(/^\*\*\*(.+?)\*\*\*/);
if (!match) return null;
const big = match[0];
return {
type: 'big',
content: big,
big: match[1]
} as TextElementBig;
}

View File

@ -3,6 +3,7 @@
*/ */
import { TextElementBold } from './elements/bold'; import { TextElementBold } from './elements/bold';
import { TextElementBig } from './elements/big';
import { TextElementCode } from './elements/code'; import { TextElementCode } from './elements/code';
import { TextElementEmoji } from './elements/emoji'; import { TextElementEmoji } from './elements/emoji';
import { TextElementHashtag } from './elements/hashtag'; import { TextElementHashtag } from './elements/hashtag';
@ -15,6 +16,7 @@ import { TextElementTitle } from './elements/title';
import { TextElementUrl } from './elements/url'; import { TextElementUrl } from './elements/url';
const elements = [ const elements = [
require('./elements/big'),
require('./elements/bold'), require('./elements/bold'),
require('./elements/title'), require('./elements/title'),
require('./elements/url'), require('./elements/url'),
@ -30,6 +32,7 @@ const elements = [
export type TextElement = { type: 'text', content: string } export type TextElement = { type: 'text', content: string }
| TextElementBold | TextElementBold
| TextElementBig
| TextElementCode | TextElementCode
| TextElementEmoji | TextElementEmoji
| TextElementHashtag | TextElementHashtag

View File

@ -31,6 +31,14 @@ describe('Text', () => {
], tokens); ], tokens);
}); });
it('big', () => {
const tokens = analyze('***Strawberry*** Pasta');
assert.deepEqual([
{ type: 'big', content: '***Strawberry***', bold: 'Strawberry' },
{ type: 'text', content: ' Pasta' }
], tokens);
});
it('mention', () => { it('mention', () => {
const tokens = analyze('@himawari お腹ペコい'); const tokens = analyze('@himawari お腹ペコい');
assert.deepEqual([ assert.deepEqual([