mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-26 03:47:40 -07:00
[MFM] Better URL parsing
This commit is contained in:
parent
89ce6ae71f
commit
5e877644ca
2 changed files with 33 additions and 6 deletions
|
@ -9,9 +9,11 @@ export type TextElementUrl = {
|
|||
};
|
||||
|
||||
export default function(text: string) {
|
||||
const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.=\+\-]+/);
|
||||
const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.,=\+\-]+/);
|
||||
if (!match) return null;
|
||||
const url = match[0];
|
||||
let url = match[0];
|
||||
if (url.endsWith('.')) url = url.substr(0, url.lastIndexOf('.'));
|
||||
if (url.endsWith(',')) url = url.substr(0, url.lastIndexOf(','));
|
||||
return {
|
||||
type: 'url',
|
||||
content: url,
|
||||
|
|
33
test/mfm.ts
33
test/mfm.ts
|
@ -160,12 +160,37 @@ describe('Text', () => {
|
|||
});
|
||||
|
||||
it('url', () => {
|
||||
const tokens = analyze('https://himasaku.net');
|
||||
const tokens1 = analyze('https://example.com');
|
||||
assert.deepEqual([{
|
||||
type: 'url',
|
||||
content: 'https://himasaku.net',
|
||||
url: 'https://himasaku.net'
|
||||
}], tokens);
|
||||
content: 'https://example.com',
|
||||
url: 'https://example.com'
|
||||
}], tokens1);
|
||||
|
||||
const tokens2 = analyze('https://example.com.');
|
||||
assert.deepEqual([{
|
||||
type: 'url',
|
||||
content: 'https://example.com',
|
||||
url: 'https://example.com'
|
||||
}, {
|
||||
type: 'text', content: '.'
|
||||
}], tokens2);
|
||||
|
||||
const tokens3 = analyze('https://example.com/foo?bar=a,b');
|
||||
assert.deepEqual([{
|
||||
type: 'url',
|
||||
content: 'https://example.com/foo?bar=a,b',
|
||||
url: 'https://example.com/foo?bar=a,b'
|
||||
}], tokens3);
|
||||
|
||||
const tokens4 = analyze('https://example.com/foo, bar');
|
||||
assert.deepEqual([{
|
||||
type: 'url',
|
||||
content: 'https://example.com/foo',
|
||||
url: 'https://example.com/foo'
|
||||
}, {
|
||||
type: 'text', content: ', bar'
|
||||
}], tokens4);
|
||||
});
|
||||
|
||||
it('link', () => {
|
||||
|
|
Loading…
Reference in a new issue