fix: update title generator to include the punctuation, and also take into account question marks and exclamation marks

This commit is contained in:
Julian Lam
2024-04-30 11:41:34 -04:00
parent fc3f3a7831
commit 6ac5a77976
2 changed files with 20 additions and 5 deletions

View File

@@ -264,12 +264,21 @@ Helpers.generateTitle = (html) => {
title = $('h1, h2, h3, h4, h5, h6, title, p, span').first().text(); title = $('h1, h2, h3, h4, h5, h6, title, p, span').first().text();
// Fall back to newline splitting (i.e. if no paragraph elements) // Fall back to newline splitting (i.e. if no paragraph elements)
title = title || html.split('\n').filter(Boolean)[0]; title = title || html.split('\n').filter(Boolean).shift();
// Split sentences and use only first one // Split sentences and use only first one
const split = title.split('. '); const sentences = title
if (split.length > 1) { .split(/(\.|\?|!)\s/)
title = split.shift(); .reduce((memo, cur, idx, sentences) => {
if (idx % 2) {
memo.push(`${sentences[idx - 1]}${cur}`);
}
return memo;
}, []);
if (sentences.length > 1) {
title = sentences.shift();
} }
// Truncate down if too long // Truncate down if too long

View File

@@ -132,7 +132,13 @@ describe('ActivityPub integration', () => {
it('should take the first sentence of a matched element/line', () => { it('should take the first sentence of a matched element/line', () => {
const source = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam a ex pellentesque, fringilla lorem non, blandit est. Nulla facilisi. Curabitur cursus neque vel enim semper, id lacinia elit facilisis. Vestibulum turpis orci, efficitur ut semper eu, faucibus eu turpis. Praesent eu odio non libero gravida tempor. Ut porta pellentesque orci. In porta nunc eget tincidunt interdum. Curabitur vel dui nec libero tempus porttitor. Phasellus tincidunt, diam id viverra suscipit, est diam maximus purus, in vestibulum dui ligula vel libero. Sed tempus finibus ante, sit amet consequat magna facilisis eget. Proin ullamcorper, velit sit amet feugiat varius, massa sem aliquam dui, non aliquam augue velit vel est. Phasellus eu sapien in purus feugiat scelerisque congue id velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.'; const source = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam a ex pellentesque, fringilla lorem non, blandit est. Nulla facilisi. Curabitur cursus neque vel enim semper, id lacinia elit facilisis. Vestibulum turpis orci, efficitur ut semper eu, faucibus eu turpis. Praesent eu odio non libero gravida tempor. Ut porta pellentesque orci. In porta nunc eget tincidunt interdum. Curabitur vel dui nec libero tempus porttitor. Phasellus tincidunt, diam id viverra suscipit, est diam maximus purus, in vestibulum dui ligula vel libero. Sed tempus finibus ante, sit amet consequat magna facilisis eget. Proin ullamcorper, velit sit amet feugiat varius, massa sem aliquam dui, non aliquam augue velit vel est. Phasellus eu sapien in purus feugiat scelerisque congue id velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.';
const title = activitypub.helpers.generateTitle(source); const title = activitypub.helpers.generateTitle(source);
assert.strictEqual(title, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'); assert.strictEqual(title, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.');
});
it('should also consider other sentence ending symbols', () => {
const source = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit? Etiam a ex pellentesque, fringilla lorem non, blandit est. Nulla facilisi. Curabitur cursus neque vel enim semper, id lacinia elit facilisis. Vestibulum turpis orci, efficitur ut semper eu, faucibus eu turpis. Praesent eu odio non libero gravida tempor. Ut porta pellentesque orci. In porta nunc eget tincidunt interdum. Curabitur vel dui nec libero tempus porttitor. Phasellus tincidunt, diam id viverra suscipit, est diam maximus purus, in vestibulum dui ligula vel libero. Sed tempus finibus ante, sit amet consequat magna facilisis eget. Proin ullamcorper, velit sit amet feugiat varius, massa sem aliquam dui, non aliquam augue velit vel est. Phasellus eu sapien in purus feugiat scelerisque congue id velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.';
const title = activitypub.helpers.generateTitle(source);
assert.strictEqual(title, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit?');
}); });
}); });
}); });