From 94ef2050cf20744dee884b98ecd9484a457752ce Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" <lbennett@gitlab.com> Date: Thu, 18 May 2017 16:45:27 +0100 Subject: [PATCH 1/3] Use anchor tag instead of button for clipboard with tooltip --- app/helpers/button_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/button_helper.rb b/app/helpers/button_helper.rb index 206d0753f08..a4a5fcf23ec 100644 --- a/app/helpers/button_helper.rb +++ b/app/helpers/button_helper.rb @@ -37,7 +37,7 @@ module ButtonHelper data = { toggle: 'tooltip', placement: 'bottom', container: 'body' }.merge(data) - content_tag :button, + content_tag :a, icon('clipboard', 'aria-hidden': 'true'), class: "btn #{css_class}", data: data, -- GitLab From be411be7980003430973051caa7a63d3da1884ea Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" <lbennett@gitlab.com> Date: Thu, 18 May 2017 17:47:09 +0100 Subject: [PATCH 2/3] Correct fix by reverting to anchor and bluring the disabled button on click --- app/assets/javascripts/blob/viewer/index.js | 4 ++-- app/helpers/button_helper.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/blob/viewer/index.js b/app/assets/javascripts/blob/viewer/index.js index 54b85e47358..d7c62889dde 100644 --- a/app/assets/javascripts/blob/viewer/index.js +++ b/app/assets/javascripts/blob/viewer/index.js @@ -50,9 +50,9 @@ export default class BlobViewer { if (this.copySourceBtn) { this.copySourceBtn.addEventListener('click', () => { - if (this.copySourceBtn.classList.contains('disabled')) return; + if (this.copySourceBtn.classList.contains('disabled')) return this.copySourceBtn.blur(); - this.switchToViewer('simple'); + return this.switchToViewer('simple'); }); } } diff --git a/app/helpers/button_helper.rb b/app/helpers/button_helper.rb index a4a5fcf23ec..206d0753f08 100644 --- a/app/helpers/button_helper.rb +++ b/app/helpers/button_helper.rb @@ -37,7 +37,7 @@ module ButtonHelper data = { toggle: 'tooltip', placement: 'bottom', container: 'body' }.merge(data) - content_tag :a, + content_tag :button, icon('clipboard', 'aria-hidden': 'true'), class: "btn #{css_class}", data: data, -- GitLab From 255aed3a317c4c70ec74e1471eb50721435efa24 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" <lbennett@gitlab.com> Date: Thu, 18 May 2017 18:07:08 +0100 Subject: [PATCH 3/3] Added spec for bluring disabled copy button --- spec/javascripts/blob/viewer/index_spec.js | 31 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/spec/javascripts/blob/viewer/index_spec.js b/spec/javascripts/blob/viewer/index_spec.js index 13f122b68b2..af04e7c1e72 100644 --- a/spec/javascripts/blob/viewer/index_spec.js +++ b/spec/javascripts/blob/viewer/index_spec.js @@ -83,25 +83,48 @@ describe('Blob viewer', () => { }); describe('copy blob button', () => { + let copyButton; + + beforeEach(() => { + copyButton = document.querySelector('.js-copy-blob-source-btn'); + }); + it('disabled on load', () => { expect( - document.querySelector('.js-copy-blob-source-btn').classList.contains('disabled'), + copyButton.classList.contains('disabled'), ).toBeTruthy(); }); it('has tooltip when disabled', () => { expect( - document.querySelector('.js-copy-blob-source-btn').getAttribute('data-original-title'), + copyButton.getAttribute('data-original-title'), ).toBe('Switch to the source to copy it to the clipboard'); }); + it('is blurred when clicked and disabled', () => { + spyOn(copyButton, 'blur'); + + copyButton.click(); + + expect(copyButton.blur).toHaveBeenCalled(); + }); + + it('is not blurred when clicked and not disabled', () => { + spyOn(copyButton, 'blur'); + + copyButton.classList.remove('disabled'); + copyButton.click(); + + expect(copyButton.blur).not.toHaveBeenCalled(); + }); + it('enables after switching to simple view', (done) => { document.querySelector('.js-blob-viewer-switch-btn[data-viewer="simple"]').click(); setTimeout(() => { expect($.ajax).toHaveBeenCalled(); expect( - document.querySelector('.js-copy-blob-source-btn').classList.contains('disabled'), + copyButton.classList.contains('disabled'), ).toBeFalsy(); done(); @@ -115,7 +138,7 @@ describe('Blob viewer', () => { expect($.ajax).toHaveBeenCalled(); expect( - document.querySelector('.js-copy-blob-source-btn').getAttribute('data-original-title'), + copyButton.getAttribute('data-original-title'), ).toBe('Copy source to clipboard'); done(); -- GitLab