Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
define("core/copy_to_clipboard",["core/str","core/toast","core/prefetch"],(function(_str,_toast,_prefetch){
2
/**
3
   * A JavaScript module that enhances a button and text container to support copy-to-clipboard functionality.
4
   *
5
   * This module needs to be loaded by pages/templates/modules that require this functionality.
6
   *
7
   * To enable copy-to-clipboard functionality, we need a trigger element (usually a button) and a copy target element
8
   * (e.g. a div, span, text input, or text area).
9
   *
10
   * In the trigger element, we need to declare the <code>data-action="copytoclipboard"</code> attribute and set the
11
   * <code>data-clipboard-target</code> attribute which is the CSS selector that points to the target element that contains the text
12
   * to be copied.
13
   *
14
   * When the text is successfully copied to the clipboard, a toast message that indicates that the copy operation was a success
15
   * will be shown. This success message can be customised by setting the <code>data-clipboard-success-message</code> attribute in the
16
   * trigger element.
17
   *
18
   * @module     core/copy_to_clipboard
19
   * @copyright  2021 Jun Pataleta
20
   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
21
   *
22
   * @example <caption>Markup for the trigger and target elements</caption>
23
   * <input type="text" id="textinputtocopy" class="form-control" value="Copy me!" readonly />
24
   * <button id="copybutton" data-action="copytoclipboard" data-clipboard-target="#textinputtocopy"
25
   *         data-clipboard-success-message="Success!" class="btn btn-secondary">
26
   *     Copy to clipboard
27
   * </button>
28
   */
29
const copyNodeContentToClipboard=(copyButton,copyTarget)=>(copyTarget.select(),document.execCommand("copy")?(displaySuccessToast(copyButton),!0):(displayFailureToast(),!1)),displaySuccessToast=copyButton=>getSuccessText(copyButton).then((successMessage=>(0,_toast.add)(successMessage,{}))),displayFailureToast=()=>getFailureText().then((message=>(0,_toast.add)(message,{type:"warning"}))),getFailureText=()=>(0,_str.getString)("unabletocopytoclipboard","core"),getSuccessText=copyButton=>copyButton.dataset.clipboardSuccessMessage?Promise.resolve(copyButton.dataset.clipboardSuccessMessage):(0,_str.getString)("textcopiedtoclipboard","core"),getTextFromContainer=container=>container.value?container.value:container.innerText?container.innerText:null;let loaded=!1;loaded||((0,_prefetch.prefetchStrings)("core",["textcopiedtoclipboard","unabletocopytoclipboard"]),document.addEventListener("click",(e=>{const copyButton=e.target.closest('[data-action="copytoclipboard"]');if(!copyButton)return;if(!copyButton.dataset.clipboardTarget)return;const copyTarget=document.querySelector(copyButton.dataset.clipboardTarget);if(!copyTarget)return;e.preventDefault();const textToCopy=getTextFromContainer(copyTarget);if(textToCopy)if(navigator.clipboard)navigator.clipboard.writeText(textToCopy).then((()=>displaySuccessToast(copyButton))).catch();else if(copyTarget instanceof HTMLInputElement||copyTarget instanceof HTMLTextAreaElement)copyTarget.focus(),copyNodeContentToClipboard(copyButton,copyTarget)&&copyButton.focus();else{const copyRegion=document.createElement("textarea");copyRegion.value=textToCopy,copyRegion.classList.add("sr-only"),document.body.appendChild(copyRegion),copyNodeContentToClipboard(copyButton,copyRegion),copyRegion.remove(),copyButton.focus()}else displayFailureToast()})),loaded=!0)}));
30
 
31
//# sourceMappingURL=copy_to_clipboard.min.js.map