{"version":3,"names":["getDimensions","el","rect","getBoundingClientRect","dimensions","width","height","outerWidth","outerHeight","widthWithMargins","heightWithMargins","getHiddenDimensions","modified","force","offsetWidth","offsetHeight","visibleContainer","parentElement","closest","elementClone","cloneNode","containerClone","document","createElement","style","cssText","appendChild","maxHeight","hasAttribute","setAttribute","remove","getQueryParameter","url","name","replace","regex","RegExp","results","exec","decodeURIComponent","replaceUrlParam","paramName","paramValue","pattern","newUrl","search","sleep","ms","Promise","resolve","setTimeout","getClassNames","classNames","join","getSitefinityValue","attribute","_b","_a","split"],"sources":["../../../libs/env-components/src/lib/helper/global.helper.ts"],"sourcesContent":["/**\n * Converts dashed string into camel-cased string\n * @param {string} str - the string being converted\n * @returns {string} camel-cased string\n */\nfunction camelCaseSelector(str: string): string {\n if (typeof str !== 'string') {\n return str\n }\n\n return str.replace(/^[#|.]/, '').replace(/-+([a-zA-Z]{1})/g, ($2) => {\n return $2.toUpperCase()\n })\n}\n\n/**\n * Capitalizes first character of string\n * @param {string} str - the string being converted\n * @returns {string} string starting with capital letter\n */\nfunction capitalizeFirstLetter(str: string): string {\n if (typeof str !== 'string') {\n return str\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n/**\n * Get DOM Element Dimensions\n * @param {Element} el - DOM Element\n * @return {Object} the dimensions as { width, height, outerWidth, outerHeight, widthWithMargins, heightWithMargins }\n */\nfunction getDimensions(el: Element): object {\n const rect = el.getBoundingClientRect()\n const dimensions = {\n width: rect.width,\n height: rect.height,\n outerWidth: rect.width,\n outerHeight: rect.height,\n widthWithMargins: rect.width,\n heightWithMargins: rect.height,\n }\n return dimensions\n}\n\n/**\n * getHiddenDimension - get DOM element dimensions if it is hidden\n * inspired by: https://github.com/jcamenisch/jQuery-Hidden-Dimension\n * @param {Element} el DOM Element\n * @param {string} modified Descriptor of which dimension was modified / set to zero - can be `width` or `height`\n * @return {Object} the dimensions as { width, height, outerWidth, outerHeight, widthWithMargins, heightWithMargins }\n */\nfunction getHiddenDimensions(\n el: HTMLElement,\n modified: string,\n force = false\n): object {\n if (el.offsetWidth > 0 && el.offsetHeight > 0 && !force) {\n return getDimensions(el)\n }\n\n const visibleContainer =\n el.parentElement && el.parentElement.offsetWidth > 0\n ? el.parentElement\n : el.parentElement &&\n el.parentElement.closest(':not([style*=\"display: none\"])')\n const elementClone = el.cloneNode(true) as HTMLElement\n const containerClone = document.createElement('div')\n containerClone.style.cssText =\n 'position: absolute; right: 32000px; left: -32000px; top: -32000px'\n containerClone.appendChild(elementClone)\n visibleContainer?.appendChild(containerClone)\n\n switch (modified) {\n case 'height':\n elementClone.style.height = 'auto'\n break\n case 'width':\n elementClone.style.width = 'auto'\n break\n case 'max-height':\n elementClone.style.maxHeight = 'none'\n break\n default:\n }\n\n if (elementClone.hasAttribute('aria-expanded')) {\n elementClone.setAttribute('aria-expanded', 'false')\n }\n\n const dimensions = getDimensions(elementClone)\n\n containerClone.remove()\n\n return dimensions\n}\n\nfunction getExpandedDimensions(el: Element): object {\n const visibleContainer =\n el.parentElement && el.parentElement.offsetWidth > 0\n ? el.parentElement\n : el.parentElement &&\n el.parentElement.closest(':not([style*=\"display: none\"])')\n const elementClone = el.cloneNode(true) as Element\n const containerClone = document.createElement('div')\n containerClone.style.cssText =\n 'position: absolute; right: 32000px; left: -32000px; top: -32000px'\n containerClone.appendChild(elementClone)\n visibleContainer?.appendChild(containerClone)\n\n if (elementClone.hasAttribute('aria-expanded')) {\n elementClone.setAttribute('aria-expanded', 'true')\n }\n\n const dimensions = getDimensions(elementClone)\n\n containerClone.remove()\n\n return dimensions\n}\n\nfunction getUnExpandedDimensions(el: Element): object {\n const visibleContainer =\n el.parentElement && el.parentElement.offsetWidth > 0\n ? el.parentElement\n : el.parentElement &&\n el.parentElement.closest(':not([style*=\"display: none\"])')\n const elementClone = el.cloneNode(true) as Element\n const containerClone = document.createElement('div')\n containerClone.style.cssText =\n 'position: absolute; right: 32000px; left: -32000px; top: -32000px'\n containerClone.appendChild(elementClone)\n visibleContainer?.appendChild(containerClone)\n\n if (elementClone.hasAttribute('aria-expanded')) {\n elementClone.setAttribute('aria-expanded', 'false')\n }\n\n const dimensions = getDimensions(elementClone)\n\n containerClone.remove()\n\n return dimensions\n}\n\n/**\n * convert a string with seconds to milliseconds\n * @param {string} str - date-time-string\n * @return {number} milliseconds\n */\nfunction secondsToMS(str: string): number {\n return parseFloat(str.replace(/[^0-9\\.]/, '')) * 1000\n}\n\n/**\n * Get qualified URL\n * @param {string} url - URL string\n * @return {string} qualified URL\n */\nfunction qualifyURL(url: string): string {\n const a = document.createElement('a')\n a.href = url\n return a.href\n}\n\n/**\n * Check if given element is an HTML element\n * @param {object} el - Element to check\n * @returns {boolean} - true if it is an HTML element\n */\nfunction isHTMLElement(el: any): boolean {\n return el instanceof HTMLElement\n}\n\n/**\n * Check if given element is a valid DOM element\n * @param {object} el - Element to check\n * @returns {boolean} - true if it is a valid DOM element\n */\nfunction isDOMElement(el: any): boolean {\n return (\n typeof el === 'object' &&\n el.nodeType === 1 &&\n typeof el.nodeName === 'string'\n )\n}\n\n/**\n * Check if given element is a valid jQuery object\n * @param {object} el - Element to check\n * @returns {boolean} - true if it is a valid jQuery object\n */\nfunction isjQueryElement(el: any): boolean {\n return el && typeof el.jquery !== 'undefined'\n}\n\n/**\n * Check if given element is a valid HTML node\n * @param {object} el - Element to check\n * @returns {boolean} - true if it is a valid HTML node\n */\nfunction isHTMLNode(el: any): boolean {\n return typeof Node === 'function'\n ? el instanceof Node\n : el &&\n typeof el === 'object' &&\n typeof el.nodeType === 'number' &&\n typeof el.nodeName === 'string'\n}\n\n/**\n * Check if given element is a valid DOM element or jQuery object\n * and returns a DOM element.\n *\n * @param {object} el - Element to check\n * @returns {object} - DOM element\n * @throws {Error} - Throws an error if the element is not a valid DOM element or jQuery object\n */\nfunction toDOMElement(el: any): object {\n if (!isDOMElement(el) && !isjQueryElement(el)) {\n throw new Error('Element is not a valid DOM element or jQuery object!')\n }\n\n if (!isDOMElement(el)) {\n return el[0]\n }\n\n return el\n}\n\n/**\n * Liefert den Wert eines QueryParameters anhand des name aus der übergebenen url\n * @param url - url\n * @param name - Name des Queryparameters\n * @returns - Wert des QueryParameters (name)\n */\nfunction getQueryParameter(url: string, name: string): string {\n name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]')\n let regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)')\n let results = regex.exec(url)\n return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '))\n}\n\n/**\n * Ersetzt in einem url einen URL-Parameter(paramName) durch einen bestimmten Wert(paramValue)\n * sofern der Url-Parameter in diesem url existiert\n * @param url - url\n * @param paramName - name des Queryparameters\n * @param paramValue - wert des Queryparameters\n * @returns\n */\nfunction replaceUrlParam(url: string, paramName: string, paramValue: string): string {\n const pattern = new RegExp('(\\\\?|\\\\&)(' + paramName + '=).*?(&|$)')\n let newUrl = url\n if (url.search(pattern) >= 0) {\n newUrl = url.replace(pattern, '$1$2' + paramValue + '$3')\n }\n return newUrl\n}\n\n/**\n * Pause für ... millisekunden\n * @param ms\n * @returns\n */\nfunction sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Helper class to render classes correctly (undefined gets mapped into an empty string)\n */\nfunction getClassNames(classNames: string[]) {\n return classNames.join(' ')\n}\n\n/**\n * Some sitefinity attributes are being delivered as strings in a key value shape, eg. \"rel='nofollow'\".\n * The function extracts the value part in order for it to be assigned in the TSX component\n * @param attribute string\n */\nfunction getSitefinityValue(attribute: string) {\n return attribute?.split('=')[1]\n ?.replace(/\"/g, '')\n ?.replace(/'/g, '')\n}\n\nexport {\n getDimensions,\n getHiddenDimensions,\n getExpandedDimensions,\n getUnExpandedDimensions,\n camelCaseSelector,\n capitalizeFirstLetter,\n secondsToMS,\n qualifyURL,\n isHTMLElement,\n isDOMElement,\n isjQueryElement,\n isHTMLNode,\n toDOMElement,\n getQueryParameter,\n replaceUrlParam,\n sleep,\n getClassNames,\n getSitefinityValue\n}\n"],"mappings":"AAiCA,SAASA,EAAcC,GACrB,MAAMC,EAAOD,EAAGE,wBAChB,MAAMC,EAAa,CACjBC,MAAOH,EAAKG,MACZC,OAAQJ,EAAKI,OACbC,WAAYL,EAAKG,MACjBG,YAAaN,EAAKI,OAClBG,iBAAkBP,EAAKG,MACvBK,kBAAmBR,EAAKI,QAE1B,OAAOF,CACT,CASA,SAASO,EACPV,EACAW,EACAC,EAAQ,OAER,GAAIZ,EAAGa,YAAc,GAAKb,EAAGc,aAAe,IAAMF,EAAO,CACvD,OAAOb,EAAcC,E,CAGvB,MAAMe,EACJf,EAAGgB,eAAiBhB,EAAGgB,cAAcH,YAAc,EAC/Cb,EAAGgB,cACHhB,EAAGgB,eACLhB,EAAGgB,cAAcC,QAAQ,kCAC7B,MAAMC,EAAelB,EAAGmB,UAAU,MAClC,MAAMC,EAAiBC,SAASC,cAAc,OAC9CF,EAAeG,MAAMC,QACnB,oEACFJ,EAAeK,YAAYP,GAC3BH,IAAgB,MAAhBA,SAAgB,SAAhBA,EAAkBU,YAAYL,GAE9B,OAAQT,GACN,IAAK,SACHO,EAAaK,MAAMlB,OAAS,OAC5B,MACF,IAAK,QACHa,EAAaK,MAAMnB,MAAQ,OAC3B,MACF,IAAK,aACHc,EAAaK,MAAMG,UAAY,OAC/B,MAIJ,GAAIR,EAAaS,aAAa,iBAAkB,CAC9CT,EAAaU,aAAa,gBAAiB,Q,CAG7C,MAAMzB,EAAaJ,EAAcmB,GAEjCE,EAAeS,SAEf,OAAO1B,CACT,CA6IA,SAAS2B,EAAkBC,EAAaC,GACtCA,EAAOA,EAAKC,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,OACnD,IAAIC,EAAQ,IAAIC,OAAO,SAAWH,EAAO,aACzC,IAAII,EAAUF,EAAMG,KAAKN,GACzB,OAAOK,IAAY,KAAO,GAAKE,mBAAmBF,EAAQ,GAAGH,QAAQ,MAAO,KAC9E,CAUA,SAASM,EAAgBR,EAAaS,EAAmBC,GACvD,MAAMC,EAAU,IAAIP,OAAO,aAAeK,EAAY,cACtD,IAAIG,EAASZ,EACb,GAAIA,EAAIa,OAAOF,IAAY,EAAG,CAC5BC,EAASZ,EAAIE,QAAQS,EAAS,OAASD,EAAa,K,CAEtD,OAAOE,CACT,CAOA,SAASE,EAAMC,GACb,OAAO,IAAIC,SAASC,GAAYC,WAAWD,EAASF,IACtD,CAKA,SAASI,EAAcC,GACrB,OAAOA,EAAWC,KAAK,IACzB,CAOA,SAASC,EAAmBC,G,QAC1B,OAAOC,GAAAC,EAAAF,IAAS,MAATA,SAAS,SAATA,EAAWG,MAAM,KAAK,MAAE,MAAAD,SAAA,SAAAA,EACzBvB,QAAQ,KAAM,OAAG,MAAAsB,SAAA,SAAAA,EACjBtB,QAAQ,KAAM,GACtB,Q"}