From 9cd87f6fa9be629018f11420ed7e70d9ac4e5804 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 14 Sep 2017 15:29:26 +0100 Subject: Add lazy_load option to participant avatar helper --- app/helpers/projects_helper.rb | 7 +++++-- app/views/shared/issuable/_participants.html.haml | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 21fb17e06d6..4c0cce54527 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -21,11 +21,14 @@ module ProjectsHelper classes = %W[avatar avatar-inline s#{opts[:size]}] classes << opts[:avatar_class] if opts[:avatar_class] - image_tag(avatar_icon(author, opts[:size]), width: opts[:size], class: classes, alt: '') + avatar = avatar_icon(author, opts[:size]) + src = opts[:lazy_load] ? nil : avatar + + image_tag(src, width: opts[:size], class: classes, alt: '', "data-src" => avatar) end def link_to_member(project, author, opts = {}, &block) - default_opts = { avatar: true, name: true, size: 16, author_class: 'author', title: ":name", tooltip: false } + default_opts = { avatar: true, name: true, size: 16, author_class: 'author', title: ":name", tooltip: false, lazy_load: false } opts = default_opts.merge(opts) return "(deleted)" unless author diff --git a/app/views/shared/issuable/_participants.html.haml b/app/views/shared/issuable/_participants.html.haml index 8a71819aa8e..d2b62557e03 100644 --- a/app/views/shared/issuable/_participants.html.haml +++ b/app/views/shared/issuable/_participants.html.haml @@ -11,7 +11,7 @@ .hide-collapsed.participants-list - participants.each do |participant| .participants-author.js-participants-author - = link_to_member(@project, participant, name: false, size: 24) + = link_to_member(@project, participant, name: false, size: 24, lazy_load: true) - if participants_extra > 0 .hide-collapsed.participants-more %a.js-participants-more{ href: "#", data: { original_text: "+ #{participants_size - 7} more", less_text: "- show less" } } -- cgit v1.2.1 From 94749a45b792c18c6dbf4a59e30c145d1aa825d9 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 14 Sep 2017 15:30:00 +0100 Subject: Trigger load of lazy images when opening sidebar, or clicking 'more participants' --- app/assets/javascripts/issuable_context.js | 5 ++++- app/assets/javascripts/right_sidebar.js | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/issuable_context.js b/app/assets/javascripts/issuable_context.js index 70c364e51fe..0a8bab6ee66 100644 --- a/app/assets/javascripts/issuable_context.js +++ b/app/assets/javascripts/issuable_context.js @@ -70,7 +70,10 @@ const PARTICIPANTS_ROW_COUNT = 7; } else { $(this).text(originalText); } - return $(".js-participants-hidden").toggle(); + + $(".js-participants-hidden").toggle(); + + gl.lazyLoader.loadCheck(); }; return IssuableContext; diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js index a4eae135403..c06b8b6efe6 100644 --- a/app/assets/javascripts/right_sidebar.js +++ b/app/assets/javascripts/right_sidebar.js @@ -45,8 +45,10 @@ import Cookies from 'js-cookie'; $('.page-with-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); } if (!triggered) { - return Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed')); + Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed')); } + console.log('loadCheck') + gl.lazyLoader.loadCheck(); }); return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo); }; -- cgit v1.2.1 From ae36ee6a149e532d594ef89195e8aebd257e0c66 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Mon, 18 Sep 2017 12:36:27 +0100 Subject: Conditionally call loadCheck if lazyLoader is present --- app/assets/javascripts/issuable_context.js | 2 +- app/assets/javascripts/right_sidebar.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/issuable_context.js b/app/assets/javascripts/issuable_context.js index 0a8bab6ee66..9a9382a8d54 100644 --- a/app/assets/javascripts/issuable_context.js +++ b/app/assets/javascripts/issuable_context.js @@ -73,7 +73,7 @@ const PARTICIPANTS_ROW_COUNT = 7; $(".js-participants-hidden").toggle(); - gl.lazyLoader.loadCheck(); + if (gl.lazyLoader) gl.lazyLoader.loadCheck(); }; return IssuableContext; diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js index c06b8b6efe6..7a987fe336b 100644 --- a/app/assets/javascripts/right_sidebar.js +++ b/app/assets/javascripts/right_sidebar.js @@ -47,8 +47,7 @@ import Cookies from 'js-cookie'; if (!triggered) { Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed')); } - console.log('loadCheck') - gl.lazyLoader.loadCheck(); + if (gl.lazyLoader) gl.lazyLoader.loadCheck(); }); return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo); }; -- cgit v1.2.1 From 0269e8c5ef8966b84399376ae57567072f594070 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Tue, 19 Sep 2017 11:25:13 +0100 Subject: Add participants spec --- .../shared/issuable/_participants.html.haml.rb | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 spec/views/shared/issuable/_participants.html.haml.rb diff --git a/spec/views/shared/issuable/_participants.html.haml.rb b/spec/views/shared/issuable/_participants.html.haml.rb new file mode 100644 index 00000000000..6bc95846f63 --- /dev/null +++ b/spec/views/shared/issuable/_participants.html.haml.rb @@ -0,0 +1,41 @@ +require 'spec_helper' +require 'nokogiri' + +def expect_lazy_load_image(author) + avatar = author.find('img') + + expect(avatar[:src]).to eql?('data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==') + expect(avatar[:"data-src"]).to exist +end + +describe 'shared/issuable/_participants.html.haml' do + let(:project) { create(:project) } + let(:participants) { create_list(:user, 10) } + + before do + allow(view).to receive_messages(project: project, + participants: participants) + end + + it 'displays' do + render 'shared/issuable/participants' + + html = Nokogiri::HTML(rendered) + + authors = html.css('.participants-author') + p authors + p authors.size + visible_authors = authors[0..6] + hidden_authors = authors[7..-1] + + visible_authors.each do |author| + expect(author).not_to have_selector('js-participants-hidden') + expect_lazy_load_image(author) + end + + hidden_authors.each do |author| + expect(author).to have_selector('js-participants-hidden') + expect_lazy_load_image(author) + end + end +end -- cgit v1.2.1 From 38c7229156aae6d5635a1a1ac5851563d2a8989d Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 20 Sep 2017 17:18:10 +0100 Subject: Update projects_helper_spec --- spec/helpers/projects_helper_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 7ded95d01af..641971485de 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -200,13 +200,13 @@ describe ProjectsHelper do end it 'returns image tag for member avatar' do - expect(helper).to receive(:image_tag).with(expected, { width: 16, class: ["avatar", "avatar-inline", "s16"], alt: "" }) + expect(helper).to receive(:image_tag).with(expected, { width: 16, class: ["avatar", "avatar-inline", "s16"], alt: "", "data-src" => anything }) helper.link_to_member_avatar(user) end it 'returns image tag with avatar class' do - expect(helper).to receive(:image_tag).with(expected, { width: 16, class: ["avatar", "avatar-inline", "s16", "any-avatar-class"], alt: "" }) + expect(helper).to receive(:image_tag).with(expected, { width: 16, class: ["avatar", "avatar-inline", "s16", "any-avatar-class"], alt: "", "data-src" => anything }) helper.link_to_member_avatar(user, avatar_class: "any-avatar-class") end -- cgit v1.2.1 From 5629d468782d1c414d33c8221467c06b13cb9b66 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 20 Sep 2017 17:18:23 +0100 Subject: Finish _participants view spec --- .../shared/issuable/_participants.html.haml.rb | 29 ++++++---------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/spec/views/shared/issuable/_participants.html.haml.rb b/spec/views/shared/issuable/_participants.html.haml.rb index 6bc95846f63..0a123e83e2e 100644 --- a/spec/views/shared/issuable/_participants.html.haml.rb +++ b/spec/views/shared/issuable/_participants.html.haml.rb @@ -1,41 +1,26 @@ require 'spec_helper' require 'nokogiri' -def expect_lazy_load_image(author) - avatar = author.find('img') - - expect(avatar[:src]).to eql?('data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==') - expect(avatar[:"data-src"]).to exist -end - describe 'shared/issuable/_participants.html.haml' do let(:project) { create(:project) } - let(:participants) { create_list(:user, 10) } + let(:participants) { create_list(:user, 100) } before do allow(view).to receive_messages(project: project, participants: participants) end - it 'displays' do + it 'renders lazy loaded avatars' do render 'shared/issuable/participants' html = Nokogiri::HTML(rendered) - authors = html.css('.participants-author') - p authors - p authors.size - visible_authors = authors[0..6] - hidden_authors = authors[7..-1] - - visible_authors.each do |author| - expect(author).not_to have_selector('js-participants-hidden') - expect_lazy_load_image(author) - end + avatars = html.css('.participants-author img') - hidden_authors.each do |author| - expect(author).to have_selector('js-participants-hidden') - expect_lazy_load_image(author) + avatars.each do |avatar| + expect(avatar[:class]).to include('lazy') + expect(avatar[:src]).to eql('data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==') + expect(avatar[:"data-src"]).to match('http://www.gravatar.com/avatar/') end end end -- cgit v1.2.1 From 06903810807db76505ab13b8c8de8e2fd1b16968 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Fri, 22 Sep 2017 09:11:40 +0100 Subject: Add issauble_context_spec --- spec/javascripts/issuable_context_spec.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 spec/javascripts/issuable_context_spec.js diff --git a/spec/javascripts/issuable_context_spec.js b/spec/javascripts/issuable_context_spec.js new file mode 100644 index 00000000000..469a7e0633f --- /dev/null +++ b/spec/javascripts/issuable_context_spec.js @@ -0,0 +1,31 @@ +import '~/issuable_context'; + +fdescribe('IssuableContext', () => { + describe('toggleHiddenParticipants', () => { + beforeEach(() => { + + }); + + fit('calls loadCheck if lazyLoader is set', () => { + gl.lazyLoader = jasmine.createSpyObj('lazyLoader', ['loadCheck']); + const event = {}; + + IssuableContext.prototype.toggleHiddenParticipants(event); + + expect(gl.lazyLoader.loadCheck).toHaveBeenCalled(); + }); + + it('does not call loadCheck if lazyLoader is not set', () => { + gl.lazyLoader = undefined; + const event = {}; + + IssuableContext.prototype.toggleHiddenParticipants(event); + + expect(gl.lazyLoader.loadCheck).not.toHaveBeenCalled(); + }); + + afterEach(() => { + gl.lazyLoader = undefined; + }); + }); +}); -- cgit v1.2.1 From baa08b56570643c04fa82958509e41ccbe87219f Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Mon, 25 Sep 2017 11:48:16 +0100 Subject: Finish issuable_context_spec --- spec/javascripts/issuable_context_spec.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/spec/javascripts/issuable_context_spec.js b/spec/javascripts/issuable_context_spec.js index 469a7e0633f..d913ba53d45 100644 --- a/spec/javascripts/issuable_context_spec.js +++ b/spec/javascripts/issuable_context_spec.js @@ -1,27 +1,24 @@ +/* global IssuableContext */ import '~/issuable_context'; -fdescribe('IssuableContext', () => { +describe('IssuableContext', () => { describe('toggleHiddenParticipants', () => { - beforeEach(() => { + const event = jasmine.createSpyObj('event', ['preventDefault']); - }); - - fit('calls loadCheck if lazyLoader is set', () => { + it('calls loadCheck if lazyLoader is set', () => { gl.lazyLoader = jasmine.createSpyObj('lazyLoader', ['loadCheck']); - const event = {}; IssuableContext.prototype.toggleHiddenParticipants(event); expect(gl.lazyLoader.loadCheck).toHaveBeenCalled(); }); - it('does not call loadCheck if lazyLoader is not set', () => { + it('does not throw if lazyLoader is not set', () => { gl.lazyLoader = undefined; - const event = {}; - IssuableContext.prototype.toggleHiddenParticipants(event); + const toggle = IssuableContext.prototype.toggleHiddenParticipants.bind(null, event); - expect(gl.lazyLoader.loadCheck).not.toHaveBeenCalled(); + expect(toggle).not.toThrow(); }); afterEach(() => { -- cgit v1.2.1 From 68269d7a40220343cc551fa05ab4def288ee4434 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 28 Sep 2017 13:12:38 +0100 Subject: issuable_context_spec review changes --- spec/javascripts/issuable_context_spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/javascripts/issuable_context_spec.js b/spec/javascripts/issuable_context_spec.js index d913ba53d45..d1e0eb64e58 100644 --- a/spec/javascripts/issuable_context_spec.js +++ b/spec/javascripts/issuable_context_spec.js @@ -5,6 +5,10 @@ describe('IssuableContext', () => { describe('toggleHiddenParticipants', () => { const event = jasmine.createSpyObj('event', ['preventDefault']); + afterEach(() => { + gl.lazyLoader = undefined; + }); + it('calls loadCheck if lazyLoader is set', () => { gl.lazyLoader = jasmine.createSpyObj('lazyLoader', ['loadCheck']); @@ -13,16 +17,12 @@ describe('IssuableContext', () => { expect(gl.lazyLoader.loadCheck).toHaveBeenCalled(); }); - it('does not throw if lazyLoader is not set', () => { + it('does not throw if lazyLoader is not defined', () => { gl.lazyLoader = undefined; const toggle = IssuableContext.prototype.toggleHiddenParticipants.bind(null, event); expect(toggle).not.toThrow(); }); - - afterEach(() => { - gl.lazyLoader = undefined; - }); }); }); -- cgit v1.2.1 From ba76ddf28140021c9d06b1389f215bc5fccf7cd2 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 28 Sep 2017 13:27:52 +0100 Subject: Only trigger loadCheck on open toggle, not close. Update specs and add right_sidebar_spec test for additions --- app/assets/javascripts/issuable_context.js | 4 +- app/assets/javascripts/right_sidebar.js | 43 ++++++----- spec/javascripts/issuable_context_spec.js | 6 ++ spec/javascripts/right_sidebar_spec.js | 116 ++++++++++++++++++----------- 4 files changed, 104 insertions(+), 65 deletions(-) diff --git a/app/assets/javascripts/issuable_context.js b/app/assets/javascripts/issuable_context.js index 9a9382a8d54..1d305f1eb2f 100644 --- a/app/assets/javascripts/issuable_context.js +++ b/app/assets/javascripts/issuable_context.js @@ -67,13 +67,13 @@ const PARTICIPANTS_ROW_COUNT = 7; originalText = $(this).data("original-text"); if (currentText === originalText) { $(this).text(lessText); + + if (gl.lazyLoader) gl.lazyLoader.loadCheck(); } else { $(this).text(originalText); } $(".js-participants-hidden").toggle(); - - if (gl.lazyLoader) gl.lazyLoader.loadCheck(); }; return IssuableContext; diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js index 7a987fe336b..a41548bd694 100644 --- a/app/assets/javascripts/right_sidebar.js +++ b/app/assets/javascripts/right_sidebar.js @@ -29,29 +29,32 @@ import Cookies from 'js-cookie'; $('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading); $('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded); - $document.on('click', '.js-sidebar-toggle', function(e, triggered) { - var $allGutterToggleIcons, $this, $thisIcon; - e.preventDefault(); - $this = $(this); - $thisIcon = $this.find('i'); - $allGutterToggleIcons = $('.js-sidebar-toggle i'); - if ($thisIcon.hasClass('fa-angle-double-right')) { - $allGutterToggleIcons.removeClass('fa-angle-double-right').addClass('fa-angle-double-left'); - $('aside.right-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); - $('.page-with-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); - } else { - $allGutterToggleIcons.removeClass('fa-angle-double-left').addClass('fa-angle-double-right'); - $('aside.right-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); - $('.page-with-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); - } - if (!triggered) { - Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed')); - } - if (gl.lazyLoader) gl.lazyLoader.loadCheck(); - }); + $document.on('click', '.js-sidebar-toggle', this.sidebarToggleClicked); return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo); }; + Sidebar.prototype.sidebarToggleClicked = function (e, triggered) { + var $allGutterToggleIcons, $this, $thisIcon; + e.preventDefault(); + $this = $(this); + $thisIcon = $this.find('i'); + $allGutterToggleIcons = $('.js-sidebar-toggle i'); + if ($thisIcon.hasClass('fa-angle-double-right')) { + $allGutterToggleIcons.removeClass('fa-angle-double-right').addClass('fa-angle-double-left'); + $('aside.right-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); + $('.page-with-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); + } else { + $allGutterToggleIcons.removeClass('fa-angle-double-left').addClass('fa-angle-double-right'); + $('aside.right-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); + $('.page-with-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); + + if (gl.lazyLoader) gl.lazyLoader.loadCheck(); + } + if (!triggered) { + Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed')); + } + }; + Sidebar.prototype.toggleTodo = function(e) { var $btnText, $this, $todoLoading, ajaxType, url; $this = $(e.currentTarget); diff --git a/spec/javascripts/issuable_context_spec.js b/spec/javascripts/issuable_context_spec.js index d1e0eb64e58..bcb2b7b24a0 100644 --- a/spec/javascripts/issuable_context_spec.js +++ b/spec/javascripts/issuable_context_spec.js @@ -1,10 +1,16 @@ /* global IssuableContext */ import '~/issuable_context'; +import $ from 'jquery'; describe('IssuableContext', () => { describe('toggleHiddenParticipants', () => { const event = jasmine.createSpyObj('event', ['preventDefault']); + beforeEach(() => { + spyOn($.fn, 'data').and.returnValue('data'); + spyOn($.fn, 'text').and.returnValue('data'); + }); + afterEach(() => { gl.lazyLoader = undefined; }); diff --git a/spec/javascripts/right_sidebar_spec.js b/spec/javascripts/right_sidebar_spec.js index f2072a6f350..5505f983d71 100644 --- a/spec/javascripts/right_sidebar_spec.js +++ b/spec/javascripts/right_sidebar_spec.js @@ -32,56 +32,86 @@ import '~/right_sidebar'; }; describe('RightSidebar', function() { - var fixtureName = 'issues/open-issue.html.raw'; - preloadFixtures(fixtureName); - loadJSONFixtures('todos/todos.json'); - - beforeEach(function() { - loadFixtures(fixtureName); - this.sidebar = new Sidebar; - $aside = $('.right-sidebar'); - $page = $('.page-with-sidebar'); - $icon = $aside.find('i'); - $toggle = $aside.find('.js-sidebar-toggle'); - return $labelsIcon = $aside.find('.sidebar-collapsed-icon'); - }); - it('should expand/collapse the sidebar when arrow is clicked', function() { - assertSidebarState('expanded'); - $toggle.click(); - assertSidebarState('collapsed'); - $toggle.click(); - assertSidebarState('expanded'); - }); - it('should float over the page and when sidebar icons clicked', function() { - $labelsIcon.click(); - return assertSidebarState('expanded'); - }); - it('should collapse when the icon arrow clicked while it is floating on page', function() { - $labelsIcon.click(); - assertSidebarState('expanded'); - $toggle.click(); - return assertSidebarState('collapsed'); + describe('fixture tests', () => { + var fixtureName = 'issues/open-issue.html.raw'; + preloadFixtures(fixtureName); + loadJSONFixtures('todos/todos.json'); + + beforeEach(function() { + loadFixtures(fixtureName); + this.sidebar = new Sidebar; + $aside = $('.right-sidebar'); + $page = $('.page-with-sidebar'); + $icon = $aside.find('i'); + $toggle = $aside.find('.js-sidebar-toggle'); + return $labelsIcon = $aside.find('.sidebar-collapsed-icon'); + }); + it('should expand/collapse the sidebar when arrow is clicked', function() { + assertSidebarState('expanded'); + $toggle.click(); + assertSidebarState('collapsed'); + $toggle.click(); + assertSidebarState('expanded'); + }); + it('should float over the page and when sidebar icons clicked', function() { + $labelsIcon.click(); + return assertSidebarState('expanded'); + }); + it('should collapse when the icon arrow clicked while it is floating on page', function() { + $labelsIcon.click(); + assertSidebarState('expanded'); + $toggle.click(); + return assertSidebarState('collapsed'); + }); + + it('should broadcast todo:toggle event when add todo clicked', function() { + var todos = getJSONFixture('todos/todos.json'); + spyOn(jQuery, 'ajax').and.callFake(function() { + var d = $.Deferred(); + var response = todos; + d.resolve(response); + return d.promise(); + }); + + var todoToggleSpy = spyOnEvent(document, 'todo:toggle'); + + $('.issuable-sidebar-header .js-issuable-todo').click(); + + expect(todoToggleSpy.calls.count()).toEqual(1); + }); + + it('should not hide collapsed icons', () => { + [].forEach.call(document.querySelectorAll('.sidebar-collapsed-icon'), (el) => { + expect(el.querySelector('.fa, svg').classList.contains('hidden')).toBeFalsy(); + }); + }); }); - it('should broadcast todo:toggle event when add todo clicked', function() { - var todos = getJSONFixture('todos/todos.json'); - spyOn(jQuery, 'ajax').and.callFake(function() { - var d = $.Deferred(); - var response = todos; - d.resolve(response); - return d.promise(); + describe('sidebarToggleClicked', () => { + const event = jasmine.createSpyObj('event', ['preventDefault']); + + beforeEach(() => { + spyOn($.fn, 'hasClass').and.returnValue(false); + }); + + afterEach(() => { + gl.lazyLoader = undefined; }); - var todoToggleSpy = spyOnEvent(document, 'todo:toggle'); + it('calls loadCheck if lazyLoader is set', () => { + gl.lazyLoader = jasmine.createSpyObj('lazyLoader', ['loadCheck']); - $('.issuable-sidebar-header .js-issuable-todo').click(); + Sidebar.prototype.sidebarToggleClicked(event); - expect(todoToggleSpy.calls.count()).toEqual(1); - }); + expect(gl.lazyLoader.loadCheck).toHaveBeenCalled(); + }); + + it('does not throw if lazyLoader is not defined', () => { + gl.lazyLoader = undefined; + + const toggle = Sidebar.prototype.sidebarToggleClicked.bind(null, event); - it('should not hide collapsed icons', () => { - [].forEach.call(document.querySelectorAll('.sidebar-collapsed-icon'), (el) => { - expect(el.querySelector('.fa, svg').classList.contains('hidden')).toBeFalsy(); + expect(toggle).not.toThrow(); }); }); }); -- cgit v1.2.1 From 92410a1401f8684ad5567fad085e4d389250b5f8 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Thu, 28 Sep 2017 13:34:28 +0100 Subject: Added changelog --- ...66-issue-sidebar-don-t-render-participants-in-collapsed-state.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelogs/unreleased/34366-issue-sidebar-don-t-render-participants-in-collapsed-state.yml diff --git a/changelogs/unreleased/34366-issue-sidebar-don-t-render-participants-in-collapsed-state.yml b/changelogs/unreleased/34366-issue-sidebar-don-t-render-participants-in-collapsed-state.yml new file mode 100644 index 00000000000..d34e685b5f5 --- /dev/null +++ b/changelogs/unreleased/34366-issue-sidebar-don-t-render-participants-in-collapsed-state.yml @@ -0,0 +1,5 @@ +--- +title: Load sidebar participants avatars only when visible +merge_request: 14270 +author: +type: other -- cgit v1.2.1 From feae8b2e44ee66c572efeab2575234de292ac01e Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Sun, 1 Oct 2017 16:14:12 +0100 Subject: use LazyImageTagHelper.placeholder_image for blank src base64 image --- spec/views/shared/issuable/_participants.html.haml.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/views/shared/issuable/_participants.html.haml.rb b/spec/views/shared/issuable/_participants.html.haml.rb index 0a123e83e2e..51059d4c0d7 100644 --- a/spec/views/shared/issuable/_participants.html.haml.rb +++ b/spec/views/shared/issuable/_participants.html.haml.rb @@ -19,7 +19,7 @@ describe 'shared/issuable/_participants.html.haml' do avatars.each do |avatar| expect(avatar[:class]).to include('lazy') - expect(avatar[:src]).to eql('data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==') + expect(avatar[:src]).to eql(LazyImageTagHelper.placeholder_image) expect(avatar[:"data-src"]).to match('http://www.gravatar.com/avatar/') end end -- cgit v1.2.1