diff --git a/app/javascript/mastodon/features/compose/redesign/selectors.ts b/app/javascript/mastodon/features/compose/redesign/selectors.ts index 2e217550e1b..2ccd7e83d24 100644 --- a/app/javascript/mastodon/features/compose/redesign/selectors.ts +++ b/app/javascript/mastodon/features/compose/redesign/selectors.ts @@ -64,7 +64,7 @@ export const selectComposeCharsCount = createAppSelector( : '', ], (maxChars, text, spoilerText) => { - const allText = (countableText(text) as string) + spoilerText; + const allText = countableText(text) + spoilerText; return { text, allText, diff --git a/app/javascript/mastodon/features/compose/util/counter.js b/app/javascript/mastodon/features/compose/util/counter.js deleted file mode 100644 index ec2431096b5..00000000000 --- a/app/javascript/mastodon/features/compose/util/counter.js +++ /dev/null @@ -1,9 +0,0 @@ -import { urlRegex } from './url_regex'; - -const urlPlaceholder = '$2xxxxxxxxxxxxxxxxxxxxxxx'; - -export function countableText(inputText) { - return inputText - .replace(urlRegex, urlPlaceholder) - .replace(/(^|[^/\w])@(([a-z0-9_]+)@[a-z0-9.-]+[a-z0-9]+)/ig, '$1@$3'); -} diff --git a/app/javascript/mastodon/features/compose/util/counter.ts b/app/javascript/mastodon/features/compose/util/counter.ts new file mode 100644 index 00000000000..a7449ab2dc1 --- /dev/null +++ b/app/javascript/mastodon/features/compose/util/counter.ts @@ -0,0 +1,9 @@ +import { urlRegex } from './url_regex'; + +const urlPlaceholder = '$2xxxxxxxxxxxxxxxxxxxxxxx'; + +export function countableText(inputText: string) { + return inputText + .replace(urlRegex as RegExp, urlPlaceholder) + .replace(/(^|[^/\w])@(([a-z0-9_]+)@[a-z0-9.-]+[a-z0-9]+)/gi, '$1@$3'); +} diff --git a/app/javascript/mastodon/reducers/slices/composer.ts b/app/javascript/mastodon/reducers/slices/composer.ts index 8d4f9d4c34f..a14a1652c6a 100644 --- a/app/javascript/mastodon/reducers/slices/composer.ts +++ b/app/javascript/mastodon/reducers/slices/composer.ts @@ -26,6 +26,7 @@ import type { ApiStatusJSON, StatusVisibility, } from '@/mastodon/api_types/statuses'; +import { countableText } from '@/mastodon/features/compose/util/counter'; import { createAppSelector, createAppThunk, @@ -269,7 +270,12 @@ export const submitComposer = createAppThunk( const maxChars = server.server.item?.configuration.statuses.max_characters ?? 500; - const textLength = length(compose.get('text') as string); + let text = compose.get('text') as string; + const spoilerText = compose.get('spoiler_text'); + if (compose.get('spoiler') && typeof spoilerText === 'string') { + text += spoilerText; + } + const textLength = length(countableText(text)); if (textLength === 0) { dispatch(composerSlice.actions.addError('empty')); return;