From bf6aa15512cc6d31be320204fbc3c115bfd11b1b Mon Sep 17 00:00:00 2001 From: Johann Pardanaud Date: Wed, 17 Feb 2016 18:35:16 +0100 Subject: [PATCH] Improve avatar cropping internals, based on suggestions made by @rspeicher on !2773 --- app/assets/javascripts/profile.js.coffee | 2 +- app/models/user.rb | 6 ++---- app/uploaders/avatar_uploader.rb | 9 +-------- app/views/profiles/show.html.haml | 4 ++-- 4 files changed, 6 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/profile.js.coffee b/app/assets/javascripts/profile.js.coffee index d13c6007819..69d590a7533 100644 --- a/app/assets/javascripts/profile.js.coffee +++ b/app/assets/javascripts/profile.js.coffee @@ -53,7 +53,7 @@ class @Profile $avatarInput.on "change", -> form = $(this).closest("form") filename = $(this).val().replace(/^.*[\\\/]/, '') - $filename.text(filename) + $filename.data('label', $filename.text()).text(filename) reader = new FileReader diff --git a/app/models/user.rb b/app/models/user.rb index 1b0c82f45c4..37285c2a9d4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -99,9 +99,7 @@ class User < ActiveRecord::Base attr_accessor :login # Virtual attributes to define avatar cropping - [:avatar_crop_x, :avatar_crop_y, :avatar_crop_size].each do |field| - attr_accessor field - end + attr_accessor :avatar_crop_x, :avatar_crop_y, :avatar_crop_size # # Relations @@ -169,7 +167,7 @@ class User < ActiveRecord::Base validates :avatar, file_size: { maximum: 200.kilobytes.to_i } [:avatar_crop_x, :avatar_crop_y, :avatar_crop_size].each do |field| - validates field, numericality: { only_integer: true }, allow_blank: true + validates field, numericality: { only_integer: true }, presence: true, if: ->(user) { user.avatar_changed? } end before_validation :generate_password, on: :create diff --git a/app/uploaders/avatar_uploader.rb b/app/uploaders/avatar_uploader.rb index 60ee80cf002..c8d9ab072e8 100644 --- a/app/uploaders/avatar_uploader.rb +++ b/app/uploaders/avatar_uploader.rb @@ -10,15 +10,8 @@ class AvatarUploader < CarrierWave::Uploader::Base process :cropper - def is_integer? string - true if Integer(string) rescue false - end - def cropper - is_compliant = model.kind_of?(User) && is_integer?(model.avatar_crop_size) - is_compliant = is_compliant && is_integer?(model.avatar_crop_x) && is_integer?(model.avatar_crop_y) - - if is_compliant + if model.kind_of?(User) && model.valid? manipulate! do |img| img.crop "#{model.avatar_crop_size}x#{model.avatar_crop_size}+#{model.avatar_crop_x}+#{model.avatar_crop_y}" end diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml index 6686c037b60..04f738c2759 100644 --- a/app/views/profiles/show.html.haml +++ b/app/views/profiles/show.html.haml @@ -88,7 +88,7 @@ %i.fa.fa-paperclip %span Choose File ...   - %span.file_name.js-avatar-filename{:'data-label' => 'File name...'} File name... + %span.file_name.js-avatar-filename File name... = f.file_field :avatar, class: "js-user-avatar-input hidden" = f.hidden_field :avatar_crop_x = f.hidden_field :avatar_crop_y @@ -107,7 +107,7 @@ .modal-dialog .modal-content .modal-header - %button.close{:type => "button", :'data-dismiss' => "modal"} + %button.close{type: 'button', data: {dismiss: 'modal'}} %span × %h4.modal-title