diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 8c5c15b8f..3ff665f2a 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -20,6 +20,12 @@ window.addEventListener('message', e => { id: data.id, height: document.getElementsByTagName('html')[0].scrollHeight, }, '*'); + + if (document.fonts && document.fonts.ready) { + document.fonts.ready.then(sizeBioText); + } else { + sizeBioText(); + } }); }); @@ -161,6 +167,12 @@ function main() { const message = (statusEl.dataset.spoiler === 'expanded') ? (messages['status.show_less'] || 'Show less') : (messages['status.show_more'] || 'Show more'); spoilerLink.textContent = (new IntlMessageFormat(message, locale)).format(); }); + + if (document.fonts && document.fonts.ready) { + document.fonts.ready.then(sizeBioText); + } else { + sizeBioText(); + } }); delegate(document, '.webapp-btn', 'click', ({ target, button }) => { @@ -291,6 +303,22 @@ function main() { } }); }); + + delegate(document, '#account_note', 'input', sizeBioText); + + function s500 izeBioText() { + const noteCounter = document.querySelector('.note-counter'); + const bioTextArea = document.querySelector('#account_note'); + + if (noteCounter) { + noteCounter.textContent = 1024 - length(bioTextArea.value); + } + + if (bioTextArea) { + bioTextArea.style.height = 'auto'; + bioTextArea.style.height = (bioTextArea.scrollHeight+3) + 'px'; + } + } } loadPolyfills() diff --git a/app/models/account.rb b/app/models/account.rb index e6cf03fa8..f0cd7c2a5 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -88,7 +88,8 @@ class Account < ApplicationRecord validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? } validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? } - validates :note, note_length: { maximum: 500 }, if: -> { local? && will_save_change_to_note? } + validates :note, note_length: { maximum: 1024 }, if: -> { local? && will_save_change_to_note? } + validate :note_has_ten_newlines?, if: -> { local? && will_save_change_to_note? } validates :fields, length: { maximum: 4 }, if: -> { local? && will_save_change_to_fields? } scope :remote, -> { where.not(domain: nil) } @@ -346,7 +347,6 @@ class Account < ApplicationRecord rescue ActiveRecord::RecordInvalid self.avatar = nil self.header = nil - save! end @@ -382,6 +382,10 @@ class Account < ApplicationRecord return 'local' if local? @synchronization_uri_prefix ||= uri[/http(s?):\/\/[^\/]+\//] + end + + def note_has_ten_newlines? + errors.add(:note, 'Bio can\'t have more then 10 newlines') unless note.count("\n") <= 10 end class Field < ActiveModelSerializers::Model