better parsing of mentions from GNU social in Mastodon
This commit is contained in:
parent
dffa15cfd9
commit
6494ce5907
@ -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> </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>');
|
||||
});
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user