about summary refs log tree commit diff
diff options
context:
space:
mode:
authorchr <chr@cybre.space>2018-11-12 20:30:47 -0800
committerchr <chr@cybre.space>2021-03-01 22:43:57 -0800
commit9a43dce739e4d42cab2f98ba4bf0ce13f8ba0d7f (patch)
treebc8718812926fbfb4e2bf2c52dee6ab7883ab4d1
parent633d175146d6acaf2cc4bfbfcfdee4c85ef20ed1 (diff)
Bio length -> 1024 characters
Increase the cybre.space profile bio text length limit to 1024
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.
-rw-r--r--app/javascript/packs/public.js28
-rw-r--r--app/models/account.rb8
2 files changed, 34 insertions, 2 deletions
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