Переглянути джерело

Bio length -> 413 characters

Increase the cybre.space profile bio text length limit to 413
characters. Also modifies the account settings page to automatically
resize the textbox to the size of the contained text, so that it's
easier to type longer bios.
cybrespace
kɜ:ʳ cybredragon 1 рік тому
джерело
коміт
9cd0511ba9
4 змінених файлів з 46 додано та 10 видалено
  1. +33
    -0
      app/javascript/packs/public.js
  2. +8
    -5
      app/models/account.rb
  3. +1
    -1
      app/views/settings/profiles/show.html.haml
  4. +4
    -4
      spec/models/account_spec.rb

+ 33
- 0
app/javascript/packs/public.js Переглянути файл

@@ -18,6 +18,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();
}
});
});

@@ -116,6 +122,17 @@ function main() {
document.head.appendChild(scrollbarWidthStyle);
scrollbarWidthStyle.sheet.insertRule(`body.with-modals--active { margin-right: ${scrollbarWidth}px; }`, 0);
}

[].forEach.call(document.querySelectorAll('[data-component="Card"]'), (content) => {
const props = JSON.parse(content.getAttribute('data-props'));
ReactDOM.render(<CardContainer locale={locale} {...props} />, content);
});

if (document.fonts && document.fonts.ready) {
document.fonts.ready.then(sizeBioText);
} else {
sizeBioText();
}
});

delegate(document, '.webapp-btn', 'click', ({ target, button }) => {
@@ -237,6 +254,22 @@ function main() {

input.readonly = oldReadOnly;
});

delegate(document, '#account_note', 'input', sizeBioText);

function sizeBioText() {
const noteCounter = document.querySelector('.note-counter');
const bioTextArea = document.querySelector('#account_note');

if (noteCounter) {
noteCounter.textContent = 413 - length(bioTextArea.value);
}

if (bioTextArea) {
bioTextArea.style.height = 'auto';
bioTextArea.style.height = (bioTextArea.scrollHeight+3) + 'px';
}
}
}

loadPolyfills().then(main).catch(error => {


+ 8
- 5
app/models/account.rb Переглянути файл

@@ -75,7 +75,8 @@ class Account < ApplicationRecord
validates_with UniqueUsernameValidator, if: -> { local? && will_save_change_to_username? }
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: 160 }, if: -> { local? && will_save_change_to_note? }
validates :note, note_length: { maximum: 413 }, if: -> { local? && will_save_change_to_note? }
validate :note_has_eight_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) }
@@ -299,10 +300,8 @@ class Account < ApplicationRecord
def save_with_optional_media!
save!
rescue ActiveRecord::RecordInvalid
self.avatar = nil
self.header = nil
self[:avatar_remote_url] = ''
self[:header_remote_url] = ''
self.avatar = nil if errors[:avatar].present?
self.header = nil if errors[:header].present?
save!
end

@@ -326,6 +325,10 @@ class Account < ApplicationRecord
shared_inbox_url.presence || inbox_url
end

def note_has_eight_newlines?
errors.add(:note, 'Bio can\'t have more then 8 newlines') unless note.count("\n") <= 8
end

class Field < ActiveModelSerializers::Model
attributes :name, :value, :verified_at, :account, :errors



+ 1
- 1
app/views/settings/profiles/show.html.haml Переглянути файл

@@ -7,7 +7,7 @@
.fields-row
.fields-row__column.fields-group.fields-row__column-6
= f.input :display_name, wrapper: :with_label, input_html: { maxlength: 30 }, hint: false
= f.input :note, wrapper: :with_label, input_html: { maxlength: 160 }, hint: false
= f.input :note, wrapper: :with_label, input_html: { maxlength: 413 }, hint: false

.fields-row
.fields-row__column.fields-row__column-6


+ 4
- 4
spec/models/account_spec.rb Переглянути файл

@@ -601,8 +601,8 @@ RSpec.describe Account, type: :model do
expect(account).to model_have_error_on_field(:display_name)
end

it 'is invalid if the note is longer than 160 characters' do
account = Fabricate.build(:account, note: Faker::Lorem.characters(161))
it 'is invalid if the note is longer than 413 characters' do
account = Fabricate.build(:account, note: Faker::Lorem.characters(414))
account.valid?
expect(account).to model_have_error_on_field(:note)
end
@@ -647,8 +647,8 @@ RSpec.describe Account, type: :model do
expect(account).not_to model_have_error_on_field(:display_name)
end

it 'is valid even if the note is longer than 160 characters' do
account = Fabricate.build(:account, domain: 'domain', note: Faker::Lorem.characters(161))
it 'is valid even if the note is longer than 413 characters' do
account = Fabricate.build(:account, domain: 'domain', note: Faker::Lorem.characters(414))
account.valid?
expect(account).not_to model_have_error_on_field(:note)
end


Завантаження…
Відмінити
Зберегти