Fix character/grapheme count stuff (#3839)

* Bring Toot button in line with counter

Both should use stringz I guess

* Use grapheme_length for character count
signup-info-prompt
Gô Shoemake 2017-06-19 02:31:14 -07:00 committed by Eugen Rochko
parent d55f207274
commit 29a22691d2
2 changed files with 3 additions and 2 deletions

View File

@ -18,6 +18,7 @@ import UploadFormContainer from '../containers/upload_form_container';
import TextIconButton from './text_icon_button'; import TextIconButton from './text_icon_button';
import WarningContainer from '../containers/warning_container'; import WarningContainer from '../containers/warning_container';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { length } from 'stringz';
const messages = defineMessages({ const messages = defineMessages({
placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' }, placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },
@ -193,7 +194,7 @@ class ComposeForm extends ImmutablePureComponent {
<div className='compose-form__publish'> <div className='compose-form__publish'>
<div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div> <div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div>
<div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabled || this.props.is_uploading || text.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '_').length > 500 || (text.length !==0 && text.trim().length === 0)} block /></div> <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabled || this.props.is_uploading || length(text) > 500 || (text.length !==0 && text.trim().length === 0)} block /></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,6 +5,6 @@ class StatusLengthValidator < ActiveModel::Validator
def validate(status) def validate(status)
return unless status.local? && !status.reblog? return unless status.local? && !status.reblog?
status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if [status.text, status.spoiler_text].join.length > MAX_CHARS status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if [status.text, status.spoiler_text].join.mb_chars.grapheme_length > MAX_CHARS
end end
end end