diff --git a/css/legacy/includes/_styles.scss b/css/legacy/includes/_styles.scss index 2a1292ad9f9..dd54aee201f 100644 --- a/css/legacy/includes/_styles.scss +++ b/css/legacy/includes/_styles.scss @@ -1134,6 +1134,24 @@ } } + .input-group.copy_to_clipboard_wrapper { + &:after { + content: none; + } + + i.copy_to_clipboard_wrapper { + font-style: normal; + + &:after { + left: 0; + } + + &:before { + content: none; + } + } + } + /* ################--------------- Log history filters ---------------#################### */ tr.log_history_filter_row { diff --git a/js/clipboard.js b/js/clipboard.js index 503e17eb741..e7995a9ea2a 100644 --- a/js/clipboard.js +++ b/js/clipboard.js @@ -35,28 +35,56 @@ $(function() { // set a function to track drag hover event $(document).on("click", ".copy_to_clipboard_wrapper", function(event) { + var succeed; // find the good element var target = $(event.target); - if (target.attr('class') == 'copy_to_clipboard_wrapper') { - target = target.find('*'); + + // click on other button + if (target.hasClass('input-group-text') && !target.hasClass('copy_to_clipboard_wrapper')) { + return false; } - // copy text - target.select(); - var succeed; - try { - succeed = document.execCommand("copy"); - } catch (e) { - succeed = false; + // click on 'copy button' + if (target.hasClass('input-group-text') || target.is('input')) { + target = target.parent('.copy_to_clipboard_wrapper').find('input'); + + // copy text + succeed = copyTextToClipboard(target.val()); + } else { + if (target.attr('class') == 'copy_to_clipboard_wrapper') { + target = target.find('*'); + } + + // copy text + target.select(); + try { + succeed = document.execCommand("copy"); + } catch (e) { + succeed = false; + } + target.blur(); + } + + // get copy icon + var icon; + if (target.attr('class') == 'copy_to_clipboard_wrapper') { + icon = target; + } else { + icon = target.parent('.copy_to_clipboard_wrapper').find('i.copy_to_clipboard_wrapper'); + if (!icon.length) { + icon = target.parent('.copy_to_clipboard_wrapper'); + } } - target.blur(); // indicate success if (succeed) { $('.copy_to_clipboard_wrapper.copied').removeClass('copied'); - target.parent('.copy_to_clipboard_wrapper').addClass('copied'); + icon.addClass('copied'); + setTimeout(function(){ + icon.removeClass('copied'); + }, 1000); } else { - target.parent('.copy_to_clipboard_wrapper').addClass('copyfail'); + icon.addClass('copyfail'); } }); }); @@ -78,8 +106,15 @@ function copyTextToClipboard (text) { // Select and copy text to clipboard textarea.select(); - document.execCommand('copy'); + var succeed; + try { + succeed = document.execCommand('copy'); + } catch (e) { + succeed = false; + } // Remove textarea document.body.removeChild(textarea); + + return succeed; } diff --git a/src/Dashboard/Grid.php b/src/Dashboard/Grid.php index f5ebc155dfb..6b3565b0404 100644 --- a/src/Dashboard/Grid.php +++ b/src/Dashboard/Grid.php @@ -800,18 +800,20 @@ public function displayEmbedForm() echo "
"; echo "
"; echo __("Direct link"); - echo "
"; + echo "
"; echo Html::input('direct_link', [ 'value' => $embed_url, ]); + echo ""; echo "

"; $iframe = ""; echo __("Iframe"); - echo "
"; + echo "
"; echo Html::input('iframe_code', [ 'value' => $iframe, ]); + echo ""; echo "
"; echo "

"; diff --git a/src/User.php b/src/User.php index e2ed37fd448..902a321ee0f 100644 --- a/src/User.php +++ b/src/User.php @@ -3044,11 +3044,12 @@ public function showForm($ID, array $options = []) echo __("API token"); echo ""; if (!empty($this->fields["api_token"])) { - echo "
"; + echo "
"; echo Html::input('_api_token', [ 'value' => $this->fields["api_token"], 'style' => 'width:90%' ]); + echo ""; echo "
"; echo "(" . sprintf( __('generated on %s'), @@ -3438,11 +3439,12 @@ public function showMyForm($target, $ID) echo __("API token"); echo ""; if (!empty($this->fields["api_token"])) { - echo "
"; + echo "
"; echo Html::input('_api_token', [ 'value' => $this->fields["api_token"], 'style' => 'width:90%' ]); + echo ""; echo "
"; echo "(" . sprintf( __('generated on %s'), diff --git a/templates/pages/setup/apiclient.html.twig b/templates/pages/setup/apiclient.html.twig index 6ce13f734f0..5887303ed15 100644 --- a/templates/pages/setup/apiclient.html.twig +++ b/templates/pages/setup/apiclient.html.twig @@ -84,7 +84,8 @@ item.fields['app_token'], __('%1$s (%2$s)')|format(__('Application token'), 'app_token'), { - 'add_field_html': reset_btn + 'input_class': 'input-group copy_to_clipboard_wrapper col', + 'add_field_html': '' ~ reset_btn } ) }}