Skip to content

Commit

Permalink
Set which setting values need to be included in cache key
Browse files Browse the repository at this point in the history
  • Loading branch information
oliverguenther committed Aug 8, 2018
1 parent f169b10 commit d06de10
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 6 deletions.
14 changes: 10 additions & 4 deletions frontend/module/globals/global-avatar-fallback.ts
Expand Up @@ -34,24 +34,30 @@ window.addEventListener('error', (evt) => {
const target = evt.target as HTMLElement;

// Replace if we hit a gravatar image
if (!(target.tagName === 'IMG' && target.classList.contains('avatar--gravatar-image'))) {
if (!(target.tagName === 'IMG' && target.classList.contains('avatar--fallback'))) {
return;
}

// We need to replace all gravatars with the same source since the error event
// is fired only once
const src = (target as HTMLImageElement).src;
const targets = document.querySelectorAll(`img.avatar--gravatar-image[src="${src}"]`)
const targets = document.querySelectorAll(`img.avatar--fallback[src="${src}"]`)

for (var i = 0, l = targets.length; i < l; i++) {
const target = targets[i] as HTMLElement;
const classes = target.dataset.avatarFallbackIcon || 'icon icon-user';
const parent = target.parentElement;

if (target.dataset.avatarFallbackRemove) {
parent && parent.removeChild(target);
return;
}

const classes = target.dataset.avatarFallbackIcon || 'icon icon-user avatar';

const replacement = document.createElement('i');
replacement.classList.add(...classes.split(/\s+/));
replacement.setAttribute('aria-hidden', 'true');

const parent = target.parentElement;
parent && parent.replaceChild(replacement, target);
}
}, true);
1 change: 1 addition & 0 deletions lib/open_project/avatars/engine.rb
Expand Up @@ -60,5 +60,6 @@ class Engine < ::Rails::Engine
end

patches %i[User]
patch_with_namespace :API, :V3, :Users, :UserRepresenter
end
end
2 changes: 1 addition & 1 deletion lib/open_project/avatars/patches/avatar_helper_patch.rb
Expand Up @@ -75,7 +75,7 @@ def build_gravatar_image_tag(user, options = {})

tag_options = merge_image_options(user, opts)
tag_options[:alt] = 'Gravatar'
tag_options[:class] << ' avatar--gravatar-image'
tag_options[:class] << ' avatar--gravatar-image avatar--fallback'
tag_options[:data] = { :'avatar-fallback-icon' => options.fetch(:fallbackIcon, 'icon icon-user') }

gravatar_image_tag(mail, tag_options)
Expand Down
16 changes: 16 additions & 0 deletions lib/open_project/avatars/patches/user_representer_patch.rb
@@ -0,0 +1,16 @@
module OpenProject::Avatars::Patches
module UserRepresenterPatch
def self.included(base)
base.singleton_class.prepend ClassMethods
end

module ClassMethods
##
# Dependencies required to cache users with avatars
# When the plugin is loaded, depend on its settings
def avatar_cache_dependencies
[Setting.plugin_openproject_avatars]
end
end
end
end
2 changes: 1 addition & 1 deletion spec/helpers/avatar_helper_spec.rb
Expand Up @@ -40,7 +40,7 @@ def gravatar_expected_image_tag(digest, options = {})
tag_options = options.reverse_merge(title: user.name,
alt: 'Gravatar',
:'data-avatar-fallback-icon' => "icon icon-user",
class: 'avatar avatar--gravatar-image').delete_if { |key, value| value.nil? || key == :ssl }
class: 'avatar avatar--gravatar-image avatar--fallback').delete_if { |key, value| value.nil? || key == :ssl }

image_tag gravatar_expected_url(digest, options), tag_options
end
Expand Down

0 comments on commit d06de10

Please sign in to comment.