(core) When a page starts with a number, don't treat it as an emoji

Test Plan: Added a check to the emoji test.

Reviewers: georgegevoian

Reviewed By: georgegevoian

Subscribers: georgegevoian

Differential Revision: https://phab.getgrist.com/D3951
pull/576/head
Dmitry S 10 months ago
parent b2743cac2d
commit 8581492912

@ -138,7 +138,9 @@ const pageInitialRegex = new RegExp(`^${emojiPart.source}(?:\\u{200D}${emojiPart
// present, is omitted from the displayName, but a regular character used as the initial is kept.
function splitPageInitial(name: string): {initial: string, displayName: string, hasEmoji: boolean} {
const m = name.match(pageInitialRegex);
if (m) {
// A common false positive is digits; those match \p{Emoji} but should not be considered emojis.
// (Other matching non-emojis include characters like '*', but those are nicer to show as emojis.)
if (m && !/^\d$/.test(m[0])) {
return {initial: m[0], displayName: name.slice(m[0].length).trim(), hasEmoji: true};
} else {
return {initial: Array.from(name)[0], displayName: name.trim(), hasEmoji: false};
@ -179,6 +181,7 @@ const cssPageInitial = styled('div', `
box-shadow: 0 0 0 1px var(--grist-theme-left-panel-page-emoji-outline, var(--grist-color-dark-grey));
font-size: 15px;
overflow: hidden;
color: ${theme.text};
}
.${treeViewContainer.className}-close & {
margin-right: 0;

@ -266,7 +266,7 @@ describe('Pages', function() {
// It looks like our version of Chromedriver does not support sending emojis using sendKeys
// (issue mentioned here https://stackoverflow.com/a/59139690), so we'll use executeScript to
// rename pages.
async function renamePage(origName: string, newName: string) {
async function renamePage(origName: string|RegExp, newName: string) {
await gu.openPageMenu(origName);
await driver.find('.test-docpage-rename').doClick();
const editor = await driver.find('.test-docpage-editor');
@ -291,7 +291,11 @@ describe('Pages', function() {
assert.deepEqual(await getInitialAndName(/Guest List/),
['👨‍👩‍👧‍👦', '👨👩👧Guest List']);
await gu.undo(2);
// Digits should not be considered emoji (even though they match /\p{Emoji}/...)
await renamePage(/Guest List/, '5Guest List');
assert.deepEqual(await getInitialAndName(/Guest List/), ['5', '5Guest List']);
await gu.undo(3);
assert.deepEqual(await getInitialAndName(/People/), ['P', 'People']);
});

Loading…
Cancel
Save