{"version":3,"file":"9563.634b58dfdcdfc229721c.js","mappings":"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","sources":["webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/innerSubscribe.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/operators/takeUntil.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/symbol/iterator.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/isArrayLike.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/isPromise.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/subscribeTo.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/subscribeToObservable.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/subscribeToPromise.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/subscribeToIterable.js","webpack://@dgtls-pub/wolf-sb-integration/./node_modules/rxjs/_esm5/internal/util/subscribeToArray.js","webpack://@dgtls-pub/wolf-sb-integration/./src/global/js/DomServices.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/global/js/InputsServices.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/global/js/ControllerBase.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/molecules/m-video-overlay/m-video-overlay.events.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.cookieservice.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.controller.ts","webpack://@dgtls-pub/wolf-sb-integration/./src/wolf/components/organisms/o-video/o-video.events.ts"],"sourcesContent":["/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_util_subscribeTo PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from './Subscriber';\nimport { Observable } from './Observable';\nimport { subscribeTo } from './util/subscribeTo';\nvar SimpleInnerSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SimpleInnerSubscriber, _super);\n function SimpleInnerSubscriber(parent) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n return _this;\n }\n SimpleInnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(value);\n };\n SimpleInnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error);\n this.unsubscribe();\n };\n SimpleInnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete();\n this.unsubscribe();\n };\n return SimpleInnerSubscriber;\n}(Subscriber));\nexport { SimpleInnerSubscriber };\nvar ComplexInnerSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ComplexInnerSubscriber, _super);\n function ComplexInnerSubscriber(parent, outerValue, outerIndex) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n _this.outerValue = outerValue;\n _this.outerIndex = outerIndex;\n return _this;\n }\n ComplexInnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(this.outerValue, value, this.outerIndex, this);\n };\n ComplexInnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error);\n this.unsubscribe();\n };\n ComplexInnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete(this);\n this.unsubscribe();\n };\n return ComplexInnerSubscriber;\n}(Subscriber));\nexport { ComplexInnerSubscriber };\nvar SimpleOuterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SimpleOuterSubscriber, _super);\n function SimpleOuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SimpleOuterSubscriber.prototype.notifyNext = function (innerValue) {\n this.destination.next(innerValue);\n };\n SimpleOuterSubscriber.prototype.notifyError = function (err) {\n this.destination.error(err);\n };\n SimpleOuterSubscriber.prototype.notifyComplete = function () {\n this.destination.complete();\n };\n return SimpleOuterSubscriber;\n}(Subscriber));\nexport { SimpleOuterSubscriber };\nvar ComplexOuterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ComplexOuterSubscriber, _super);\n function ComplexOuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ComplexOuterSubscriber.prototype.notifyNext = function (_outerValue, innerValue, _outerIndex, _innerSub) {\n this.destination.next(innerValue);\n };\n ComplexOuterSubscriber.prototype.notifyError = function (error) {\n this.destination.error(error);\n };\n ComplexOuterSubscriber.prototype.notifyComplete = function (_innerSub) {\n this.destination.complete();\n };\n return ComplexOuterSubscriber;\n}(Subscriber));\nexport { ComplexOuterSubscriber };\nexport function innerSubscribe(result, innerSubscriber) {\n if (innerSubscriber.closed) {\n return undefined;\n }\n if (result instanceof Observable) {\n return result.subscribe(innerSubscriber);\n }\n var subscription;\n try {\n subscription = subscribeTo(result)(innerSubscriber);\n }\n catch (error) {\n innerSubscriber.error(error);\n }\n return subscription;\n}\n//# sourceMappingURL=innerSubscribe.js.map\n","/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { innerSubscribe, SimpleInnerSubscriber, SimpleOuterSubscriber } from '../innerSubscribe';\nexport function takeUntil(notifier) {\n return function (source) { return source.lift(new TakeUntilOperator(notifier)); };\n}\nvar TakeUntilOperator = /*@__PURE__*/ (function () {\n function TakeUntilOperator(notifier) {\n this.notifier = notifier;\n }\n TakeUntilOperator.prototype.call = function (subscriber, source) {\n var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);\n var notifierSubscription = innerSubscribe(this.notifier, new SimpleInnerSubscriber(takeUntilSubscriber));\n if (notifierSubscription && !takeUntilSubscriber.seenValue) {\n takeUntilSubscriber.add(notifierSubscription);\n return source.subscribe(takeUntilSubscriber);\n }\n return takeUntilSubscriber;\n };\n return TakeUntilOperator;\n}());\nvar TakeUntilSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(TakeUntilSubscriber, _super);\n function TakeUntilSubscriber(destination) {\n var _this = _super.call(this, destination) || this;\n _this.seenValue = false;\n return _this;\n }\n TakeUntilSubscriber.prototype.notifyNext = function () {\n this.seenValue = true;\n this.complete();\n };\n TakeUntilSubscriber.prototype.notifyComplete = function () {\n };\n return TakeUntilSubscriber;\n}(SimpleOuterSubscriber));\n//# sourceMappingURL=takeUntil.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = /*@__PURE__*/ getSymbolIterator();\nexport var $$iterator = iterator;\n//# sourceMappingURL=iterator.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isPromise(value) {\n return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map\n","/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */\nimport { subscribeToArray } from './subscribeToArray';\nimport { subscribeToPromise } from './subscribeToPromise';\nimport { subscribeToIterable } from './subscribeToIterable';\nimport { subscribeToObservable } from './subscribeToObservable';\nimport { isArrayLike } from './isArrayLike';\nimport { isPromise } from './isPromise';\nimport { isObject } from './isObject';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeTo = function (result) {\n if (!!result && typeof result[Symbol_observable] === 'function') {\n return subscribeToObservable(result);\n }\n else if (isArrayLike(result)) {\n return subscribeToArray(result);\n }\n else if (isPromise(result)) {\n return subscribeToPromise(result);\n }\n else if (!!result && typeof result[Symbol_iterator] === 'function') {\n return subscribeToIterable(result);\n }\n else {\n var value = isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n var msg = \"You provided \" + value + \" where a stream was expected.\"\n + ' You can provide an Observable, Promise, Array, or Iterable.';\n throw new TypeError(msg);\n }\n};\n//# sourceMappingURL=subscribeTo.js.map\n","/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeToObservable = function (obj) {\n return function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (typeof obs.subscribe !== 'function') {\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n }\n else {\n return obs.subscribe(subscriber);\n }\n };\n};\n//# sourceMappingURL=subscribeToObservable.js.map\n","/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */\nimport { hostReportError } from './hostReportError';\nexport var subscribeToPromise = function (promise) {\n return function (subscriber) {\n promise.then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, hostReportError);\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToPromise.js.map\n","/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport var subscribeToIterable = function (iterable) {\n return function (subscriber) {\n var iterator = iterable[Symbol_iterator]();\n do {\n var item = void 0;\n try {\n item = iterator.next();\n }\n catch (err) {\n subscriber.error(err);\n return subscriber;\n }\n if (item.done) {\n subscriber.complete();\n break;\n }\n subscriber.next(item.value);\n if (subscriber.closed) {\n break;\n }\n } while (true);\n if (typeof iterator.return === 'function') {\n subscriber.add(function () {\n if (iterator.return) {\n iterator.return();\n }\n });\n }\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToIterable.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var subscribeToArray = function (array) {\n return function (subscriber) {\n for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n };\n};\n//# sourceMappingURL=subscribeToArray.js.map\n","import { IDomServices } from 'global/interfaces/controller.interface';\nimport { Subject } from 'rxjs';\n\nexport class DomServices implements IDomServices {\n\tprotected $element: HTMLElement;\n\tprotected $references: Record;\n\tonDomElementChanged: Subject = new Subject();\n\n\tconstructor(element: HTMLElement, references: Record) {\n\t\tthis.$references = references;\n\t\tthis.$element = element;\n\t}\n\n\tstatic collectReferences(\n\t\telement: HTMLElement,\n\t\tignoredReferences: string[],\n\t\tincludedReferences: string[],\n\t): Partial> {\n\t\tconst refs: Partial> = {};\n\n\t\tArray.from(element.querySelectorAll('[data-ref]')).forEach((el: HTMLElement) => {\n\t\t\tlet referenceName: string = '';\n\t\t\tif (el.dataset.ref) {\n\t\t\t\treferenceName = el.dataset.ref;\n\t\t\t}\n\n\t\t\t// skip ignored references\n\t\t\tif (ignoredReferences.includes(referenceName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (referenceName) {\n\t\t\t\t// if the included list has items, only include these references, otherwise consider all\n\t\t\t\tif (includedReferences.length > 0) {\n\t\t\t\t\tif (includedReferences.includes(referenceName)) {\n\t\t\t\t\t\trefs[referenceName] = el;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(refs, referenceName)) {\n\t\t\t\t\t\tif (window.location.hostname === 'localhost') {\n\t\t\t\t\t\t\tconsole.warn(`A reference called '${referenceName}' has already been registered in ${this.constructor.name}!\\n Element:`, element);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trefs[referenceName] = el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn refs;\n\t}\n\n\tgetRef(ref: string): T | undefined {\n\t\tif (this.$references) {\n\t\t\treturn Object.prototype.hasOwnProperty.call(this.$references, ref) ? (this.$references[ref] as T) : undefined;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tparseStringToHtml = (htmlAsString: string): void | ChildNode => {\n\t\tconst parsedNode = new DOMParser().parseFromString(htmlAsString, 'text/html').body.firstChild;\n\t\tif (parsedNode) return parsedNode;\n\t};\n\n\trenderDomElement = (ref: string, html: string, renderOnParent: boolean = false): void => {\n\t\tconst refExists = this.$references ? Object.prototype.hasOwnProperty.call(this.$references, ref) : undefined;\n\t\tif (renderOnParent) {\n\t\t\tthis.$element.innerHTML = html;\n\t\t\tthis.domElementChanged(ref);\n\t\t} else if (this.$references && refExists) {\n\t\t\t(this.$references as any)[ref].innerHTML = html;\n\t\t\tthis.domElementChanged(ref);\n\t\t} else {\n\t\t\tconsole.warn('DOM ref does not exist!', ref);\n\t\t}\n\t};\n\n\tappendRawHtmlToDomElement = (\n\t\tnode: HTMLElement,\n\t\thtmlAsString: string,\n\t\tposition: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend' = 'afterend',\n\t): void | ChildNode => {\n\t\tconst htmlNode = this.parseStringToHtml(htmlAsString);\n\t\tnode.insertAdjacentElement(position, htmlNode as Element);\n\t\tif (htmlNode) {\n\t\t\treturn htmlNode;\n\t\t}\n\t};\n\n\treplaceLastChildElementWithRawHtml = (ref: string, htmlAsString: string): void | ChildNode => {\n\t\tconst refExists = this.$references ? Object.prototype.hasOwnProperty.call(this.$references, ref) : undefined;\n\t\tif (refExists) {\n\t\t\tconst htmlNode = this.parseStringToHtml(htmlAsString);\n\t\t\tconst lastNode = this.$references[ref].childNodes[this.$references[ref].childNodes.length - 1];\n\t\t\t(this.$references as any)[ref].replaceChild(htmlNode, lastNode);\n\t\t\tthis.domElementChanged(ref);\n\t\t\tif (htmlNode) {\n\t\t\t\treturn htmlNode;\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn('DOM ref does not exist!', ref);\n\t\t}\n\t};\n\n\ttoggleElementState(control: HTMLElement, newState: Array<'enable' | 'disable' | 'show' | 'hide' | 'check' | 'uncheck'>): void {\n\t\tif (!control) return;\n\t\tnewState &&\n\t\t\tnewState.forEach((state) => {\n\t\t\t\tswitch (state) {\n\t\t\t\t\tcase 'enable': {\n\t\t\t\t\t\tcontrol.removeAttribute('disabled');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'disable': {\n\t\t\t\t\t\tcontrol.setAttribute('disabled', 'true');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'show': {\n\t\t\t\t\t\tcontrol.removeAttribute('hidden');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'hide': {\n\t\t\t\t\t\tcontrol.setAttribute('hidden', 'true');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'uncheck': {\n\t\t\t\t\t\tcontrol.removeAttribute('checked');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'check': {\n\t\t\t\t\t\tcontrol.setAttribute('checked', 'true');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tdomElementChanged = (reference: string): void => {\n\t\tthis.onDomElementChanged.next(reference);\n\t};\n\n\tparseDOMScriptTag = (elementId: string): TJSON => {\n\t\tconst data = document.getElementById(elementId) as HTMLScriptElement;\n\t\ttry {\n\t\t\tconst out = JSON.parse(data.innerText);\n\t\t\treturn out as TJSON;\n\t\t} catch (error) {\n\t\t\tconsole.warn('Cannot parse component form config', error);\n\t\t}\n\t\treturn {} as TJSON;\n\t};\n\n\trenderDomElementInHTMLElement(element: HTMLElement, html: string): void {\n\t\telement.innerHTML = html;\n\t}\n}\n","import { IInputServicesBase } from 'global/interfaces/controller.interface';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport enum InputClasses {\n\terrorClass = 'uk-form-danger',\n\thiddenClass = 'uk-hidden',\n}\nexport class InputServices implements IInputServicesBase {\n\tprivate observedInputs: Record = {};\n\n\taddFocusToInput({ element, inputName }: { element: HTMLElement; inputName: string }): void {\n\t\tconst input = element?.querySelector(`input[name='${inputName}']`);\n\t\tif (input) (input as HTMLInputElement).focus();\n\t}\n\n\tobserveElementEvents(\n\t\telement: HTMLInputElement | HTMLSelectElement | HTMLButtonElement,\n\t\tinputEvent: 'input' | 'change' | 'click',\n\t\tonChange: (value: string, event: InputEvent) => any,\n\t): void {\n\t\tconst inputToObserve$ = fromEvent(element, inputEvent);\n\n\t\tthis.observedInputs[element.name] = inputToObserve$.pipe(map(this.mapInputEvent)).subscribe(({ value, event }) =>\n\t\t\tthis.subscribeInputWithErrorRemovalOnInputChange({\n\t\t\t\tvalue,\n\t\t\t\tevent,\n\t\t\t\tonChange,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * This method is in charge of adding error classes to the correct element within an input group on a defined element\n\t * @param {HTMLElement | null} element - The element to update\n\t * @param {Record} errors - The errors to manage\n\t */\n\taddErrorsToFieldset({\n\t\telement,\n\t\terrors,\n\t\tonErrorsUpdated,\n\t}: {\n\t\telement: HTMLElement | null;\n\t\terrors: Record;\n\t\tonErrorsUpdated?: () => void;\n\t}): void {\n\t\tif (element) {\n\t\t\tObject.keys(errors).forEach((inputName) => {\n\t\t\t\tconst input = element?.querySelector(`input[name='${inputName}']`) as HTMLElement;\n\n\t\t\t\tif (input) {\n\t\t\t\t\tconst errorMessage = errors[inputName] || '';\n\t\t\t\t\tthis.addOrRemoveFormValidationError('SHOW_VALIDATION_ERROR', input, errorMessage);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (onErrorsUpdated) onErrorsUpdated();\n\t\t\tif (errors) {\n\t\t\t\tconst inputNameToFocus = Object.keys(errors)[0];\n\t\t\t\tconst firstErrorElement = element?.querySelector(`input[name='${inputNameToFocus}']`);\n\t\t\t\tif (firstErrorElement) firstErrorElement.scrollIntoView();\n\t\t\t\tif (inputNameToFocus) this.addFocusToInput({ element, inputName: inputNameToFocus });\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`ADD ERRORS TO FIELDSET: Looks like the element you want to update doesn't exist`);\n\t\t}\n\t}\n\n\taddOrRemoveFormValidationError(showOrHide: 'SHOW_VALIDATION_ERROR' | 'HIDE_VALIDATION_ERROR', input: HTMLElement, errorMessage: string = ''): void {\n\t\tif (!input) return;\n\n\t\tconst label = input.previousElementSibling;\n\t\tconst errorMessageContainer = input.nextElementSibling;\n\n\t\tif (showOrHide === 'SHOW_VALIDATION_ERROR') {\n\t\t\t// add error class to label\n\t\t\tif (label && label.classList) label.classList.add(InputClasses.errorClass);\n\t\t\t// add error class to input\n\t\t\tinput.classList.add(InputClasses.errorClass);\n\t\t\t// if there's an error message, inject it, show the div and add an error class\n\t\t\tif (errorMessageContainer) {\n\t\t\t\terrorMessageContainer.classList.add(InputClasses.errorClass);\n\t\t\t\terrorMessageContainer.classList.remove(InputClasses.hiddenClass);\n\t\t\t\terrorMessageContainer.innerHTML = errorMessage;\n\t\t\t}\n\t\t} else if (showOrHide === 'HIDE_VALIDATION_ERROR') {\n\t\t\t// remove error class from label\n\t\t\tif (label && label.classList) label.classList.remove(InputClasses.errorClass);\n\t\t\t// remove error class from input\n\t\t\tinput.classList.remove(InputClasses.errorClass);\n\t\t\t// remove error message and class\n\t\t\tif (errorMessageContainer) {\n\t\t\t\terrorMessageContainer.classList.remove(InputClasses.errorClass);\n\t\t\t\terrorMessageContainer.classList.add(InputClasses.hiddenClass);\n\t\t\t\terrorMessageContainer.innerHTML = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tsubscribeInputWithErrorRemovalOnInputChange = ({\n\t\tvalue,\n\t\tevent,\n\t\tonChange,\n\t}: {\n\t\tvalue: string;\n\t\tevent: InputEvent;\n\t\tonChange?: (value: string, event: InputEvent) => void;\n\t}): void => {\n\t\tconst castEvent = event.target as HTMLElement;\n\n\t\tconst label = castEvent && castEvent.previousElementSibling;\n\t\tif (label && label.classList.contains(InputClasses.errorClass)) label.classList.remove(InputClasses.errorClass);\n\n\t\tconst input = event.target as HTMLElement;\n\t\tif (input && input.classList.contains(InputClasses.errorClass)) input.classList.remove(InputClasses.errorClass);\n\n\t\tconst errorMessage = castEvent && castEvent.nextElementSibling;\n\t\tif (errorMessage) {\n\t\t\terrorMessage.classList.remove(InputClasses.errorClass);\n\t\t\terrorMessage.classList.add('uk-hidden');\n\t\t}\n\n\t\tif (onChange) onChange(value, event);\n\t};\n\n\tmapInputEvent = (event: InputEvent): { value: string; event: InputEvent } => {\n\t\treturn { value: (event.target as HTMLInputElement | HTMLSelectElement).value, event };\n\t};\n}\n","import { IControllerBase, IDomServices } from 'global/interfaces/controller.interface';\nimport { DomServices } from './DomServices';\nimport { InputServices } from './InputsServices';\nexport default class ControllerBase = Record> implements IControllerBase {\n\treadonly $element: HTMLElement;\n\treadonly $references: Record;\n\treadonly ignoredReferences: string[];\n\treadonly includedReferences: string[];\n\treadonly disableReferenceCollection: boolean;\n\t/** See {@link DomServices} */\n\treadonly domUtils: IDomServices;\n\t/** See {@link InputServices} */\n\treadonly inputUtils: InputServices;\n\n\tconstructor(element: HTMLElement, ignoredReferences?: string[], includedReferences?: string[], disableReferenceCollection?: boolean) {\n\t\tthis.$element = element;\n\t\tthis.ignoredReferences = ignoredReferences || [];\n\t\tthis.includedReferences = includedReferences || [];\n\t\tthis.disableReferenceCollection = disableReferenceCollection || false;\n\n\t\tif (!this.disableReferenceCollection) {\n\t\t\tconst references = DomServices.collectReferences(this.$element, this.ignoredReferences, this.includedReferences);\n\t\t\tif (references && Object.keys(references).length > 0) {\n\t\t\t\tthis.$references = references as Record;\n\t\t\t} else {\n\t\t\t\tthis.$references = {} as Record;\n\t\t\t}\n\t\t}\n\n\t\tthis.domUtils = new DomServices(this.$element, this.$references);\n\t\tthis.inputUtils = new InputServices();\n\t}\n\n\tdispatchCustomEvent(\n\t\tname: string,\n\t\tdetail: T,\n\t\tbubbles: boolean = false,\n\t\tdispatchOnWindow: boolean = false,\n\t\tdispatchOnSpecificElement?: HTMLElement,\n\t): void {\n\t\tconst customEvent = new CustomEvent(name, { detail: detail, bubbles: bubbles });\n\t\tif (true === dispatchOnWindow) {\n\t\t\twindow.dispatchEvent(customEvent);\n\t\t} else if (dispatchOnSpecificElement) {\n\t\t\tdispatchOnSpecificElement.dispatchEvent(customEvent);\n\t\t} else {\n\t\t\tthis.$element.dispatchEvent(customEvent);\n\t\t}\n\t}\n}\n","import { ComponentEvents } from 'global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'MoleculeVideoOverlayEvents__';\n\n/** The type of custom events emitted */\nexport type MoleculeVideoOverlayEventTypes = {\n\tplayButtonClicked: true;\n};\n\nexport const MoleculeVideoOverlayEvents: ComponentEvents = {\n\t/** The custom event emitted when the button is clicked */\n\tplayButtonClicked: EVENT_PREFIX + 'buttonClicked',\n};\n","/**\n * OneTrust cookie service\n * @link https://www.onetrust.com/products/cookie-consent/\n */\nexport const OneTrustService: IOneTrustService = {\n\t// OnetrustActiveGroups: ',C0001,C0002,C0003,C0004,',\n\tToggleInfoDisplay: (): any => {\n\t\tconst _w = window as any;\n\t\tif (Object.prototype.hasOwnProperty.call(_w, 'OneTrust')) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(_w.OneTrust, 'ToggleInfoDisplay')) {\n\t\t\t\t_w.OneTrust.ToggleInfoDisplay();\n\t\t\t}\n\t\t}\n\t},\n\n\tOnConsentChanged: (e: any): any => {\n\t\t//return e;\n\t\tthrow new Error('Implement/override me in the component');\n\t},\n\n\t// hasGivenConsent(consentLevel: 'C0001'|'C0002'|'C0003'|'C0004'): boolean {\n\t// \tlet data: string[] = [];\n\t// \tif ((window as any).OnetrustActiveGroups) {\n\t// \t\tdata = (window as any).OnetrustActiveGroups.split(',');\n\t// \t}\n\t// \treturn consentLevel in data;\n\t// }\n\thasGivenConsent(): boolean {\n\t\tlet data: string[] = [];\n\t\tconst _w = window as any;\n\t\tif (_w && _w.OnetrustActiveGroups) {\n\t\t\tdata = _w.OnetrustActiveGroups.split(',');\n\t\t}\n\t\treturn data.indexOf('C0004') > -1;\n\t},\n\n\tGetDomainData(): OneTrustDomainData {\n\t\tconst data = [\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0002',\n\t\t\t\tPurposeId: 'XXXXXXXX-34B8-4A75-89D8-7BB3216F59D5',\n\t\t\t\tCustomGroupId: 'C0002',\n\t\t\t\tGroupId: '6c8a0b3c-4084-463d-a1ca-7734ce435047',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0003',\n\t\t\t\tPurposeId: 'XXXXXXXX-3A04-4FE7-8398-DBCB703A0DFB',\n\t\t\t\tCustomGroupId: 'C0003',\n\t\t\t\tGroupId: '486a5448-5ed1-41b9-928b-451ca2aa7d16',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0005',\n\t\t\t\tPurposeId: 'XXXXXXXX-B3C5-4331-B2A0-C43D713C9DD4',\n\t\t\t\tCustomGroupId: 'C0005',\n\t\t\t\tGroupId: 'ca46bf1f-69c9-4e9d-bb94-d5913e6bdaf5',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0004',\n\t\t\t\tPurposeId: 'XXXXXXXX-3A0E-40CE-9793-8C316662E14D',\n\t\t\t\tCustomGroupId: 'C0004',\n\t\t\t\tGroupId: '63fc57e8-4c97-4828-a9c6-bf0cb5e66c85',\n\t\t\t\tStatus: 'inactive',\n\t\t\t},\n\t\t\t{\n\t\t\t\tOptanonGroupId: 'C0001',\n\t\t\t\tPurposeId: 'XXXXXXXX-44DA-405C-91B8-485C58EA9165',\n\t\t\t\tCustomGroupId: 'C0001',\n\t\t\t\tGroupId: 'db8b7d34-8503-48ac-9cd5-2dba23c138c1',\n\t\t\t\tStatus: 'always active',\n\t\t\t},\n\t\t];\n\t\treturn {\n\t\t\tGroups: data,\n\t\t};\n\t},\n\tsetConsentProfile(options: ContentProfileOptions): void {\n\t\tconst _w = window as any;\n\t\tif (options && options.purposes && options.purposes.length > 0) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(_w, 'OneTrust')) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(_w.OneTrust, 'UpdateConsent')) {\n\t\t\t\t\t// call one trust hook for enabling consent for cookie category C0004\n\t\t\t\t\t_w.OneTrust.UpdateConsent('Category', 'C0004:1');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n};\n\ninterface OneTrustGroups {\n\t/** The group ID, like \"C0002\" */\n\tCustomGroupId: string;\n\t/** like \"C0DFCC30-34B8-4A75-89D8-7BB3216F59D5\" */\n\tPurposeId: string;\n\t// ...loads more props here\n}\nexport interface OneTrustDomainData {\n\tGroups: OneTrustGroups[];\n\t// ...\n}\ninterface ContentProfileOptions {\n\tpurposes: {\n\t\tId: string;\n\t\tTransactionType: 'CONFIRMED'; // or others\n\t}[];\n}\n// to see the one trust API in the window, just open a live website and in the console type:\n// OneTrust.\n// and you will see the methods/props available\n// The below is just for Storybook so components can call external OneTrust window methods, which exist in on live but not on local\nexport interface IOneTrustService {\n\t// OnetrustActiveGroups: string;\n\tToggleInfoDisplay: () => any;\n\tOnConsentChanged: (e: any) => any;\n\thasGivenConsent: () => any;\n\tGetDomainData: () => OneTrustDomainData | undefined;\n\tsetConsentProfile: (options: ContentProfileOptions) => any;\n\t// ...\n}\n","import ControllerBase from './../../../../global/js/ControllerBase';\nimport { YouTubePlayer as YouTubePlayerPlayer, Options } from 'youtube-player/dist/types';\nimport { VideoData } from './o-video.data';\n\n// see https://github.com/gajus/youtube-player/blob/879eab4ac23ff12509cbfc1363d4c3cd138a1d03/examples/src/youtube-player.js\nimport YouTubePlayer from 'youtube-player';\nimport PlayerStates from 'youtube-player/dist/constants/PlayerStates';\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IOneTrustService, OneTrustDomainData, OneTrustService } from './o-video.cookieservice';\nimport { MoleculeVideoOverlayEvents, MoleculeVideoOverlayEventTypes } from 'wolf/components/molecules/m-video-overlay/m-video-overlay.events';\nimport { OrganismVideoEvents, OrganismVideoEventTypes } from './o-video.events';\nimport { ControllerUnmount } from 'global/interfaces/controller.interface';\nglobal ? (global['YouTubePlayer'] = YouTubePlayer) : undefined;\n\ninterface ComponentRefs {\n\tposterContainer: 'posterContainer';\n\tloadingOverlay: 'loadingOverlay';\n\tplayerContainer: 'playerContainer';\n\tbrickOverlay: 'brickOverlay';\n\tcookieOverlay: 'cookieOverlay';\n\tcookieButtonWrapper: 'cookieButtonWrapper';\n}\n/**\n * Youtube video player using the Youtube IFrame Player API\n * @url https://yarnpkg.com/package/youtube-player#examples\n * @types youtube-player\n * @example https://github.com/gajus/youtube-player/blob/879eab4ac23ff12509cbfc1363d4c3cd138a1d03/examples/src/playing-video/index.html\n *\n * OneTrust Cookie handling\n * 1. Check if 'C0004' exists in the window.OnetrustActiveGroups\n * 2a. If it does, initialize the video as normal (scripts load and user will see play button).\n * 2b. If it does not, show our custom overlay about cookies.\n * 3. When the user clicks our overlay button, toggle the OneTrust overlay: OneTrust.ToggleInfoDisplay()\n * 4. Listen for: OneTrust.OnConsentChanged callback. When the user accepts the cookies, hide the OneTrust overlay and load the video (like in 2a).\n */\nexport default class ControllerVideo extends ControllerBase implements ControllerUnmount {\n\tprivate static componentRefs: ComponentRefs = {\n\t\tposterContainer: 'posterContainer',\n\t\tloadingOverlay: 'loadingOverlay',\n\t\tplayerContainer: 'playerContainer',\n\t\tbrickOverlay: 'brickOverlay',\n\t\tcookieOverlay: 'cookieOverlay',\n\t\tcookieButtonWrapper: 'cookieButtonWrapper',\n\t};\n\n\t/** The container with poster bg, play and loading */\n\tprivate posterContainer: HTMLDivElement;\n\t/** The loading spinner */\n\tprivate loadingOverlay: HTMLDivElement;\n\t/** The main youtube video container */\n\tprivate playerContainer: HTMLDivElement;\n\t/** The custom design overlay for the feature */\n\tprivate brickOverlay: HTMLDivElement;\n\t/** The overlay which shows so user can consent to cookies */\n\tprivate cookieOverlay: HTMLDivElement;\n\t/** The cookie button wrapper */\n\tprivate cookieButtonWrapper: HTMLDivElement;\n\t/** The cookie button (for clicks to accept cookies) */\n\tprivate cookieButton: HTMLAnchorElement | HTMLButtonElement | undefined = undefined;\n\t/** The main player element */\n\tprivate runningInit: boolean;\n\n\tprivate globalVideoObject = 'ControllerVideo__videosList';\n\tprivate player: YouTubePlayerPlayer | undefined;\n\tprivate playerInstanceId: BehaviorSubject;\n\tprivate playerReady: BehaviorSubject;\n\t/** Event fired when this script has been injected into the page: https://www.youtube.com/iframe_api */\n\tprivate youtubeScriptLoaded: BehaviorSubject;\n\n\tprivate youtubeIframeApiReady: BehaviorSubject;\n\n\t/** The external video data */\n\tprivate readonly video: VideoData;\n\n\t/** Bypasses the need to consent to cookies */\n\tprivate cookieConsentBypass = false;\n\n\t/** Subscription management for cookie button click */\n\tprivate unsubscribeCookieClick: Subject;\n\n\t/** Subscription management */\n\tprivate _unsubscribeAll: Subject;\n\n\toneTrustService: IOneTrustService;\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper(element, [], Object.values(ControllerVideo.componentRefs), true);\n\n\t\tthis.unsubscribeCookieClick = new Subject();\n\n\t\tthis.playerReady = new BehaviorSubject(false);\n\t\tthis.playerInstanceId = new BehaviorSubject('');\n\t\tthis.youtubeScriptLoaded = new BehaviorSubject(false);\n\t\tthis.youtubeIframeApiReady = new BehaviorSubject('');\n\t\tthis.runningInit = false;\n\n\t\t// this.playerInstanceId.next((1000 * Math.random()).toString().replace('.', ''));\n\n\t\t// handle subscriptions\n\t\tthis._unsubscribeAll = new Subject();\n\n\t\tthis.handleVideoPlayerReady = this.handleVideoPlayerReady.bind(this);\n\t\tthis.createNewPlayer = this.createNewPlayer.bind(this);\n\n\t\tthis.manuallyGetRefs();\n\n\t\t// check cookie consent status from data\n\t\tthis.cookieConsentBypass = Object.prototype.hasOwnProperty.call(this.$element.dataset, 'consent');\n\t\t//? this.$element.dataset.consent === 'true'\n\t\t//: false;\n\n\t\t// get video data from elem data attrib\n\t\tconst data = this.$element.dataset?.video || '';\n\t\tif (data) {\n\t\t\tthis.video = JSON.parse(this.$element.dataset?.video || '');\n\n\t\t\tconst _window = window as any;\n\n\t\t\tif (this.video.videoId) {\n\t\t\t\tif (_window.OneTrust) {\n\t\t\t\t\tthis.tryToInitVideo();\n\t\t\t\t} else {\n\t\t\t\t\twindow.addEventListener('load', (e) => {\n\t\t\t\t\t\tlet i = 0;\n\n\t\t\t\t\t\tconst refreshId = setInterval(() => {\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\tif (_window.OneTrust) {\n\t\t\t\t\t\t\t\tthis.tryToInitVideo();\n\t\t\t\t\t\t\t\tclearInterval(refreshId);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (i > 90) {\n\t\t\t\t\t\t\t\tclearInterval(refreshId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate tryToInitVideo(): void {\n\t\t// store the player instance as a unique ref to the video\n\t\tthis.playerInstanceId.next(this.video.videoId);\n\t\tthis.setPlayerEvents();\n\t\tthis.setCookieListeners();\n\t\t// observe pause-all/stop-all events (so external components can tell the video to stop)\n\t\tthis.observeExternalVideoEvents();\n\t\tthis.init();\n\t}\n\n\tprivate manuallyGetRefs(): void {\n\t\tfor (const key in ControllerVideo.componentRefs) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(ControllerVideo.componentRefs, key)) {\n\t\t\t\tconst ref = ControllerVideo.componentRefs[key];\n\t\t\t\tconst test = Array.from(this.$element.querySelectorAll('div[data-ref=' + ref + ']'));\n\t\t\t\tif (test.length > 0) {\n\t\t\t\t\tthis[ref] = test[0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.cookieButtonWrapper) {\n\t\t\tconst cookieButtons = this.cookieButtonWrapper.querySelectorAll('.o-video .a-button');\n\t\t\tif (cookieButtons.length === 1) {\n\t\t\t\tthis.cookieButton = cookieButtons[0];\n\t\t\t}\n\t\t}\n\n\t\t// const _playerContainers = Array.from(this.$element.querySelectorAll('div[data-ref=' + ControllerVideo.componentRefs.playerContainer + ']'));\n\t\t// const playerContainer = _playerContainers.length > 0 ? _playerContainers[0] : undefined;\n\t\t// if (playerContainer) {\n\t\t// \tthis.playerContainer = playerContainer;\n\t\t// }\n\n\t\t// const _posterContainer = Array.from(this.$element.querySelectorAll('div[data-ref=' + ControllerVideo.componentRefs.posterContainer + ']'));\n\t\t// const posterContainer = _posterContainer.length > 0 ? _posterContainer[0] : undefined;\n\t\t// if (posterContainer) {\n\t\t// \tthis.posterContainer = posterContainer;\n\t\t// }\n\n\t\t// this.posterContainer = this.$references.posterContainer as HTMLDivElement;\n\t\t// this.loadingOverlay = this.$references.loadingOverlay as HTMLDivElement;\n\n\t\t// // this.playerContainer = this.$references.playerContainer as HTMLDivElement;\n\n\t\t// this.brickOverlay = this.$references.brickOverlay as HTMLDivElement;\n\t\t// this.cookieOverlay = this.$references.cookieOverlay as HTMLDivElement;\n\t\t// this.cookieButtonWrapper = this.$references.cookieButtonWrapper as HTMLDivElement;\n\t\t// if (this.cookieButtonWrapper) {\n\t\t// \tconst cookieButtons = this.cookieButtonWrapper.querySelectorAll<'a'>('a');\n\t\t// \tcookieButtons.length === 1 ? this.cookieButton = cookieButtons[0] : undefined;\n\t\t// }\n\t}\n\n\tprivate getVideoContainerName(videoId: VideoData['videoId'], instanceId: VideoData['instanceId']): string {\n\t\treturn ['video', videoId, instanceId || ''].join('_');\n\t}\n\n\tprivate setPlayerEvents(): void {\n\t\tfromEvent(window, OrganismVideoEvents.iframeAPIReady)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\tif (e && e.detail) {\n\t\t\t\t\tconst videosList: Record = (window as any)[this.globalVideoObject] || {};\n\t\t\t\t\t// load videos which are not there yet for this video ID only\n\t\t\t\t\tconst id = this.video.videoId;\n\t\t\t\t\tconst instanceId = this.video.instanceId || '';\n\t\t\t\t\tfor (const videoId in videosList) {\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(videosList, videoId)) {\n\t\t\t\t\t\t\tconst videoContainerName = this.getVideoContainerName(videoId, instanceId);\n\t\t\t\t\t\t\tconst videoContainer = document.getElementById(videoContainerName) as HTMLDivElement;\n\t\t\t\t\t\t\tif (videoContainer && videoContainer.children.length === 0 && videoId === id) {\n\t\t\t\t\t\t\t\t// console.log('loading video', videoId);\n\t\t\t\t\t\t\t\tthis.initVideoPlayer(videoContainer, (window as any)[this.globalVideoObject][videoId]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// console.log('load video?', this.playerInstanceId.getValue());\n\t\t\t\t\t// console.log(window[this.globalVideoObject]);\n\n\t\t\t\t\t// build video iframes\n\t\t\t\t\t// ID = \"video_RvRhUHTV_8k\";\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.youtubeScriptLoaded.pipe(takeUntil(this._unsubscribeAll)).subscribe((hasLoaded) => {\n\t\t\tif (hasLoaded) {\n\t\t\t\t// console.log('youtube script loaded');\n\t\t\t\t// this.handleVideoPlayerReady();\n\t\t\t}\n\t\t});\n\n\t\tthis.youtubeIframeApiReady.pipe(takeUntil(this._unsubscribeAll)).subscribe((isReady) => {\n\t\t\tif (isReady) {\n\t\t\t\t// console.log('onYouTubeIframeAPIReady iframe API is ready');\n\t\t\t\t// this.initVideoPlayer();\n\t\t\t}\n\t\t});\n\n\t\tthis.playerReady.pipe(takeUntil(this._unsubscribeAll)).subscribe((isReady) => {\n\t\t\tif (isReady) {\n\t\t\t\t// this.initVideoPlayer();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setCookieListeners(): void {\n\t\tconst _window = window as any;\n\n\t\t// map global service API to local scoped functions\n\t\tif (OneTrustService) {\n\t\t\t// register service\n\t\t\tthis.oneTrustService = OneTrustService;\n\t\t\t// register callback for consent\n\n\t\t\tthis.oneTrustService.OnConsentChanged = (e) => this.consentChanged(e);\n\n\t\t\t// register callback for display\n\t\t\tthis.oneTrustService.ToggleInfoDisplay = () => this.toggleOneTrustOverlay();\n\t\t\tOneTrustService.OnConsentChanged = (e: any) => this.consentChanged(e);\n\n\t\t\tthis.oneTrustService.GetDomainData = () => this.getDomainData();\n\t\t}\n\n\t\t//override the window function for OnConsentChanged. This will be from Storybook or from OneTrust, depending on the env\n\t\tif (_window.OneTrust) {\n\t\t\t_window.OneTrust.OnConsentChanged((e) => {\n\t\t\t\tthis.consentChanged(e);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the user has given cookie consent\n\t * @tbc (Currently set from external data)\n\t * @returns boolean\n\t */\n\tprivate hasGivenCookieConsent = (): boolean => OneTrustService.hasGivenConsent();\n\n\t/**\n\t * Toggle the one trust overlay\n\t * @returns void\n\t */\n\tprivate toggleOneTrustOverlay(): void {\n\t\t// this comes from storybook preview-body.html scripts or live\n\t\twindow && (window as any).OneTrust && (window as any).OneTrust.ToggleInfoDisplay();\n\t}\n\n\tprivate getDomainData(): OneTrustDomainData | undefined {\n\t\tlet data: OneTrustDomainData | undefined = undefined;\n\t\tif (window && (window as any).OneTrust) {\n\t\t\tdata = (window as any).OneTrust.GetDomainData();\n\t\t}\n\t\treturn data;\n\t}\n\n\tprivate setConsentProfile(e: any): void {\n\t\twindow && (window as any).OneTrust && (window as any).OneTrust.setConsentProfile(e);\n\t}\n\n\t/**\n\t * Event triggered when the user interacts with OneTrust cookie settings on the UI\n\t * @param {any} e The event. e.detail is like: \",C0001,\" (if user only accepts necessary cookies) or; \",C0001,C0002,C0003,C0004,\" (if they accept all)\n\t * @returns void\n\t */\n\tprivate consentChanged(e: any): void {\n\t\tif (this.hasGivenCookieConsent()) {\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\tprivate hasConsent(): boolean {\n\t\treturn this.cookieConsentBypass === true && this.hasGivenCookieConsent();\n\t}\n\n\tprivate init(): void {\n\t\tif (this.hasConsent()) {\n\t\t\t//console.log('Has cookie consent is true...');\n\t\t\t// hide overlay\n\t\t\tdocument.querySelectorAll('.o-video__cookieNotice').forEach((item) => {\n\t\t\t\titem.classList.add('uk-hidden');\n\t\t\t});\n\t\t\t// this.hide(this.cookieOverlay); // it hides cookie notice only on the first video\n\t\t\tthis.load();\n\t\t\tthis.dynamicLoadAdditionalPlayers();\n\t\t} else {\n\t\t\tif (this.runningInit) return;\n\t\t\tthis.runningInit = true;\n\t\t\t//console.log('Has cookie consent is false...');\n\t\t\t// show cookie message and wait for consent\n\t\t\tthis.show(this.cookieOverlay);\n\t\t\tthis.observeCookieAuthorise();\n\t\t\tdocument.querySelectorAll('.o-video__cookieNotice').forEach((item) => {\n\t\t\t\titem.classList.remove('uk-hidden');\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Load any video players which were not mounted, such as one's injected into the DOM after the youtube script loaded\n\t * @returns void\n\t */\n\tprivate dynamicLoadAdditionalPlayers(): void {\n\t\tif (this.playerContainer && this.playerContainer.children.length === 0) {\n\t\t\tthis.initVideoPlayer(this.playerContainer, (window as any)[this.globalVideoObject][this.video.videoId]);\n\t\t}\n\t\tlet c: Date;\n\t}\n\n\t/**\n\t * Listen for stop-all events on the window\n\t * @returns void\n\t */\n\tprivate observeExternalVideoEvents(): void {\n\t\tfromEvent(window, OrganismVideoEvents.stopAll)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\tif (e && e.detail) {\n\t\t\t\t\t// stop the video\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t});\n\n\t\tfromEvent(window, OrganismVideoEvents.pauseAll)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\tif (e && e.detail) {\n\t\t\t\t\t// pause the video\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// fromEvent(window, '')\n\t\t// .pipe(\n\t\t// \ttakeUntil(this._unsubscribeAll),\n\t\t// )\n\t\t// .subscribe((e: CustomEvent<\n\t\t// \tOrganismVideoEventTypes['stopAll']\n\t\t// >) => {\n\t\t// \tif (e && e.detail) {\n\t\t// \t\t// stop the video\n\t\t// \t\tthis.stop();\n\t\t// \t}\n\t\t// });\n\t}\n\n\t/**\n\t * Run once cookie consent has been given\n\t * @returns void\n\t */\n\tprivate load(): void {\n\t\t// setup script loaded listener\n\t\t// @todo - doesn't work?\n\t\t// window.addEventListener('onYoutubeScriptLoaded', () => {\n\t\t// \tconsole.log('onYoutubeScriptLoaded');\n\t\t// \tthis.youtubeScriptLoaded.next(true);\n\t\t// });\n\t\tif (!(window as any).onYouTubeIframeAPIReady) {\n\t\t\t/**\n\t\t\t * @link https://developers.google.com/youtube/iframe_api_reference\n\t\t\t * onYouTubeIframeAPIReady – The API will call this function when the page has finished downloading the JavaScript for the player API, which\n\t\t\t * enables you to then use the API on your page. Thus, this function might create the player objects that you want to display when the page loads.\n\t\t\t */\n\t\t\t(window as any).onYouTubeIframeAPIReady = () => {\n\t\t\t\tthis.dispatchCustomEvent(OrganismVideoEvents.iframeAPIReady, true, true, true);\n\n\t\t\t\t// _window.dispatchEvent(new CustomEvent(eventName));\n\t\t\t\t// this.youtubeIframeApiReady.next(this.playerInstanceId.getValue());\n\t\t\t};\n\t\t}\n\n\t\tconst newVideosList = Object.assign({}, window[this.globalVideoObject] || {});\n\t\tnewVideosList[this.playerInstanceId.getValue()] = this.video;\n\n\t\twindow[this.globalVideoObject] = newVideosList;\n\n\t\t// load video scripts\n\t\tthis.prepareVideoPlayerScripts();\n\t}\n\n\t/**\n\t * Listen for when a user gives cookie consent by clicking the consent button. On click, hide overlay and init the video\n\t * @returns void\n\t */\n\tprivate observeCookieAuthorise(): void {\n\t\tif (!this.cookieButton) return;\n\n\t\t// observe button clicks\n\t\tfromEvent(this.cookieButton, 'click')\n\t\t\t.pipe(takeUntil(this.unsubscribeCookieClick || this._unsubscribeAll))\n\t\t\t.subscribe((e) => {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (this.oneTrustService) {\n\t\t\t\t\t// rather than toggle the info display (e.g. the OneTrust panel) we can simply set the marketing cookie opt-in directly\n\t\t\t\t\tconst cookiesSet = this.confirmCookieVideoPrefs();\n\t\t\t\t\tif (cookiesSet) {\n\t\t\t\t\t\t// hide overlay\n\t\t\t\t\t}\n\t\t\t\t\t// show the OneTrust cookie overlay\n\t\t\t\t\t// this.oneTrustService.ToggleInfoDisplay();\n\n\t\t\t\t\t// stop observing\n\t\t\t\t\t// this.unsubscribeCookieClick.next(true);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate acceptAndShowVideo(): void {\n\t\tif ((window as any).OneTrust) {\n\t\t\t(window as any).OnetrustActiveGroups = ',C0001,C0002,C0003,C0004,';\n\t\t\t(window as any).OneTrust.OnConsentChanged({\n\t\t\t\tdetail: (window as any).OnetrustActiveGroups,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.oneTrustService.OnConsentChanged({\n\t\t\t\tdetail: ',C0001,C0002,C0003,C0004,',\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate confirmCookieVideoPrefs(): boolean {\n\t\tconst oneTrustDomainData = this.oneTrustService.GetDomainData();\n\t\tif (oneTrustDomainData && oneTrustDomainData.Groups && oneTrustDomainData.Groups.length > 0) {\n\t\t\tconst group = oneTrustDomainData.Groups.find((g) => g.CustomGroupId === 'C0004');\n\t\t\tif (!group) return false;\n\n\t\t\t// TODO: this section can be simplified since we do not need the purposeID anymore, just the customGroupId to set the cookie in the setConsentProfile function below\n\t\t\tconst { PurposeId } = group;\n\n\t\t\t// OneTrust.setConsentProfile({\"purposes\":[{\"Id\":\"7EF94F5E-23AF-4DB8-9A62-E96A07075D29\",\"TransactionType\":\"CONFIRMED\"}]})\n\t\t\t// console.log('Manually setting marketing cookie for the user');\n\n\t\t\ttry {\n\t\t\t\tthis.oneTrustService.setConsentProfile({\n\t\t\t\t\tpurposes: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tId: PurposeId,\n\t\t\t\t\t\t\tTransactionType: 'CONFIRMED',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\t// console.log('Called OneTrust hook so should trigger OnConsentChanged function');\n\n\t\t\t\tif ((window as any).OneTrust && (window as any).OneTrust.Init) {\n\t\t\t\t\t// user has consented, rerun onetrust init\n\t\t\t\t\t(window as any).OneTrust.Init();\n\t\t\t\t} else {\n\t\t\t\t\t// user has consented anyway, bypass\n\t\t\t\t\tthis.cookieConsentBypass = true;\n\t\t\t\t\tthis.acceptAndShowVideo();\n\t\t\t\t}\n\t\t\t\tthis.init();\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\t// console.log('Error manually setting cookie preferences');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t// console.log('Could not manually set marketing cookie for the user, the domain groups were empty!');\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add video scripts to the DOM and init iframe\n\t */\n\tprivate prepareVideoPlayerScripts(): void {\n\t\tif (!(window as any).YT) {\n\t\t\t// Append YouTube API Script if it's not already injected into the DOM\n\t\t\tthis.appendYoutubeScript();\n\t\t}\n\t}\n\n\t/**\n\t * Add youtube iframe script to the DOM\n\t * @return {HTMLScriptElement}\n\t */\n\tprivate appendYoutubeScript(): HTMLScriptElement {\n\t\tconst scriptId = 'youtube-script';\n\t\tlet script = document.getElementById(scriptId) as HTMLScriptElement;\n\n\t\tif (!script) {\n\t\t\t// add the script if it doesn't yet exist\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.setAttribute('id', scriptId);\n\n\t\t\tscript.src = 'https://www.youtube.com/iframe_api';\n\n\t\t\tconst firstScriptTag = document.getElementsByTagName('script')[0];\n\t\t\tif (firstScriptTag) {\n\t\t\t\tfirstScriptTag && firstScriptTag.parentNode?.insertBefore(script, firstScriptTag);\n\t\t\t}\n\t\t}\n\t\treturn script;\n\t}\n\n\t/**\n\t * Init video player from data\n\t */\n\tprivate initVideoPlayer(playerContainer: HTMLDivElement, videoData: VideoData): void {\n\t\tif (playerContainer) {\n\t\t\tconst id = videoData.videoId || this.video.videoId;\n\t\t\t// console.log('Init video instance', this.video.instanceId);\n\n\t\t\t// Create a new DOM element to initialize the youtube player iframe inside of the player container\n\t\t\tconst playerElement = document.createElement('div');\n\n\t\t\tplayerContainer.appendChild(playerElement);\n\n\t\t\tconst playerVars: Options['playerVars'] = {\n\t\t\t\t// autoplay: this.video.settings.autoplay ? 1 : 0,\n\t\t\t\tautoplay: 0,\n\t\t\t\t// @todo - this is the starting time of the video, in seconds\n\t\t\t\tstart: 0,\n\t\t\t\tcontrols: this.video.settings.controls ? 1 : 0,\n\t\t\t\tloop: this.video.settings.loop ? 1 : 0,\n\t\t\t\tmodestbranding: 1, // Gets overriden by YouTube to 0 whenever controls are deactivated\n\t\t\t};\n\t\t\tif (this.video.settings.loop) {\n\t\t\t\tplayerVars.playlist = id; // Video only loops if the player will be initalized as a playlist)\n\t\t\t}\n\n\t\t\t// setup player options\n\t\t\tconst playerOptions: Options = {\n\t\t\t\tvideoId: id,\n\t\t\t\tplayerVars: playerVars,\n\t\t\t\t// events: {\n\t\t\t\t// \t// ready: () => this.handleVideoPlayerReady(),\n\t\t\t\t// \t// stateChange: (e: any) => this.handleVideoStateChange(e),\n\t\t\t\t// \t// error: (e: any) => this.onVideoError(e),\n\t\t\t\t// }\n\t\t\t};\n\n\t\t\tthis.createNewPlayer(playerElement, playerOptions, videoData);\n\t\t}\n\t}\n\n\tprivate createNewPlayer(playerElement: HTMLDivElement, playerOptions: Options, videoData: VideoData): void {\n\t\t// console.log('youtube iframe ready');\n\t\tthis.player = YouTubePlayer(playerElement, playerOptions);\n\n\t\tthis.player.on('ready', (event) => this.handleVideoPlayerReady(videoData));\n\t\t// (this.player as any).on('onReady', (event) => this.handleVideoPlayerReady(event));\n\n\t\tthis.player.on('error', (event) => this.onVideoError(event));\n\n\t\t// // set a unique instance ID on the DOM container\n\t\t// const newInstanceId = new Date().getTime().toString();\n\t\t// this.playerContainer.dataset.instanceid = newInstanceId;\n\t\t// this.playerInstanceId.next(newInstanceId);\n\n\t\t// set up a state change callback\n\t\tthis.player.on('stateChange', (event: CustomEvent & { data: number }) => {\n\t\t\t// console.log(event)\n\t\t\tthis.handleVideoStateChange(event);\n\t\t});\n\t\tthis.playerReady.next(true);\n\t}\n\n\t// private createNewPlayer(playerElement: HTMLDivElement, playerOptions: Options): void {\n\t// \t// new player instance\n\t// \t// this.player = YouTubePlayer(playerElement, playerOptions);\n\n\t// \t// https://developers.google.com/youtube/player_parameters#Embedding_a_Player\n\t// \t(window as any).onYouTubePlayerAPIReady = () => {\n\t// \t\t// console.log('youtube iframe ready');\n\t// \t\tthis.player = YouTubePlayer(playerElement, playerOptions);\n\n\t// \t\tthis.player.on('ready', (event) => this.handleVideoPlayerReady(event));\n\t// \t\t// (this.player as any).on('onReady', (event) => this.handleVideoPlayerReady(event));\n\n\t// \t\tthis.player.on('error', (event) => this.onVideoError(event));\n\n\t// \t\t// // set a unique instance ID on the DOM container\n\t// \t\t// const newInstanceId = new Date().getTime().toString();\n\t// \t\t// this.playerContainer.dataset.instanceid = newInstanceId;\n\t// \t\t// this.playerInstanceId.next(newInstanceId);\n\n\t// \t\t// set up a state change callback\n\t// \t\tthis.player.on('stateChange', (event: CustomEvent & { data: number }) => {\n\t// \t\t\t// console.log(event)\n\t// \t\t\tthis.handleVideoStateChange(event);\n\t// \t\t});\n\t// \t\tthis.playerReady.next(true);\n\t// \t}\n\t// \t// if (!this.player) {\n\t// \t// }\n\t// }\n\n\t/**\n\t * Event listener for player state changes - e.g. when user interacts with the youtube iframe player, youtube fires a state change event\n\t * @param {CustomEvent&{data:number}} event\n\t * @returns void\n\t */\n\tprivate handleVideoStateChange(event: CustomEvent & { data: number }): void {\n\t\tswitch (event && event.data) {\n\t\t\tcase PlayerStates.PLAYING: {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase PlayerStates.PAUSED:\n\t\t\tcase PlayerStates.ENDED: {\n\t\t\t\t// show the brick overlay\n\t\t\t\tthis.show(this.brickOverlay);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * @todo - Intended for video loading errors\n\t * @param {CustomEvent} event\n\t * @returns void\n\t */\n\tprivate onVideoError(event: CustomEvent): void {\n\t\t// console.log('Video error', event);\n\t}\n\n\t/**\n\t * @todo\n\t * Callback to watch for YouTube video iframe ready\n\t * Set video player options and show play button\n\t */\n\tprivate handleVideoPlayerReady(videoData: VideoData): void {\n\t\t// Hide Loading Overlay\n\t\tsetTimeout(() => {\n\t\t\tthis.hide(this.loadingOverlay);\n\t\t}, 500);\n\n\t\t// since we didn't know the height of the video until it was loaded, set the height of the video wrapper\n\t\t// based on the width and height attribs of the iframe, now that it has loaded\n\t\t// @todo\n\n\t\t// Watch for playing on the inner molecule\n\t\tconst molecule = this.brickOverlay.querySelector('div.m-video-overlay');\n\t\tif (!molecule) return;\n\n\t\tfromEvent(molecule, MoleculeVideoOverlayEvents.playButtonClicked)\n\t\t\t.pipe(takeUntil(this._unsubscribeAll))\n\t\t\t.subscribe((e: CustomEvent) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (e.detail) {\n\t\t\t\t\t// button was clicked\n\t\t\t\t\tthis.hide(this.brickOverlay);\n\t\t\t\t\tthis.hide(this.posterContainer);\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Starts or resumes the video player\n\t * */\n\tprivate play(): void {\n\t\tthis.player && this.player.playVideo();\n\t}\n\n\tprivate stop(): void {\n\t\tthis.player && this.player.stopVideo();\n\t}\n\n\tprivate pause(): void {\n\t\tthis.player && this.player.pauseVideo();\n\t}\n\n\t/**\n\t * Show an element by reference by removing its uk-hidden class\n\t * @param {T} ref\n\t * @returns void\n\t */\n\tprivate show(ref: T): void {\n\t\t// const elem = this.$references[ref as string] as T;\n\t\tref && ref.classList.remove('uk-hidden');\n\t}\n\n\t/**\n\t * Hide an element by reference by adding a uk-hidden class\n\t * @param {T} ref\n\t * @returns void\n\t */\n\tprivate hide(ref: T): void {\n\t\t// const elem = this.$references[ref];\n\t\tref && ref.classList.add('uk-hidden');\n\t}\n\n\tpublic onControllerUnmount(): void {\n\t\t// console.log('Unmounting component');\n\t\tthis.player = undefined;\n\n\t\t// remove the player iframe from the DOM\n\t\tif (this.posterContainer) {\n\t\t\twhile (this.posterContainer.firstChild) {\n\t\t\t\tthis.posterContainer.removeChild(this.posterContainer.firstChild);\n\t\t\t}\n\t\t}\n\n\t\t// remove subscribers\n\t\tthis._unsubscribeAll.next();\n\t\tthis._unsubscribeAll.complete();\n\t}\n}\n","import { ComponentEvents } from '../../../../global/interfaces/component.interface';\n\nconst EVENT_PREFIX = 'OrganismVideoEvents__';\n\n/** The type of custom events emitted */\nexport type OrganismVideoEventTypes = {\n\tiframeAPIReady: true;\n\tstopAll: true;\n\tpauseAll: true;\n};\n\n/** The event names for the above events */\nexport const OrganismVideoEvents: ComponentEvents = {\n\tiframeAPIReady: EVENT_PREFIX + 'IframeAPIReady',\n\t/** Event for listening out for \"stop all\" video events on the window */\n\tstopAll: EVENT_PREFIX + 'StopAll',\n\t/** Event for listening out for \"pause all\" video events on the window */\n\tpauseAll: EVENT_PREFIX + 'PauseAll',\n};\n"],"names":["SimpleInnerSubscriber","_super","parent","_this","call","this","prototype","_next","value","notifyNext","_error","error","notifyError","unsubscribe","_complete","notifyComplete","SimpleOuterSubscriber","apply","arguments","innerValue","destination","next","err","complete","innerSubscribe","result","innerSubscriber","closed","subscribe","subscription","takeUntil","notifier","source","lift","TakeUntilOperator","subscriber","takeUntilSubscriber","TakeUntilSubscriber","notifierSubscription","seenValue","add","getSymbolIterator","Symbol","iterator","isArrayLike","x","length","isPromise","then","subscribeTo","obj","obs","TypeError","subscribeToArray","promise","hostReportError","iterable","item","done","return","isObject","array","i","len","DomServices","constructor","element","references","onDomElementChanged","Subject","parseStringToHtml","htmlAsString","parsedNode","DOMParser","parseFromString","body","firstChild","renderDomElement","ref","html","renderOnParent","refExists","$references","Object","hasOwnProperty","undefined","$element","innerHTML","domElementChanged","console","warn","appendRawHtmlToDomElement","node","position","htmlNode","insertAdjacentElement","replaceLastChildElementWithRawHtml","lastNode","childNodes","replaceChild","reference","parseDOMScriptTag","elementId","data","document","getElementById","JSON","parse","innerText","collectReferences","ignoredReferences","includedReferences","refs","Array","from","querySelectorAll","forEach","el","referenceName","dataset","includes","window","location","hostname","name","getRef","toggleElementState","control","newState","state","removeAttribute","setAttribute","renderDomElementInHTMLElement","InputClasses","InputServices","observedInputs","subscribeInputWithErrorRemovalOnInputChange","event","onChange","castEvent","target","label","previousElementSibling","classList","contains","errorClass","remove","input","errorMessage","nextElementSibling","mapInputEvent","addFocusToInput","inputName","querySelector","focus","observeElementEvents","inputEvent","inputToObserve$","fromEvent","pipe","map","addErrorsToFieldset","errors","onErrorsUpdated","Error","keys","addOrRemoveFormValidationError","inputNameToFocus","firstErrorElement","scrollIntoView","showOrHide","errorMessageContainer","hiddenClass","ControllerBase","disableReferenceCollection","domUtils","inputUtils","dispatchCustomEvent","detail","bubbles","dispatchOnWindow","dispatchOnSpecificElement","customEvent","CustomEvent","dispatchEvent","MoleculeVideoOverlayEvents","playButtonClicked","EVENT_PREFIX","OneTrustService","ToggleInfoDisplay","_w","OneTrust","OnConsentChanged","e","hasGivenConsent","OnetrustActiveGroups","split","indexOf","GetDomainData","Groups","OptanonGroupId","PurposeId","CustomGroupId","GroupId","Status","setConsentProfile","options","purposes","UpdateConsent","g","ControllerVideo","super","values","componentRefs","cookieButton","globalVideoObject","cookieConsentBypass","hasGivenCookieConsent","unsubscribeCookieClick","playerReady","BehaviorSubject","playerInstanceId","youtubeScriptLoaded","youtubeIframeApiReady","runningInit","_unsubscribeAll","handleVideoPlayerReady","bind","createNewPlayer","manuallyGetRefs","video","_window","videoId","tryToInitVideo","addEventListener","refreshId","setInterval","clearInterval","setPlayerEvents","setCookieListeners","observeExternalVideoEvents","init","key","test","cookieButtonWrapper","cookieButtons","getVideoContainerName","instanceId","join","iframeAPIReady","videosList","id","videoContainerName","videoContainer","children","initVideoPlayer","hasLoaded","isReady","oneTrustService","consentChanged","toggleOneTrustOverlay","getDomainData","hasConsent","load","dynamicLoadAdditionalPlayers","show","cookieOverlay","observeCookieAuthorise","playerContainer","stopAll","stop","pauseAll","pause","onYouTubeIframeAPIReady","newVideosList","assign","getValue","prepareVideoPlayerScripts","preventDefault","confirmCookieVideoPrefs","acceptAndShowVideo","oneTrustDomainData","group","find","Id","TransactionType","Init","YT","appendYoutubeScript","scriptId","script","createElement","src","firstScriptTag","getElementsByTagName","parentNode","insertBefore","videoData","playerElement","appendChild","playerVars","autoplay","start","controls","settings","loop","modestbranding","playlist","playerOptions","player","on","onVideoError","handleVideoStateChange","brickOverlay","setTimeout","hide","loadingOverlay","molecule","posterContainer","play","playVideo","stopVideo","pauseVideo","onControllerUnmount","removeChild","OrganismVideoEvents"],"sourceRoot":""}