/* Common Functions */ export function copyArray(asArray) { return asArray.slice(0); //trick to copy array } export function getElem(aoAnchor, asPath) { return (typeof asPath == 'object' && asPath.length > 1)?getElem(aoAnchor[asPath.shift()], asPath):aoAnchor[(typeof asPath == 'object')?asPath.shift():asPath]; } export function setElem(aoAnchor, asPath, oValue) { var asTypes = {boolean:false, string:'', integer:0, int:0, array:[], object:{}}; if(typeof asPath == 'object' && asPath.length > 1) { var nextlevel = asPath.shift(); if(!(nextlevel in aoAnchor)) aoAnchor[nextlevel] = {}; //Creating a new level if(typeof aoAnchor[nextlevel] !== 'object') debug('Error - setElem() : Already existing path at level "'+nextlevel+'". Cancelling setElem() action'); return setElem(aoAnchor[nextlevel], asPath, oValue); } else { var sKey = (typeof asPath == 'object')?asPath.shift():asPath; return aoAnchor[sKey] = (!(sKey in aoAnchor) && (oValue in asTypes))?asTypes[oValue]:oValue; } } export function getDragPosition(oEvent) { let bMouse = oEvent.type.includes('mouse'); return { x: bMouse?oEvent.pageX:oEvent.touches[0].clientX, y: bMouse?oEvent.pageY:oEvent.touches[0].clientY }; } export function copyTextToClipboard(text) { if(!navigator.clipboard) { var textArea = document.createElement('textarea'); textArea.value = text; // Avoid scrolling to bottom textArea.style.top = '0'; textArea.style.left = '0'; textArea.style.position = 'fixed'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); if(!successful) console.error('Fallback: Oops, unable to copy', text); } catch (err) { console.error('Fallback: Oops, unable to copy', err); } document.body.removeChild(textArea); return; } navigator.clipboard.writeText(text).then( function() {}, function(err) { console.error('Async: Could not copy text: ', err); } ); } export function getOuterWidth(element) { var style = getComputedStyle(element); var width = element.offsetWidth; // Width without padding and border width += parseInt(style.marginLeft) + parseInt(style.marginRight); // Add margins // Check if the box-sizing is border-box (includes padding and border in the width) if (style.boxSizing === 'border-box') { width += parseInt(style.paddingLeft) + parseInt(style.paddingRight); // Add padding width += parseInt(style.borderLeftWidth) + parseInt(style.borderRightWidth); // Add border } return width; }