{"version":3,"file":"sanitizer.min.js","sources":["https:\/\/edu.betha.com.br\/theme\/smart\/amd\/src\/bootstrap\/tools\/sanitizer.js"],"sourcesContent":["\/**\r\n * --------------------------------------------------------------------------\r\n * Bootstrap (v4.6.2): tools\/sanitizer.js\r\n * Licensed under MIT (https:\/\/github.com\/twbs\/bootstrap\/blob\/main\/LICENSE)\r\n * --------------------------------------------------------------------------\r\n *\/\r\n\r\nconst uriAttrs = [\r\n 'background',\r\n 'cite',\r\n 'href',\r\n 'itemtype',\r\n 'longdesc',\r\n 'poster',\r\n 'src',\r\n 'xlink:href'\r\n]\r\n\r\nconst ARIA_ATTRIBUTE_PATTERN = \/^aria-[\\w-]*$\/i\r\n\r\nexport const DefaultWhitelist = {\r\n \/\/ Global attributes allowed on any supplied element below.\r\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\r\n a: ['target', 'href', 'title', 'rel'],\r\n area: [],\r\n b: [],\r\n br: [],\r\n col: [],\r\n code: [],\r\n div: [],\r\n em: [],\r\n hr: [],\r\n h1: [],\r\n h2: [],\r\n h3: [],\r\n h4: [],\r\n h5: [],\r\n h6: [],\r\n i: [],\r\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\r\n li: [],\r\n ol: [],\r\n p: [],\r\n pre: [],\r\n s: [],\r\n small: [],\r\n span: [],\r\n sub: [],\r\n sup: [],\r\n strong: [],\r\n u: [],\r\n ul: []\r\n}\r\n\r\n\/**\r\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\r\n *\r\n * Shoutout to Angular https:\/\/github.com\/angular\/angular\/blob\/12.2.x\/packages\/core\/src\/sanitization\/url_sanitizer.ts\r\n *\/\r\nconst SAFE_URL_PATTERN = \/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&\/:?]*(?:[#\/?]|$))\/i\r\n\r\n\/**\r\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\r\n *\r\n * Shoutout to Angular https:\/\/github.com\/angular\/angular\/blob\/12.2.x\/packages\/core\/src\/sanitization\/url_sanitizer.ts\r\n *\/\r\nconst DATA_URL_PATTERN = \/^data:(?:image\\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\\/(?:mpeg|mp4|ogg|webm)|audio\\\/(?:mp3|oga|ogg|opus));base64,[\\d+\/a-z]+=*$\/i\r\n\r\nfunction allowedAttribute(attr, allowedAttributeList) {\r\n const attrName = attr.nodeName.toLowerCase()\r\n\r\n if (allowedAttributeList.indexOf(attrName) !== -1) {\r\n if (uriAttrs.indexOf(attrName) !== -1) {\r\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\r\n }\r\n\r\n return true\r\n }\r\n\r\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\r\n\r\n \/\/ Check if a regular expression validates the attribute.\r\n for (let i = 0, len = regExp.length; i < len; i++) {\r\n if (regExp[i].test(attrName)) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\r\n if (unsafeHtml.length === 0) {\r\n return unsafeHtml\r\n }\r\n\r\n if (sanitizeFn && typeof sanitizeFn === 'function') {\r\n return sanitizeFn(unsafeHtml)\r\n }\r\n\r\n const domParser = new window.DOMParser()\r\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text\/html')\r\n const whitelistKeys = Object.keys(whiteList)\r\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\r\n\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const el = elements[i]\r\n const elName = el.nodeName.toLowerCase()\r\n\r\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\r\n el.parentNode.removeChild(el)\r\n\r\n continue\r\n }\r\n\r\n const attributeList = [].slice.call(el.attributes)\r\n \/\/ eslint-disable-next-line unicorn\/prefer-spread\r\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\r\n\r\n attributeList.forEach(attr => {\r\n if (!allowedAttribute(attr, whitelistedAttributes)) {\r\n el.removeAttribute(attr.nodeName)\r\n }\r\n })\r\n }\r\n\r\n return createdDocument.body.innerHTML\r\n}\r\n"],"names":["unsafeHtml","whiteList","sanitizeFn","length","createdDocument","window","DOMParser","parseFromString","whitelistKeys","Object","keys","elements","slice","call","body","querySelectorAll","i","len","el","elName","nodeName","toLowerCase","indexOf","parentNode","removeChild","attributeList","attributes","whitelistedAttributes","concat","forEach","attr","allowedAttribute","removeAttribute","innerHTML","uriAttrs","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttributeList","attrName","Boolean","test","nodeValue","regExp","filter","attrRegex","RegExp"],"mappings":"uMA2F6BA,WAAYC,UAAWC,eACxB,IAAtBF,WAAWG,cACNH,cAGLE,YAAoC,mBAAfA,kBAChBA,WAAWF,kBAIdI,iBADY,IAAIC,OAAOC,WACKC,gBAAgBP,WAAY,aACxDQ,cAAgBC,OAAOC,KAAKT,WAC5BU,SAAW,GAAGC,MAAMC,KAAKT,gBAAgBU,KAAKC,iBAAiB,UAEhE,IAAIC,EAAI,EAAGC,IAAMN,SAASR,OAAQa,EAAIC,IAAKD,IAAK,OAC7CE,GAAKP,SAASK,GACdG,OAASD,GAAGE,SAASC,kBAE+B,IAAtDb,cAAcc,QAAQJ,GAAGE,SAASC,eAAuB,CAC3DH,GAAGK,WAAWC,YAAYN,mBAKtBO,cAAgB,GAAGb,MAAMC,KAAKK,GAAGQ,YAEjCC,sBAAwB,GAAGC,OAAO3B,UAAU,MAAQ,GAAIA,UAAUkB,SAAW,IAEnFM,cAAcI,SAAQC,OACfC,iBAAiBD,KAAMH,wBAC1BT,GAAGc,gBAAgBF,KAAKV,oBAKvBhB,gBAAgBU,KAAKmB,iBAvHxBC,SAAW,CACf,aACA,OACA,OACA,WACA,WACA,SACA,MACA,cAKWC,iBAAmB,KAEzB,CAAC,QAAS,MAAO,KAAM,OAAQ,OAJP,kBAK7BC,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC\/BC,KAAM,GACNC,EAAG,GACHC,GAAI,GACJC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJlC,EAAG,GACHmC,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDC,GAAI,GACJC,GAAI,GACJC,EAAG,GACHC,IAAK,GACLC,EAAG,GACHC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,qDAQAC,iBAAmB,iEAOnBC,iBAAmB,8IAEhBlC,iBAAiBD,KAAMoC,4BACxBC,SAAWrC,KAAKV,SAASC,kBAEiB,IAA5C6C,qBAAqB5C,QAAQ6C,iBACK,IAAhCjC,SAASZ,QAAQ6C,WACZC,QAAQJ,iBAAiBK,KAAKvC,KAAKwC,YAAcL,iBAAiBI,KAAKvC,KAAKwC,kBAMjFC,OAASL,qBAAqBM,QAAOC,WAAaA,qBAAqBC,aAGxE,IAAI1D,EAAI,EAAGC,IAAMsD,OAAOpE,OAAQa,EAAIC,IAAKD,OACxCuD,OAAOvD,GAAGqD,KAAKF,iBACV,SAIJ"}