{"version":3,"file":"coremedia.preview.js","mappings":";;;;;;;;;;;;;IAaA,IAAIA,EAAqBC,OAAOD,oBAAsB,GAsBtD,SAASE,EAAYC,GACnB,IAAMC,EAAMD,EAAME,KACZC,EAASH,EAAMG,OACjBC,OAAUC,EACd,IACED,EAAUE,KAAKC,MAAMN,GACrB,MAAOO,IAET,GAAIJ,GAA4B,gBAAjBA,EAAQK,KAAwB,CAC7C,IAAMC,EAAeC,SAASC,cAAc,KAC5CF,EAAaG,KAAOV,EAEpB,IAAMW,EAASH,SAASC,cAAc,KACtC,GAAIf,EAAmBkB,OAAS,EAC9B,IAAK,IAAIC,EAAI,EAAGA,EAAInB,EAAmBkB,OAAQC,IAAK,CAClDF,EAAOD,KAAOhB,EAAmBmB,GACjC,IAAMC,EAAaH,EAAOI,SACpBC,EAASL,EAAOM,SAChBC,EAASP,EAAOQ,KAEtB,GACEL,IAAeP,EAAaQ,UAC5BC,IAAWT,EAAaU,UACxBC,IAAWX,EAAaY,KACxB,CACAxB,OAAOyB,4BAA8BpB,EACrC,YAIJL,OAAOyB,4BAA8B,IAGvC,GAAIzB,OAAOyB,6BAA+BnB,EAAQoB,KAAKC,IAAK,CAC1D,IAAMC,EAASf,SAASC,cAAc,UACtCc,EAAOjB,KAAO,kBACdiB,EAAOC,IAAMvB,EAAQoB,KAAKC,IAE1B,IAAMG,EAAcjB,SAASkB,qBAAqB,UAAU,GAC5DD,EAAYE,WAAWC,aAAaL,EAAQE,QAE5CI,EACE,oDACE7B,EACA,sGAINL,OAAOmC,oBAAoB,UAAWlC,IAI1C,SAASiC,EAAKE,GACRpC,OAAOqC,SAAWrC,OAAOqC,QAAQH,MACnClC,OAAOqC,QAAQH,KAAKE,GAYxB,IAReE,EAQTC,EAAuB,gBAAOvC,OAAOwC,iBAGvCD,GACFL,EACE,0FAIClC,OAAOQ,MACV0B,EAAK,iDAGHlC,OAAOQ,OAAS+B,IAClBvC,OAAOwC,iBAAkB,EAtBZF,EA9Ef,WACE,IAAKtC,OAAOwC,gBAAiB,CAE3B,GAAIxC,OAAOyC,QAAUzC,OAAOyC,SAAWzC,OAAQ,CAE7CA,OAAO0C,iBAAiB,UAAWzC,GAGnC,IAAME,EAAMK,KAAKmC,UAAU,CACzBhC,KAAM,OACNe,KAAM,CACJkB,WAAY,aAGhB5C,OAAOyC,OAAOI,YAAY1C,EAAK,KAEjCH,OAAOwC,iBAAkB,IA+DC,YAAxB3B,SAASiC,WACXR,IAEAzB,SAAS6B,iBAAiB,mBAAoBJ,I","sources":["webpack://@coremedia/preview-bootstrap/./src/coremedia.preview.js"],"sourcesContent":["/**\n * CoreMedia preview module\n *\n * Initializes the communication between Studio and CAE to provide the PBE feature.\n *\n * The script is robust against multiple loading.\n *\n * Static Application Security Testing (SAST) tools like Checkmarx may complain\n * about this script, if they assume that it embeds untrusted data without\n * proper sanitization or encoding. Such reports are false positives.\n *\n * @license CoreMedia Open Source License\n */\nlet studioUrlWhitelist = window.studioUrlWhitelist || [];\n\nfunction init() {\n if (!window.PDE_INITIALIZED) {\n // noinspection JSIncompatibleTypesComparison legacy check\n if (window.parent && window.parent !== window) {\n // Enable post message handling\n window.addEventListener(\"message\", initHandler);\n\n // Register at parent window\n const msg = JSON.stringify({\n type: \"init\",\n body: {\n windowType: \"preview\",\n },\n });\n window.parent.postMessage(msg, \"*\");\n }\n window.PDE_INITIALIZED = true;\n }\n}\n\nfunction initHandler(event) {\n const msg = event.data;\n const origin = event.origin;\n let msgJson = undefined;\n try {\n msgJson = JSON.parse(msg);\n } catch (err) {}\n\n if (msgJson && msgJson.type === \"initConfirm\") {\n const parserOrigin = document.createElement(\"a\");\n parserOrigin.href = origin;\n\n const parser = document.createElement(\"a\");\n if (studioUrlWhitelist.length > 0) {\n for (let i = 0; i < studioUrlWhitelist.length; i++) {\n parser.href = studioUrlWhitelist[i];\n const wlProtocol = parser.protocol;\n const wlHost = parser.hostname;\n const wlPort = parser.port;\n\n if (\n wlProtocol === parserOrigin.protocol &&\n wlHost === parserOrigin.hostname &&\n wlPort === parserOrigin.port\n ) {\n window.com_coremedia_pbe_studioUrl = origin;\n break;\n }\n }\n } else {\n window.com_coremedia_pbe_studioUrl = \"*\";\n }\n\n if (window.com_coremedia_pbe_studioUrl && msgJson.body.url) {\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = msgJson.body.url;\n // assuming that at least one script (this one) will be loaded via script tag\n const firstScript = document.getElementsByTagName(\"script\")[0];\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n warn(\n \"Preview received initConfirm message from origin \" +\n origin +\n \". This does not match any of the given whitelist URLs (see 'cae.preview.pbe.studio-url-whitelist')\"\n );\n }\n\n window.removeEventListener(\"message\", initHandler);\n }\n}\n\nfunction warn(warnString) {\n if (window.console && window.console.warn) {\n window.console.warn(warnString);\n }\n}\n\nfunction ready(callback) {\n if (document.readyState !== \"loading\") {\n callback();\n } else {\n document.addEventListener(\"DOMContentLoaded\", callback);\n }\n}\n\nconst hasMultipleInstances = typeof window.PDE_INITIALIZED !== typeof undefined;\n\n// trigger warning if preview is loaded multiple times (checked twice to allow better error reporting)\nif (hasMultipleInstances) {\n warn(\n \"Preview webresources are attached to DOM multiple times. Consider removing duplicates.\"\n );\n}\n\nif (!window.JSON) {\n warn(\"Cannot initialize preview: JSON not supported\");\n}\n\nif (window.JSON && !hasMultipleInstances) {\n window.PDE_INITIALIZED = false;\n ready(init);\n}\n"],"names":["studioUrlWhitelist","window","initHandler","event","msg","data","origin","msgJson","undefined","JSON","parse","err","type","parserOrigin","document","createElement","href","parser","length","i","wlProtocol","protocol","wlHost","hostname","wlPort","port","com_coremedia_pbe_studioUrl","body","url","script","src","firstScript","getElementsByTagName","parentNode","insertBefore","warn","removeEventListener","warnString","console","callback","hasMultipleInstances","PDE_INITIALIZED","parent","addEventListener","stringify","windowType","postMessage","readyState"],"sourceRoot":""}