Sfoglia il codice sorgente

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
parent
commit
9cd0511ba9
4 ha cambiato i file con 46 aggiunte e 10 eliminazioni
  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 Vedi File

@@ -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 Vedi File

@@ -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 Vedi File

@@ -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 Vedi File

@@ -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


Loading…
Annulla
Salva