From fde94c39429f89ec1f7c0236101963ab0b789e6f Mon Sep 17 00:00:00 2001 From: Pierre-Henri Tournier Date: Thu, 5 Dec 2024 17:14:06 +0100 Subject: [PATCH] add copy button for .edp & .md examples --- source/_static/css/examples.css | 5 +++++ source/_static/js/examples.js | 35 ++++++++++++++++++++++++++++++++- source/_templates/layout.html | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/source/_static/css/examples.css b/source/_static/css/examples.css index a0f58032..8a0156f7 100644 --- a/source/_static/css/examples.css +++ b/source/_static/css/examples.css @@ -16,6 +16,11 @@ width:100%; } +#ExampleCopyButton { + display: inline-block; + position: relative; +} + #checkbox-markdown-toggle { margin-right: 2em; } diff --git a/source/_static/js/examples.js b/source/_static/js/examples.js index 5c292db8..5b1be15f 100644 --- a/source/_static/js/examples.js +++ b/source/_static/js/examples.js @@ -13,6 +13,8 @@ let viewMarkdown = true let iscurrentfilemd = false +let mdsource = "" + toggleExamples = (mode) => { if (mode) { subnav.children[1].style.display = 'block' @@ -58,12 +60,13 @@ loadExamplefromGitHub = (name, dir, editor) => { } examplecode.style.display = 'flex' examplewelcome.style.display = 'none' + showExample(viewMarkdown) editor.setValue(data) highlightKeyword(editor) - showExample(viewMarkdown) } function loadmd(data) { + mdsource = data; iscurrentfilemd = true; var byClass = document.getElementsByClassName("strip-button"); for (var i = 0; i < byClass.length; i++) { @@ -331,6 +334,36 @@ fetch('/_static/json/all_examples.json') }) }) +var copybutton = document.createElement('button') +copybutton.className = 'copy-button' +copybutton.style.top = '0rem' +copybutton.innerHTML = '.edp copied to clipboard' +copybutton.onclick = function (e) { + const textarea = document.createElement('textarea') + if (iscurrentfilemd && viewMarkdown) { + copybutton.innerHTML = '.md copied to clipboard' + textarea.value = mdsource + } + else { + copybutton.innerHTML = '.edp copied to clipboard' + textarea.value = editor.getValue() + } + textarea.setAttribute('readonly', '') + textarea.style.position = 'absolute' + textarea.style.left = '-9999px' + document.body.appendChild(textarea) + textarea.select() + document.execCommand('copy') + document.body.removeChild(textarea) + + this.children[0].classList.toggle('clipboard-message--active') + setTimeout(() => { + this.children[0].classList.remove('clipboard-message--active') + }, 2000) +} +const examplecopybutton = document.getElementById('ExampleCopyButton') +examplecopybutton.appendChild(copybutton) + var bs1 = new ButtonStrip({ id: 'buttonStrip1' }); diff --git a/source/_templates/layout.html b/source/_templates/layout.html index ce7addfb..9fbc05e6 100644 --- a/source/_templates/layout.html +++ b/source/_templates/layout.html @@ -28,7 +28,7 @@