From 85814929121641ae56eb81d80bc1d56981bd048a Mon Sep 17 00:00:00 2001 From: Dmitry S Date: Wed, 12 Jul 2023 14:38:03 -0400 Subject: [PATCH] (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 --- app/client/ui2018/pages.ts | 5 ++++- test/nbrowser/Pages.ts | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/client/ui2018/pages.ts b/app/client/ui2018/pages.ts index 29484daf..52c3931e 100644 --- a/app/client/ui2018/pages.ts +++ b/app/client/ui2018/pages.ts @@ -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; diff --git a/test/nbrowser/Pages.ts b/test/nbrowser/Pages.ts index 13969753..ba1947f8 100644 --- a/test/nbrowser/Pages.ts +++ b/test/nbrowser/Pages.ts @@ -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']); });