Merge pull request #1003 from kizu/fix-text-expander

Fix text expander not working correctly in lists
This commit is contained in:
Chee Aun 2024-12-27 17:15:01 +08:00 committed by GitHub
commit de2df7a126
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 85 additions and 53 deletions

View file

@ -1840,8 +1840,13 @@ const Textarea = forwardRef((props, ref) => {
const textExpanderRef = useRef(); const textExpanderRef = useRef();
const textExpanderTextRef = useRef(''); const textExpanderTextRef = useRef('');
const hasTextExpanderRef = useRef(false);
useEffect(() => { useEffect(() => {
let handleChange, handleValue, handleCommited; let handleChange,
handleValue,
handleCommited,
handleActivate,
handleDeactivate;
if (textExpanderRef.current) { if (textExpanderRef.current) {
handleChange = (e) => { handleChange = (e) => {
// console.log('text-expander-change', e); // console.log('text-expander-change', e);
@ -2022,6 +2027,24 @@ const Textarea = forwardRef((props, ref) => {
'text-expander-committed', 'text-expander-committed',
handleCommited, handleCommited,
); );
handleActivate = () => {
hasTextExpanderRef.current = true;
};
textExpanderRef.current.addEventListener(
'text-expander-activate',
handleActivate,
);
handleDeactivate = () => {
hasTextExpanderRef.current = false;
};
textExpanderRef.current.addEventListener(
'text-expander-deactivate',
handleDeactivate,
);
} }
return () => { return () => {
@ -2038,6 +2061,14 @@ const Textarea = forwardRef((props, ref) => {
'text-expander-committed', 'text-expander-committed',
handleCommited, handleCommited,
); );
textExpanderRef.current.removeEventListener(
'text-expander-activate',
handleActivate,
);
textExpanderRef.current.removeEventListener(
'text-expander-deactivate',
handleDeactivate,
);
} }
}; };
}, []); }, []);
@ -2127,7 +2158,8 @@ const Textarea = forwardRef((props, ref) => {
onKeyDown={(e) => { onKeyDown={(e) => {
// Get line before cursor position after pressing 'Enter' // Get line before cursor position after pressing 'Enter'
const { key, target } = e; const { key, target } = e;
if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) { const hasTextExpander = hasTextExpanderRef.current;
if (key === 'Enter' && !(e.ctrlKey || e.metaKey || hasTextExpander)) {
try { try {
const { value, selectionStart } = target; const { value, selectionStart } = target;
const textBeforeCursor = value.slice(0, selectionStart); const textBeforeCursor = value.slice(0, selectionStart);

102
src/locales/en.po generated
View file

@ -108,7 +108,7 @@ msgstr ""
#: src/components/account-info.jsx:429 #: src/components/account-info.jsx:429
#: src/components/account-info.jsx:1120 #: src/components/account-info.jsx:1120
#: src/components/compose.jsx:2592 #: src/components/compose.jsx:2624
#: src/components/media-alt-modal.jsx:46 #: src/components/media-alt-modal.jsx:46
#: src/components/media-modal.jsx:358 #: src/components/media-modal.jsx:358
#: src/components/status.jsx:1737 #: src/components/status.jsx:1737
@ -419,10 +419,10 @@ msgstr ""
#: src/components/account-info.jsx:2098 #: src/components/account-info.jsx:2098
#: src/components/account-sheet.jsx:38 #: src/components/account-sheet.jsx:38
#: src/components/compose.jsx:859 #: src/components/compose.jsx:859
#: src/components/compose.jsx:2548 #: src/components/compose.jsx:2580
#: src/components/compose.jsx:3022 #: src/components/compose.jsx:3054
#: src/components/compose.jsx:3231 #: src/components/compose.jsx:3263
#: src/components/compose.jsx:3461 #: src/components/compose.jsx:3493
#: src/components/drafts.jsx:59 #: src/components/drafts.jsx:59
#: src/components/embed-modal.jsx:13 #: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:143 #: src/components/generic-accounts.jsx:143
@ -706,7 +706,7 @@ msgid "Mark media as sensitive"
msgstr "" msgstr ""
#: src/components/compose.jsx:1381 #: src/components/compose.jsx:1381
#: src/components/compose.jsx:3080 #: src/components/compose.jsx:3112
#: src/components/shortcuts-settings.jsx:715 #: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:362 #: src/pages/list.jsx:362
msgid "Add" msgid "Add"
@ -738,31 +738,31 @@ msgstr "Downloading GIF…"
msgid "Failed to download GIF" msgid "Failed to download GIF"
msgstr "Failed to download GIF" msgstr "Failed to download GIF"
#: src/components/compose.jsx:1879 #: src/components/compose.jsx:1884
#: src/components/compose.jsx:1956 #: src/components/compose.jsx:1961
#: src/components/nav-menu.jsx:239 #: src/components/nav-menu.jsx:239
msgid "More…" msgid "More…"
msgstr "" msgstr ""
#: src/components/compose.jsx:2361 #: src/components/compose.jsx:2393
msgid "Uploaded" msgid "Uploaded"
msgstr "" msgstr ""
#: src/components/compose.jsx:2374 #: src/components/compose.jsx:2406
msgid "Image description" msgid "Image description"
msgstr "Image description" msgstr "Image description"
#: src/components/compose.jsx:2375 #: src/components/compose.jsx:2407
msgid "Video description" msgid "Video description"
msgstr "Video description" msgstr "Video description"
#: src/components/compose.jsx:2376 #: src/components/compose.jsx:2408
msgid "Audio description" msgid "Audio description"
msgstr "Audio description" msgstr "Audio description"
#. placeholder {0}: prettyBytes( imageSize, ) #. placeholder {0}: prettyBytes( imageSize, )
#. placeholder {1}: prettyBytes(imageSizeLimit) #. placeholder {1}: prettyBytes(imageSizeLimit)
#: src/components/compose.jsx:2412 #: src/components/compose.jsx:2444
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower." msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
@ -770,13 +770,13 @@ msgstr "File size too large. Uploading might encounter issues. Try reduce the fi
#. placeholder {3}: i18n.number(height) #. placeholder {3}: i18n.number(height)
#. placeholder {4}: i18n.number(newWidth) #. placeholder {4}: i18n.number(newWidth)
#. placeholder {5}: i18n.number( newHeight, ) #. placeholder {5}: i18n.number( newHeight, )
#: src/components/compose.jsx:2424 #: src/components/compose.jsx:2456
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px."
msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px." msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {2}×{3}px to {4}×{5}px."
#. placeholder {6}: prettyBytes( videoSize, ) #. placeholder {6}: prettyBytes( videoSize, )
#. placeholder {7}: prettyBytes(videoSizeLimit) #. placeholder {7}: prettyBytes(videoSizeLimit)
#: src/components/compose.jsx:2432 #: src/components/compose.jsx:2464
msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower."
msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower." msgstr "File size too large. Uploading might encounter issues. Try reduce the file size from {6} to {7} or lower."
@ -784,149 +784,149 @@ msgstr "File size too large. Uploading might encounter issues. Try reduce the fi
#. placeholder {9}: i18n.number(height) #. placeholder {9}: i18n.number(height)
#. placeholder {10}: i18n.number(newWidth) #. placeholder {10}: i18n.number(newWidth)
#. placeholder {11}: i18n.number( newHeight, ) #. placeholder {11}: i18n.number( newHeight, )
#: src/components/compose.jsx:2444 #: src/components/compose.jsx:2476
msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px."
msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px." msgstr "Dimension too large. Uploading might encounter issues. Try reduce dimension from {8}×{9}px to {10}×{11}px."
#: src/components/compose.jsx:2452 #: src/components/compose.jsx:2484
msgid "Frame rate too high. Uploading might encounter issues." msgid "Frame rate too high. Uploading might encounter issues."
msgstr "Frame rate too high. Uploading might encounter issues." msgstr "Frame rate too high. Uploading might encounter issues."
#: src/components/compose.jsx:2512 #: src/components/compose.jsx:2544
#: src/components/compose.jsx:2762 #: src/components/compose.jsx:2794
#: src/components/shortcuts-settings.jsx:726 #: src/components/shortcuts-settings.jsx:726
#: src/pages/catchup.jsx:1074 #: src/pages/catchup.jsx:1074
#: src/pages/filters.jsx:412 #: src/pages/filters.jsx:412
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: src/components/compose.jsx:2529 #: src/components/compose.jsx:2561
#: src/compose.jsx:84 #: src/compose.jsx:84
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: src/components/compose.jsx:2554 #: src/components/compose.jsx:2586
msgid "Edit image description" msgid "Edit image description"
msgstr "Edit image description" msgstr "Edit image description"
#: src/components/compose.jsx:2555 #: src/components/compose.jsx:2587
msgid "Edit video description" msgid "Edit video description"
msgstr "Edit video description" msgstr "Edit video description"
#: src/components/compose.jsx:2556 #: src/components/compose.jsx:2588
msgid "Edit audio description" msgid "Edit audio description"
msgstr "Edit audio description" msgstr "Edit audio description"
#: src/components/compose.jsx:2601 #: src/components/compose.jsx:2633
#: src/components/compose.jsx:2650 #: src/components/compose.jsx:2682
msgid "Generating description. Please wait…" msgid "Generating description. Please wait…"
msgstr "Generating description. Please wait…" msgstr "Generating description. Please wait…"
#. placeholder {12}: e.message #. placeholder {12}: e.message
#: src/components/compose.jsx:2621 #: src/components/compose.jsx:2653
msgid "Failed to generate description: {12}" msgid "Failed to generate description: {12}"
msgstr "Failed to generate description: {12}" msgstr "Failed to generate description: {12}"
#: src/components/compose.jsx:2622 #: src/components/compose.jsx:2654
msgid "Failed to generate description" msgid "Failed to generate description"
msgstr "Failed to generate description" msgstr "Failed to generate description"
#: src/components/compose.jsx:2634 #: src/components/compose.jsx:2666
#: src/components/compose.jsx:2640 #: src/components/compose.jsx:2672
#: src/components/compose.jsx:2686 #: src/components/compose.jsx:2718
msgid "Generate description…" msgid "Generate description…"
msgstr "" msgstr ""
#. placeholder {13}: e?.message ? `: ${e.message}` : '' #. placeholder {13}: e?.message ? `: ${e.message}` : ''
#: src/components/compose.jsx:2673 #: src/components/compose.jsx:2705
msgid "Failed to generate description{13}" msgid "Failed to generate description{13}"
msgstr "Failed to generate description{13}" msgstr "Failed to generate description{13}"
#. placeholder {0}: localeCode2Text(lang) #. placeholder {0}: localeCode2Text(lang)
#: src/components/compose.jsx:2688 #: src/components/compose.jsx:2720
msgid "({0}) <0>— experimental</0>" msgid "({0}) <0>— experimental</0>"
msgstr "" msgstr ""
#: src/components/compose.jsx:2707 #: src/components/compose.jsx:2739
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#. placeholder {0}: i + 1 #. placeholder {0}: i + 1
#: src/components/compose.jsx:2743 #: src/components/compose.jsx:2775
msgid "Choice {0}" msgid "Choice {0}"
msgstr "Choice {0}" msgstr "Choice {0}"
#: src/components/compose.jsx:2790 #: src/components/compose.jsx:2822
msgid "Multiple choices" msgid "Multiple choices"
msgstr "" msgstr ""
#: src/components/compose.jsx:2793 #: src/components/compose.jsx:2825
msgid "Duration" msgid "Duration"
msgstr "" msgstr ""
#: src/components/compose.jsx:2824 #: src/components/compose.jsx:2856
msgid "Remove poll" msgid "Remove poll"
msgstr "" msgstr ""
#: src/components/compose.jsx:3039 #: src/components/compose.jsx:3071
msgid "Search accounts" msgid "Search accounts"
msgstr "Search accounts" msgstr "Search accounts"
#: src/components/compose.jsx:3093 #: src/components/compose.jsx:3125
#: src/components/generic-accounts.jsx:228 #: src/components/generic-accounts.jsx:228
msgid "Error loading accounts" msgid "Error loading accounts"
msgstr "" msgstr ""
#: src/components/compose.jsx:3237 #: src/components/compose.jsx:3269
msgid "Custom emojis" msgid "Custom emojis"
msgstr "" msgstr ""
#: src/components/compose.jsx:3257 #: src/components/compose.jsx:3289
msgid "Search emoji" msgid "Search emoji"
msgstr "Search emoji" msgstr "Search emoji"
#: src/components/compose.jsx:3288 #: src/components/compose.jsx:3320
msgid "Error loading custom emojis" msgid "Error loading custom emojis"
msgstr "" msgstr ""
#: src/components/compose.jsx:3299 #: src/components/compose.jsx:3331
msgid "Recently used" msgid "Recently used"
msgstr "Recently used" msgstr "Recently used"
#: src/components/compose.jsx:3300 #: src/components/compose.jsx:3332
msgid "Others" msgid "Others"
msgstr "Others" msgstr "Others"
#. placeholder {0}: i18n.number(emojis.length - max) #. placeholder {0}: i18n.number(emojis.length - max)
#: src/components/compose.jsx:3338 #: src/components/compose.jsx:3370
msgid "{0} more…" msgid "{0} more…"
msgstr "" msgstr ""
#: src/components/compose.jsx:3476 #: src/components/compose.jsx:3508
msgid "Search GIFs" msgid "Search GIFs"
msgstr "Search GIFs" msgstr "Search GIFs"
#: src/components/compose.jsx:3491 #: src/components/compose.jsx:3523
msgid "Powered by GIPHY" msgid "Powered by GIPHY"
msgstr "Powered by GIPHY" msgstr "Powered by GIPHY"
#: src/components/compose.jsx:3499 #: src/components/compose.jsx:3531
msgid "Type to search GIFs" msgid "Type to search GIFs"
msgstr "" msgstr ""
#: src/components/compose.jsx:3597 #: src/components/compose.jsx:3629
#: src/components/media-modal.jsx:462 #: src/components/media-modal.jsx:462
#: src/components/timeline.jsx:893 #: src/components/timeline.jsx:893
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: src/components/compose.jsx:3615 #: src/components/compose.jsx:3647
#: src/components/media-modal.jsx:481 #: src/components/media-modal.jsx:481
#: src/components/timeline.jsx:910 #: src/components/timeline.jsx:910
msgid "Next" msgid "Next"
msgstr "" msgstr ""
#: src/components/compose.jsx:3632 #: src/components/compose.jsx:3664
msgid "Error loading GIFs" msgid "Error loading GIFs"
msgstr "" msgstr ""