From fac4f50cf6bd923cbf6c5b7a9a69c39e5b2d9181 Mon Sep 17 00:00:00 2001 From: Tim Zallmann Date: Tue, 7 Aug 2018 06:04:33 +0000 Subject: [PATCH] Send resize parameters for avatars --- app/assets/javascripts/lazy_loader.js | 18 +- .../user_avatar/user_avatar_image.vue | 5 +- app/models/concerns/avatarable.rb | 7 +- app/views/admin/projects/_projects.html.haml | 2 +- .../layouts/nav/sidebar/_project.html.haml | 2 +- app/views/projects/_home_panel.html.haml | 2 +- app/views/projects/edit.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 2 +- .../user_uploads_avatar_to_profile_spec.rb | 2 +- spec/javascripts/boards/issue_card_spec.js | 154 ++++++++---------- .../pipelines/pipeline_url_spec.js | 26 +-- .../components/notes/placeholder_note_spec.js | 2 +- .../user_avatar/user_avatar_image_spec.js | 30 ++-- spec/models/concerns/avatarable_spec.rb | 4 + 14 files changed, 136 insertions(+), 122 deletions(-) diff --git a/app/assets/javascripts/lazy_loader.js b/app/assets/javascripts/lazy_loader.js index 9482d131344..9bba341e3a3 100644 --- a/app/assets/javascripts/lazy_loader.js +++ b/app/assets/javascripts/lazy_loader.js @@ -1,6 +1,7 @@ import _ from 'underscore'; -export const placeholderImage = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; +export const placeholderImage = + 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; const SCROLL_THRESHOLD = 300; export default class LazyLoader { @@ -48,7 +49,7 @@ export default class LazyLoader { const visHeight = scrollTop + window.innerHeight + SCROLL_THRESHOLD; // Loading Images which are in the current viewport or close to them - this.lazyImages = this.lazyImages.filter((selectedImage) => { + this.lazyImages = this.lazyImages.filter(selectedImage => { if (selectedImage.getAttribute('data-src')) { const imgBoundRect = selectedImage.getBoundingClientRect(); const imgTop = scrollTop + imgBoundRect.top; @@ -66,7 +67,18 @@ export default class LazyLoader { } static loadImage(img) { if (img.getAttribute('data-src')) { - img.setAttribute('src', img.getAttribute('data-src')); + let imgUrl = img.getAttribute('data-src'); + // Only adding width + height for avatars for now + if (imgUrl.indexOf('/avatar/') > -1 && imgUrl.indexOf('?') === -1) { + let targetWidth = null; + if (img.getAttribute('width')) { + targetWidth = img.getAttribute('width'); + } else { + targetWidth = img.width; + } + if (targetWidth) imgUrl += `?width=${targetWidth}`; + } + img.setAttribute('src', imgUrl); img.removeAttribute('data-src'); img.classList.remove('lazy'); img.classList.add('js-lazy-loaded'); diff --git a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue index 3a413c74410..7737b9f2697 100644 --- a/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue +++ b/app/assets/javascripts/vue_shared/components/user_avatar/user_avatar_image.vue @@ -1,5 +1,4 @@