copy button

This commit is contained in:
Abrar Ahmad 2022-07-26 21:28:07 +05:00
parent 53f9125946
commit c19bac12f7
13 changed files with 17751 additions and 34 deletions

View file

@ -0,0 +1,11 @@
.code-block-wrapper .copyBtn {
@apply absolute right-2 top-2 outline-none text-gray-200 opacity-25;
}
.code-block-wrapper .copyBtn:hover {
@apply text-gray-500 opacity-100;
}
.code-block-wrapper .copyBtn:active {
@apply text-white outline-none opacity-100;
}

View file

@ -7,6 +7,6 @@
@import 'base';
@import 'navigation';
@import 'search';
@import 'clipboard';
@tailwind utilities;

View file

@ -0,0 +1,53 @@
import ClipboardJS from 'clipboard/dist/clipboard';
// These icons must be inline to avoid rendering bugs.
const clipboardIcon = `<svg class="fill-current h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"><path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z"></path><path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z"></path></svg>`;
const clipboardCopiedIcon = `<svg fill="currentColor" class="fill-current text-white h-5 w-5" viewBox="0 0 20 20"><path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z"></path><path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg>`;
// Copy to Clipboard.
let codeBlocks = document.querySelectorAll('.markdown pre');
codeBlocks.forEach((element, key) => {
// Add wrapper to code block.
var wrapper = document.createElement('div');
['relative', 'code-block-wrapper'].forEach((value) => {
wrapper.classList.add(value);
});
element.parentNode.insertBefore(wrapper, element);
wrapper.appendChild(element);
// Copy to clipboard button.
let copyToClipboardBtn = document.createElement('button');
copyToClipboardBtn.innerHTML = clipboardIcon;
copyToClipboardBtn.id = `clipButton-${key}`;
['md:block', 'hidden'].forEach((value) => {
copyToClipboardBtn.classList.add(value);
});
copyToClipboardBtn.setAttribute('aria-label', 'Copy to Clipboard');
copyToClipboardBtn.setAttribute('title', 'Copy to Clipboard');
copyToClipboardBtn.classList.add('copyBtn');
wrapper.appendChild(copyToClipboardBtn);
let copyToClipboard = new ClipboardJS(`#${copyToClipboardBtn.id}`);
copyToClipboard.on('success', (element) => {
copyToClipboardBtn.innerHTML = clipboardCopiedIcon;
element.clearSelection();
setTimeout(() => {
copyToClipboardBtn.innerHTML = clipboardIcon;
}, 1500);
});
// Code Element.
let codeElement = element.querySelector('code');
codeElement.id = `clipText-${key}`;
copyToClipboardBtn.dataset.clipboardTarget = `#${codeElement.id}`;
});

View file

@ -1,4 +1,5 @@
import hljs from 'highlight.js/lib/highlight';
import './clipboard';
hljs.registerLanguage('bash', require('highlight.js/lib/languages/bash'));
hljs.registerLanguage('css', require('highlight.js/lib/languages/css'));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=2)}({2:function(e,t,n){e.exports=n("j7ye")},j7ye:function(e,t,n){"use strict";n.r(t);var r="undefined"!=typeof window,o=[],i=function(){r&&!window.splitbee||(a.track=window.splitbee.track,a.user=window.splitbee.user,a.enableCookie=window.splitbee.enableCookie,a.reset=window.splitbee.reset,o.forEach((function(e){"track"===e.type?window.splitbee.track.apply(null,e.payload):"user"===e.type?window.splitbee.user.set.apply(null,e.payload):"enableCookie"===e.type?window.splitbee.enableCookie.apply(null,e.payload):"reset"===e.type&&window.splitbee.reset()})),o=[])},l=function(e){return function(){try{for(var t=arguments.length,n=new Array(t),l=0;l<t;l++)n[l]=arguments[l];return o.push({type:e,payload:n}),r&&window.splitbee&&i(),Promise.resolve()}catch(e){return Promise.reject(e)}}},a={track:l("track"),user:{set:l("user")},init:function(e){if(r&&!window.splitbee){var t=window.document,n=null!=e&&e.scriptUrl?e.scriptUrl:"https://cdn.splitbee.io/sb.js",o=t.querySelector("script[src='"+n+"']");if(o)o.onload=i;else{var l=t.createElement("script");l.src=n,l.async=!0,e&&(e.apiUrl&&(l.dataset.api=e.apiUrl),e.token&&(l.dataset.token=e.token),e.disableCookie&&(l.dataset.noCookie="1")),l.onload=i,t.head.appendChild(l)}}},enableCookie:l("enableCookie"),reset:l("reset")},s=a;s.init({scriptUrl:"https://tenancyforlaravel.com/bee.js",apiUrl:"https://tenancyforlaravel.com/_hive"}),window.auth=function(e){e&&s.user.set({userId:e.substr(1)}).finally((function(){window.location.replace("https://github.com/tenancy-for-laravel/saas-boilerplate")}))}}});
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=2)}({2:function(e,t,n){e.exports=n("j7ye")},j7ye:function(e,t,n){"use strict";n.r(t);var r="undefined"!=typeof window,o=[],i=function(){r&&!window.splitbee||(l.track=window.splitbee.track,l.user=window.splitbee.user,l.enableCookie=window.splitbee.enableCookie,l.reset=window.splitbee.reset,o.forEach((function(e){"track"===e.type?window.splitbee.track.apply(null,e.payload):"user"===e.type?window.splitbee.user.set.apply(null,e.payload):"enableCookie"===e.type?window.splitbee.enableCookie.apply(null,e.payload):"reset"===e.type&&window.splitbee.reset()})),o=[])},a=function(e){return function(){try{for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];return o.push({type:e,payload:n}),r&&window.splitbee&&i(),Promise.resolve()}catch(e){return Promise.reject(e)}}},l={track:a("track"),user:{set:a("user")},init:function(e){if(r&&!window.splitbee){var t=window.document,n=null!=e&&e.scriptUrl?e.scriptUrl:"https://cdn.splitbee.io/sb.js",o=t.querySelector("script[src='"+n+"']");if(o)o.onload=i;else{var a=t.createElement("script");a.src=n,a.async=!0,e&&(e.apiUrl&&(a.dataset.api=e.apiUrl),e.token&&(a.dataset.token=e.token),e.disableCookie&&(a.dataset.noCookie="1")),a.onload=i,t.head.appendChild(a)}}},enableCookie:a("enableCookie"),reset:a("reset")},s=l;s.init({scriptUrl:"https://tenancyforlaravel.com/bee.js",apiUrl:"https://tenancyforlaravel.com/_hive"}),window.auth=function(e){if(!e)return window.location.replace("https://github.com/tenancy-for-laravel/saas-boilerplate");s.user.set({userId:e.substr(1)}).finally((function(){window.location.replace("https://github.com/tenancy-for-laravel/saas-boilerplate")}))}}});
//# sourceMappingURL=extsb.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,6 @@
/*!
* @overview es6-promise - a tiny implementation of Promises/A+.
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
* @license Licensed under MIT license
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
* @version v4.2.8+1e68dce6
* clipboard.js v2.0.11
* https://clipboardjs.com/
*
* Licensed MIT © Zeno Rocha
*/

File diff suppressed because one or more lines are too long