From 43a45edf30bfa63890d3af2047da1090826596b6 Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Fri, 19 Jun 2015 14:50:59 +0800 Subject: Bug 1161797: Use document.execCommand("copy") instead of flash where it is available --- extensions/BugModal/web/bug_modal.css | 12 +++++ extensions/BugModal/web/bug_modal.js | 82 +++++++++++++++++++++++------------ 2 files changed, 67 insertions(+), 27 deletions(-) (limited to 'extensions/BugModal/web') diff --git a/extensions/BugModal/web/bug_modal.css b/extensions/BugModal/web/bug_modal.css index 4bcb05a1a..ff804e4db 100644 --- a/extensions/BugModal/web/bug_modal.css +++ b/extensions/BugModal/web/bug_modal.css @@ -887,3 +887,15 @@ div.ui-tooltip { .search-nav-disabled { color: #777; } + +/* clipboard shenanigans */ + +#clip-container { + position: fixed; + top: 0px; + left: 0px; + width: 0px; + height: 0px; + z-index: 100; + opacity: 0; +} diff --git a/extensions/BugModal/web/bug_modal.js b/extensions/BugModal/web/bug_modal.js index 8ff4b2921..b1eb17b81 100644 --- a/extensions/BugModal/web/bug_modal.js +++ b/extensions/BugModal/web/bug_modal.js @@ -162,37 +162,65 @@ $(function() { }); // copy summary to clipboard + + function clipboardSummary() { + return 'Bug ' + BUGZILLA.bug_id + ' - ' + $('#field-value-short_desc').text(); + } + if ($('#copy-summary').length) { - // we don't know if flash is enabled without waiting for load to timeout - // remember the flash enabled state between pages - var hasFlash = true; - if (localStorage.getItem('hasFlash') === null) { - $('#copy-summary').hide(); + // probe for document.execCommand("copy") support + var hasExecCopy = false; + try { + // on page load nothing will be selected, so we don't smash the + // clipboard doing this + document.execCommand("copy"); + hasExecCopy = true; + } catch(ex) { + // ignore } - else { - hasFlash = localStorage.getItem('hasFlash'); + + if (hasExecCopy) { + $('#copy-summary') + .click(function() { + // execCommand("copy") only works on selected text + $('#clip-container').show(); + $('#clip').val(clipboardSummary()).select(); + document.execCommand("copy"); + $('#clip-container').hide(); + }); } - if (hasFlash) { - ZeroClipboard.config({ flashLoadTimeout: 5000 }); - var zero = new ZeroClipboard($('#copy-summary')); - zero.on({ - 'ready': function(event) { - $('#copy-summary').show(); - localStorage.setItem('hasFlash', true); - }, - 'error': function(event) { - console.log(event.message); - zero.destroy(); - $('#global-zeroclipboard-html-bridge').remove(); - $('#copy-summary').hide(); - localStorage.removeItem('hasFlash'); - }, - 'copy': function(event) { - var clipboard = event.clipboardData; - clipboard.setData('text/plain', 'Bug ' + BUGZILLA.bug_id + ' - ' + $('#field-value-short_desc').text()); - } - }); + else { + // we don't know if flash is enabled without waiting for load to timeout + // remember the flash enabled state between pages + var hasFlash = true; + if (localStorage.getItem('hasFlash') === null) { + $('#copy-summary').hide(); + } + else { + hasFlash = localStorage.getItem('hasFlash'); + } + if (hasFlash) { + ZeroClipboard.config({ flashLoadTimeout: 5000 }); + var zero = new ZeroClipboard($('#copy-summary')); + zero.on({ + 'ready': function(event) { + $('#copy-summary').show(); + localStorage.setItem('hasFlash', true); + }, + 'error': function(event) { + console.log(event.message); + zero.destroy(); + $('#global-zeroclipboard-html-bridge').remove(); + $('#copy-summary').hide(); + localStorage.removeItem('hasFlash'); + }, + 'copy': function(event) { + var clipboard = event.clipboardData; + clipboard.setData('text/plain', clipboardSummary()); + } + }); + } } } -- cgit v1.2.3-24-g4f1b