better parsing of mentions from GNU social in Mastodon

This commit is contained in:
Nicolas Constant 2018-11-01 20:45:18 -04:00
parent dffa15cfd9
commit 6494ce5907
No known key found for this signature in database
GPG Key ID: 1E9F677FB01A5688
2 changed files with 29 additions and 12 deletions

View File

@ -99,11 +99,19 @@ describe('DatabindedTextComponent', () => {
expect(component.processedText).toContain('bla1');
});
it('should parse mention - GNU social in Mastodon', () => {
const sample = `<div>bla1 <br> @<a href="https://instance.club/user/1" class="h-card mention status-link" rel="noopener" target="_blank" title="https://instance.club/user/1">user</a>&nbsp;</div>`;
component.text = sample;
expect(component.processedText).toContain('<a href class="account--user-instance-club" title="@user@instance.club">@user</a>');
expect(component.processedText).toContain('bla1');
})
it('should parse mention - Pleroma in Mastodon', () => {
const sample = `<div><span><a class="mention status-link" href="https://pleroma.site/users/kaniini" rel="noopener" target="_blank" title="kaniini@pleroma.site">@<span>kaniini</span></a></span> <span><a class="mention status-link" href="https://mastodon.social/@Gargron" rel="noopener" target="_blank" title="Gargron@mastodon.social">@<span>Gargron</span></a></span> bla1?</div>`;
component.text = sample;
expect(component.processedText).toContain('<div><span> <a href class="account--kaniini-pleroma-site" title="@kaniini@pleroma.site">@kaniini</a> <span> <a href class="account--Gargron-mastodon-social" title="@Gargron@mastodon.social">@Gargron</a> bla1?</div>');
expect(component.processedText).toContain('<div><span><a href class="account--kaniini-pleroma-site" title="@kaniini@pleroma.site">@kaniini</a> <span><a href class="account--Gargron-mastodon-social" title="@Gargron@mastodon.social">@Gargron</a> bla1?</div>');
});

View File

@ -40,7 +40,7 @@ export class DatabindedTextComponent implements OnInit {
console.warn(value);
}
} else if (section.includes('class="u-url mention"') || section.includes('class="mention"') || section.includes('class="mention status-link"')) {
} else if (section.includes('class="u-url mention"') || section.includes('class="mention"') || section.includes('class="mention status-link"') || section.includes('class="h-card mention status-link"')) {
try {
this.processUser(section);
}
@ -71,25 +71,34 @@ export class DatabindedTextComponent implements OnInit {
}
private processUser(section: string) {
// let mentionClass = 'class="mention"';
// if (section.includes('class="u-url mention"'))
// mentionClass = 'class="u-url mention"';
let extractedAccountAndNext: string[];
let extractedAccountName: string;
let extractedAccountAndNext = section.split('</a></span>');
let extractedAccountName = extractedAccountAndNext[0].split('@<span>')[1].replace('<span>', '').replace('</span>', '');
if (!section.includes('@<span>')) { //GNU social
extractedAccountAndNext = section.split('</a>');
extractedAccountName = extractedAccountAndNext[0].split('>')[1];
} else {
extractedAccountAndNext = section.split('</a></span>');
extractedAccountName = extractedAccountAndNext[0].split('@<span>')[1].replace('<span>', '').replace('</span>', '');
}
let extractedAccountLink = extractedAccountAndNext[0].split('href="https://')[1].split('"')[0].replace(' ', '').replace('@', '').split('/');
let domain = extractedAccountLink[0];
let username = extractedAccountLink[extractedAccountLink.length - 1];
//let username = extractedAccountLink[extractedAccountLink.length - 1];
let extractedAccount = `@${username}@${domain}`;
let extractedAccount = `@${extractedAccountName}@${domain}`;
let classname = this.getClassNameForAccount(extractedAccount);
this.processedText += ` <a href class="${classname}" title="${extractedAccount}">@${extractedAccountName}</a>`;
this.processedText += `<a href class="${classname}" title="${extractedAccount}">@${extractedAccountName}</a>`;
if (extractedAccountAndNext[1])
this.processedText += extractedAccountAndNext[1];
//GNU Social clean up
if(this.processedText.includes('@<a'))
this.processedText = this.processedText.replace('@<a', '<a');
if (extractedAccountAndNext[1]) this.processedText += extractedAccountAndNext[1];
this.accounts.push(extractedAccount);
}