{"version":3,"sources":["webpack:///./src/Frontend/vendor/glueframelib.js","webpack:///./src/Frontend/app/components/video-player/video-player.tsx","webpack:///./src/Frontend/app/components/video/video.tsx","webpack:///./src/Frontend/app/utils/string-utils.ts","webpack:///./src/Frontend/app/views/video/video-view.tsx","webpack:///./node_modules/classnames/index.js","webpack:///./src/Frontend/app/components/icons/icon.tsx","webpack:///./src/Frontend/app/components/anchor/anchor.tsx","webpack:///./src/Frontend/app/components/content-section/content-section.tsx"],"names":["GlueFrame","iframe","appName","$this","this","glueframe","_domain","src","split","slice","join","_method","window","location","postMessage","ready","_readyInterval","setInterval","get","bootstrapped","clearInterval","_processQueue","contentWindow","glueFrameId","Math","floor","Date","getTime","random","_callbackCount","_callbacks","_registerCallback","callback","requireCallback","callbackIdentifier","_queue","_addToQueue","method","args","push","i","length","queueItem","apply","set","prop","force","cbId","value","messageObject","f","JSON","stringify","val","bind","event","triggerQueue","fire","obj","destroy","addEventListener","removeEventListener","_receiveMessage","detachEvent","e","origin","data","parse","a","b","attachEvent","url","autoPlay","autoMute","hideNativePlayBtn","loop","playerId","setDuration","setIsPlaying","isPlaying","isVideoLoaded","setIsVideoLoaded","player","current","duration","splitter","includes","hostName","videoId","videoTokenId","domain","video","componentClasses","baseClass","className","loading","ref","scrolling","frameBorder","allow","allowFullScreen","hideDuration","hidePlayButton","title","props","formattedDuration","d","str","targetLength","padString","padLeft","toString","onClick","iconId","render","contextModel","hasOwn","hasOwnProperty","classNames","classes","arguments","arg","argType","Array","isArray","inner","key","call","module","exports","default","spriteUrl","viewBox","preserveAspectRatio","xmlnsXlink","xlinkHref","id","type","anchorId","hasNoMarginTop","hasNoMarginBottom","children"],"mappings":"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","file":"33.67999cea331bf5c14b7c.js","sourcesContent":["var GlueFrame = function(iframe, appName) {\r\n\r\n var $this = this;\r\n\r\n // GlueFrame version\r\n $this.glueframe = \"1.1.3\";\r\n\r\n // Allow posting messages only to the domain of the app\r\n var _domain = (\"\"+iframe.src).split(\"/\").slice(0,3).join(\"/\");\r\n\r\n // Determine method of communication with iframe\r\n var _method = (function() {\r\n if (_domain == (\"\"+window.location).split(\"/\").slice(0,3).join(\"/\") ) {\r\n return \"object\";\r\n } else if (typeof window.postMessage !== \"undefined\") {\r\n return \"post\";\r\n } else {\r\n return \"none\";\r\n }\r\n })();\r\n\r\n // Poll the iframe until the app is bootstrapped\r\n $this.ready = false;\r\n var _readyInterval = window.setInterval(function(){\r\n if (!this.ready && _method === \"object\") {\r\n if (iframe.contentWindow[appName] && iframe.contentWindow[appName].bootstrapped) {\r\n $this.ready = true;\r\n window.clearInterval(_readyInterval);\r\n _processQueue();\r\n }\r\n } else if (!this.ready && _method === \"post\") {\r\n $this.get(\"bootstrapped\", function(bootstrapped){\r\n if (bootstrapped) {\r\n $this.ready = true;\r\n window.clearInterval(_readyInterval);\r\n _processQueue();\r\n }\r\n }, true);\r\n }\r\n }, 100);\r\n\r\n $this.glueFrameId = Math.floor((new Date()).getTime()*Math.random());\r\n var _callbackCount = 0;\r\n var _callbacks = {};\r\n\r\n // Store callback functions in the parent window\r\n var _registerCallback = function(callback, requireCallback) {\r\n var callbackIdentifier = $this.glueFrameId + \"_\" + (++_callbackCount);\r\n if (typeof callback === \"function\") {\r\n _callbacks[callbackIdentifier] = callback;\r\n } else if (requireCallback) {\r\n throw \"GlueFrame: Callback not registered correctly.\";\r\n }\r\n return callbackIdentifier;\r\n };\r\n\r\n // Queue up method calls until app is ready\r\n var _queue = [];\r\n var _addToQueue = function(method, args) {\r\n _queue.push({method: method, args: args});\r\n };\r\n\r\n // Loop through queue when app is ready\r\n var _processQueue = function() {\r\n for (var i = 0; i < _queue.length; i += 1) {\r\n var queueItem = _queue[i];\r\n queueItem.method.apply(null, queueItem.args);\r\n }\r\n _queue = [];\r\n $this.set(\"queuedEventsProcessed\", true);\r\n };\r\n\r\n $this.get = function(prop, callback, force) {\r\n if (!$this.ready && !force) {\r\n _addToQueue($this.get, [prop, callback]);\r\n return;\r\n }\r\n var cbId = _registerCallback(callback, true);\r\n if (_method === \"object\") {\r\n var value = iframe.contentWindow[appName].get.apply(null, [prop]);\r\n if (typeof _callbacks[cbId] !== \"undefined\") {\r\n _callbacks[cbId].apply(null, [value]);\r\n }\r\n } else if (_method === \"post\") {\r\n var messageObject = {f: \"get\", args: [prop], cbId: cbId};\r\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), force ? \"*\" : _domain );\r\n }\r\n };\r\n\r\n $this.set = function(prop, val, callback) {\r\n if (!$this.ready) {\r\n _addToQueue($this.set, [prop, val, callback]);\r\n return;\r\n }\r\n var cbId = _registerCallback(callback, false);\r\n if (_method === \"object\") {\r\n var value = iframe.contentWindow[appName].set.apply(null, [prop, val]);\r\n if (typeof _callbacks[cbId] !== \"undefined\") {\r\n _callbacks[cbId].apply(null, [value]);\r\n }\r\n } else if (_method === \"post\") {\r\n var messageObject = {f: \"set\", args: [prop, val], cbId: cbId};\r\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), _domain );\r\n }\r\n };\r\n\r\n $this.bind = function(event, callback, triggerQueue) {\r\n var triggerQueue = triggerQueue || false;\r\n if (!$this.ready) {\r\n _addToQueue($this.bind, [event, callback, true]);\r\n return;\r\n }\r\n var cbId = _registerCallback(callback, true);\r\n if (_method === \"object\") {\r\n iframe.contentWindow[appName].bind.apply(null, [event, callback, triggerQueue]);\r\n } else if (_method === \"post\") {\r\n var messageObject = {f: \"bind\", args: [event], cbId: cbId, triggerQueue: triggerQueue};\r\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), _domain );\r\n }\r\n };\r\n\r\n $this.fire = function(event, obj) {\r\n if (!$this.ready) {\r\n _addToQueue($this.fire, [event, obj]);\r\n return;\r\n }\r\n if (_method === \"object\") {\r\n return iframe.contentWindow[appName].fire.apply(null, [event, obj]);\r\n } else if (_method === \"post\") {\r\n var messageObject = {f: \"fire\", args: [event, obj]};\r\n iframe.contentWindow.postMessage( JSON.stringify(messageObject), _domain );\r\n }\r\n };\r\n\r\n // Remove event listeners, callbacks and intervals\r\n $this.destroy = function(){\r\n if (window.addEventListener) {\r\n window.removeEventListener(\"message\", _receiveMessage, false);\r\n } else {\r\n window.detachEvent(\"onmessage\", _receiveMessage);\r\n }\r\n window.clearInterval(_readyInterval);\r\n _callbacks = {};\r\n };\r\n\r\n // Parse messages received from iframe\r\n var _receiveMessage = function(e) {\r\n \tif (e.origin === _domain) {\r\n var data;\r\n try {\r\n data = JSON.parse(e.data);\r\n }catch(e){}\r\n if (typeof data !== \"undefined\" && typeof data.cbId !== \"undefined\" && typeof _callbacks[data.cbId] === \"function\") {\r\n _callbacks[data.cbId].apply(null, [data.a, data.b]);\r\n }\r\n }\r\n };\r\n\r\n // Listen for message events if need\r\n if (window.addEventListener) {\r\n window.addEventListener(\"message\", _receiveMessage, false);\r\n } else {\r\n window.attachEvent(\"onmessage\", _receiveMessage);\r\n }\r\n\r\n};\r\n\r\n// Converted to es6 module. This should not be an issue in terms of maintainability since the library has not not been updated since April 2017...\r\n// Should any updates be made to the repository (https://github.com/23/GlueFrame), please make sure to include the proper export syntax as below.\r\n\r\n// Original:\r\n // if(typeof(window.onGlueFrameAvailable)=='function') window.onGlueFrameAvailable(GlueFrame);\r\n\r\n // if (typeof module !== 'undefined' && module.exports) {\r\n // module.exports = GlueFrame;\r\n // }\r\n\r\n// New:\r\nexport default GlueFrame\r\n\r\n","import classNames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport GlueFrame from \"../../../vendor/glueframelib\";\r\n\r\nexport interface VideoPlayerProps {\r\n url: string;\r\n autoPlay?: boolean;\r\n autoMute?: boolean;\r\n hideNativePlayBtn?: boolean;\r\n loop?: boolean;\r\n playerId?: string;\r\n setDuration?: (duration: number) => void;\r\n setIsPlaying?: (isPlaying: boolean) => void;\r\n isPlaying?: boolean;\r\n}\r\n\r\nconst VideoPlayer = ({\r\n url,\r\n autoPlay,\r\n autoMute,\r\n hideNativePlayBtn,\r\n loop,\r\n playerId,\r\n setDuration,\r\n setIsPlaying,\r\n isPlaying\r\n}: VideoPlayerProps) => {\r\n const [isVideoLoaded, setIsVideoLoaded] = React.useState(false);\r\n const iframe = React.useRef<HTMLIFrameElement>(null);\r\n const player = React.useRef<any>(null);\r\n\r\n React.useLayoutEffect(() => {\r\n if (iframe.current) {\r\n const glueFrame = new (GlueFrame as any)(iframe.current, \"Player\");\r\n\r\n glueFrame.bind(\"player:video:loaded\", () => {\r\n setIsVideoLoaded(true);\r\n if (setDuration) {\r\n glueFrame.get(\"duration\", (duration?: number) => {\r\n if (duration) {\r\n setDuration(duration);\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (setIsPlaying) {\r\n glueFrame.bind(\"player:video:play\", () => setIsPlaying(true));\r\n glueFrame.bind(\"player:video:pause\", () => setIsPlaying(false));\r\n glueFrame.bind(\"player:video:end\", () => setIsPlaying(false));\r\n }\r\n\r\n player.current = glueFrame;\r\n }\r\n\r\n return () => player.current?.destroy();\r\n }, [iframe]);\r\n\r\n React.useEffect(() => {\r\n player.current?.set(\"playing\", isPlaying);\r\n }, [isPlaying]);\r\n\r\n const src = React.useMemo(() => {\r\n const splitter = url.includes(\"/video/\") ? \"/video/\" : \"/secret/\";\r\n const [hostName, trailing] = url.split(splitter);\r\n const [videoId, videoTokenId] = trailing.split(\"/\");\r\n const domain = `${hostName}/${playerId || \"v\"}.ihtml/player.html`;\r\n const video = `photo%5fid=${videoId}`;\r\n return !!videoTokenId\r\n ? `${domain}?token=${videoTokenId}&source=embed&${video}&autoPlay=${autoPlay ? 1 : 0}&autoMute=${\r\n autoMute ? 1 : 0\r\n }&loop=${loop ? 1 : 0}&hideBigPlay=${hideNativePlayBtn ? 1 : 0}`\r\n : `${domain}?source=site&${video}&autoPlay=${autoPlay ? 1 : 0}&autoMute=${\r\n autoMute ? 1 : 0\r\n }&loop=${loop ? 1 : 0}&hideBigPlay=${hideNativePlayBtn ? 1 : 0}`;\r\n }, [url]);\r\n\r\n const baseClass = \"video-player\";\r\n const componentClasses = classNames(baseClass, { [`${baseClass}--has-loaded`]: isVideoLoaded });\r\n\r\n return (\r\n <div className={componentClasses}>\r\n <iframe\r\n loading=\"lazy\"\r\n ref={iframe}\r\n src={src}\r\n scrolling=\"no\"\r\n frameBorder={0}\r\n allow=\"fullscreen; autoplay\"\r\n allowFullScreen\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoPlayer;\r\n","import * as React from \"react\";\r\nimport { padLeft } from \"~/utils/string-utils\";\r\nimport VideoPlayer, { VideoPlayerProps } from \"../video-player/video-player\";\r\nimport Icon from \"../icons/icon\";\r\nimport ContentSection from \"../content-section/content-section\";\r\n\r\nexport interface VideoProps extends VideoPlayerProps {\r\n title?: string;\r\n hideDuration?: boolean;\r\n hidePlayButton?: boolean;\r\n hasNoMarginTop?: boolean;\r\n hasNoMarginBottom?: boolean;\r\n anchorId?: string;\r\n}\r\n\r\nconst Video = ({ url, autoPlay, playerId, hideDuration, hidePlayButton, title, ...props }: VideoProps) => {\r\n const baseClass = \"video\";\r\n\r\n const [duration, setDuration] = React.useState<number | undefined>();\r\n const [isPlaying, setIsPlaying] = React.useState(false);\r\n\r\n const formattedDuration = React.useMemo(() => {\r\n const d = duration || 0;\r\n const minutes = Math.floor(d / 60);\r\n const seconds = d % 60;\r\n\r\n return `${minutes}:${padLeft(seconds.toString(), 2, \"0\")}`;\r\n }, [duration]);\r\n\r\n const toggleIsPlaying = () => {\r\n setIsPlaying(!isPlaying);\r\n };\r\n\r\n return (\r\n <ContentSection className={baseClass} {...props}>\r\n <div className={`${baseClass}__inner`}>\r\n <div className={`${baseClass}__meta-wrapper`}>\r\n {title && <h3 className={`${baseClass}__title h3-style`}>{title}</h3>}\r\n {!hideDuration && duration && (\r\n <div className={`${baseClass}__duration`}>{formattedDuration}</div>\r\n )}\r\n </div>\r\n\r\n <VideoPlayer\r\n url={url}\r\n playerId={playerId}\r\n autoPlay={autoPlay}\r\n hideNativePlayBtn={!hidePlayButton}\r\n setDuration={setDuration}\r\n setIsPlaying={setIsPlaying}\r\n isPlaying={isPlaying}\r\n />\r\n {!hidePlayButton && (\r\n <div className={`${baseClass}__button-wrapper`}>\r\n <button\r\n className={`${baseClass}__button ${\r\n isPlaying ? `${baseClass}__button--playing` : \"\"\r\n }`}\r\n onClick={toggleIsPlaying}\r\n >\r\n <Icon iconId=\"24_play\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </ContentSection>\r\n );\r\n};\r\n\r\nexport default Video;\r\n","export function getAbbreviationFromString(item: string) {\r\n const initials = item.split(\" \");\r\n if (initials.length === 1) {\r\n return initials[0].substring(0, 1);\r\n }\r\n return initials[0].substring(0, 1) + initials[initials.length - 1].substring(0, 1);\r\n}\r\n\r\nexport function padLeft(str: string, targetLength: number, padString: string) {\r\n if (str.length >= targetLength) {\r\n return str;\r\n }\r\n\r\n while (str.length < targetLength) {\r\n str = padString + str;\r\n }\r\n\r\n return str;\r\n}\r\n\r\nexport function capitalizeFirstLetter(str: string) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n","import * as React from \"react\";\r\nimport Video, { VideoProps } from \"~/components/video/video\";\r\n\r\nexport interface IVideoViewProps {\r\n contextModel: VideoProps;\r\n}\r\n\r\nclass VideoView extends React.PureComponent<IVideoViewProps> {\r\n public render() {\r\n return <Video {...this.props.contextModel} />;\r\n }\r\n}\r\n\r\nexport default VideoView;\r\n","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport type TIconNames =\r\n | \"24_expand\"\r\n | \"24_play\"\r\n | \"24_star\"\r\n | \"24_trash\"\r\n | \"32_add-user\"\r\n | \"32_basket\"\r\n | \"32_checkmark-circle\"\r\n | \"32_checkmark\"\r\n | \"32_error\"\r\n | \"32_information\"\r\n | \"32_katalog\"\r\n | \"32_search\"\r\n | \"32_truck-in-motion\"\r\n | \"32_user\"\r\n | \"32_warning\"\r\n | \"icon_16_arrow-down\"\r\n | \"icon_16_arrow-left\"\r\n | \"icon_16_arrow-right-bold\"\r\n | \"icon_16_arrow-right\"\r\n | \"icon_16_arrow-up\"\r\n | \"icon_28_close\"\r\n | \"icon_32_thumbs-up\"\r\n | \"icon_80x41_quotation-mark-gyldendal-dk\"\r\n | \"icon_80x48_quotation-mark\"\r\n | \"icon_checkbox-black\"\r\n | \"icon_checkmark-black\"\r\n | \"icon_download\"\r\n | \"icon_herringbone-narrow\"\r\n | \"icon_herringbone-wide\"\r\n | \"icon_placeholder-email\"\r\n | \"icon_placeholder-lock\"\r\n | \"icon_placeholder-phone-small\"\r\n | \"icon_placeholder-vip-white\"\r\n | \"icon_placeholder_basket\"\r\n | \"icon_placeholder_checkmark\"\r\n | \"icon_placeholder_eye-closed\"\r\n | \"icon_placeholder_eye\"\r\n | \"icon_placeholder_facebook\"\r\n | \"icon_placeholder_filtering\"\r\n | \"icon_placeholder_hamburger\"\r\n | \"icon_placeholder_instagram\"\r\n | \"icon_placeholder_phone\"\r\n | \"icon_placeholder_user\"\r\n | \"icon_read\"\r\n | \"icon_listen\";\r\n\r\nexport interface IIconProps {\r\n iconId: TIconNames;\r\n spriteUrl?: string;\r\n viewBox?: string;\r\n className?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nconst Icon: React.FC<IIconProps> = props => {\r\n const spriteUrl = props.spriteUrl || \"\";\r\n const viewBox = props.viewBox || \"0 0 32 32\";\r\n\r\n return (\r\n <svg\r\n viewBox={viewBox}\r\n className={classNames(props.className, \"icon\", `icon-${props.iconId}`)}\r\n preserveAspectRatio=\"xMidYMid\"\r\n onClick={() => props.onClick && props.onClick()}\r\n >\r\n <use xmlnsXlink=\"http://www.w3.org/1999/xlink\" xlinkHref={`${spriteUrl}#${props.iconId}`} />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default Icon;\r\n","import * as React from \"react\";\r\n\r\nexport interface AnchorProps {\r\n id?: string;\r\n}\r\n\r\nconst Anchor = ({ id }: AnchorProps) => {\r\n return <div className=\"anchor\" id={id} />;\r\n};\r\n\r\nexport default Anchor;\r\n","import classNames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport Anchor from \"../anchor/anchor\";\r\n\r\nexport interface ContentSectionProps {\r\n className?: string;\r\n type?: \"default\" | \"full\";\r\n anchorId?: string;\r\n hasNoMarginTop?: boolean;\r\n hasNoMarginBottom?: boolean;\r\n}\r\n\r\nconst ContentSection: React.FC<ContentSectionProps> = ({\r\n className,\r\n type = \"default\",\r\n anchorId,\r\n hasNoMarginTop,\r\n hasNoMarginBottom,\r\n ...props\r\n}) => {\r\n const baseClass = \"content-section\";\r\n const componentClasses = classNames(baseClass, className, {\r\n [`${baseClass}--full`]: type === \"full\",\r\n \"anchor-wrapper\": !!anchorId,\r\n \"content-no-margin-top\": hasNoMarginTop,\r\n \"content-no-margin-bottom\": hasNoMarginBottom\r\n });\r\n return (\r\n <section className={componentClasses}>\r\n {anchorId && <Anchor id={anchorId} />}\r\n {props.children}\r\n </section>\r\n );\r\n};\r\n\r\nexport default ContentSection;\r\n"],"sourceRoot":""}