{"version":3,"file":"sanitizer-GM6llkDq.js","sources":["../../../app/frontend/entrypoints/marketing/bootstrap/mdb-prefix/util/sanitizer.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href',\n]);\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(\n SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)\n );\n }\n\n return true;\n }\n\n const regExp = allowedAttributeList.filter((attributeRegex) => attributeRegex instanceof RegExp);\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attributeName)) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: [],\n};\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const element = elements[i];\n const elementName = element.nodeName.toLowerCase();\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n\n continue;\n }\n\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n attributeList.forEach((attribute) => {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n });\n }\n\n return createdDocument.body.innerHTML;\n}\n"],"names":["uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","regExp","attributeRegex","i","len","DefaultAllowlist","sanitizeHtml","unsafeHtml","allowList","sanitizeFn","createdDocument","elements","element","elementName","attributeList","allowedAttributes"],"mappings":"AAOA,MAAMA,EAAgB,IAAI,IAAI,CAC5B,aACA,OACA,OACA,WACA,WACA,SACA,MACA,YACF,CAAC,EAEKC,EAAyB,iBAOzBC,EAAmB,iEAOnBC,EACJ,qIAEIC,EAAmB,CAACC,EAAWC,IAAyB,CAC5D,MAAMC,EAAgBF,EAAU,SAAS,YAAW,EAEpD,GAAIC,EAAqB,SAASC,CAAa,EAC7C,OAAIP,EAAc,IAAIO,CAAa,EAC1B,GACLL,EAAiB,KAAKG,EAAU,SAAS,GAAKF,EAAiB,KAAKE,EAAU,SAAS,GAIpF,GAGT,MAAMG,EAASF,EAAqB,OAAQG,GAAmBA,aAA0B,MAAM,EAG/F,QAASC,EAAI,EAAGC,EAAMH,EAAO,OAAQE,EAAIC,EAAKD,IAC5C,GAAIF,EAAOE,CAAC,EAAE,KAAKH,CAAa,EAC9B,MAAO,GAIX,MAAO,EACT,EAEaK,EAAmB,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAAQX,CAAsB,EAClE,EAAG,CAAC,SAAU,OAAQ,QAAS,KAAK,EACpC,KAAM,CAAE,EACR,EAAG,CAAE,EACL,GAAI,CAAE,EACN,IAAK,CAAE,EACP,KAAM,CAAE,EACR,IAAK,CAAE,EACP,GAAI,CAAE,EACN,GAAI,CAAE,EACN,GAAI,CAAE,EACN,GAAI,CAAE,EACN,GAAI,CAAE,EACN,GAAI,CAAE,EACN,GAAI,CAAE,EACN,GAAI,CAAE,EACN,EAAG,CAAE,EACL,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,QAAQ,EACxD,GAAI,CAAE,EACN,GAAI,CAAE,EACN,EAAG,CAAE,EACL,IAAK,CAAE,EACP,EAAG,CAAE,EACL,MAAO,CAAE,EACT,KAAM,CAAE,EACR,IAAK,CAAE,EACP,IAAK,CAAE,EACP,OAAQ,CAAE,EACV,EAAG,CAAE,EACL,GAAI,CAAE,CACR,EAEO,SAASY,EAAaC,EAAYC,EAAWC,EAAY,CAC9D,GAAI,CAACF,EAAW,OACd,OAAOA,EAGT,GAAIE,GAAc,OAAOA,GAAe,WACtC,OAAOA,EAAWF,CAAU,EAI9B,MAAMG,EADY,IAAI,OAAO,YACK,gBAAgBH,EAAY,WAAW,EACnEI,EAAW,CAAE,EAAC,OAAO,GAAGD,EAAgB,KAAK,iBAAiB,GAAG,CAAC,EAExE,QAASP,EAAI,EAAGC,EAAMO,EAAS,OAAQR,EAAIC,EAAKD,IAAK,CACnD,MAAMS,EAAUD,EAASR,CAAC,EACpBU,EAAcD,EAAQ,SAAS,YAAW,EAEhD,GAAI,CAAC,OAAO,KAAKJ,CAAS,EAAE,SAASK,CAAW,EAAG,CACjDD,EAAQ,OAAM,EAEd,QACD,CAED,MAAME,EAAgB,CAAA,EAAG,OAAO,GAAGF,EAAQ,UAAU,EAC/CG,EAAoB,CAAA,EAAG,OAAOP,EAAU,GAAG,GAAK,CAAA,EAAIA,EAAUK,CAAW,GAAK,CAAE,CAAA,EAEtFC,EAAc,QAAShB,GAAc,CAC9BD,EAAiBC,EAAWiB,CAAiB,GAChDH,EAAQ,gBAAgBd,EAAU,QAAQ,CAElD,CAAK,CACF,CAED,OAAOY,EAAgB,KAAK,SAC9B"}