/* Xeslint-disable */ ///////////////////////////////// // General utility library // export default { /////////////////////////////// // CLEAN OBJECT // Clear all properties from object without resorting to assigning a new object (o={}) // which can be problematic in some cases (IE bugs, watched data items in forms etc) removeAllPropertiesFromObject: function(o) { for (var variableKey in o) { if (o.hasOwnProperty(variableKey)) { delete o[variableKey]; } } }, /** * Copy a string to clipboard * @param {String} string The string to be copied to clipboard * @return {Boolean} returns a boolean correspondent to the success of the copy operation. * Modified from an example here: https://stackoverflow.com/a/53951634/8939 * Basically a fallback if navigator.clipboard is not available */ copyToClipboard: function(string) { let textarea; let result; if (navigator && navigator.clipboard) { navigator.clipboard.writeText(string); } else { try { textarea = document.createElement("textarea"); textarea.setAttribute("readonly", true); textarea.setAttribute("contenteditable", true); textarea.style.position = "fixed"; // prevent scroll from jumping to the bottom when focus is set. textarea.value = string; document.body.appendChild(textarea); textarea.focus(); textarea.select(); const range = document.createRange(); range.selectNodeContents(textarea); const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); textarea.setSelectionRange(0, textarea.value.length); result = document.execCommand("copy"); } catch (err) { //console.error(err); result = null; } finally { document.body.removeChild(textarea); } // manual copy fallback using prompt if (!result) { const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0; const copyHotkey = isMac ? "⌘C" : "CTRL+C"; result = prompt(`Press ${copyHotkey}`, string); if (!result) { return false; } } } return true; } //new functions above here };