{"version":3,"file":"ngx-cvbsp-player.mjs","sources":["../../../projects/ngx-cvbsp-player/src/lib/model/multilang.ts","../../../projects/ngx-cvbsp-player/src/lib/model/content-data.ts","../../../projects/ngx-cvbsp-player/src/lib/model/block.ts","../../../projects/ngx-cvbsp-player/src/lib/model/content.ts","../../../projects/ngx-cvbsp-player/src/lib/model/tracking.ts","../../../projects/ngx-cvbsp-player/src/lib/model/player-config.ts","../../../projects/ngx-cvbsp-player/src/lib/model/variable.ts","../../../projects/ngx-cvbsp-player/src/lib/model/remote-order.ts","../../../projects/ngx-cvbsp-player/src/lib/util/util.service.ts","../../../projects/ngx-cvbsp-player/src/lib/util/translations.ts","../../../projects/ngx-cvbsp-player/src/lib/remote-control.service.ts","../../../projects/ngx-cvbsp-player/src/lib/preview-persistor.service.ts","../../../projects/ngx-cvbsp-player/src/lib/local-persistor.service.ts","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-persistor.service.ts","../../../projects/ngx-cvbsp-player/src/lib/lazy-loading.service.ts","../../../projects/ngx-cvbsp-player/src/lib/modal/modal.ts","../../../projects/ngx-cvbsp-player/src/lib/modal/modal.service.ts","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-player.service.ts","../../../projects/ngx-cvbsp-player/src/lib/util/multilang.pipe.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/list-block-order/list-block-order.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/list-block-order/list-block-order.component.html","../../../projects/ngx-cvbsp-player/src/lib/contents/actions-bar/actions-bar.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/actions-bar/actions-bar.component.html","../../../projects/ngx-cvbsp-player/src/lib/contents/remote-ctrl/remote-ctrl.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/remote-ctrl/remote-ctrl.component.html","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-instant-connector.service.ts","../../../projects/ngx-cvbsp-player/src/lib/util/safe-html.pipe.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/qcm/qcm.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/qcm/qcm.component.html","../../../projects/ngx-cvbsp-player/src/lib/contents/qcu/qcu.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/qcu/qcu.component.html","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-realtime-multi.service.ts","../../../projects/ngx-cvbsp-player/src/lib/html-compiler/html-compiler.component.ts","../../../projects/ngx-cvbsp-player/src/lib/html-compiler/html-compiler.component.html","../../../projects/ngx-cvbsp-player/src/lib/contents/rich-text/rich-text.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/rich-text/rich-text.component.html","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-player/content.directive.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/lang/lang.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/lang/lang.component.html","../../../projects/ngx-cvbsp-player/src/lib/contents/export-doc/export-doc.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/export-doc/export-doc.component.html","../../../projects/ngx-cvbsp-player/src/lib/contents/plugin-viewer/plugin-viewer.component.ts","../../../projects/ngx-cvbsp-player/src/lib/contents/plugin-viewer/plugin-viewer.component.html","../../../projects/ngx-cvbsp-player/src/lib/map-component.service.ts","../../../projects/ngx-cvbsp-player/src/lib/std-actions-bar/std-actions-bar.component.ts","../../../projects/ngx-cvbsp-player/src/lib/std-actions-bar/std-actions-bar.component.html","../../../projects/ngx-cvbsp-player/src/lib/eval-board/eval-board.component.ts","../../../projects/ngx-cvbsp-player/src/lib/eval-board/eval-board.component.html","../../../projects/ngx-cvbsp-player/src/lib/modal/modal.component.ts","../../../projects/ngx-cvbsp-player/src/lib/modal/modal.component.html","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-player/ngx-cvbsp-player.component.ts","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-player/ngx-cvbsp-player.component.html","../../../projects/ngx-cvbsp-player/src/lib/ngx-cvbsp-player.module.ts","../../../projects/ngx-cvbsp-player/src/lib/modal/modal-button.ts","../../../projects/ngx-cvbsp-player/src/lib/model/training-certificat.ts","../../../projects/ngx-cvbsp-player/src/public-api.ts","../../../projects/ngx-cvbsp-player/src/ngx-cvbsp-player.ts"],"sourcesContent":["export class Multilang {\r\n    /** just to keep it in db */\r\n    keep: string;\r\n\r\n    fr?: string;\r\n    en?: string;\r\n    es?: string;\r\n    it?: string;\r\n    pt?: string;\r\n    de?: string;\r\n    zh?: string;\r\n    ja?: string;\r\n    constructor() {\r\n        this.keep = '';\r\n    }\r\n}\r\n\r\n/** Language object that is available */\r\nexport class Lang {\r\n    /** key of the language (fr, en, es, etc..) */\r\n    key: string;\r\n    name: Multilang;\r\n}","import { Prerequisites, PrerequisiteType } from './block';\r\nimport { Multilang, Lang } from './multilang';\r\n\r\nexport interface IContentData {\r\n    /** deprecated - title is in the content object  */\r\n    title?: Multilang;\r\n    /** subtitle display in the nav actions bar  */\r\n    subtitle?: Multilang;\r\n    /** set to true to hide the title (and the subtitle) of the content */\r\n    hideTitle?: boolean;\r\n    /** label of the next button, beware it is multilang */\r\n    nextLabel?: Multilang;\r\n    /** label of the back button, beware it is multilang */\r\n    backLabel?: Multilang;\r\n    /** hide back button */\r\n    noBack?: boolean;\r\n    /** hide next button */\r\n    noNext?: boolean;\r\n    /** hide back button */\r\n    pathOutBack?: string;\r\n    /** hide next button */\r\n    pathOutNext?: string;\r\n    /** animation direction value possible H or V, H default if empty (vertical / horizontal) */\r\n    animDir?: string;\r\n    /** the content has its own time management system */\r\n    hasTimeSpent?: boolean;\r\n    /** languages available */\r\n    langs?: Lang[];\r\n    /** Css specific to content to apply to the player */\r\n    cssStyle?: string;\r\n    /** show the eval part beside the component */\r\n    showEval?: boolean;\r\n    /** show the bottom actions bar outside of the component, (all the associated properties are working: nextLabel, noBack, no Next, .etc )*/\r\n    showStdActions?: boolean;\r\n    /** show the top actions bar outside of the component, (all the associated properties are working: nextLabel, noBack, no Next, .etc )*/\r\n    showStdActionsTop?: boolean;\r\n    /** conditions to see this content (like prerequisites for block but just go to next content if not fullfill intsead of coming back to ) */\r\n    conditions?: ContentCondition[];\r\n    /** this content must not be counted in the score */\r\n    ignoreScore?: boolean;\r\n    /** this content must not be counted in the progress */\r\n    ignoreProgress?: boolean;\r\n    /** if set to true, the content is mandatory, the next button will be disabled until the content has 100% progression */\r\n    mandatory?: boolean;\r\n}\r\n\r\nexport class ContentData implements IContentData {\r\n    nextLabel: Multilang;\r\n    backLabel: Multilang;\r\n    title: Multilang;\r\n    langs: Lang[];\r\n    showEval: boolean;\r\n    showStdActions: boolean;\r\n    showStdActionsTop: boolean;\r\n    subtitle: Multilang;\r\n    mandatory: boolean;\r\n    constructor() {\r\n        this.title = new Multilang();\r\n        this.subtitle = new Multilang();\r\n        this.nextLabel = new Multilang();\r\n        this.backLabel = new Multilang();\r\n        this.langs = [];\r\n        this.showEval = true;\r\n        this.showStdActions = true;\r\n        this.showStdActionsTop = true;\r\n        if (ContentDataDefault.contentData) {\r\n            Object.assign(this, ContentDataDefault.contentData);\r\n        }\r\n    }\r\n}\r\n\r\nexport class ContentCondition {\r\n    /** type of the prerequisite, 2 options so far : Progress or Score. Default : Progress */\r\n    type: PrerequisiteType;\r\n    /** id of the content/block prerequisite that must be completed or succeded */\r\n    conditionBlockId: any;\r\n    /** minimimun completion or score of the content/block defined by blockId, value between 0 and 100  */\r\n    value?: number;\r\n    /** blockId where the user must be redirect if moving forward */\r\n    redirectBlockId: any;\r\n    /** blockId where the user must be redirect if moving backward */\r\n    redirectBackBlockId: any;\r\n\r\n    constructor() {\r\n        // default type is progress\r\n        this.type = PrerequisiteType.score;\r\n    }\r\n}\r\n\r\nexport class ContentDataDefault {\r\n    static contentData: IContentData = {};\r\n}","import { Tracking } from './tracking';\r\nimport { Multilang } from './multilang';\r\nimport { Content } from './content';\r\nimport { IContentData, ContentData } from './content-data';\r\nimport { IDimension } from './question-data';\r\nimport { RemoteOrder } from './remote-order';\r\n\r\nexport class Block {\r\n    // tslint:disable-next-line:variable-name\r\n    _id: string;\r\n    /** title of the block */\r\n    title: Multilang;\r\n    /** description of the block */\r\n    description: Multilang;\r\n\r\n    /** blocks and contents can be added in full (or by reference ids below) */\r\n    blocksOrContents: Block[];\r\n    /** tracking of this block */\r\n    tracking: Tracking;\r\n\r\n    /** @deprecated - not supproted anymore - property regarding the weigh of the block (ids or full object see properties below) */\r\n    lazyLoading: boolean;\r\n    /** @deprecated - not supproted anymore - blocks and contents can be added only by ids for light weighted block */\r\n    blockOrContentIds: string[];\r\n    /** @deprecated - not supproted anymore - tracking id if lightweighted */\r\n    trackingId: string;\r\n\r\n    /** if set to true, try to retrieve tracking value to resume the module  */\r\n    resume: boolean;\r\n    /** if set to true, the user will be ask to start here he left the module (only if the player find previous result) */\r\n    resumeNav: boolean;\r\n    /** class type of the block 2 options: Block, Content */\r\n    classType: string;\r\n    /** Lang of the passation  */\r\n    lang: string;\r\n    /** set the value of primary color, secondary color, etc. (e.i: for var --primary-color set { primary-color: '#fff' } ) */\r\n    design: any;\r\n    /** default data used in the content below if not exist */\r\n    defaultData: IContentData;\r\n    /** style apply to the block */\r\n    cssStyle: string;\r\n    /** All Dimensions availables on this block */\r\n    dimensions: IDimension[];\r\n    /** data for prerequisites, to restrict access to the completude of other content / block  */\r\n    prerequisites?: Prerequisites;\r\n    /** set to true if block is remote controlled by an animator */\r\n    remoteCtrl: boolean;\r\n    /**where we store order sent by animator if any */\r\n    order: RemoteOrder;\r\n    /** set to true, if content can only be seen by animator */\r\n    animatorOnly: boolean;\r\n    /** array of id of block to load the tracking from */\r\n    loadTrackingOf: string[];\r\n    /** url where to go when leaving the module */\r\n    leaveUrl: string;\r\n    /** percentage minimum needed to be in success on this block */\r\n    scorePercentSuccess: number;\r\n    /** if set to true, this content will no be counted in the overall progression  */\r\n    ignoreProgress: boolean;\r\n    /** if set to true, this content will no be counted in the overall score */\r\n    ignoreScore: boolean;\r\n    constructor(classType?: string) {\r\n        if (!classType) {\r\n            this.classType = 'Block';\r\n            this.blocksOrContents = [];\r\n            this.blockOrContentIds = [];\r\n            this.defaultData = new ContentData();\r\n        } else {\r\n            this.classType = classType;\r\n        }\r\n        this.design = {};\r\n        this.title = new Multilang();\r\n        this.description = new Multilang();\r\n        this.prerequisites = new Prerequisites();\r\n    }\r\n}\r\n\r\nexport class Prerequisites {\r\n    /** type of the prerequisite, 2 options so far : Progress or Score. Default : Progress */\r\n    type: PrerequisiteType;\r\n    /** id of the content/block prerequisite that must be completed or succeded */\r\n    blockId: any;\r\n    /** minimimun completion or score of the content/block defined by blockId, value between 0 and 100  */\r\n    value?: number;\r\n\r\n    constructor() {\r\n        // default type is progress\r\n        this.type = PrerequisiteType.progress;\r\n    }\r\n}\r\n\r\nexport enum PrerequisiteType {\r\n    score = 'SCORE',\r\n    progress ='PROGRESS',\r\n    /** the prerequisite is an order send by the animator, \r\n     * if not send not able to go further \r\n     * in case prerequisite is an order value property are useless\r\n     * */\r\n    order = 'ORDER'\r\n}\r\n","import { Block } from './block';\r\nimport { IContentData, ContentData } from './content-data';\r\n\r\nexport class Content extends Block {\r\n    data: IContentData;\r\n    component: any;\r\n\r\n    constructor() {\r\n        super('Content');\r\n        this.data = new ContentData();\r\n    }\r\n}\r\n","import { IVariable } from './variable';\r\n\r\nexport class Tracking {\r\n    /** id of the content or block id that the tracking belong to */\r\n    blockId: string;\r\n    /** id of the main block of the module that holds this block or content*/\r\n    mainBlockId: any;\r\n    /** id of the user that do the content/block */\r\n    userId: any;\r\n    /** id of the registration if exists */\r\n    registrationId: any;\r\n    /** the date when the block has been startedthe first time */\r\n    startedAt: Date;\r\n    /** the date when the block has been finished the first time */\r\n    finishedAt: Date;\r\n    /** the date when the block has been completed */\r\n    completedAt: Date;\r\n    /** the date when the block has been opened the last time */\r\n    lastLaunchDate: Date;\r\n    /** total time spent across session on the content/block in seconds */\r\n    timeSpent: number;\r\n    /** total time spent on the session on the content/block in seconds */\r\n    sessTimeSpent: number;\r\n    /** raw score of the content/block */\r\n    scoreRaw: number;\r\n    /** max score of the content/block */\r\n    scoreMax: number;\r\n    /** score in percentage of the content/block, value between 0 and 100  */\r\n    scorePercent: number;\r\n    /** score in percentage to be in success on the content/block, value between 0 and 100, if not set no success/failure concept  */\r\n    scorePercentSuccess?: number;\r\n    /** progression of the content/block in percentage , value between 0 and 100 */\r\n    progressionPercent: number;\r\n    /** raw progression of the content/block  */\r\n    progressionRaw: number;\r\n    /** data of the content needed at runtime (ex:  scorm data, responses to questions, any data needed for the content ) */\r\n    data?: any;\r\n    /** useful to let a component redirect the user to a specific content or block.\r\n     * It used the same notation that the path parameter (e.i: '1/1/1') however you can add absolute path '/1/1/1' \r\n     * it is necessary if you need to go out of the current block.\r\n     * */\r\n    pathOut?: string;\r\n    /** variables set by the content  */\r\n    variables?: IVariable[];\r\n    /** user evaluation in percent of the resource */\r\n    evalScore: number;\r\n    /** user evaluation comment of the resource */\r\n    evalCmt: string;\r\n    /** user evaluation reaction of the resource */\r\n    evalReac: string;\r\n    \r\n\r\n    constructor(blockId?: string, mainBlockId?: string, userId?: string, registrationId?: string) {\r\n        this.blockId = blockId;\r\n        this.mainBlockId = mainBlockId;\r\n        this.userId = userId;\r\n        this.registrationId = registrationId;\r\n    }\r\n}\r\n","import { IPersistor } from './persistor';\r\nimport { ILazyLoader } from './lazy-loader';\r\nimport { Multilang } from './multilang';\r\nimport { ContentData } from './content-data';\r\n\r\nexport class PlayerConfig {\r\n    debug?: boolean;\r\n    persistor?: IPersistor;\r\n    componentsToRegistered?: ComponentRegistration[];\r\n    lazyLoader?: ILazyLoader;\r\n}\r\n\r\nexport class ComponentRegistration {\r\n    className: string;\r\n    typeOf: any;\r\n}\r\n\r\nexport class PlayerComponentConfig {\r\n    loadingImgUrl?: string;\r\n    loadingMessage?: Multilang;\r\n    class?: string;\r\n    debug?: boolean;\r\n    evalLabel?: Multilang;\r\n    evalReacts?: Array<{ label: Multilang; icon?: string; value: string; iconSelected?: string; }>;\r\n    /** the default value of all content data when creating it - only if use of contentData constructor  */\r\n    contentDataDefault?: ContentData;\r\n}\r\n","export interface IVariable {\r\n    /** key to identify the variable */\r\n    key: string;\r\n    /** value of the variable (apply operation if same variable passed ) */\r\n    value?: any;\r\n    /** calculation to apply if there is variables passed in the component */\r\n    calc?: CalcType;\r\n}\r\n\r\nexport enum CalcType {\r\n    /** just set the variable */\r\n    Init,\r\n    /** make sum between value of init variable and this variable */\r\n    Sum,\r\n    /** make multiplicatio between value of init variable and this variable */\r\n    Multiply,\r\n    /** add percentage (corresponding to this value) to the init variable\r\n     *  (init + this.value = result, ex : 2 + 10% = 2.2 ) \r\n     */\r\n    Percent\r\n}\r\n","export class RemoteOrder {\r\n    /** block or content id where the order must apply on */\r\n    blockId: string;\r\n    /** to lock or unlock (true or false) the targeted block */\r\n    locked: boolean;\r\n\r\n    constructor(blockId?: string) {\r\n        this.blockId = blockId;\r\n    }\r\n}\r\n","import { IHtmlAccess } from '../model/html-access';\r\nimport { Block } from '../model/block';\r\nimport { Tracking } from '../model/tracking';\r\n\r\nexport class UtilService {\r\n    static arrayToObject(array: IHtmlAccess[]) {\r\n        const obj = {};\r\n        for(const a of array) {\r\n            if(a.key) {\r\n                obj[a.key] = a;\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    /**\r\n     * search a specific block in another block\r\n     * WARNING !! Not working with lazyloading\r\n     * @param blockId id of the block to find\r\n     * @param BlockContainer Block where to search in\r\n     */\r\n    static findBlockInBlock(blockId: string, BlockContainer: Block): Block {\r\n        if(!BlockContainer || BlockContainer.classType === 'Content' || !BlockContainer.blocksOrContents) {\r\n            return null;\r\n        }\r\n        let result = BlockContainer.blocksOrContents.find(x => x._id === blockId);\r\n        if (!result) {\r\n            for (let subBlock of BlockContainer.blocksOrContents) {\r\n                result = this.findBlockInBlock(blockId, subBlock);\r\n                if (result) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * get the path of a specific block in another block\r\n     * WARNING !! Not working with lazyloading\r\n     * @param blockId id of the block to find the path\r\n     * @param BlockContainer Block where to search in\r\n     */\r\n    static getPathBlockInBlock(blockId: string, BlockContainer: Block): string {\r\n        if(!BlockContainer || BlockContainer.classType === 'Content' || !BlockContainer.blocksOrContents) {\r\n            return null;\r\n        }\r\n        if(blockId === BlockContainer._id) {\r\n            return '0';\r\n        }\r\n        let result;\r\n        let blockIndex = BlockContainer.blocksOrContents.findIndex(x => x && x._id === blockId);\r\n        if (blockIndex === -1) {\r\n            let subBlockIndex = 0;\r\n            let subpath;\r\n            for (let subBlock of BlockContainer.blocksOrContents) {\r\n                subpath = this.getPathBlockInBlock(blockId, subBlock);\r\n                if (subpath) {\r\n                    result = subBlockIndex + '/' + subpath;\r\n                    return result;\r\n                }\r\n                subBlockIndex++;\r\n            }\r\n            return null;\r\n        }\r\n        result = blockIndex.toString();\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * Update a specific block contain in another block\r\n     * @param blockToUpdate property of the block to update, it will not change property of block if property not set\r\n     * @param BlockContainer block that should contain the block to update \r\n     * @return -1 if nothing found,  0 or above if updated\r\n     */\r\n    static updateBlockInBlock(blockId: string, blockToUpdate: Block, BlockContainer: Block): number {\r\n        if(BlockContainer.classType === 'Content' || !BlockContainer.blocksOrContents) {\r\n            return -1;\r\n        }\r\n        let index = BlockContainer.blocksOrContents.findIndex(x => x._id === blockId);\r\n        if (index < 0) {\r\n            for (let subBlock of BlockContainer.blocksOrContents) {\r\n                index = this.updateBlockInBlock(blockId, blockToUpdate, subBlock);\r\n                if (index >= 0) {\r\n                    break;\r\n                }\r\n            }\r\n        } else {\r\n            // merge block found with block to update, it will then only update variables set \r\n            BlockContainer.blocksOrContents[index] = {...BlockContainer.blocksOrContents[index], ...blockToUpdate};\r\n        }\r\n        return index;\r\n    }\r\n\r\n\r\n    static tryToSetCompletion(tracking: Tracking, scorePercentSuccess?: number): Tracking {\r\n        if (!tracking) {\r\n            return null;\r\n        }\r\n        if (tracking.completedAt) {\r\n            return tracking;\r\n        }\r\n        if (scorePercentSuccess) {\r\n            // if score percent set up - use the score to set the completion\r\n            tracking.scorePercentSuccess = scorePercentSuccess;\r\n            if (tracking.scorePercent >= tracking.scorePercentSuccess) {\r\n                tracking.completedAt = new Date();\r\n            }\r\n        } else {\r\n            if (tracking.progressionPercent >= 100) {\r\n                tracking.completedAt = new Date();\r\n            }\r\n        }\r\n        return tracking;\r\n    }\r\n\r\n    /**\r\n     * create a random color in hexadecimal format\r\n     * @return string formated #123456\r\n     */\r\n    static getRandomColor() {\r\n        var letters = '0123456789ABCDEF';\r\n        var color = '#';\r\n        for (var i = 0; i < 6; i++) {\r\n          color += letters[Math.floor(Math.random() * 16)];\r\n        }\r\n        return color;\r\n    }\r\n\r\n    static compile(html: string, data: any, css?: string): string {\r\n        if (!html) {\r\n          return '';\r\n        }\r\n        // compile JS\r\n        const scopeParsed = 'var $ = '+ JSON.stringify(data) + ';';\r\n        let jsScripts = this.findJS(html);\r\n        if (!jsScripts) {\r\n          return html;\r\n        }\r\n        // Replace script by index\r\n        jsScripts = jsScripts.filter((value, index, array) => array.indexOf(value) === index);\r\n        jsScripts.forEach((r, i) => {\r\n          const regexStr = this.escapeRegExp(r);\r\n          const regex = new RegExp(regexStr, 'g');\r\n          html = html.replace(regex, '##' + i + '##');\r\n        });   \r\n\r\n        jsScripts.forEach((script, index) => {\r\n            try {\r\n                // extract useless characters off the script ({{ }})\r\n                script = script.slice(0,script.length-2);\r\n                script = script.slice(2,script.length);\r\n                //execute script\r\n                const executed =  Function(`\"use strict\";${scopeParsed};return (${script})`)();\r\n                // replace {{script}} by the executed result\r\n                html = this.replaceIndexByExecuted(html, index, executed);\r\n            } catch(err) {\r\n                console.warn('html compiler error: ', err);\r\n                html = this.replaceIndexByExecuted(html, index, '');\r\n            }\r\n          \r\n        });\r\n        return html;\r\n    }\r\n    \r\n    /**\r\n     * convert string to search to correct regex expression (backslash specific characters)\r\n     * @param text \r\n     * @returns \r\n     */\r\n    static escapeRegExp(text: string) {\r\n        const regex = new RegExp(`[-[\\\\]{}()*+?.,\\\\\\\\^$|#\\\\s]`, 'g');\r\n        return text.replace(regex, '\\\\$&');\r\n    }\r\n    \r\n    static replaceIndexByExecuted(html: string, index: number, executed: string): string {\r\n        // links exemple : \"https://elearning.cvbsp.fr/resources/5def6902555f3440fb53087c/5e18b156cc01b3452ac19612/157849699510825.png\"\r\n        const regex = new RegExp(`##` + index +`##`, 'g');\r\n        html = html.replace(regex, executed);\r\n        return html;\r\n    }\r\n    \r\n    /**\r\n     * return javascript between quote {{  }}\r\n     * @param html \r\n     * @returns \r\n     */\r\n    static findJS(html: string): string[] {\r\n        if (!html) {\r\n            return [];\r\n        }\r\n        const regex = new RegExp(`{{(.*?)}}`, 'gms');\r\n        let result = html.match(regex); \r\n        return result;\r\n    }\r\n}","export class Translations {\r\n    static fr = {\r\n        RESUME: 'Reprendre',\r\n        LIKE_TO_RESUME: 'Souhaitez-vous reprendre la ou vous en êtiez ?',\r\n        YES: 'Oui',\r\n        NO: 'Non'\r\n    };\r\n\r\n    static en =  {\r\n        RESUME: 'Resume',\r\n        LIKE_TO_RESUME: 'Would you like to resume ?',\r\n        YES: 'Yes',\r\n        NO: 'No'\r\n    }\r\n\r\n    static get(trad: string, lang: string) {\r\n        if(Translations[lang]) {\r\n            return Translations[lang][trad];\r\n        } \r\n        return '';\r\n    }\r\n}","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { IRemoteControl } from './model/remote-control';\r\nimport { Observable, of } from 'rxjs';\r\nimport { RemoteOrder } from './model/remote-order';\r\nimport { tap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class RemoteControlService {\r\n\r\n    remoteControl: IRemoteControl;\r\n    isConnected: boolean;\r\n    /**\r\n     * event emitter is triggered when the service receives a message with order \r\n     * it emits an order\r\n     */\r\n    messageReceivedEvent: EventEmitter<RemoteOrder> = new EventEmitter<RemoteOrder>();\r\n\r\n    \r\n    constructor() {\r\n    }\r\n  \r\n    init(remoteControl?: IRemoteControl) {\r\n      if (remoteControl) {\r\n        this.remoteControl = remoteControl;\r\n        return;\r\n      }\r\n    }\r\n  \r\n    /**\r\n     * listen to receive instant push data\r\n     * \r\n     */\r\n    receive(mainBlockId: string, sessionId: string): Observable<RemoteOrder> {\r\n      if (this.remoteControl) {\r\n        return this.remoteControl.receive(mainBlockId, sessionId).pipe(tap(order => {\r\n          this.messageReceivedEvent.next(order);\r\n        }));\r\n      } else {\r\n        return of(null);\r\n      }\r\n    }\r\n  \r\n    /**\r\n     * send tracking to broadcast over the session users\r\n     * @param order to save\r\n     */\r\n    send(order: RemoteOrder) {\r\n      if (this.remoteControl) {\r\n        this.remoteControl.send(order);\r\n      }    \r\n    }\r\n  \r\n    /**\r\n     * send tracking to broadcast over the session users\r\n     * @param tracking to save\r\n     */\r\n    close() {\r\n      if (this.remoteControl) {\r\n        this.remoteControl.close();\r\n      }    \r\n    }\r\n}\r\n  ","import { Injectable } from '@angular/core';\r\nimport { IPersistor } from './model/persistor';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { Tracking } from './model/tracking';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PreviewPersistorService implements IPersistor {\r\n\r\n  trackings = [];\r\n  constructor() {\r\n  }\r\n\r\n  open(): void {\r\n    console.log('preview opened');\r\n  }\r\n\r\n  read(blockId: string, resume: boolean, registrationId?: string): Observable<Tracking> {\r\n    if (!resume) {\r\n      return of(null);\r\n    }\r\n    const tracking = this.trackings.find(x => x.blockId === blockId);\r\n    return of(tracking);\r\n  }\r\n\r\n  save(tracking: Tracking) {\r\n    const j = this.trackings.findIndex(x => x.blockId === tracking.blockId);\r\n    if(j > -1) {\r\n      this.trackings[j] = tracking;\r\n    } else {\r\n      this.trackings.push(tracking);\r\n    }\r\n  }\r\n\r\n  close(): void {\r\n    this.trackings = [];\r\n    console.log('preview closed');\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IPersistor } from './model/persistor';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { Tracking } from './model/tracking';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LocalPersistorService implements IPersistor {\r\n  storage: Storage;\r\n\r\n  constructor() {\r\n    this.storage = window.localStorage;\r\n  }\r\n\r\n  open(): void {\r\n    console.log('ngx-cvbsp-player opened');\r\n  }\r\n\r\n  read(blockId: string, resume: boolean, registrationId?: string): Observable<Tracking> {\r\n    if (!resume) {\r\n      return of(null);\r\n    }\r\n    return of(JSON.parse(this.storage.getItem('ngx-cvbsp-player-' + blockId)));\r\n  }\r\n\r\n  save(tracking: Tracking) {\r\n    this.storage.setItem('ngx-cvbsp-player-' + tracking.blockId , JSON.stringify(tracking) );\r\n  }\r\n\r\n  close(): void {\r\n    console.log('ngx-cvbsp-player closed');\r\n  }\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { IPersistor } from './model/persistor';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Tracking } from './model/tracking';\r\nimport { LocalPersistorService } from './local-persistor.service';\r\nimport { PlayerConfig } from './model/player-config';\r\nimport { PreviewPersistorService } from './preview-persistor.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxCvbspPersistorService implements IPersistor {\r\n\r\n  persistor: IPersistor;\r\n  isPreview: boolean;\r\n  constructor(\r\n    @Optional() config: PlayerConfig,\r\n    private previewPersistor: PreviewPersistorService,\r\n    private LocalPersistor: LocalPersistorService) {\r\n    this.persistor = config && config.persistor ? config.persistor : LocalPersistor;\r\n  }\r\n\r\n  init(persistor?: IPersistor) {\r\n    if (persistor) {\r\n      this.persistor = persistor;\r\n      return;\r\n    }\r\n\r\n    this.persistor = this.LocalPersistor;\r\n  }\r\n\r\n  open(): void {\r\n    if (this.persistor && !this.isPreview) {\r\n      this.persistor.open();\r\n    }    \r\n\r\n    if (this.isPreview) {\r\n      this.previewPersistor.open();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * read the data saved\r\n   * @param blockId must be a block unique id or a content unique id used to retrieve the tracking of the user\r\n   * @param resume if true it will try to resume otherwise no resume\r\n   */\r\n  read(blockId: string, resume: boolean, registrationId?: string): Observable<Tracking> {\r\n    if (this.persistor && !this.isPreview) {\r\n      return this.persistor.read(blockId, resume, registrationId);\r\n    } else {\r\n      if (this.isPreview) {\r\n        return this.previewPersistor.read(blockId, resume, registrationId);\r\n      }\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * save the tracking\r\n   * @param tracking to save\r\n   */\r\n  save(tracking: Tracking) {\r\n    if (this.persistor && !this.isPreview) {\r\n      this.persistor.save(tracking);\r\n    }    \r\n\r\n    if (this.isPreview) {\r\n      this.previewPersistor.save(tracking);\r\n    }\r\n  }\r\n\r\n  close(): void {\r\n    if (this.persistor && !this.isPreview) {\r\n      this.persistor.close();\r\n    }\r\n\r\n    if (this.isPreview) {\r\n      this.previewPersistor.close();\r\n    }\r\n  }\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { Tracking } from './model/tracking';\r\nimport { PlayerConfig } from './model/player-config';\r\nimport { ILazyLoader } from './model/lazy-loader';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Block } from './model/block';\r\nimport { Content } from './model/content';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LazyLoadingService {\r\n\r\n  lazyLoader: ILazyLoader;\r\n  constructor(@Optional() config: PlayerConfig,) {\r\n    this.lazyLoader = config && config.lazyLoader ? config.lazyLoader : null;\r\n  }\r\n\r\n  /**\r\n   * retrieve a block or a content by id\r\n   * @param id \r\n   */\r\n  getBlockOrContent(id: string): Observable<Block | Content> {\r\n    if(!this.lazyLoader) {\r\n      throw new Error('No lazy loader but try to call the LazyLoading service. You must creat LazyLoader and register to be able to call this !');\r\n    }\r\n    return this.lazyLoader.getBlockOrContent(id);\r\n  }\r\n}\r\n","import { EventEmitter } from '@angular/core';\r\nimport { ModalButton } from './modal-button';\r\n\r\nexport class CvbspModal {\r\n  id: string;\r\n  title: string;\r\n  message: string;\r\n  buttons: ModalButton[];\r\n  disableBackdrop: boolean;\r\n  clicked: EventEmitter<any>;\r\n  constructor() {\r\n      this.id = new Date().getTime() + '-' + Math.round(Math.random() * 100000);\r\n      this.clicked = new EventEmitter<any>();\r\n  }\r\n}","import { Injectable } from '@angular/core';\r\nimport { CvbspModal } from './modal';\r\nimport { ModalButton } from './modal-button';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CvbspModalService {\r\n\r\n  show: boolean;\r\n  modals: CvbspModal[] = [];\r\n  constructor() { }\r\n\r\n  createModal(title: string, message: string, buttons: ModalButton[]) {\r\n    const modal = new CvbspModal();\r\n    modal.title = title;\r\n    modal.message = message;\r\n    modal.buttons = buttons;\r\n    return modal;\r\n  }\r\n\r\n  showModal(modal: CvbspModal) {\r\n    this.modals.push(modal);\r\n  }\r\n\r\n  hideModal(modal: CvbspModal) {\r\n    const i = this.modals.findIndex(x => x.id === modal.id);\r\n    if (i > -1) {\r\n      this.modals.splice(i, 1);\r\n    }\r\n  }\r\n\r\n  hideAllModal(modal: CvbspModal) {\r\n    this.modals = [];\r\n  }\r\n}\r\n","import { Injectable, EventEmitter, Optional } from '@angular/core';\r\nimport { Block, PrerequisiteType } from './model/block';\r\nimport { Tracking } from './model/tracking';\r\nimport { NgxCvbspPersistorService } from './ngx-cvbsp-persistor.service';\r\nimport { Content } from './model/content';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { PlayerComponentConfig, PlayerConfig } from './model/player-config';\r\nimport { LazyLoadingService } from './lazy-loading.service';\r\nimport { RemoteOrder } from './model/remote-order';\r\nimport { RemoteControlService } from './remote-control.service';\r\nimport { UtilService } from './util/util.service';\r\nimport { Multilang } from './model/multilang';\r\nimport { CvbspModalService } from './modal/modal.service';\r\nimport { ModalButton } from './modal/modal-button';\r\nimport { Translations } from './util/translations';\r\nimport { ContentDataDefault } from './model/content-data';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxCvbspPlayerService {\r\n  blockChain: Block[] = [];\r\n  /** the parent block that hold all the other blocks or content of the whole module */\r\n  mainBlock: Block;\r\n  /** current block that is currently read by the user */\r\n  currentBlock: Block;\r\n  /** current content that is currently read by the user */\r\n  currentContent: Content;\r\n  /** close event trigger */\r\n  closeEvent = new EventEmitter<Block>();\r\n  /** the current lang is the lang that the player is currently using */\r\n  currentLang: string;\r\n  /** default lang forced to user from exterior of the player */\r\n  forceLang: string;\r\n  /** property set when the lang has been change manually by the user,\r\n   * WARNING - It should not be used outside, it should be private, you must used currentLang prop to get the lang used currently\r\n   * Will be private variable in the next major release\r\n   */\r\n  chosenLang: string;\r\n  /** event trigger when the lang is changed by the user */\r\n  langChangeEvent = new EventEmitter<string>();\r\n  /** event trigger when the block has been initialized correctly */\r\n  initializedEvent = new EventEmitter<Block>();\r\n  /** event trigger when the current block is saved */\r\n  saveEvent = new EventEmitter<Block>();\r\n  /** event trigger when the tracking o fthe currentElement is saved */\r\n  saveTrackingEvent = new EventEmitter<Block>();\r\n  movingForward: boolean;\r\n  movingBack: boolean;  \r\n  /** registration id to pass in tracking */\r\n  registrationId: string;\r\n  /** to set the statut of the current user if animator or not  */\r\n  animator: boolean;\r\n  /** username of the current user (usually email) */\r\n  username: string;\r\n  /** fullname (firstname and lastname) of the current user */\r\n  fullname: string;\r\n  /** current session name if any ( only for external set up  ) */\r\n  sessionName: Multilang;\r\n  /** restore data saved ( load the blocks with stored tracking ) */\r\n  restore: boolean;\r\n  /** resume the block where the user left (restore must be activated to work) */\r\n  resume: boolean;\r\n  /** current location of the user. this is the block id where the user currently is */\r\n  location: string;\r\n  /** current location of the user. this is the path as the parameters of method initialize */\r\n  locationPath: string;\r\n  /** current location change event - return the locationPath property value */\r\n  locationChange = new EventEmitter<string>();\r\n  /** this is the url when the block is finished - it can be set externally or it will be set internally if the mainBlock as a leaveUrl setup  */\r\n  leaveUrl: string;\r\n\r\n  debug: boolean;\r\n  /** set to true if the user want to resume where he left */\r\n  resumeNav: boolean;\r\n  constructor(\r\n    @Optional() config: PlayerConfig,\r\n    private remoteCtrlService: RemoteControlService,\r\n    private persistorService: NgxCvbspPersistorService,\r\n    private lazyloadingService: LazyLoadingService,\r\n    private modal: CvbspModalService\r\n  ) {\r\n  }\r\n\r\n  loadConfigComp(config: PlayerComponentConfig) {\r\n    if (!config) {\r\n      return;\r\n    }\r\n    ContentDataDefault.contentData = config ? config.contentDataDefault : {};\r\n    /** set debug mode if any */\r\n    this.debug = config ? config.debug : false;\r\n  }\r\n\r\n  /**\r\n   * initialize block\r\n   * @param block block to init\r\n   * @param inside - DEPRECATED (replace by mainBlock check value) - tell if the init is inside the recursive loop, don't set to true if initialize the first block\r\n   * @param path put index of the blocks (start at 0), e.i. : to go to the second block of the third block of the main block put this value : '2/1'\r\n   */\r\n  initialize(block: Block, inside?: boolean, path?: string): Observable<Block> {\r\n    // if no mainblock set - it means first init - do things that need to be done at the beginning\r\n    if (!this.mainBlock) {\r\n      this.persistorService.open();\r\n      this.mainBlock = block;\r\n      // if block is remote controlled\r\n      if (this.mainBlock.remoteCtrl) {\r\n        // subscription to listen to any incoming order\r\n        this.remoteCtrlService.receive(this.mainBlock._id, this.registrationId).subscribe(this.orderHandler);\r\n      }\r\n      if (this.mainBlock.leaveUrl) {\r\n        this.leaveUrl = this.mainBlock.leaveUrl;\r\n      }\r\n    }\r\n    // Nav part\r\n    let firstPath, restPath;\r\n    if (path && path !== \"\") {\r\n      const paths = path.split('/');\r\n      firstPath = paths.shift();\r\n      restPath = paths.join('/');\r\n      // if path start with '/' come back to root block\r\n      if(path.startsWith('/')) {\r\n        const rootBlock = this.mainBlock;\r\n        this.reset();\r\n        path = path.substring(1);\r\n        return this.initialize(rootBlock, true, path);\r\n      }\r\n    }\r\n    // set default variables    \r\n    if (block.resume === undefined && this.currentBlock) {\r\n      block.resume = this.currentBlock.resume;\r\n    }\r\n    if (this.currentBlock) {\r\n      block = this.mergeDesign(block, this.currentBlock);\r\n      block = this.mergeDefaultData(block, this.currentBlock);\r\n      // if block has prerequisites check them\r\n      return this.checkRestriction(this.currentBlock, block).pipe(mergeMap((blockPrerequisite) => {\r\n        if (blockPrerequisite) {\r\n          return this.initialize(blockPrerequisite, true);\r\n        } else {\r\n          // read tracking of the block and start\r\n          return this.readAndStart(block, firstPath, restPath);\r\n        }\r\n      }));      \r\n    }\r\n    // set the language of the block\r\n    this.setLanguage(block);\r\n\r\n    // read tracking of the block and start\r\n    return this.readAndStart(block, firstPath, restPath);\r\n  }\r\n\r\n  /**\r\n   * start the content or the block\r\n   * @param blockOrContent is the block to start\r\n   */\r\n  start(blockOrContent: Block, tracking: Tracking): Observable<Block> {\r\n    if (!tracking) {\r\n      tracking = new Tracking(blockOrContent._id, this.mainBlock ? this.mainBlock._id : null, null, this.registrationId);\r\n    } else {\r\n      tracking.blockId = tracking.blockId ? tracking.blockId : blockOrContent._id;\r\n      tracking.mainBlockId = tracking.mainBlockId ? tracking.mainBlockId : (this.mainBlock ? this.mainBlock._id : null);\r\n      tracking.registrationId = tracking.registrationId ? tracking.registrationId : this.registrationId;\r\n    }\r\n    blockOrContent.tracking = tracking;\r\n    if (!tracking.startedAt) {\r\n      blockOrContent.tracking.scoreMax = 0;\r\n      blockOrContent.tracking.scoreRaw = 0;\r\n      blockOrContent.tracking.scorePercent = 0;\r\n      blockOrContent.tracking.startedAt = new Date();\r\n      blockOrContent.tracking.timeSpent = 0;\r\n      blockOrContent.tracking.sessTimeSpent = 0;\r\n      blockOrContent.tracking.lastLaunchDate = new Date();\r\n      blockOrContent.tracking.progressionRaw = 0;\r\n      blockOrContent.tracking.progressionPercent = 0;\r\n    } else {\r\n      blockOrContent.tracking.lastLaunchDate = new Date();\r\n      blockOrContent.tracking.sessTimeSpent = 0;\r\n    }\r\n    // progressionRaw always at 0 when start\r\n    blockOrContent.tracking.progressionRaw = 0;\r\n    this.persistorService.save(blockOrContent.tracking);\r\n    // set the location\r\n    this.setLocation(blockOrContent);\r\n    return of(blockOrContent as Block);\r\n  }\r\n\r\n  /**\r\n   *  go to the next element or block\r\n   * @param tracking tracking of current content send as it is finished\r\n   */\r\n  next(tracking: Tracking): Observable<Block> {\r\n    if (this.currentContent) {\r\n      this.movingForward = true;\r\n      this.movingBack = false;\r\n      this.currentContent.tracking = tracking;\r\n      // update the tracking of the current content\r\n      this.currentContent.tracking.finishedAt = new Date();      \r\n      if (!this.currentContent.data.hasTimeSpent) {\r\n        // calculate time spent if no timeSpent set up by the component\r\n        this.currentContent.tracking = this.calcTimeSpent(this.currentContent.tracking);\r\n      }\r\n      // save the tracking of the current content\r\n      this.persistorService.save(this.currentContent.tracking);\r\n      // reset current content\r\n      this.currentContent = null;\r\n      // move forward to the next block/content\r\n      return this.moveForward(tracking.pathOut);\r\n    }\r\n    return of();\r\n  }\r\n\r\n  /**\r\n   *  go back to the previous element or block\r\n   * @param tracking tracking of current content send as it is leaving\r\n   */\r\n  back(tracking: Tracking): Observable<Block> {\r\n    if (this.currentContent) {\r\n      this.movingForward = false;\r\n      this.movingBack = true;\r\n      this.currentContent.tracking = tracking;\r\n      // save the tracking of the current content\r\n      this.persistorService.save(this.currentContent.tracking);\r\n      // reset current content\r\n      this.currentContent = null;\r\n      return this.moveBack(tracking.pathOut);\r\n    }\r\n    return of();\r\n  }\r\n\r\n  /**\r\n   * save the tracking of the current content\r\n   * @param tracking tracking of current content send when is needed\r\n   */\r\n  saveTracking(tracking: Tracking) {\r\n    if (this.currentContent) {\r\n      if (!this.currentContent.data.hasTimeSpent) {\r\n        // calculate time spent if no timeSpent set up by the component\r\n        tracking = this.calcTimeSpent(tracking);\r\n      }\r\n      this.currentContent.tracking = tracking;\r\n    }\r\n    // set completion of the tracking if not done yet\r\n    this.currentBlock.tracking = UtilService.tryToSetCompletion(this.currentBlock.tracking);\r\n    // save the tracking of the current content\r\n    this.persistorService.save(tracking);\r\n    // trigger save event\r\n    this.saveTrackingEvent.next();\r\n  }\r\n\r\n  /**\r\n   * save the state of the current block\r\n   */\r\n  save() {\r\n    if(this.currentBlock) {\r\n      // update current block\r\n      this.currentBlock = this.aggregateTrackings(this.currentBlock);\r\n      // set completion of the tracking\r\n      this.currentBlock.tracking = UtilService.tryToSetCompletion(this.currentBlock.tracking);\r\n      this.aggregateTrackingBlockChain();      \r\n      // save the tracking of the current block\r\n      this.persistorService.save(this.currentBlock.tracking);\r\n      // trigger save event\r\n      this.saveEvent.next();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * go out of the current block (forward)\r\n   */\r\n  finish(): Observable<Block> {\r\n    // update current block\r\n    this.currentBlock.tracking.finishedAt = new Date();\r\n    this.currentBlock = this.aggregateTrackings(this.currentBlock);\r\n    this.aggregateTrackingBlockChain();\r\n    // save the tracking of the current block\r\n    this.persistorService.save(this.currentBlock.tracking);\r\n    // retrieve the last block in the block chain otherwise close\r\n    if (this.blockChain.length > 0) {\r\n      this.currentBlock = this.blockChain.pop();\r\n      return this.moveForward();\r\n    } else {\r\n      return  this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * go out of the current block (backward)\r\n   * @param tracking tracking of current content send as it is finished\r\n   */\r\n  finishBack(): Observable<Block> {\r\n    // save the tracking of the current block\r\n    this.persistorService.save(this.currentBlock.tracking);\r\n    // retrieve the last block in the block chain otherwise close\r\n    if (this.blockChain.length > 0) {\r\n      this.currentBlock = this.blockChain.pop();\r\n      return this.moveBack();\r\n    } else {\r\n      return  this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * stop the whole block in the middle of something\r\n   * Basically it Builds and Saves all the trackings \r\n   */\r\n  stopAll(): Observable<Block> {\r\n    if(!this.currentBlock) {\r\n      return of(null);\r\n    }\r\n    this.save();\r\n    // retrieve the last block in the block chain otherwise reset the service\r\n    if (this.blockChain.length > 0) {\r\n      this.currentBlock = this.blockChain.pop();\r\n      return this.stopAll();\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * close the player in the correct manner\r\n   */\r\n  close(): Observable<Block> {\r\n    this.reset();\r\n    this.mainBlock = null;\r\n    this.persistorService.close();\r\n    this.closeEvent.next();\r\n    return of(null);\r\n  }\r\n\r\n  /**\r\n   * window has been shut down via browser fonctionnality ( back button or close window )\r\n   */\r\n  shutDown(): Observable<Block> {\r\n    return this.stopAll().pipe(mergeMap(() => {\r\n      this.reset();\r\n      this.mainBlock = null;\r\n      this.persistorService.close();\r\n      return of(null);\r\n    }));\r\n  }\r\n\r\n  /** reset the service's variables  */\r\n  reset() {\r\n    this.currentContent = null;\r\n    this.currentBlock = null;\r\n    this.blockChain = [];\r\n  }\r\n\r\n  /**\r\n   * change the current language \r\n   * @param key key of the language ( it must be part of the block.defaultData.langs if exists)\r\n   */\r\n  changeLang(key: string) {\r\n    this.chosenLang = key;\r\n    if (this.forceLang) {\r\n      // if user can change lang - erase forcelang and set the new lang with the chosen\r\n      this.forceLang = null;\r\n    }\r\n    // store in main block tracking lang chosen if exist\r\n    if (this.mainBlock.tracking) {\r\n      this.mainBlock.tracking.data = this.mainBlock.tracking.data ? this.mainBlock.tracking.data : {} as any;\r\n      this.mainBlock.tracking.data.chosenLang = this.chosenLang;\r\n    }    \r\n    this.setLanguage(this.currentBlock);\r\n    this.langChangeEvent.next(key);\r\n  }\r\n\r\n  /**\r\n   * set the username of the current user\r\n   * @param username \r\n   */\r\n  setUsername(username: string) {\r\n    this.username = username;\r\n    // store in main block tracking the username if exist\r\n    if (this.mainBlock && this.mainBlock.tracking) {\r\n      this.mainBlock.tracking.data = this.mainBlock.tracking.data ? this.mainBlock.tracking.data : {} as any;\r\n      this.mainBlock.tracking.data.username = this.username;\r\n      // set random color for the user\r\n      if (!this.mainBlock.tracking.data.color) {\r\n        this.mainBlock.tracking.data.color = UtilService.getRandomColor();\r\n      }\r\n    }    \r\n  }\r\n\r\n  /**\r\n   * init the username of the current user, do nothing if already exists basically\r\n   * @param username \r\n   */\r\n  initUsername(username: string) {\r\n    // retrieve username in block otherwise setUsername\r\n    if (this.mainBlock && this.mainBlock.tracking && this.mainBlock.tracking.data && this.mainBlock.tracking.data.username) {\r\n      this.username = this.mainBlock.tracking.data.username;\r\n    } else {\r\n      this.setUsername(username);\r\n    }\r\n  }\r\n\r\n  // REMOTE ORDER PART\r\n\r\n  /**\r\n   * do what the order say\r\n   * @param order \r\n   */\r\n  orderHandler = (order: RemoteOrder) => {\r\n    // do something only if block is animated\r\n    if(this.mainBlock.remoteCtrl && order) {\r\n      UtilService.updateBlockInBlock(order.blockId, {order: order} as Block, this.mainBlock);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * animato send the order\r\n   * @param order \r\n   */\r\n  sendOrder(order: RemoteOrder): void {\r\n    if (this.mainBlock.remoteCtrl && this.animator) {\r\n      return this.remoteCtrlService.send(order);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * check if block is locked via remote order\r\n   * @param block \r\n   */\r\n  blockIsLock(block: Block): boolean {\r\n    if (!block.prerequisites) {\r\n      return false;\r\n    }\r\n    return block.prerequisites.type === PrerequisiteType.order && (!block.order || block.order.locked);\r\n  }\r\n\r\n  /**\r\n   * Check if the two trackings are the same\r\n   */\r\n  isSameTracking(toCheckTracking: Tracking, actualTracking: Tracking) {\r\n\r\n    return toCheckTracking && actualTracking && \r\n    toCheckTracking.mainBlockId === actualTracking.mainBlockId &&\r\n    toCheckTracking.registrationId === actualTracking.registrationId &&\r\n    toCheckTracking.userId === actualTracking.userId &&\r\n    toCheckTracking.blockId === actualTracking.blockId;\r\n  }\r\n\r\n  /**\r\n   * aggregate trackings of the contents of the block\r\n   * @param block to aggregate\r\n   */\r\n  private aggregateTrackings(block: Block): Block {\r\n    // init score to avoid to sum up multiple times if resume\r\n    block.tracking.scoreMax = 0;\r\n    block.tracking.scoreRaw = 0;\r\n    block.tracking.scorePercent = 0;\r\n    // block.tracking.progressionPercent = 0;\r\n    let blockProgressionPercent = 0;\r\n    // aggregate blocks/contents of block\r\n    for ( const blockOrContent of block.blocksOrContents) {\r\n      if (blockOrContent && !blockOrContent.animatorOnly) {\r\n        if (!blockOrContent.ignoreScore && !(blockOrContent as Content).data?.ignoreScore) {\r\n          // aggregate score \r\n          if(blockOrContent.tracking) {\r\n            blockOrContent.tracking.scoreMax = isNaN(blockOrContent.tracking.scoreMax) ? 0 : blockOrContent.tracking.scoreMax;\r\n            blockOrContent.tracking.scoreRaw = isNaN(blockOrContent.tracking.scoreRaw) ? 0 : blockOrContent.tracking.scoreRaw;\r\n            block.tracking.scoreMax = block.tracking.scoreMax + blockOrContent.tracking.scoreMax;\r\n            block.tracking.scoreRaw = block.tracking.scoreRaw + blockOrContent.tracking.scoreRaw;\r\n          } else {\r\n            block.tracking.scoreMax = block.tracking.scoreMax + 1;\r\n            block.tracking.scoreRaw = block.tracking.scoreRaw + 0;\r\n          }          \r\n          if (block.tracking.scoreMax) {\r\n            block.tracking.scorePercent = block.tracking.scoreRaw * 100 / block.tracking.scoreMax;\r\n          }\r\n        }\r\n\r\n        if (!blockOrContent.ignoreProgress && !(blockOrContent as Content).data?.ignoreProgress && blockOrContent.tracking) {\r\n          // aggregate progression \r\n          blockOrContent.tracking.progressionPercent = isNaN(blockOrContent.tracking.progressionPercent) ? 0 : blockOrContent.tracking.progressionPercent;\r\n          blockProgressionPercent = blockProgressionPercent + blockOrContent.tracking.progressionPercent;\r\n        }\r\n      }\r\n    }\r\n    // calculate timespent\r\n    block.tracking = this.calcTimeSpent(block.tracking);\r\n    // divide by the number of blocksOrContent to get the average progression on the block\r\n    const nbBlocksOrContents = block.blocksOrContents.filter(c => !c.animatorOnly && !c.ignoreProgress && !(c as Content).data?.ignoreProgress).length;\r\n    if (nbBlocksOrContents === 0) {\r\n      // if no block content count in progression set the block progression to 100% has it is finished directly\r\n      blockProgressionPercent = 100;\r\n    } else if (nbBlocksOrContents > 0) {\r\n      blockProgressionPercent = blockProgressionPercent / nbBlocksOrContents;\r\n    }\r\n    // if new progression calculated is less than the old one return old one\r\n    block.tracking.progressionPercent = block.tracking.progressionPercent > blockProgressionPercent ?  block.tracking.progressionPercent : blockProgressionPercent;\r\n    \r\n    // if score max  of block is 0 therefore no score at all, set score percent to null\r\n    if (!block.tracking.scoreMax) {\r\n      block.tracking.scorePercent = null;\r\n    }\r\n    \r\n    return block;\r\n  }\r\n\r\n  private aggregateTrackingBlockChain() {\r\n    // update all the block chain tracking except the current block (not in the blockchain anyway)\r\n    for (let i = this.blockChain.length - 1; i >= 0; i--){      \r\n      this.blockChain[i].tracking = this.aggregateTrackings(this.blockChain[i]).tracking;\r\n      //update mainBlock \r\n      if (this.mainBlock._id ===  this.blockChain[i]._id) {\r\n        this.mainBlock.tracking = this.aggregateTrackings(this.mainBlock).tracking;\r\n        this.persistorService.save(this.mainBlock.tracking);\r\n      } else {\r\n        this.persistorService.save(this.blockChain[i].tracking);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Allow to load all the trackings of all blocks of the parent block in parameters\r\n   * @param block \r\n   * @param index index where to stop the loading\r\n   */\r\n  private resumeBlockTrackings(block: Block, index?: number): void {\r\n    for (let j = 0; j < block.blocksOrContents.length; j++) {\r\n      if (index !== undefined && index !== null) {\r\n        if (j <= index) {\r\n          const resume = block.blocksOrContents[j].resume === undefined ? this.currentBlock.resume : block.blocksOrContents[j].resume;\r\n          this.persistorService.read(block.blocksOrContents[j]._id, resume, this.registrationId).subscribe(tracking => {\r\n              block.blocksOrContents[j].tracking = tracking;\r\n          });\r\n        }\r\n      } else {\r\n        const resume = block.blocksOrContents[j].resume === undefined ? this.currentBlock.resume : block.blocksOrContents[j].resume;\r\n        this.persistorService.read(block.blocksOrContents[j]._id, resume, this.registrationId).subscribe(tracking => {\r\n            block.blocksOrContents[j].tracking = tracking;\r\n        });\r\n      }\r\n      \r\n    }\r\n  }\r\n\r\n  private mergeDefaultData(blockOrContent: Block | Content, currentBlock: Block): Block | Content {\r\n    if (blockOrContent.classType === 'Block') {\r\n      blockOrContent.defaultData = blockOrContent.defaultData ? blockOrContent.defaultData : {};\r\n      for (const prop in currentBlock.defaultData) {\r\n        if (currentBlock.defaultData.hasOwnProperty(prop)) {\r\n            if (blockOrContent.defaultData[prop] === null || blockOrContent.defaultData[prop] === undefined) {\r\n              blockOrContent.defaultData[prop] = currentBlock.defaultData[prop];\r\n            }\r\n            else if(typeof blockOrContent.defaultData[prop] === 'object' && typeof currentBlock.defaultData[prop] === 'object') {\r\n              for(const prop2 in currentBlock.defaultData[prop]) {\r\n                if (currentBlock.defaultData[prop].hasOwnProperty(prop2)) {\r\n                  if (blockOrContent.defaultData[prop][prop2] === null || blockOrContent.defaultData[prop][prop2] === undefined) {\r\n                    blockOrContent.defaultData[prop][prop2] = currentBlock.defaultData[prop][prop2];\r\n                  }\r\n                }\r\n              }\r\n            }\r\n        }\r\n      }\r\n      return blockOrContent;\r\n    }\r\n\r\n    if (blockOrContent.classType === 'Content') {\r\n      const content = blockOrContent as Content;\r\n      content.data = content.data ? content.data : {};\r\n      for (const prop in currentBlock.defaultData) {\r\n        if (currentBlock.defaultData.hasOwnProperty(prop)) {\r\n            if (content.data[prop]  === null || content.data[prop] === undefined) {\r\n              content.data[prop] = currentBlock.defaultData[prop];\r\n            }\r\n            else if(typeof content.data[prop] === 'object' && typeof currentBlock.defaultData[prop] === 'object') {\r\n              for(const prop2 in currentBlock.defaultData[prop]) {\r\n                if (currentBlock.defaultData[prop].hasOwnProperty(prop2)) {\r\n                  if (content.data[prop][prop2] === null || content.data[prop][prop2] === undefined) {\r\n                    content.data[prop][prop2] = currentBlock.defaultData[prop][prop2];\r\n                  }\r\n                }\r\n              }\r\n            }\r\n        }        \r\n      }\r\n      return content;\r\n    }\r\n  }\r\n\r\n  private mergeDesign(blockOrContent: Block | Content, currentBlock: Block): Block | Content {\r\n    if (blockOrContent && blockOrContent.classType === 'Block') {\r\n      blockOrContent.design = blockOrContent.design ? blockOrContent.design : {};\r\n      for (const prop in currentBlock.design) {\r\n        if (currentBlock.design.hasOwnProperty(prop)) {\r\n            if (blockOrContent.design[prop] === null || blockOrContent.design[prop] === undefined) {\r\n              blockOrContent.design[prop] = currentBlock.design[prop];\r\n            }\r\n            else if(typeof blockOrContent.design[prop] === 'object' && typeof currentBlock.design[prop] === 'object') {\r\n              for(const prop2 in currentBlock.design[prop]) {\r\n                if (currentBlock.design[prop].hasOwnProperty(prop2)) {\r\n                  if (blockOrContent.design[prop][prop2] === null || blockOrContent.design[prop][prop2] === undefined) {\r\n                    blockOrContent.design[prop][prop2] = currentBlock.design[prop][prop2];\r\n                  }\r\n                }\r\n              }\r\n            }\r\n        }\r\n      }\r\n    }\r\n    return blockOrContent;\r\n  }\r\n\r\n  /** move forward  to the next block/content */\r\n  private moveForward(path?: string): Observable<Block> {\r\n    // if no block return close\r\n    if(!this.currentBlock) {\r\n      return this.close();\r\n    }\r\n\r\n    // if path set, init current block with this path and return\r\n    if (path) {\r\n      return this.initialize(this.currentBlock, true, path).pipe(map(blockOrContent => {\r\n        return blockOrContent;\r\n      }));\r\n    }\r\n\r\n    // get current index where the user is in the current block\r\n    const index = this.currentBlock.tracking.progressionRaw;\r\n    // finish\r\n    if (index + 1 >= this.currentBlock.blocksOrContents.length) {\r\n      return this.finish();\r\n    }\r\n\r\n    // increment progression\r\n    this.currentBlock.tracking.progressionRaw++;\r\n    this.save();\r\n    // next\r\n    const nextBlockOrContent = this.currentBlock.blocksOrContents[index + 1];\r\n    if(this.currentBlock.lazyLoading && !nextBlockOrContent) {\r\n      return this.lazyloadingService.getBlockOrContent(this.currentBlock.blockOrContentIds[index + 1]).pipe(mergeMap(blockCharged => {\r\n        this.currentBlock.blocksOrContents[index + 1] = blockCharged as Content;\r\n        return this.initialize(blockCharged, true, path).pipe(map(blockOrContent => {\r\n          return blockOrContent;\r\n        }));\r\n      }));\r\n    }    \r\n    return this.initialize(nextBlockOrContent, true, path).pipe(map(blockOrContent => {\r\n      return blockOrContent;\r\n    }));\r\n  }\r\n\r\n  /** move backward to the next block/content */\r\n  private moveBack(path?: string): Observable<Block> {\r\n    // if no block return close\r\n    if(!this.currentBlock) {\r\n      return this.close();\r\n    }\r\n\r\n    // if path set, init current block with this path and return\r\n    if (path) {\r\n      return this.initialize(this.currentBlock, true, path).pipe(map(blockOrContent => {\r\n        return blockOrContent;\r\n      }));\r\n    }\r\n\r\n    // get current index where the user is in the current block\r\n    const index = this.currentBlock.tracking.progressionRaw;\r\n    // check if it is the first element of the current block\r\n    if (index - 1 < 0) {\r\n      return this.finishBack();\r\n    }\r\n    // calculate progression\r\n    this.currentBlock.tracking.progressionRaw--;\r\n    this.save();\r\n    // back\r\n    const nextBlockOrContent = this.currentBlock.blocksOrContents[index - 1]; \r\n    if(this.currentBlock.lazyLoading && !nextBlockOrContent) {\r\n      return this.lazyloadingService.getBlockOrContent(this.currentBlock.blockOrContentIds[index - 1]).pipe(mergeMap(blockCharged => {\r\n        this.currentBlock.blocksOrContents[index - 1] = blockCharged as Content;\r\n        return this.initialize(blockCharged, true, path).pipe(map(blockOrContent => {\r\n          return blockOrContent;\r\n        }));\r\n      }));\r\n    }\r\n       \r\n    return this.initialize(nextBlockOrContent, true, path).pipe(map(blockOrContent => {\r\n      return blockOrContent;\r\n    }));\r\n  }\r\n\r\n  /**\r\n   * It is the method to initialize the content or block NOT \r\n   * at the index in paramters of the block started in parameters, \r\n   * WARNING ! it is only for block NOT in lazy loading mode\r\n   * @param blockStarted \r\n   * @param index of the content or block\r\n   * @param restPath restPath if nested blocks\r\n   */\r\n  private init(blockStarted: Block, index: number, restPath?: string): Observable<Block> {\r\n    if (!blockStarted.blocksOrContents ||  blockStarted.blocksOrContents.length === 0 || !blockStarted.blocksOrContents[index]) {\r\n      if (this.movingBack) {\r\n        return this.moveBack();\r\n      }\r\n      return this.moveForward();        \r\n    } else if (blockStarted.blocksOrContents[index].classType === 'Content') {\r\n      if (this.currentBlock) {\r\n        this.blockChain.push(this.currentBlock);\r\n        blockStarted.blocksOrContents[index] = this.mergeDefaultData(blockStarted.blocksOrContents[index], blockStarted) as Content;\r\n      } else {\r\n        blockStarted.blocksOrContents[index] = this.mergeDefaultData(blockStarted.blocksOrContents[index], blockStarted) as Content;\r\n      }\r\n      this.currentBlock = blockStarted;\r\n      this.currentContent = this.currentBlock.blocksOrContents[index] as Content;\r\n      this.currentContent.resume = this.currentContent.resume === undefined ? this.currentBlock.resume : this.currentContent.resume;\r\n      // if content has prerequisites check them\r\n      return this.checkRestriction(this.currentBlock, this.currentContent)\r\n      .pipe(mergeMap((contentOrBlockPrerequisite) => {\r\n        if (contentOrBlockPrerequisite) {\r\n          return this.initialize(contentOrBlockPrerequisite, true);\r\n        } else {\r\n          this.resumeBlockTrackings(this.currentBlock);\r\n          return this.readAndStart(this.currentContent);\r\n        }\r\n      }));\r\n    } else if (blockStarted.blocksOrContents[index].classType === 'Block') {\r\n      if (this.currentBlock) {\r\n        this.blockChain.push(this.currentBlock);\r\n      }\r\n      this.currentBlock = blockStarted;\r\n      this.resumeBlockTrackings(this.currentBlock);\r\n      return this.initialize(blockStarted.blocksOrContents[index], true, restPath);\r\n    } else {\r\n      throw new Error('error block no typed');\r\n    }\r\n  } \r\n\r\n  /**\r\n   * @deprecated - not supproted anymore -\r\n   * It is the method to initialize the content or block NOT \r\n   * at the index in paramters of the block started in parameters, \r\n   * WARNING ! it is only for block in lazy loading mode\r\n   * @param blockStarted \r\n   * @param index of the content or block\r\n   * @param restPath restPath if nested blocks\r\n   */\r\n  private initLazyLoad(blockStarted: Block, index: number, restPath?: string): Observable<Block> {\r\n    if (!blockStarted.blockOrContentIds ||  blockStarted.blockOrContentIds.length === 0 || !blockStarted.blockOrContentIds[index]) {\r\n      if (this.movingBack) {\r\n        return this.moveBack();\r\n      }\r\n      return this.moveForward();        \r\n    } else {\r\n      if(!blockStarted.blocksOrContents) {\r\n        blockStarted.blocksOrContents = [];\r\n        blockStarted.blocksOrContents.length = blockStarted.blockOrContentIds.length;\r\n      } else {\r\n        if(blockStarted.blocksOrContents[index]) {\r\n          return this.init(blockStarted, index, restPath);\r\n        }\r\n      }\r\n      return this.lazyloadingService.\r\n      getBlockOrContent(blockStarted.blockOrContentIds[index]).pipe(mergeMap(blockCharged => {\r\n        blockStarted.blocksOrContents[index] =  blockCharged as Content;\r\n        if (blockCharged.classType === 'Content') {\r\n          if (this.currentBlock) {\r\n            this.blockChain.push(this.currentBlock);\r\n            blockStarted.blocksOrContents[index] = this.mergeDefaultData(blockStarted.blocksOrContents[index], this.currentBlock) as Content;\r\n          } else {\r\n            blockStarted.blocksOrContents[index] = this.mergeDefaultData(blockStarted.blocksOrContents[index], blockStarted) as Content;\r\n          }\r\n          this.currentBlock = blockStarted;\r\n          this.currentContent = this.currentBlock.blocksOrContents[index] as Content;\r\n          this.currentContent.resume = this.currentContent.resume === undefined ? this.currentBlock.resume : this.currentContent.resume;\r\n          // if content has prerequisites check them\r\n          return this.checkRestriction(this.currentBlock, this.currentContent)\r\n          .pipe(mergeMap((contentOrBlockPrerequisite) => {\r\n            if (contentOrBlockPrerequisite) {\r\n              return this.initialize(contentOrBlockPrerequisite, true);\r\n            } else {\r\n              this.resumeBlockTrackings(this.currentBlock, index);\r\n              return this.readAndStart(this.currentContent);\r\n            }\r\n          }));\r\n        } else if (blockStarted.blocksOrContents[index].classType === 'Block') {\r\n          if (this.currentBlock) {\r\n            this.blockChain.push(this.currentBlock);\r\n          }\r\n          this.currentBlock = blockStarted;\r\n          return this.initialize(blockStarted.blocksOrContents[index], true, restPath);\r\n        } else {\r\n          throw new Error('error block no typed');\r\n        }\r\n      }));      \r\n    }\r\n  }\r\n\r\n  /**\r\n   * set the language of the block with its config \r\n   * @param block \r\n   */\r\n  private setLanguage(block: Block): void {\r\n    if (this.forceLang) {\r\n      if(block.defaultData && block.defaultData.langs){\r\n        const lang = block.defaultData.langs.find(x => x.key === this.forceLang);\r\n        if (lang) {\r\n          this.currentLang = lang.key;\r\n          return;\r\n        }\r\n      }\r\n    }\r\n    if(!this.chosenLang) {\r\n      if (block.lang) {\r\n        this.currentLang = block.lang;\r\n      } else if(block.defaultData && block.defaultData.langs){\r\n        this.currentLang = block.defaultData.langs.length > 0 ? block.defaultData.langs[0].key : 'fr';\r\n      }\r\n    } else {\r\n      const langs = block.defaultData ? block.defaultData.langs : null;\r\n      if(langs && langs.length > 0 && langs.findIndex(x => x.key === this.chosenLang) < 0) {\r\n        this.currentLang = block.lang ? block.lang : langs[0].key;\r\n      } else {\r\n        this.currentLang = this.chosenLang;\r\n      }\r\n    }\r\n    \r\n  }\r\n\r\n  /**\r\n   * set the location with the location of the block in params\r\n   * @param block \r\n   */\r\n  private setLocation(blockOrContent: Block | Content) {\r\n    this.location = blockOrContent._id;\r\n    this.locationPath = UtilService.getPathBlockInBlock(blockOrContent._id, this.mainBlock);\r\n    if (this.mainBlock && this.mainBlock.tracking) {\r\n      this.mainBlock.tracking.data = this.mainBlock.tracking.data ? this.mainBlock.tracking.data : {} as any;\r\n      this.mainBlock.tracking.data.location = this.location;\r\n    }\r\n    this.locationChange.next(this.locationPath);\r\n  }\r\n\r\n  /**\r\n   * it is to read persistor and get the tracking of the block in parameters and start it\r\n   * @param block to read and start\r\n   * @param firstPath firstpath to follow\r\n   * @param restPath rest path to use if nested block\r\n   */\r\n  private readAndStart(block: Block, firstPath?: string, restPath?: string): Observable<Block> {\r\n    let resume = block.resume;\r\n    if (this.mainBlock && block._id === this.mainBlock._id && this.mainBlock.resumeNav) {\r\n      // always resume tracking if it is the main block\r\n      resume = true;\r\n    }\r\n    return this.persistorService.read(block._id, resume, this.registrationId).pipe(mergeMap(tracking => {\r\n      // check resume\r\n      if (this.mainBlock && block._id === this.mainBlock._id && this.mainBlock.resumeNav && tracking && tracking.data && tracking.data.location && !firstPath && !restPath) {        \r\n        // if block is mainblock and tracking and no path given ask for resuming\r\n        const modal = this.modal.createModal(Translations.get('RESUME', this.mainBlock.lang), Translations.get('LIKE_TO_RESUME', this.mainBlock.lang), \r\n        [{ title : Translations.get('YES', this.mainBlock.lang), status: 'primary', value: 'YES' } as ModalButton,\r\n        { title : Translations.get('NO', this.mainBlock.lang), status: 'success', value: 'NO' } as ModalButton]);\r\n        this.modal.showModal(modal);\r\n        return modal.clicked.pipe(mergeMap((value) => {\r\n          this.modal.hideModal(modal);\r\n          if (value === 'YES') {\r\n            this.resumeNav = true;\r\n            const pathRaw = UtilService.getPathBlockInBlock(tracking.data.location, this.mainBlock);\r\n            const paths = pathRaw.toString().split('/') as string[];\r\n            firstPath = paths.shift();\r\n            restPath = paths.join('/');            \r\n            return this.start(block, tracking);\r\n          } else {\r\n            if (this.mainBlock.resume) {\r\n              // if mainBlock resume is true, load tracking\r\n              return this.start(block, tracking)\r\n            } else {\r\n              // if mainBlock resume is false don't load tracking\r\n              return this.start(block, null);\r\n            }\r\n          }          \r\n        }));\r\n      }\r\n      return this.start(block, tracking);\r\n    }), mergeMap(blockStarted => {\r\n      // use lang chosen by user\r\n      if(!this.chosenLang && this.mainBlock.tracking && this.mainBlock.tracking.data && this.mainBlock.tracking.data.chosenLang) {\r\n        this.chosenLang = this.mainBlock.tracking.data.chosenLang;\r\n        this.setLanguage(this.mainBlock);\r\n      }\r\n      // if block is content just return it\r\n      if (blockStarted.classType === 'Content') {\r\n        this.currentContent = blockStarted as Content;\r\n        return of(this.currentContent);\r\n      }\r\n      // get the index of the current block to charge\r\n      let index = 0;\r\n      //change the index if path set \r\n      if (firstPath && !isNaN(Number(firstPath))) {\r\n        index = Number(firstPath);\r\n        blockStarted.tracking.progressionRaw = index;\r\n      }\r\n      // check if it is lazyloading block if yes init lazyload process\r\n      if(blockStarted.lazyLoading) {\r\n        return this.initLazyLoad(blockStarted, index, restPath);\r\n      }\r\n      // init the current block \r\n      return this.init(blockStarted, index, restPath);      \r\n    }));\r\n  }\r\n\r\n  /**\r\n   * check if current block has restriction\r\n   * @param aboveBlock block above the current block\r\n   * @param currentBlock current block where to check the restriction\r\n   * @return block if above block is not lazy loaded , return id otherwise\r\n   */\r\n  private checkRestriction(aboveBlock: Block, currentBlock: Block): Observable<Block>  {\r\n    // if block is animator only and user is not animator redirect to next block\r\n    if (currentBlock.animatorOnly && !this.animator) {\r\n      return this.moveForward();\r\n    }\r\n\r\n    if (currentBlock.prerequisites) {\r\n      // if idMustBeCompleted is set\r\n      if (currentBlock.prerequisites.blockId) {\r\n        // if lazy loading\r\n        if(aboveBlock.lazyLoading) {\r\n          const indexBkFound = aboveBlock.blockOrContentIds\r\n                    .findIndex(x => x === currentBlock.prerequisites.blockId);\r\n          if(indexBkFound > -1) {\r\n            // retrieve block restr\r\n            if ( aboveBlock.blocksOrContents && aboveBlock.blocksOrContents[indexBkFound]) {\r\n              const blockFound = aboveBlock.blocksOrContents[indexBkFound];\r\n              if (blockFound) {\r\n                if (!blockFound.tracking) {\r\n                  return of(blockFound);\r\n                } else if (currentBlock.prerequisites.type === PrerequisiteType.progress &&\r\n                   blockFound.tracking.progressionPercent < currentBlock.prerequisites.value) {\r\n                    return of(blockFound);\r\n                } else if (currentBlock.prerequisites.type === PrerequisiteType.score &&\r\n                  blockFound.tracking.scorePercent < currentBlock.prerequisites.value) {\r\n                   return of(blockFound);\r\n                }\r\n              }\r\n              return of(null);\r\n            }\r\n            return this.lazyloadingService.getBlockOrContent(aboveBlock.blockOrContentIds[indexBkFound])\r\n            .pipe(map(blockCharged => {\r\n              aboveBlock.blocksOrContents[indexBkFound] = blockCharged as Content;\r\n              if (blockCharged) {\r\n                if (!blockCharged.tracking) {\r\n                  return blockCharged;\r\n                } else if (currentBlock.prerequisites.type === PrerequisiteType.progress &&\r\n                  blockCharged.tracking.progressionPercent < currentBlock.prerequisites.value) {\r\n                    return blockCharged;\r\n                } else if (currentBlock.prerequisites.type === PrerequisiteType.score &&\r\n                  blockCharged.tracking.scorePercent < currentBlock.prerequisites.value) {\r\n                   return blockCharged;\r\n                }\r\n              }\r\n              return null;\r\n            }));\r\n          }\r\n          \r\n        } else {\r\n        // if NOT lazy loading\r\n          const indexBlockFound = aboveBlock.blocksOrContents\r\n          .findIndex(x => x._id === currentBlock.prerequisites.blockId);\r\n          \r\n                 \r\n          if (indexBlockFound >= 0) {\r\n            const blockFound = aboveBlock.blocksOrContents[indexBlockFound];\r\n            if (!blockFound.tracking) {\r\n                return this.redirectToBlockRestricted(aboveBlock, blockFound, indexBlockFound);\r\n            } else if (currentBlock.prerequisites.type === PrerequisiteType.progress &&\r\n               blockFound.tracking.progressionPercent < currentBlock.prerequisites.value) {\r\n                return this.redirectToBlockRestricted(aboveBlock, blockFound, indexBlockFound);\r\n            } else if (currentBlock.prerequisites.type === PrerequisiteType.score &&\r\n              blockFound.tracking.scorePercent < currentBlock.prerequisites.value) {\r\n                return this.redirectToBlockRestricted(aboveBlock, blockFound, indexBlockFound);\r\n            } else if (this.blockIsLock(currentBlock) && !this.animator) {\r\n                return this.redirectToBlockRestricted(aboveBlock, blockFound, indexBlockFound);\r\n            }\r\n          }\r\n          return of(null);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.checkConditions((currentBlock as Content));    \r\n  }\r\n\r\n  /**\r\n   * check conditions of the current content and do the redirect if any and if needed\r\n   * @param aboveBlock \r\n   * @param currentContent \r\n   * @returns \r\n   */\r\n  checkConditions(currentContent: Content): Observable<Block> {\r\n    // check if the current Block is content and has conditions\r\n    if (currentContent && currentContent.data && currentContent.data.conditions) {\r\n      for (const condition of currentContent.data.conditions) {\r\n        if (condition.conditionBlockId) {\r\n          const blockFound = UtilService.findBlockInBlock(condition.conditionBlockId, this.mainBlock);                \r\n          if (blockFound) {\r\n            if (!blockFound.tracking) {\r\n              const path = this.movingBack ? UtilService.getPathBlockInBlock(condition.redirectBackBlockId, this.mainBlock) : UtilService.getPathBlockInBlock(condition.redirectBlockId, this.mainBlock);\r\n              return this.movingBack ? this.moveBack(`/${path}`) : this.moveForward(`/${path}`);\r\n            } \r\n            switch(condition.type) {\r\n              case PrerequisiteType.progress:\r\n                if (blockFound.tracking.progressionPercent < condition.value) {\r\n                  const path = this.movingBack ? UtilService.getPathBlockInBlock(condition.redirectBackBlockId, this.mainBlock) : UtilService.getPathBlockInBlock(condition.redirectBlockId, this.mainBlock);\r\n                  return this.movingBack ? this.moveBack(`/${path}`) : this.moveForward(`/${path}`);\r\n                }\r\n                break;\r\n              case PrerequisiteType.score:\r\n                if (blockFound.tracking.scorePercent < condition.value) {\r\n                  const path = this.movingBack ? UtilService.getPathBlockInBlock(condition.redirectBackBlockId, this.mainBlock) : UtilService.getPathBlockInBlock(condition.redirectBlockId, this.mainBlock);\r\n                  return this.movingBack ? this.moveBack(`/${path}`) : this.moveForward(`/${path}`);\r\n                }\r\n                break;\r\n            }\r\n          }\r\n        }       \r\n      }\r\n      return of(null);\r\n    }\r\n    return of(null);\r\n  }\r\n\r\n  /**\r\n   * if restricted do all the needed thing on the above and current block\r\n   * @param aboveBlock the block that contains the current block\r\n   * @param currentBlock block where the access is restricted\r\n   * @param index of the restricted block where the user must be redirected\r\n   */\r\n  private redirectToBlockRestricted(aboveBlock: Block, currentBlock: Block, index: number) {\r\n    aboveBlock.tracking.progressionRaw = index;\r\n    return of(currentBlock);\r\n  }\r\n\r\n  /**\r\n   * Calculate timespent from a tracking date and return the tracking with the property timespent and sessTimeSpent updated\r\n   * @param tracking used to calculate timeSpent\r\n   */\r\n  private calcTimeSpent(tracking: Tracking): Tracking {\r\n    // if not set just end  \r\n    if (!tracking.lastLaunchDate) {\r\n      return tracking;\r\n    }\r\n    // calculate current session time spent    \r\n    const sessionTime = Math.round((new Date().getTime() - new Date(tracking.lastLaunchDate).getTime()) / 1000);\r\n    if (!tracking.timeSpent) {\r\n      // if no total time spent just set with session\r\n      tracking.sessTimeSpent = sessionTime;\r\n      tracking.timeSpent = tracking.sessTimeSpent;\r\n    } else {\r\n      // else substract old session time spent\r\n      if (tracking.sessTimeSpent) {\r\n        tracking.timeSpent = tracking.timeSpent - tracking.sessTimeSpent;\r\n      }\r\n      // and add new session time spent  \r\n      tracking.sessTimeSpent = sessionTime;\r\n      tracking.timeSpent = tracking.timeSpent + tracking.sessTimeSpent;\r\n    }\r\n    return tracking;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Multilang } from '../model/multilang';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { NgxCvbspPlayerService } from '../ngx-cvbsp-player.service';\r\n\r\n@Pipe({\r\n  name: 'multilang',\r\n  pure : false // needed to refresh the lang if a translate change\r\n})\r\nexport class MultilangPipe implements PipeTransform {\r\n  constructor(private player: NgxCvbspPlayerService) {}\r\n  transform(value: Multilang) {\r\n    if (value && typeof value === 'object') {\r\n      return value[this.player.currentLang];\r\n    } else if (value && typeof value === 'string') {\r\n      return value;\r\n }\r\n    return '';\r\n  }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { Block } from '../../model/block';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\n\r\n@Component({\r\n  selector: 'list-block-order',\r\n  templateUrl: './list-block-order.component.html',\r\n  styleUrls: ['./list-block-order.component.scss'],\r\n})\r\nexport class ListBlockOrderComponent implements OnInit {\r\n\r\n  @Input() inside: boolean;\r\n  @Input() block: Block;\r\n  @Output() lockEvent: EventEmitter<string> = new EventEmitter();\r\n  @Output() unlockEvent: EventEmitter<string> = new EventEmitter();\r\n  blockOpened: number[] = [];\r\n  constructor(public player: NgxCvbspPlayerService) { }\r\n\r\n  ngOnInit() {\r\n  }\r\n\r\n  lock(blockId: string) {\r\n    this.lockEvent.next(blockId);\r\n  }\r\n\r\n  unlock(blockId: string) {\r\n    this.unlockEvent.next(blockId);\r\n  }\r\n\r\n  openCloseBlock(index) {\r\n    const found = this.blockOpened.findIndex(x => x === index);\r\n    if (found > -1) {\r\n      this.blockOpened.splice(found, 1);\r\n    } else {\r\n      this.blockOpened.push(index);\r\n    }\r\n  }\r\n\r\n  isBlockOpened(index) {\r\n    const found = this.blockOpened.findIndex(x => x === index);\r\n    if (found > -1) {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n}\r\n","\r\n<div *ngFor=\"let content of block?.blocksOrContents; let i = index\" >\r\n  <div class=\"content-box-select\" *ngIf=\"!content.animatorOnly\">\r\n    {{ content.title | multilang }} \r\n    <!-- content lock -->\r\n    <button class=\"btn-lock\" (click)='unlock(content._id)'\r\n    *ngIf=\"player.blockIsLock(content)\"  > \r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"black\" width=\"18px\" height=\"18px\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"/>\r\n      </svg> \r\n    </button>\r\n    <!-- content unlock -->\r\n    <button class=\"btn-lock\" (click)='lock(content._id)' title=\"\"\r\n    *ngIf=\"!player.blockIsLock(content) && content.order?.locked === false\" > \r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"black\" width=\"18px\" height=\"18px\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z\"/>\r\n      </svg>\r\n    </button>\r\n    <!-- develop block button -->\r\n    <span class=\"content-develop\"\r\n    *ngIf=\"content.classType === 'Block'\"  (click)=\"openCloseBlock(i)\" > \r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"black\" width=\"18px\" height=\"18px\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 10l5 5 5-5z\"/></svg> \r\n    </span>\r\n  </div>\r\n  <div class=\"content-inside\">\r\n    <list-block-order [inside]=\"true\" *ngIf=\"content.classType === 'Block' && isBlockOpened(i)\" \r\n    (lockEvent)=\"lock($event)\" \r\n    (unlockEvent)=\"unlock($event)\" \r\n    [block]=\"content\">\r\n    </list-block-order>\r\n  </div>\r\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IContentData } from '../../model/content-data';\r\n\r\n@Component({\r\n  selector: 'cvbsp-actions-bar',\r\n  templateUrl: './actions-bar.component.html',\r\n  styleUrls: ['./actions-bar.component.scss'],\r\n})\r\nexport class ActionsBarComponent implements OnInit {\r\n  @Input() data: IContentData;\r\n  @Input() class: string;\r\n  @Output() nextEvent: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() backEvent: EventEmitter<any> = new EventEmitter<any>();\r\n  constructor() { }\r\n\r\n  ngOnInit() {}\r\n\r\n  next() {\r\n    this.nextEvent.next();\r\n  }\r\n\r\n  back() {\r\n    this.backEvent.next();\r\n  }\r\n\r\n}\r\n","<div class=\"cvbsp-actions {{ class }}\" *ngIf=\"!data.noBack || !data.noNext\">\r\n  <button class=\"cvbsp-btn back-btn {{ class }}\" *ngIf=\"!data.noBack\" (click)=\"back()\">\r\n    {{ data.backLabel | multilang }}\r\n  </button>\r\n  <button class=\"cvbsp-btn next-btn {{ class }}\" *ngIf=\"!data.noNext\" (click)=\"next()\">\r\n    {{ data.nextLabel | multilang }}\r\n  </button>\r\n</div>\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IContentComponent } from '../../model/content-component';\r\nimport { ILangData } from '../../model/lang-data';\r\nimport { Tracking } from '../../model/tracking';\r\nimport { Lang } from '../../model/multilang';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\nimport { RemoteOrder } from '../../model/remote-order';\r\nimport { IRemoteCtrlData } from '../../model/remote-ctrl-data';\r\n\r\n@Component({\r\n  selector: 'lib-remote-ctrl',\r\n  templateUrl: './remote-ctrl.component.html',\r\n  styleUrls: ['./remote-ctrl.component.scss'],\r\n})\r\nexport class RemoteCtrlComponent implements OnInit, IContentComponent {\r\n  @Input() data: IRemoteCtrlData;\r\n  @Input() tracking: Tracking;\r\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() backEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n\r\n  langs: Lang[];\r\n\r\n  constructor(public player: NgxCvbspPlayerService) { }\r\n  \r\n\r\n  ngOnInit() {\r\n    if (!this.tracking) {\r\n      this.tracking = new Tracking();\r\n    }\r\n  }\r\n\r\n  unlock(blockId: string) {\r\n    var newOrder = new RemoteOrder(blockId);\r\n    newOrder.locked = false;\r\n    this.player.sendOrder(newOrder);\r\n  }\r\n\r\n  lock(blockId: string) {\r\n    var newOrder = new RemoteOrder(blockId);\r\n    newOrder.locked = true;\r\n    this.player.sendOrder(newOrder);\r\n  }\r\n\r\n  next() {\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutNext;\r\n    this.nextEvent.next(this.tracking);\r\n  }\r\n\r\n  back() {\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutBack;\r\n    this.backEvent.next(this.tracking);\r\n  }\r\n\r\n}\r\n","<div class=\"remote-ctrl-container\">\r\n  <list-block-order \r\n  (lockEvent)=\"lock($event)\" \r\n  (unlockEvent)=\"unlock($event)\" \r\n  [block]=\"player.mainBlock\">\r\n  </list-block-order>\r\n</div>\r\n<cvbsp-actions-bar \r\n  (nextEvent)=\"next()\"\r\n  (backEvent)=\"back()\"\r\n  [data]=\"data\">\r\n</cvbsp-actions-bar>\r\n","import { Injectable } from '@angular/core';\r\nimport { IInstantConnector } from './model/instant-connector';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Tracking } from './model/tracking';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\n/**\r\n * instant connector allow to receive and send tracking data instantaneously\r\n * user receive the tracking data of all other users with the same session id/registration id of the same block\r\n */\r\nexport class NgxCvbspInstantConnectorService {\r\n\r\n  instantConnector: IInstantConnector;\r\n  isConnected: boolean;\r\n  \r\n  constructor() {\r\n  }\r\n\r\n  init(instantConnector?: IInstantConnector) {\r\n    if (instantConnector) {\r\n      this.instantConnector = instantConnector;\r\n      return;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * listen to receive instant push data\r\n   * \r\n   */\r\n  receive(blockId: string, registrationId: string, userId: string): Observable<Tracking> {\r\n    if (this.instantConnector) {\r\n      return this.instantConnector.receive(blockId, registrationId, userId);\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * send tracking to broadcast over the session users\r\n   * @param tracking to save\r\n   */\r\n  send(tracking: Tracking) {\r\n    if (this.instantConnector) {\r\n      this.instantConnector.send(tracking);\r\n    }    \r\n  }\r\n\r\n  /**\r\n   * send tracking to broadcast over the session users\r\n   * @param tracking to save\r\n   */\r\n  close() {\r\n    if (this.instantConnector) {\r\n      this.instantConnector.close();\r\n    }    \r\n  }\r\n}\r\n","import { Pipe, PipeTransform, Optional } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { PlayerConfig } from '../model/player-config';\r\nimport { UtilService } from './util.service';\r\n\r\n@Pipe({\r\n  name: 'safeHtml',\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n  debug: boolean;\r\n  constructor(\r\n    @Optional() config: PlayerConfig,\r\n    private sanitizer: DomSanitizer) {\r\n      this.debug = config && config.debug ? true : false;\r\n  }\r\n  transform(html: string, scope?: any): SafeHtml {\r\n    if (!html) {\r\n      return '';\r\n    }\r\n    if (scope) {\r\n      html = UtilService.compile(html, scope);\r\n    }\r\n    const safeHtml = this.sanitizer.bypassSecurityTrustHtml(html);\r\n    return safeHtml;\r\n  }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { IContentComponent } from '../../model/content-component';\r\nimport { Tracking } from '../../model/tracking';\r\nimport { IQuestionData, IAnswer } from '../../model/question-data';\r\nimport { Multilang } from '../../model/multilang';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\nimport { NgxCvbspInstantConnectorService } from '../../ngx-cvbsp-instant-connector.service';\r\nimport { UtilService } from '../../util/util.service';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'qcm',\r\n  templateUrl: './qcm.component.html',\r\n  styleUrls: ['./qcm.component.scss'],\r\n})\r\nexport class QcmComponent implements OnInit, IContentComponent, OnDestroy {\r\n  @Input() data: IQuestionData;\r\n  @Input() tracking: Tracking;\r\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() backEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  score: number;\r\n  validated: boolean;\r\n  explained: boolean;\r\n  oneIsChosenAtLeast: boolean;\r\n  feedback: Multilang;\r\n  instantData: any = {};\r\n  /** data accessible in html */\r\n  htmlScope:any = {};\r\n  constructor(\r\n    public instantConnector: NgxCvbspInstantConnectorService,\r\n    public player: NgxCvbspPlayerService) { }\r\n\r\n  ngOnInit() {\r\n    if (!this.tracking) {\r\n      this.tracking = new Tracking();\r\n    }\r\n    if (!this.tracking.data) {\r\n      this.tracking.data = {};\r\n    }\r\n    // calculate max score\r\n    let score: number = 0;\r\n    for (const answer of this.data.answers) {\r\n      if (answer.score > 0) {\r\n        score = score + answer.score;\r\n      }\r\n      if (this.tracking.data.answers &&  this.tracking.data.answers.find(x => answer.name && x.name && x.name === answer.name)) {\r\n        answer.checked = true;\r\n      }\r\n    }\r\n    if(this.data.shuffled) {\r\n      this.data.answers = this.shuffleArray(this.data.answers);\r\n    }\r\n    this.tracking.scoreMax = score;\r\n    // set html scope\r\n    this.htmlScope.answers = this.data.answers;\r\n    this.htmlScope.answersObj = UtilService.arrayToObject(this.data.answers);\r\n    this.htmlScope.block = this.player.currentBlock.tracking;\r\n    this.htmlScope.scoreMax = score;\r\n    // listen to receive push info\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.receive(this.tracking.blockId, this.tracking.registrationId, this.tracking.userId)\r\n      .subscribe((instantData) => {\r\n        // TODO redo the instant result stuff\r\n      });\r\n    }\r\n  }\r\n\r\n  choose(index) {\r\n    if (this.validated) {\r\n      return;\r\n    }\r\n    this.data.answers[index].checked = !this.data.answers[index].checked;\r\n    let checkeds = this.data.answers.filter(x => x.checked);\r\n    // if limited answers verify if beyonf limit\r\n    if (this.data.limitAnswers && checkeds.length > this.data.limitAnswers) {\r\n      var i = 0;\r\n      for(const a of this.data.answers) {\r\n        if (i !== index && a.checked) {\r\n          a.checked = false;\r\n          break;\r\n        }\r\n        i++;\r\n      }\r\n      checkeds = this.data.answers.filter(x => x.checked);\r\n    }\r\n    this.oneIsChosenAtLeast = checkeds.length > 0;\r\n    this.score = checkeds.reduce((a, i) => { \r\n      a = i.checked ?  a + i.score : a;\r\n      return a;\r\n    }, 0);\r\n    this.tracking.data.answers = checkeds;\r\n    // set html scope\r\n    this.htmlScope.answers = this.data.answers;\r\n    this.htmlScope.answersObj = UtilService.arrayToObject(this.data.answers);\r\n    this.htmlScope.score = this.score;\r\n  }\r\n\r\n  next() {\r\n    this.calcScore();\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutNext;\r\n    this.nextEvent.next(this.tracking);\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.send(this.tracking);\r\n    }\r\n  }\r\n\r\n  back() {\r\n    this.calcScore();\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutBack;\r\n    this.backEvent.next(this.tracking);\r\n  }\r\n\r\n  validate() {\r\n    this.calcScore();\r\n    var i = this.data.answers.findIndex(x => (x.correct && !x.checked) || (!x.correct && x.checked));\r\n    this.feedback = i < 0 ? this.data.feedbackCorrect : this.data.feedbackIncorrect;\r\n    this.validated = true;\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.send(this.tracking);\r\n    }\r\n  }\r\n\r\n  itemClass(response: IAnswer) {\r\n    let textClass = 'cvbsp-qcm-answer';\r\n    if (response.checked) {\r\n      textClass = textClass + ' active';\r\n    }\r\n    if (!this.validated) {\r\n      return textClass;\r\n    } else {\r\n      if (response.correct) {\r\n        textClass = textClass + ' correct';\r\n        return textClass;\r\n      } else {\r\n        textClass = textClass + ' uncorrect';\r\n        return textClass;\r\n      }\r\n    }\r\n  }\r\n\r\n  calcScore() {\r\n    this.tracking.scoreRaw = this.score;\r\n    this.tracking.scorePercent = Math.round(this.score * 100 / this.tracking.scoreMax);\r\n  }\r\n\r\n  shuffleArray(array: any[]): any[] {\r\n    for (var i = array.length - 1; i > 0; i--) {\r\n        var j = Math.floor(Math.random() * (i + 1));\r\n        var temp = array[i];\r\n        array[i] = array[j];\r\n        array[j] = temp;\r\n    }\r\n    return array;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.close();\r\n    }\r\n  }\r\n\r\n}\r\n\r\n","<div *ngIf=\"!data.hideTitle && (player.currentContent?.title | multilang) !== '' && !data.showStdActions && !data.showStdActionsTop\" class=\"ql-editor cvbsp-qcm-title\" [innerHTML]=\"player.currentContent?.title | multilang | safeHtml\">\r\n\r\n</div>\r\n<div class=\"ql-editor cvbsp-qcm-question\" [innerHTML]=\"data.question | multilang | safeHtml:htmlScope\">\r\n\r\n</div>\r\n<div class=\"cvbsp-qcm-answers\">\r\n  <div [class]=\"itemClass(answer)\" *ngFor=\"let answer of data.answers;let i = index\" (click)=\"choose(i)\">\r\n      {{ answer.title | multilang }}\r\n  </div>\r\n</div>\r\n<div class=\"cvbsp-qcm-input\" *ngIf=\"data.hasInput\">\r\n  <textarea class=\"cvbsp-qcm-textarea\" placeholder=\"{{ data.inputPh  | multilang }}\" [(ngModel)]=\"tracking.data.input\">\r\n  </textarea>\r\n</div>\r\n<div class=\"cvbsp-qcm-feedback\" *ngIf=\"data.hasFeedback && validated\" [innerHTML]=\"feedback | multilang | safeHtml:htmlScope\">\r\n</div>\r\n<!-- <div class=\"cvbsp-qcm-instant\" *ngIf=\"data.instantResult && validated\">\r\n  <div class=\"cvbsp-qcm-instant-answer\" *ngFor=\"let answerAgr of instantData.aggregatedAnswers; let i = index\">\r\n    {{ answerAgr.title | multilang }}\r\n    <div class=\"graph-bar-cont\">\r\n      <div class=\"graph-bar\" [ngStyle]=\"{ 'width.%' : answerAgr.percentChosen }\">\r\n        <span *ngIf=\"answerAgr.percentChosen >= 5\">{{ answerAgr.percentChosen }} %</span>\r\n      </div>\r\n      <div class=\"graph-bar empty\" *ngIf=\"answerAgr.percentChosen < 5\">\r\n        <span>{{ answerAgr.percentChosen }} %</span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div> -->\r\n<div class=\"cvbsp-qcm-actions\">\r\n  <button class=\"cvbsp-btn back-btn\" *ngIf=\"!data.noBack\" (click)=\"back()\">{{ data.backLabel | multilang }}</button>\r\n  <button class=\"cvbsp-btn next-btn\" \r\n  [disabled]=\"!data.hasFeedback && data.mandatory && !oneIsChosenAtLeast\"\r\n  *ngIf=\"!data.noNext && ((data.hasFeedback && validated) || !data.hasFeedback)\" \r\n    (click)=\"next()\">{{ data.nextLabel | multilang }}\r\n  </button>\r\n  <button class=\"cvbsp-btn next-btn\" *ngIf=\"data.hasFeedback && !validated\" [disabled]=\"data.mandatory && !oneIsChosenAtLeast\" \r\n    (click)=\"validate()\">{{ data.validateLabel | multilang }}\r\n  </button>\r\n</div>\r\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { IContentComponent } from '../../model/content-component';\r\nimport { Tracking } from '../../model/tracking';\r\nimport { IQuestionData, IAnswer } from '../../model/question-data';\r\nimport { Multilang } from '../../model/multilang';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\nimport { NgxCvbspInstantConnectorService } from '../../ngx-cvbsp-instant-connector.service';\r\nimport { UtilService } from '../../util/util.service';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'qcu',\r\n  templateUrl: './qcu.component.html',\r\n  styleUrls: ['./qcu.component.scss'],\r\n})\r\nexport class QcuComponent implements OnInit, IContentComponent, OnDestroy {\r\n  @Input() data: IQuestionData;\r\n  @Input() tracking: Tracking;\r\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() backEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  score: number;\r\n  validated: boolean;\r\n  explained: boolean;\r\n  oneIsChosenAtLeast: boolean;\r\n  feedback: Multilang;\r\n  instantData: any = {};\r\n  /** data accessible in html */\r\n  htmlScope:any = {};\r\n  constructor(\r\n    public instantConnector: NgxCvbspInstantConnectorService,\r\n    public player: NgxCvbspPlayerService) { }\r\n  \r\n\r\n  ngOnInit() {\r\n    if (!this.tracking) {\r\n      this.tracking = new Tracking();\r\n    }\r\n    // calculate max score\r\n    let score: number;\r\n    for (const answer of this.data.answers) {\r\n      if (!score || score < answer.score) {\r\n        score = answer.score;\r\n      }\r\n      if (this.tracking.data && this.tracking.data.name && answer.name === this.tracking.data.name) {\r\n        answer.checked = true;\r\n      }\r\n    }\r\n    if(this.data.shuffled) {\r\n      this.data.answers = this.shuffleArray(this.data.answers);\r\n    }\r\n    this.tracking.scoreMax = score;\r\n    // set html scope\r\n    this.htmlScope.answers = this.data.answers;\r\n    this.htmlScope.answersObj = UtilService.arrayToObject(this.data.answers);\r\n    this.htmlScope.block = this.player.currentBlock.tracking;\r\n    this.htmlScope.scoreMax = score;\r\n    // listen to receive push info\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.receive(this.tracking.blockId, this.tracking.registrationId, this.tracking.userId)\r\n      .subscribe((instantData) => {\r\n        // TODO redo the instant result stuff with new implementation\r\n      });\r\n    }\r\n  }\r\n\r\n  choose(index) {\r\n    if (this.validated) {\r\n      return;\r\n    }\r\n\r\n    this.data.answers.map(x => {\r\n      x.checked = false;\r\n      return x;\r\n    });\r\n    this.data.answers[index].checked = true;\r\n    this.oneIsChosenAtLeast = true;\r\n    this.score = this.data.answers[index].score;\r\n    this.tracking.data = this.data.answers[index];\r\n    this.tracking.pathOut = this.data.answers[index].pathOut;\r\n\r\n    // set html scope\r\n    this.htmlScope.answers = this.data.answers;\r\n    this.htmlScope.answersObj = UtilService.arrayToObject(this.data.answers);\r\n    this.htmlScope.score = this.score;\r\n\r\n    // go to the next content immediately after choosing\r\n    if (this.data.autoNext) {\r\n      this.next()    \r\n    }\r\n  }\r\n\r\n  next() {\r\n    this.calcScore();\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    if (!this.tracking.pathOut) {\r\n      this.tracking.pathOut = this.data.pathOutNext;\r\n    }    \r\n    this.nextEvent.next(this.tracking);\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.send(this.tracking);\r\n    }\r\n  }\r\n\r\n  back() {\r\n    this.calcScore();\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutBack;\r\n    this.backEvent.next(this.tracking);\r\n  }\r\n\r\n  validate() {\r\n    this.calcScore();\r\n    var i = this.data.answers.findIndex(x => (x.correct && !x.checked) || (!x.correct && x.checked));\r\n    this.feedback = i < 0 ? this.data.feedbackCorrect : this.data.feedbackIncorrect;\r\n    this.validated = true;\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.send(this.tracking);\r\n    }\r\n  }\r\n\r\n  itemClass(response: IAnswer) {\r\n    let textClass = 'cvbsp-qcu-answer';\r\n    if (response.checked) {\r\n      textClass = textClass + ' active';\r\n    }\r\n    if (!this.validated) {\r\n      return textClass;\r\n    } else {\r\n      if (response.correct) {\r\n        textClass = textClass + ' correct';\r\n        return textClass;\r\n      } else {\r\n        textClass = textClass + ' uncorrect';\r\n        return textClass;\r\n      }\r\n    }\r\n  }\r\n\r\n  calcScore() {\r\n    this.tracking.scoreRaw = this.score;\r\n    this.tracking.scorePercent = Math.round(this.score * 100 / this.tracking.scoreMax);\r\n  }\r\n\r\n  shuffleArray(array: any[]): any[] {\r\n    for (var i = array.length - 1; i > 0; i--) {\r\n        var j = Math.floor(Math.random() * (i + 1));\r\n        var temp = array[i];\r\n        array[i] = array[j];\r\n        array[j] = temp;\r\n    }\r\n    return array;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if(this.data.instantResult) {\r\n      this.instantConnector.close();\r\n    }\r\n  }\r\n\r\n}\r\n\r\n","<div *ngIf=\"!data.hideTitle && (player.currentContent?.title | multilang) !== '' && !data.showStdActions && !data.showStdActionsTop\" class=\"ql-editor cvbsp-qcu-title\" [innerHTML]=\"player.currentContent?.title | multilang | safeHtml:htmlScope\">\r\n\r\n</div>\r\n<div class=\"ql-editor cvbsp-qcu-question\" [innerHTML]=\"data.question | multilang | safeHtml:htmlScope\">\r\n\r\n</div>\r\n<div class=\"cvbsp-qcu-answers\">\r\n  <div [class]=\"itemClass(answer)\" *ngFor=\"let answer of data.answers;let i = index\" (click)=\"choose(i)\">\r\n      {{ answer.title | multilang }}\r\n  </div>\r\n</div>\r\n<div class=\"cvbsp-qcu-feedback\" *ngIf=\"data.hasFeedback && validated\" [innerHTML]=\"feedback | multilang | safeHtml:htmlScope\">\r\n</div>\r\n<!-- <div class=\"cvbsp-qcu-instant\" *ngIf=\"data.hasFeedback && data.instantResult && validated\">\r\n  <div class=\"cvbsp-qcu-instant-answer\" *ngFor=\"let answerAgr of instantData.aggregatedAnswers; let i = index\">\r\n    {{ answerAgr.title | multilang }}\r\n    <div class=\"graph-bar-cont\">\r\n      <div class=\"graph-bar\" [ngStyle]=\"{ 'width.%' : answerAgr.percentChosen }\">\r\n        <span *ngIf=\"answerAgr.percentChosen >= 5\">{{ answerAgr.percentChosen }} %</span>\r\n      </div>\r\n      <div class=\"graph-bar empty\" *ngIf=\"answerAgr.percentChosen < 5\">\r\n        <span>{{ answerAgr.percentChosen }} %</span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div> -->\r\n<div class=\"cvbsp-qcu-actions\">\r\n  <button class=\"cvbsp-btn back-btn\" *ngIf=\"!data.noBack\" (click)=\"back()\">{{ data.backLabel | multilang }}</button>\r\n  <button class=\"cvbsp-btn next-btn\" \r\n  [disabled]=\"!data.hasFeedback && data.mandatory && !oneIsChosenAtLeast\"\r\n  *ngIf=\"!data.noNext && ((data.hasFeedback && validated) || !data.hasFeedback)\" \r\n    (click)=\"next()\">{{ data.nextLabel | multilang }}\r\n  </button>\r\n  <button class=\"cvbsp-btn next-btn\" *ngIf=\"data.hasFeedback && !validated\" [disabled]=\"data.mandatory && !oneIsChosenAtLeast\" \r\n    (click)=\"validate()\">{{ data.validateLabel | multilang }}\r\n  </button>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Tracking } from './model/tracking';\r\nimport { IRealtimeMulti } from './model/realtime-multi';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\n/**\r\n * REaltime multi allow to receive and send tracking data instantaneously\r\n * user receive the tracking data of all other users with the same session id/registration id of the same block\r\n * the diff with Instant data connector is that it is design ot handle multiple connections for being connected to several block\r\n */\r\nexport class NgxCvbspRealtimeMultiService {\r\n\r\n  realtimeMulti: IRealtimeMulti;\r\n  \r\n  constructor() {\r\n  }\r\n\r\n  init(realtimeMulti?: IRealtimeMulti) {\r\n    if (realtimeMulti) {\r\n      this.realtimeMulti = realtimeMulti;\r\n      return;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * listen to receive instant push data\r\n   * \r\n   */\r\n  receive(blockId: string, registrationId: string, userId?: string): Observable<Tracking> {\r\n    if (this.realtimeMulti) {\r\n      return this.realtimeMulti.receive(blockId, registrationId, userId);\r\n    } else {\r\n      return of(null);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * send tracking to broadcast over the session users\r\n   * @param tracking to send ( retrieve the session and block via property of the tracking )\r\n   */\r\n  send(tracking: Tracking) {\r\n    if (this.realtimeMulti) {\r\n      this.realtimeMulti.send(tracking);\r\n    }    \r\n  }\r\n\r\n  /**\r\n   * send tracking to broadcast over the session users\r\n   * @param tracking to save\r\n   */\r\n  close( blockId: string, registrationId: string) {\r\n    if (this.realtimeMulti) {\r\n      this.realtimeMulti.close(blockId, registrationId);\r\n    }    \r\n  }\r\n}\r\n","import { Component, OnInit, NgModule, Input, OnChanges, SimpleChanges, Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { UtilService } from '../util/util.service';\r\n\r\n@Component({\r\n  selector: 'cvbsp-html-compiler',\r\n  templateUrl: './html-compiler.component.html',\r\n  styleUrls: ['./html-compiler.component.scss'],\r\n})\r\nexport class HtmlCompilerComponent implements OnInit, OnChanges {  \r\n\r\n  @Input() htmlContent: string;\r\n  @Input() scope: any;\r\n  @Input() css = '';\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit() {\r\n    // not need - done by pipe ...\r\n    // this.htmlContent = UtilService.compile(this.htmlContent, this.scope, this.css);\r\n  }\r\n\r\n  /** only for test purpose */\r\n  compile(html, scope) {\r\n    return UtilService.compile(html, scope);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if(changes.scope && !changes.scope.isFirstChange() &&\r\n     changes.scope.previousValue !== changes.scope.currentValue ) {\r\n      this.htmlContent = UtilService.compile(this.htmlContent, this.scope, this.css);\r\n    }\r\n  }  \r\n\r\n  ngOnDestroy() {\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n@Pipe({\r\n  name: 'cvbspHtml',\r\n})\r\nexport class CvbspHtmlPipe implements PipeTransform {\r\n  debug: boolean;\r\n  constructor(\r\n    private sanitizer: DomSanitizer) {\r\n  }\r\n  transform(html: string): SafeHtml {\r\n    if (!html) {\r\n      return '';\r\n    }\r\n    const safeHtml = this.sanitizer.bypassSecurityTrustHtml(html);\r\n    return safeHtml;\r\n  }\r\n}\r\n\r\n@Pipe({\r\n  name: 'cvbspFilter',\r\n})\r\nexport class CvbspFilterPipe implements PipeTransform {\r\n  constructor() {}\r\n  transform(array: any[], value: any, prop: string): SafeHtml {\r\n    if (!array || !array.length || array.length  === 0 ) {\r\n      return [];\r\n    }\r\n    let result;\r\n    if (prop) {\r\n      result = array.filter(x => x[prop] === value);\r\n    } else {\r\n      result = array.filter(x => x === value);\r\n    }\r\n    \r\n    return result;\r\n  }\r\n}\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CvbspHtmlPipe,\r\n    CvbspFilterPipe\r\n  ],\r\n  exports : [\r\n    CvbspHtmlPipe,\r\n    CvbspFilterPipe\r\n  ]\r\n})\r\nexport class CompilerUtilModule {\r\n}","<div [innerHtml]=\"htmlContent | safeHtml:scope\">\r\n</div>\r\n","import { Component, OnInit, EventEmitter, Input, Output, OnDestroy, ViewChild, ElementRef, AfterViewInit, HostListener } from '@angular/core';\r\nimport { IContentComponent } from '../../model/content-component';\r\nimport { Tracking } from '../../model/tracking';\r\nimport { IRichTextData } from '../../model/rich-text-data';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\nimport { UtilService } from '../../util/util.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { NgxCvbspRealtimeMultiService } from '../../ngx-cvbsp-realtime-multi.service';\r\nimport { CvbspModalService } from '../../modal/modal.service';\r\nimport { ModalButton } from '../../modal/modal-button';\r\nimport { CvbspModal } from '../../modal/modal';\r\nimport { TrainingCertificat } from '../../model/training-certificat';\r\nimport { HtmlToPdfService } from 'ngx-cvbsp-util';\r\nimport { Multilang } from '../../model/multilang';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n/**\r\n * receive html for learner and animator \r\n * blocks : is the blocks list of the current user ( Tracking of the current user is included in the blocks[index].tracking)\r\n * trackings : is the trackings array list receive from the other users (only available if animEnabled or realtimeData is set to true)\r\n * learner html report has the following scope  :\r\n * {\r\n *    trackings : {\r\n *        0 : Tracking[], // this is an array of the trackings of all user of the session\r\n *        1 : Tracking[],\r\n *        ...\r\n *    },\r\n *    blocks : {\r\n *        0 : Block,\r\n *        1 : Block,\r\n *        ...\r\n *    }\r\n * }\r\n * \r\n * animator html report has the following scope :\r\n * {\r\n *    trackings : {\r\n *        0 : Tracking[], // this is an array of the trackings of all user of the session\r\n *        1 : Tracking[],\r\n *        ...\r\n *    },\r\n *    blocks : {\r\n *        0 : Block,\r\n *        1 : Block,\r\n *        ...\r\n *    }\r\n * }\r\n * \r\n * number in both case are the index of the blockid in the property data.loadTracks\r\n * \r\n */\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'rich-text',\r\n  templateUrl: './rich-text.component.html',\r\n  styleUrls: ['./rich-text.component.scss'],\r\n})\r\nexport class RichTextComponent implements OnInit, IContentComponent, OnDestroy, AfterViewInit {\r\n  @Input() data: IRichTextData;\r\n  @Input() tracking: Tracking;\r\n  @Output() trackingChange: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() backEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  htmlContent: Multilang;\r\n  htmlAnim: Multilang;\r\n\r\n  /** data accessible in html */\r\n  htmlScope:any = {};\r\n  subscriptions = [] as Subscription[];\r\n  modal: CvbspModal;\r\n  @ViewChild('compilerstd', { read: ElementRef }) compilerstd: ElementRef;\r\n  @ViewChild('container', { read: ElementRef }) container: ElementRef;\r\n  @ViewChild('progresstrackingbar', { read: ElementRef }) progressTrackingBar: ElementRef;\r\n  certificatContent: string\r\n  progressTrackingItems = new Array(100);\r\n  containerHeight: any;\r\n  scrollEvent:  EventEmitter<any> = new EventEmitter<any>();\r\n  constructor(\r\n    private http: HttpClient,\r\n    private htmlToPdf: HtmlToPdfService,\r\n    private modalService: CvbspModalService,\r\n    private realtimeMulti: NgxCvbspRealtimeMultiService,\r\n    public player: NgxCvbspPlayerService) { \r\n      this.scrollEvent.pipe(debounceTime(500)).subscribe(() => {\r\n        this.checkProgression();\r\n      });\r\n    }\r\n\r\n  async ngOnInit() {\r\n    if (!this.tracking) {\r\n      this.tracking = new Tracking();\r\n    }\r\n    // load html content\r\n    if(this.data.urlHtml && this.data.urlHtml[this.player.currentLang]) {\r\n      await this.loadHtmlFile();\r\n      await this.loadHtmlAnimFile();\r\n    } else {\r\n      this.htmlContent = this.data.htmlContent;\r\n      this.htmlAnim = this.data.htmlAnim;\r\n    }\r\n\r\n    // load htmlscope \r\n    this.htmlScope.mainBlock = this.player.mainBlock;\r\n    const now = new Date();\r\n    this.htmlScope.now = { \r\n      fullYear: now.getFullYear(),\r\n      month: now.getMonth() + 1,\r\n      day: now.getDate(),\r\n      hour: now.getHours(),\r\n      min: now.getMinutes()\r\n    };\r\n    this.htmlScope.fullname = this.player.fullname; \r\n    // load trackings of the block in property loadtracks\r\n    if (this.data.loadTracks && this.data.loadTracks.length > 0) {\r\n      this.htmlScope.blocks = {};\r\n      this.htmlScope.trackings = {};\r\n      this.data.loadTracks.forEach((blockId, index) => {\r\n        const block = UtilService.findBlockInBlock(blockId, this.player.mainBlock);\r\n        if (!block) {\r\n          this.modal = this.modalService.createModal('Error reference block loaded', 'check the reference of the block loaded', [{ title : 'Ok' } as ModalButton]);\r\n          this.modal.clicked.subscribe(() => { this.modalService.hideModal(this.modal); });\r\n          return;\r\n        }\r\n        // store block find in scope to have access to their infos\r\n        this.htmlScope.blocks[index] = block;\r\n        // listen to instant connector for each block if animEnabled and user is animator\r\n        // or if the realtime is activated\r\n        if (this.data.animEnabled && this.player.animator) { \r\n          this.listenInstantConnector(blockId);\r\n        } else if (this.data.realtime) {\r\n          this.listenInstantConnector(blockId);\r\n        }        \r\n      });  \r\n    }\r\n\r\n    await this.loadCertifInTracking();\r\n\r\n    // listen for lang change and change html\r\n    this.player.langChangeEvent.subscribe(async (lang) => {\r\n      if(this.data.urlHtml && this.data.urlHtml[this.player.currentLang]) {\r\n        await this.loadHtmlFile();\r\n        await this.loadHtmlAnimFile();\r\n      }\r\n      await this.loadCertifInTracking();\r\n      this.player.saveTracking(this.tracking);\r\n      this.player.save();\r\n    });\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if(!(this.data.urlHtml && this.data.urlHtml[this.player.currentLang])) {\r\n      this.loadProgressBar()\r\n    }\r\n    \r\n  }\r\n\r\n  loadProgressBar() {\r\n    setTimeout(() => {\r\n      this.containerHeight = this.container.nativeElement.offsetHeight;\r\n      this.progressTrackingBar.nativeElement.style.height =  `${this.containerHeight}px`;\r\n    }, 100);\r\n    setTimeout(() => {\r\n      if (this.tracking.progressionPercent && this.tracking.progressionPercent < 100) {\r\n        // resume to where the user left if the progression is set and if not finished\r\n        const el = document.getElementById('progresstrackingitem-' + (this.tracking.progressionPercent - 1));\r\n        if (el) {\r\n          el.scrollIntoView()\r\n        }\r\n      }      \r\n      this.checkProgression();\r\n    },1000);\r\n  }\r\n\r\n  async loadCertifInTracking() {\r\n    if (this.data.isCertif) {\r\n      // if certificat load certificat in tracking for storage\r\n      this.certificatContent = UtilService.compile(this.htmlContent[this.player.currentLang], this.htmlScope);\r\n      const pdfB64 = await this.htmlToPdf.generatePdfFromHtmlStr(this.certificatContent, 'landscape', 'certificat.pdf', true);\r\n      this.tracking.data = {\r\n        trainingCertificat: {\r\n        blockId: this.player.mainBlock._id,\r\n        title: this.player.currentContent.title[this.player.currentLang],\r\n        content:  this.certificatContent,\r\n        pdfB64\r\n      } as TrainingCertificat };\r\n    }\r\n  }\r\n\r\n  loadHtmlFile(): Promise<Multilang> {\r\n    return new Promise<Multilang>((resolve, reject) => {\r\n      this.http.get(this.data.urlHtml[this.player.currentLang], {responseType: 'text'}).subscribe((res) => {\r\n        this.htmlContent = this.htmlContent ? this.htmlContent : new Multilang();\r\n        this.htmlContent[this.player.currentLang] = res as string;\r\n        this.loadProgressBar();\r\n        return resolve(this.htmlContent);\r\n      }, err => {\r\n        return reject(err);\r\n      });\r\n    });\r\n  }\r\n\r\n  loadHtmlAnimFile(): Promise<Multilang> {    \r\n    return new Promise<Multilang>((resolve, reject) => {\r\n      if (!this.data || !this.data.urlHtmlAnim || !this.data.urlHtmlAnim[this.player.currentLang]) {\r\n        return resolve(null);\r\n      }\r\n      this.http.get(this.data.urlHtmlAnim[this.player.currentLang], {responseType: 'text'}).subscribe((res) => {\r\n        this.htmlAnim = this.htmlAnim ? this.htmlAnim : new Multilang();\r\n        this.htmlAnim[this.player.currentLang] = res as string;\r\n        return resolve(this.htmlAnim);\r\n      }, err => {\r\n        return reject(err);\r\n      });\r\n    });\r\n  }\r\n\r\n  next() {\r\n    this.tracking.scoreMax = null;\r\n    this.tracking.scoreRaw = null;\r\n    this.tracking.scorePercent = null;\r\n    this.checkProgression();\r\n    this.tracking.pathOut = this.data.pathOutNext;\r\n    this.nextEvent.next(this.tracking);\r\n  }\r\n\r\n  back() {\r\n    this.tracking.scoreMax = null;\r\n    this.tracking.scoreRaw = null;\r\n    this.tracking.scorePercent = null;\r\n    this.checkProgression();\r\n    this.tracking.pathOut = this.data.pathOutBack;\r\n    this.backEvent.next(this.tracking);\r\n  }\r\n\r\n  listenInstantConnector(blockId: string) {\r\n    this.htmlScope.trackings = {};\r\n    const subscription = this.realtimeMulti.receive(blockId, this.player.registrationId , null)\r\n    .subscribe((tracking) => {\r\n        if (!tracking || !tracking.blockId) {\r\n          return;\r\n        }\r\n        // check if same tracking if yes replace it\r\n        if(this.player.isSameTracking(tracking, this.tracking)) {\r\n          this.tracking = { ...this.tracking, ...tracking};\r\n        }\r\n        // find current index of the block in the load track\r\n        const indexTrack = this.data.loadTracks.findIndex(x => x === tracking.blockId);\r\n        if (indexTrack === -1) { return; }\r\n        // check if exist already in html scope, otherwise instantiate new array \r\n        this.htmlScope.trackings[indexTrack] = this.htmlScope.trackings[indexTrack] ? this.htmlScope.trackings[indexTrack] : [];\r\n        // check if tracking for the current user for this block exist\r\n        if (this.htmlScope.trackings[indexTrack].findIndex) { return; }\r\n        const i = this.htmlScope.trackings[indexTrack].findIndex(x => x.userId === tracking.userId);\r\n        if (i === -1) {\r\n          // if not exist push tracking in array\r\n          this.htmlScope.trackings[indexTrack].push(tracking);\r\n        } else {\r\n          // if already exist just replace it in the array\r\n          this.htmlScope.trackings[indexTrack] = tracking;\r\n        }\r\n    });\r\n    this.subscriptions.push(subscription);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    // unsubscribe all subscriptions\r\n    if (this.data.loadTracks && this.data.loadTracks.length > 0) {\r\n      this.data.loadTracks.forEach((blockId) => {\r\n        this.realtimeMulti.close(blockId, this.player.registrationId);\r\n      });\r\n      this.subscriptions.forEach(sub => { sub.unsubscribe() });\r\n    }\r\n  }\r\n\r\n  downloadPdf() {\r\n    if (this.data.isCertif) {\r\n      this.htmlToPdf.generatePdfFromHtmlStr(this.certificatContent, 'landscape', 'certificat.pdf');\r\n    } else {\r\n      this.htmlToPdf.generatePdf(this.compilerstd.nativeElement.firstChild);\r\n    }\r\n    \r\n  }\r\n\r\n  @HostListener('document:click', ['$event'])\r\n  public handleClick(event: Event): void {\r\n    // for link that need router\r\n    if (event.target instanceof HTMLElement) {\r\n      const element = event.target;\r\n      if (element.className.includes('next-click')) {\r\n        event.preventDefault();\r\n        this.next();\r\n      }\r\n      if (element.className.includes('back-click')) {\r\n        event.preventDefault();\r\n        this.back();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * check where is the user on the page and set progression\r\n   */\r\n  @HostListener('wheel', ['$event'])\r\n  @HostListener('document:wheel', ['$event'])\r\n  @HostListener('scroll', ['$event'])\r\n  @HostListener('document:scroll', ['$event'])\r\n  @HostListener('touchstart', ['$event'])\r\n  @HostListener('document:touchstart', ['$event'])\r\n  @HostListener('touchmove', ['$event'])\r\n  @HostListener('document:touchmove', ['$event'])\r\n  onMove(event) {\r\n    this.scrollEvent.next();\r\n  }\r\n\r\n  checkProgression() {\r\n    let save = false;\r\n    for(let i = 0; i < this.progressTrackingItems.length; i++) {\r\n      const progressIndex = i + 1;\r\n      if (this.checkIfInViewport('progresstrackingitem-' + i) && progressIndex > this.tracking.progressionPercent - 1) {\r\n        if (this.tracking.progressionPercent < progressIndex) {\r\n          this.tracking.progressionRaw = progressIndex;\r\n          this.tracking.progressionPercent = progressIndex;\r\n          save = true;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n    if(this.checkIfInViewport('progresstrackingitemlast')) {\r\n      if (this.tracking.progressionPercent < 100) {\r\n        this.tracking.progressionRaw = 100;\r\n        this.tracking.progressionPercent = 100;\r\n        save = true;\r\n      }\r\n    }\r\n    if (save) {\r\n      this.player.saveTracking(this.tracking);\r\n      this.player.save();\r\n    }\r\n  }\r\n\r\n  checkIfInViewport(elementid) {\r\n    const myElement = document.getElementById(elementid);\r\n    const bounding = myElement.getBoundingClientRect();\r\n    const myElementHeight = myElement.offsetHeight;\r\n    const myElementWidth = myElement.offsetWidth;\r\n\r\n    if (bounding.top >= -myElementHeight\r\n        && bounding.left >= -myElementWidth\r\n        && bounding.right <= (window.innerWidth || document.documentElement.clientWidth) + myElementWidth\r\n        && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) + myElementHeight) {\r\n\r\n        return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n}\r\n","<div *ngIf=\"!data.hideTitle && (player.currentContent?.title | multilang) !== '' && !data.showStdActions && !data.showStdActionsTop\" class=\"ql-editor cvbsp-rich-text-title\" [innerHTML]=\"player.currentContent?.title | multilang | safeHtml\">\r\n\r\n</div>\r\n<div class=\"cvbsp-rich-text-container\" #container>\r\n    <!-- section to track the progression -->\r\n    <div class=\"progress-tracking-bar\" #progresstrackingbar>\r\n        <div [id]=\"'progresstrackingitem-' + i\" *ngFor=\"let trackingItem of progressTrackingItems; let i = index\" [style.height]=\"(((containerHeight / 100) - 1) | number:'1.0-0') + 'px'\">\r\n        </div>\r\n        <div [id]=\"'progresstrackingitemlast'\" style=\"height:1px\">\r\n            <!-- useful for height to short -->\r\n        </div>\r\n    </div>\r\n    <!-- end/ section to track the progression -->\r\n    <cvbsp-html-compiler #compilerstd class=\"compiler-standard\" *ngIf=\"!(data?.animEnabled && player.animator)\"\r\n    [htmlContent]=\"htmlContent | multilang\"\r\n    [scope]=\"htmlScope\">\r\n    </cvbsp-html-compiler>\r\n\r\n    <cvbsp-html-compiler class=\"compiler-anim\" *ngIf=\"data?.animEnabled && player.animator\"\r\n    [htmlContent]=\"htmlAnim | multilang\"\r\n    [scope]=\"htmlScope\">\r\n    </cvbsp-html-compiler>\r\n    <br/>\r\n    <div class=\"cvbsp-rich-cont-dwn-btn\" *ngIf=\"data && data.showDwn\">\r\n        <button class=\"cvbsp-btn\" (click)=\"downloadPdf()\">{{ data.dwnBtn | multilang }}</button>\r\n    </div>\r\n   \r\n</div>\r\n<div class=\"cvbsp-richtext-actions\" *ngIf=\"!data.showStdActions && !data.showStdActionsTop\">\r\n    <button class=\"cvbsp-btn back-btn\" *ngIf=\"!data.noBack\" (click)=\"back()\">{{ data.backLabel | multilang }}</button>\r\n    <button class=\"cvbsp-btn next-btn\" *ngIf=\"!data.noNext\" (click)=\"next()\">{{ data.nextLabel | multilang }}</button>\r\n</div>\r\n\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n  // tslint:disable-next-line:directive-selector\r\n  selector: '[content-host]'\r\n})\r\nexport class ContentDirective {\r\n\r\n  constructor(public viewContainerRef: ViewContainerRef) { }\r\n\r\n}\r\n","import { Component, OnInit, OnDestroy, EventEmitter, Input, Output } from '@angular/core';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\nimport { Lang } from '../../model/multilang';\r\nimport { IContentComponent } from '../../model/content-component';\r\nimport { Tracking } from '../../model/tracking';\r\nimport { ILangData } from '../../model/lang-data';\r\n\r\n@Component({\r\n  selector: 'lang',\r\n  templateUrl: './lang.component.html',\r\n  styleUrls: ['./lang.component.scss'],\r\n})\r\nexport class LangComponent implements OnInit, IContentComponent {\r\n  @Input() data: ILangData;\r\n  @Input() tracking: Tracking;\r\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() backEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n\r\n  langs: Lang[];\r\n\r\n  constructor(public player: NgxCvbspPlayerService) { }\r\n  \r\n\r\n  ngOnInit() {\r\n    if (!this.tracking) {\r\n      this.tracking = new Tracking();\r\n    }\r\n    this.langs = this.player.mainBlock.defaultData.langs;\r\n  }\r\n\r\n  chooseLang(lang: Lang) {\r\n    this.player.changeLang(lang.key);\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutNext;\r\n    this.nextEvent.next(this.tracking);\r\n  }\r\n\r\n  next() {\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutNext;\r\n    this.nextEvent.next(this.tracking);\r\n  }\r\n\r\n  back() {\r\n    this.tracking.progressionRaw = 1;\r\n    this.tracking.progressionPercent = 100;\r\n    this.tracking.pathOut = this.data.pathOutBack;\r\n    this.backEvent.next(this.tracking);\r\n  }\r\n\r\n}\r\n","<div *ngIf=\"!data.hideTitle && (player.currentContent?.title | multilang) !== '' && !data.showStdActions && !data.showStdActionsTop\" \r\nclass=\"cvbsp-lang-title\" \r\n[innerHTML]=\"player.currentContent?.title | multilang | safeHtml\">\r\n\r\n</div>\r\n<div class=\"cvbsp-lang-intro\" [innerHTML]=\"data.intro | multilang | safeHtml\">\r\n\r\n</div>\r\n<div class=\"cvbsp-lang-choice-container\">\r\n  <div class=\"cvbsp-lang-choice\" *ngFor=\"let lang of langs\" (click)=\"chooseLang(lang)\">\r\n      {{ lang.name | multilang }}\r\n  </div>\r\n</div>\r\n<div class=\"cvbsp-lang-actions\">\r\n  <button class=\"cvbsp-btn back-btn\" *ngIf=\"!data.noBack\" (click)=\"back()\">\r\n    {{ data.backLabel | multilang }}\r\n  </button>\r\n  <button class=\"cvbsp-btn next-btn\" *ngIf=\"!data.noNext\" (click)=\"next()\">\r\n    {{ data.nextLabel | multilang }}\r\n  </button>\r\n</div>","import { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IContentComponent } from '../../model/content-component';\nimport { Tracking } from '../../model/tracking';\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\nimport { IDocExportData } from './doc-export-data';\n\n@Component({\n  selector: 'cvbsp-export-doc',\n  templateUrl: './export-doc.component.html',\n  styleUrls: ['./export-doc.component.scss']\n})\nexport class ExportDocComponent implements OnInit, IContentComponent {\n  @Input() data: IDocExportData;\n  @Input() tracking: Tracking;\n  @Output() trackingChange: EventEmitter<Tracking> = new EventEmitter<Tracking>();\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\n  @Output() backEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\n  pdfurl: any;\n  showPdf: boolean;\n  constructor(\n    private sanitizer: DomSanitizer,\n    private httpClient: HttpClient,\n    public player: NgxCvbspPlayerService) { }\n  \n  next() {\n    this.tracking.scoreMax = null;\n    this.tracking.scoreRaw = null;\n    this.tracking.scorePercent = null;\n    this.tracking.progressionRaw = 1;\n    this.tracking.progressionPercent = 100;\n    this.tracking.pathOut = this.data.pathOutNext;\n    this.nextEvent.next(this.tracking);\n  }\n\n  back() {\n    this.tracking.scoreMax = null;\n    this.tracking.scoreRaw = null;\n    this.tracking.scorePercent = null;\n    this.tracking.progressionRaw = 1;\n    this.tracking.progressionPercent = 100;\n    this.tracking.pathOut = this.data.pathOutBack;\n    this.backEvent.next(this.tracking);\n  }\n\n  ngOnInit(): void {\n    if(this.data.srcDoc) {\n      const urlNoQuery = this.data.srcDoc[this.player.currentLang].split('?')[0];\n      const ext = urlNoQuery.split('.').pop();\n      if (ext === 'pdf') {\n        this.showPdf = true;\n        this.pdfurl = this.sanitizer.bypassSecurityTrustResourceUrl(`/assets/plugins/pdf-viewer/index.html?file=${encodeURIComponent(this.data.srcDoc[this.player.currentLang])}&download=true`);\n      }\n    }\n  }\n\n  download(src) {\n    if (!src) {\n      return;\n    }\n    this.httpClient.get(src, {\n      responseType: 'blob'\n    }).subscribe(blob => {\n      const a = document.createElement('a');\n      a.href = URL.createObjectURL(blob);\n      a.target = '_blank';\n      a.download = this.data.filename;\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n    });\n  }\n\n}\n","<div *ngIf=\"!data.hideTitle && (player.currentContent?.title | multilang) !== '' && !data.showStdActions && !data.showStdActionsTop\" \nclass=\"cvbsp-doc-export-title\" [innerHTML]=\"player.currentContent?.title | multilang | safeHtml\">\n</div>\n<div class=\"cvbsp-doc-export-intro\"[innerHTML]=\"data.intro | multilang | safeHtml\" >\n</div>\n<div class=\"cvbsp-doc-export-container\">\n    <div class=\"viewer-pdf-cont\" *ngIf=\"showPdf\" >\n        <iframe style=\"width:100%; height:100%; min-height: 500px;\" [src]=\"pdfurl\" sandbox='allow-scripts allow-same-origin allow-downloads'>\n        </iframe> \n    </div>\n    \n    <div class=\"cvbsp-doc-export-subcontainer\" *ngIf=\"(data.srcDoc | multilang) && !showPdf\">\n        <div class=\"button-download\" (click)=\"download(data.srcDoc[player.currentLang])\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#000000\">\n                <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n                <path d=\"M15 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V7l-5-5zM6 20V4h8v4h4v12H6zm10-10v5c0 2.21-1.79 4-4 4s-4-1.79-4-4V8.5c0-1.47 1.26-2.64 2.76-2.49 1.3.13 2.24 1.32 2.24 2.63V15h-2V8.5c0-.28-.22-.5-.5-.5s-.5.22-.5.5V15c0 1.1.9 2 2 2s2-.9 2-2v-5h2z\"/>\n            </svg>\n        </div>\n    </div>\n</div>\n\n<div class=\"cvbsp-doc-export-actions\" *ngIf=\"!data.showStdActions && !data.showStdActionsTop\">\n    <button class=\"cvbsp-btn back-btn\" *ngIf=\"!data.noBack\" (click)=\"back()\">{{ data.backLabel | multilang }}</button>\n    <button class=\"cvbsp-btn next-btn\" *ngIf=\"!data.noNext\" (click)=\"next()\">{{ data.nextLabel | multilang }}</button>\n</div>","import { E } from '@angular/cdk/keycodes';\r\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { SafeUrl, DomSanitizer } from '@angular/platform-browser';\r\nimport { IContentComponent } from '../../model/content-component';\r\nimport { Tracking } from '../../model/tracking';\r\nimport { NgxCvbspPlayerService } from '../../ngx-cvbsp-player.service';\r\nimport { NgxCvbspPluginData } from './plugin-data';\r\n\r\n@Component({\r\n  selector: 'cvbsp-player-plugin-viewer',\r\n  templateUrl: './plugin-viewer.component.html',\r\n  styleUrls: ['./plugin-viewer.component.scss']\r\n})\r\nexport class PluginViewerComponent implements OnInit, OnChanges, IContentComponent  {\r\n  @Input() data: NgxCvbspPluginData;\r\n  @Input() tracking: Tracking;\r\n  // edit mode\r\n  @Input() editMode: boolean;\r\n  @Input() lang: string;\r\n  @Output() nextEvent: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  @Output() backEvent: EventEmitter<Tracking>  = new EventEmitter<Tracking>();\r\n  @Output() contentChangeEvent: EventEmitter<any>  = new EventEmitter<any>();\r\n  urlLaunchPageSafe: SafeUrl;\r\n  initializing: any;\r\n  leaving: any;\r\n  completed: true;\r\n  success: boolean;\r\n  failure: boolean;\r\n  showOutro: boolean;\r\n  isFullscreen: boolean;\r\n  error: string;\r\n  @ViewChild('pluginContainer') pluginContainer: ElementRef;\r\n  height: string = '300px';\r\n  constructor(\r\n    private changeDetector: ChangeDetectorRef,\r\n    private player: NgxCvbspPlayerService,\r\n    public sanitizer: DomSanitizer\r\n  ) {\r\n    // fullscreenchange event listeners for all browsers\r\n    const fullscreenChange = (event) => {\r\n      if ((document as any).fullscreenElement) {\r\n        this.isFullscreen = true;\r\n      } else {\r\n        this.isFullscreen = false;\r\n      }\r\n    };\r\n    document.addEventListener('fullscreenchange', fullscreenChange);\r\n    document.addEventListener('mozfullscreenchange', fullscreenChange);\r\n    document.addEventListener('msfullscreenchange', fullscreenChange);\r\n    document.addEventListener('webkitfullscreenchange', fullscreenChange);\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.tracking = this.tracking ? this.tracking : {} as Tracking;\r\n    this.tracking.data = this.tracking.data ? this.tracking.data : {} as any;\r\n\r\n    // init variables\r\n    this.data = this.data ? this.data : {} as NgxCvbspPluginData;\r\n    this.data.pluginData = this.data.pluginData ? this.data.pluginData : {}; \r\n    // init url\r\n    this.init();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (!changes.data.isFirstChange() && changes.data.currentValue !== changes.data.previousValue) {\r\n      this.init();\r\n    }\r\n  }\r\n\r\n  init() {\r\n    if (this.data.launchUrl) {\r\n      const url = `${this.data.launchUrl}${this.createQueryPlugin()}`;\r\n      this.urlLaunchPageSafe = this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n    } else {\r\n      this.error = 'Url not set !';\r\n    }\r\n    if ( window.addEventListener ) {\r\n      window.addEventListener('message', this.postMessageHandler, false);\r\n    }\r\n  }\r\n\r\n  postMessageHandler = (ev: any) => {\r\n    // for debug\r\n    if (this.player.debug) {\r\n        console.log('post message event received :', ev);\r\n    }\r\n\r\n    let urlOk = true;\r\n    if (this.data.launchUrl && this.data.launchUrl.includes('http://')) {\r\n      const url = new URL(this.data.launchUrl);\r\n      urlOk = ev.origin === `${url.protocol}//${url.host}`\r\n    }\r\n    \r\n    if (urlOk) {\r\n      if(ev.data && ev.data.content && this.editMode) {\r\n        this.contentChangeEvent.next(ev.data.content);\r\n      }\r\n\r\n      if(ev.data && ev.data.tracking) {\r\n        if (ev.data.next) {\r\n          this.tracking = ev.data.tracking;\r\n          this.nextEvent.next(this.tracking);\r\n        } else {\r\n          this.tracking = ev.data.tracking;\r\n          // send data after receiving any post message\r\n          this.player.saveTracking(this.tracking);\r\n          // update blocks\r\n          this.player.save();\r\n        }\r\n      }\r\n\r\n      if(ev.data && ev.data.height) {\r\n        this.height =  ev.data.height + 'px';\r\n        this.changeDetector.detectChanges();\r\n      }\r\n\r\n      \r\n      \r\n    }\r\n  }\r\n\r\n  next() {\r\n    this.exitFullScreen();\r\n    this.leaving = true;\r\n    this.tracking.progressionPercent = 100;\r\n    this.nextEvent.next(this.tracking);\r\n  }\r\n\r\n  close() {\r\n    this.next();\r\n  }\r\n\r\n  back() {\r\n    this.exitFullScreen();\r\n    this.leaving = true;\r\n    this.backEvent.next(this.tracking);\r\n  }\r\n\r\n  toggleFullScreen() {\r\n    const element = this.pluginContainer.nativeElement; // document.getElementById('web-container') as any;\r\n    const doc = document as any;\r\n    if (!doc.fullscreenElement) {\r\n      const requestMethod = element.requestFullScreen || element.webkitRequestFullScreen ||\r\n      element.mozRequestFullScreen || element.msRequestFullScreen;\r\n      if (requestMethod) {\r\n        requestMethod.call(element);\r\n      }\r\n      this.isFullscreen = true;\r\n    } else {\r\n      const requestMethod = doc.cancelFullScreen || doc.webkitCancelFullScreen ||\r\n      doc.mozCancelFullScreen || doc.exitFullscreen;\r\n      if (requestMethod) {\r\n          requestMethod.call(doc);\r\n      }\r\n      this.isFullscreen = false;\r\n    }\r\n  }\r\n\r\n  exitFullScreen() {\r\n    const element = document as any;\r\n    if (!element.fullscreenElement) {\r\n      return;\r\n    }\r\n    const requestMethod = element.cancelFullScreen || element.webkitCancelFullScreen ||\r\n    element.mozCancelFullScreen || element.exitFullscreen;\r\n    if (requestMethod) { // cancel full screen.\r\n        requestMethod.call(element);\r\n    }\r\n    this.isFullscreen = false;\r\n  }\r\n\r\n  createQueryPlugin() {\r\n    const content = btoa(encodeURIComponent(JSON.stringify(this.data.pluginData)));\r\n    const tracking = btoa(encodeURIComponent(JSON.stringify(this.tracking)));\r\n    let url = '';\r\n    if (this.editMode) {\r\n      url = url  + `?lang=${this.lang}&editmode=true&content=${content}`;\r\n    } else {\r\n      url = url  + `?lang=${this.player.currentLang}&content=${content}&tracking=${tracking}`;\r\n    }   \r\n    \r\n    let css;\r\n    if (this.data.pluginCss && this.data.pluginCss !== '') {\r\n      css = btoa(encodeURIComponent(JSON.stringify(this.data.pluginCss)));\r\n      url = `${url}&css=${css}`;\r\n    }\r\n    return url;\r\n  }\r\n}\r\n\r\n","<div #pluginContainer class=\"cvbsp-plugin-container\">\n    <iframe *ngIf=\"urlLaunchPageSafe\"\n      [src]=\"urlLaunchPageSafe\" \n      name=\"webIframe\" \n      frameborder=\"0\"\n      id=\"webIframe\" \n      width=\"100%\" \n      height=\"100%\"\n      [style.minHeight]=\"height\"\n      >    \n    </iframe>\n    <div *ngIf=\"!urlLaunchPageSafe && error\">\n      {{ error }}\n    </div>\n    <!-- <button class=\"close-btn\" *ngIf=\"urlLaunchPageSafe && !data.noClose\" (click)=\"close()\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\n    </button> -->\n  \n    <button class=\"fullscreen-btn\" *ngIf=\"urlLaunchPageSafe && !data.noFullScreen\" (click)=\"toggleFullScreen()\">\n      <svg *ngIf=\"!isFullscreen\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"/></svg>\n      <svg *ngIf=\"isFullscreen\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\"/></svg>\n    </button>\n</div>\n  \n","import { Injectable, Component, Optional } from '@angular/core';\r\nimport { RichTextComponent } from './contents/rich-text/rich-text.component';\r\nimport { PlayerConfig } from './model/player-config';\r\nimport { QcuComponent } from './contents/qcu/qcu.component';\r\nimport { QcmComponent } from './contents/qcm/qcm.component';\r\nimport { LangComponent } from './contents/lang/lang.component';\r\nimport { RemoteCtrlComponent } from './contents/remote-ctrl/remote-ctrl.component';\r\nimport { ExportDocComponent } from './contents/export-doc/export-doc.component';\r\nimport { PluginViewerComponent } from './contents/plugin-viewer/plugin-viewer.component';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxPlayerMapComponentService {\r\n\r\n  components: any = {};\r\n  constructor(\r\n    @Optional() config: PlayerConfig) {\r\n    // registered defaults component\r\n    this.registerComponent('RichTextComponent', RichTextComponent);\r\n    this.registerComponent('QcuComponent', QcuComponent);\r\n    this.registerComponent('QcmComponent', QcmComponent);\r\n    this.registerComponent('LangComponent', LangComponent);\r\n    this.registerComponent('RemoteCtrlComponent', RemoteCtrlComponent);\r\n    this.registerComponent('ExportDocComponent', ExportDocComponent);\r\n    this.registerComponent('CertificatComponent', RichTextComponent);\r\n    // registered the components provided outside\r\n    if (config && config.componentsToRegistered) {\r\n      for (const component of config.componentsToRegistered) {\r\n        this.registerComponent(component.className, component.typeOf);\r\n      }\r\n    }\r\n  }\r\n\r\n  registerComponent(componentName: string, component: any) {\r\n      this.components[componentName] = component;\r\n  }\r\n\r\n  registerPluginComponent(componentName: string) {\r\n    this.components[componentName] = PluginViewerComponent;\r\n  }\r\n\r\n  getRegisteredComponents() {\r\n      return this.components;\r\n  }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, ChangeDetectionStrategy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { IContentData } from '../model/content-data';\r\nimport { Multilang } from '../model/multilang';\r\nimport { Tracking } from '../model/tracking';\r\n\r\n@Component({\r\n  selector: 'cvbsp-std-actions-bar',\r\n  templateUrl: './std-actions-bar.component.html',\r\n  styleUrls: ['./std-actions-bar.component.scss'],\r\n  // changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class StdActionsBarComponent implements OnInit, OnChanges {\r\n  @Input() data: IContentData;\r\n  @Input() tracking: Tracking;\r\n  @Input() title: Multilang;\r\n  @Input() class: string;\r\n  @Input() position: 'bottom' | 'top';\r\n  @Output() nextEvent: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() backEvent: EventEmitter<any> = new EventEmitter<any>();\r\n  dataBtn: IContentData;\r\n  titleIn: Multilang;\r\n  constructor() { }\r\n\r\n  ngOnInit() {}\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.data && changes.data.currentValue !== changes.data.previousValue ) {\r\n      if (changes.data.currentValue !== null && changes.data.currentValue !== undefined ) {\r\n        this.dataBtn = changes.data.currentValue;\r\n      } \r\n    }\r\n\r\n    if (changes.title && changes.title.currentValue !== changes.title.previousValue ) {\r\n      if (changes.title.currentValue !== null && changes.title.currentValue !== undefined ) {\r\n        this.titleIn = changes.title.currentValue;\r\n      } \r\n    }\r\n  }\r\n\r\n  next() {\r\n    this.nextEvent.next();\r\n  }\r\n\r\n  back() {\r\n    this.backEvent.next();\r\n  }\r\n\r\n}\r\n","<div class=\"cvbsp-player-std-actions\" \r\n*ngIf=\"(position === 'top' && dataBtn?.showStdActionsTop) ||\r\n (position === 'bottom' && dataBtn?.showStdActions) \">\r\n  <div class=\"title-cont\" *ngIf=\"!dataBtn.hideTitle\">\r\n      <div class=\"subtitle\">{{ dataBtn.subtitle | multilang | ellipsis:45 }}</div>\r\n      <div class=\"title\">{{ titleIn | multilang | ellipsis:90 }}</div>\r\n  </div>\r\n  <button class=\"cvbsp-btn back-btn {{ class }}\" *ngIf=\"!dataBtn?.noBack\" (click)=\"back()\">\r\n    {{ dataBtn?.backLabel | multilang }}\r\n  </button>\r\n  <button class=\"cvbsp-btn next-btn\" *ngIf=\"!dataBtn?.noNext\" (click)=\"next()\" [disabled]=\"dataBtn.mandatory && tracking.progressionPercent < 100\">\r\n    {{ dataBtn?.nextLabel | multilang }}\r\n  </button>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IContentData } from '../model/content-data';\r\nimport { Multilang } from '../model/multilang';\r\nimport { Tracking } from '../model/tracking';\r\nimport { NgxCvbspPlayerService } from '../ngx-cvbsp-player.service';\r\n\r\n@Component({\r\n  selector: 'cvbsp-eval-board',\r\n  templateUrl: './eval-board.component.html',\r\n  styleUrls: ['./eval-board.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EvalBoardComponent implements OnInit, OnChanges {\r\n\r\n  @Input() reactsAvailable: Array<{ label: Multilang; icon?: string; iconSelected?: string; value: string; }> = \r\n  [\r\n    { \r\n      label: { keep: '', fr: 'J\\'aime', en: 'I like'}, value: 'like', \r\n      icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" ><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M13.11 5.72l-.57 2.89c-.12.59.04 1.2.42 1.66.38.46.94.73 1.54.73H20v1.08L17.43 18H9.34c-.18 0-.34-.16-.34-.34V9.82l4.11-4.1M14 2L7.59 8.41C7.21 8.79 7 9.3 7 9.83v7.83C7 18.95 8.05 20 9.34 20h8.1c.71 0 1.36-.37 1.72-.97l2.67-6.15c.11-.25.17-.52.17-.8V11c0-1.1-.9-2-2-2h-5.5l.92-4.65c.05-.22.02-.46-.08-.66-.23-.45-.52-.86-.88-1.22L14 2zM4 9H2v11h2c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1z\"/></svg>' \r\n    },\r\n    { \r\n      label: { keep: '', fr: 'J\\'adore', en: 'I love'}, value: 'love', \r\n      icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g data-name=\"Layer 2\"><g data-name=\"heart\"><rect width=\"24\" height=\"24\" opacity=\"0\"/><path d=\"M12 21a1 1 0 0 1-.71-.29l-7.77-7.78a5.26 5.26 0 0 1 0-7.4 5.24 5.24 0 0 1 7.4 0L12 6.61l1.08-1.08a5.24 5.24 0 0 1 7.4 0 5.26 5.26 0 0 1 0 7.4l-7.77 7.78A1 1 0 0 1 12 21zM7.22 6a3.2 3.2 0 0 0-2.28.94 3.24 3.24 0 0 0 0 4.57L12 18.58l7.06-7.07a3.24 3.24 0 0 0 0-4.57 3.32 3.32 0 0 0-4.56 0l-1.79 1.8a1 1 0 0 1-1.42 0L9.5 6.94A3.2 3.2 0 0 0 7.22 6z\"/></g></g></svg>' \r\n    },\r\n    { \r\n      label: { keep: '', fr: 'Il y\\'a un problème', en: 'Report a problem'}, value: 'problem', \r\n      icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" ><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/></svg>' \r\n    },\r\n    { \r\n      label: { keep: '', fr: 'Je n\\'ai pas compris', en: 'I don\\'t understand'}, value: 'notunderstand', \r\n      icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g data-name=\"Layer 2\"><g data-name=\"question-mark\"><rect width=\"24\" height=\"24\" transform=\"rotate(180 12 12)\" opacity=\"0\"/><path d=\"M17 9A5 5 0 0 0 7 9a1 1 0 0 0 2 0 3 3 0 1 1 3 3 1 1 0 0 0-1 1v2a1 1 0 0 0 2 0v-1.1A5 5 0 0 0 17 9z\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/></g></g></svg>' \r\n    }\r\n  ];\r\n  @Input() tracking: Tracking;\r\n  @Input() data: IContentData;\r\n  @Input() label: string;\r\n  @Output() trackingChange: EventEmitter<Tracking> = new EventEmitter<Tracking>();\r\n  react: string;\r\n  score: number;\r\n  comment: string;\r\n  trackingIN: Tracking;\r\n  dataIN: IContentData;\r\n  constructor(public player: NgxCvbspPlayerService) { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes && changes.tracking && changes.tracking.previousValue !== changes.tracking.currentValue) {\r\n      if (changes.tracking.currentValue !== null && changes.tracking.currentValue !== undefined ) {\r\n        this.trackingIN = changes.tracking.currentValue;\r\n        this.react = this.trackingIN.evalReac;\r\n        this.comment = this.trackingIN.evalCmt;\r\n        this.score = this.trackingIN.evalScore;\r\n      }       \r\n    }\r\n\r\n    if (changes.data && changes.data.currentValue !== changes.data.previousValue ) {\r\n      if (changes.data.currentValue !== null && changes.data.currentValue !== undefined ) {\r\n        this.dataIN = changes.data.currentValue;\r\n      } \r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    \r\n  }\r\n\r\n  clickReact(react: string) {\r\n    this.react = react;\r\n    this.tracking.evalReac = this.react;\r\n    this.trackingChange.next(this.tracking);\r\n  }\r\n}\r\n","<div class=\"eval-container\" *ngIf=\"dataIN?.showEval && trackingIN\">\r\n    <div class=\"eval-label\">\r\n        {{ label }}\r\n    </div>\r\n    <div class=\"react-btn-list\">\r\n        <button (click)=\"clickReact(reactAv.value)\" [class]=\"react === reactAv.value ? 'react-btn selected' : 'react-btn'\" *ngFor=\"let reactAv of reactsAvailable\">\r\n            <span class=\"react-btn-icon\" [innerHTML]=\"(react === reactAv.value && reactAv.iconSelected ? reactAv.iconSelected : reactAv.icon) | safeHtml\">\r\n            </span>\r\n            {{ reactAv.label[player.currentLang] }}\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { CvbspModalService } from './modal.service';\r\n\r\n@Component({\r\n  selector: 'lib-modal',\r\n  templateUrl: './modal.component.html',\r\n  styleUrls: ['./modal.component.scss'],\r\n})\r\nexport class ModalComponent implements OnInit {\r\n\r\n  constructor(public modalService: CvbspModalService) { }\r\n\r\n  ngOnInit() {}\r\n\r\n}\r\n","<div *ngFor=\"let modal of modalService.modals; let i = index;\">\r\n  <div class=\"cvbsp-backdrop\" [ngStyle]=\"{ zIndex : 10000 + i + (i * 2) }\" (click)=\"modal.disableBackdrop ? null : modal.clicked.next(null)\"> \r\n  </div>\r\n  <div class=\"cvbsp-modal\" [ngStyle]=\"{ zIndex : 10000 + 1 + i + (i * 2) }\">\r\n    <div class=\"cvbsp-modal-title\">\r\n      {{ modal.title }}\r\n    </div>\r\n    <div class=\"cvbsp-modal-body\">\r\n      {{ modal.message }}\r\n    </div>\r\n    <div class=\"cvbsp-modal-actions\">\r\n      <button *ngFor=\"let btn of modal.buttons\" \r\n      class=\"cvbsp-btn {{ btn.status }}\" \r\n      (click)=\"modal.clicked.next(btn.value)\">\r\n        {{ btn.title }}\r\n      </button>\r\n    </div>\r\n  </div>\r\n</div>","// tslint:disable-next-line:max-line-length\r\nimport { Component, OnInit, ViewChild, ComponentFactoryResolver, Input, Output, EventEmitter, OnDestroy, ElementRef, ViewEncapsulation, OnChanges, SimpleChanges, NgZone, AfterViewInit, HostListener } from '@angular/core';\r\nimport { ContentDirective } from './content.directive';\r\nimport { NgxCvbspPlayerService } from '../ngx-cvbsp-player.service';\r\nimport { IContentComponent } from '../model/content-component';\r\nimport { Block } from '../model/block';\r\nimport { NgxPlayerMapComponentService } from '../map-component.service';\r\nimport { PlayerComponentConfig } from '../model/player-config';\r\nimport { NgxCvbspInstantConnectorService } from '../ngx-cvbsp-instant-connector.service';\r\nimport { RemoteControlService } from '../remote-control.service';\r\nimport { Tracking } from '../model/tracking';\r\nimport { EvalBoardComponent } from '../eval-board/eval-board.component';\r\nimport { ContentDataDefault } from '../model/content-data';\r\n\r\n@Component({\r\n  // tslint:disable-next-line:component-selector\r\n  selector: 'ngx-cvbsp-player',\r\n  templateUrl: './ngx-cvbsp-player.component.html',\r\n  styleUrls: [\r\n    './styles/variables.scss',\r\n    './styles/design.scss',\r\n    './styles/animations.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class NgxCvbspPlayerComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {\r\n\r\n  @Input() block: Block;\r\n  /** Registration id to add in the tracking */\r\n  @Input() registrationId: string;\r\n  /** deprecated - in config now */\r\n  @Input() class: string;\r\n  /** config of the component */\r\n  @Input() config: PlayerComponentConfig;\r\n  /** path to specific content (e.i : 1/1 to go to first content of first block ) */\r\n  @Input() path: string;\r\n  @Output() pathChange = new EventEmitter<any>();\r\n  /** to tell to the component if the current user is an animator \r\n   * it is necessary to send any session order\r\n   */\r\n  @Input() animator: boolean;\r\n  /** pass the user name of the current user */\r\n  @Input() username: string;\r\n  /** pass the full name of the current user (firstname and lastname) */\r\n  @Input() fullname: string;\r\n  /** lang to use for passation - force the user to use this lang */\r\n  @Input() lang: string;\r\n  /** Event when th player emit close */\r\n  @Output() closeEvent = new EventEmitter<any>();\r\n  @ViewChild(ContentDirective) contentHost: ContentDirective;\r\n  @ViewChild('player', { read: ElementRef }) player;\r\n  @ViewChild('eval', { read: ElementRef }) eval;\r\n  @ViewChild('actions', { read: ElementRef }) actions;\r\n  @ViewChild('actionstop', { read: ElementRef }) actionstop;\r\n  error: { message: string; };\r\n  currentDesign: any = {};\r\n  init = false;\r\n  loading: boolean;\r\n  style = '<style>';\r\n  endStyle = '</style>';\r\n  componentInstance: IContentComponent;\r\n  classEvalAndActionVal: any;\r\n  constructor(\r\n    private elRef:ElementRef,\r\n    private instantConnector: NgxCvbspInstantConnectorService,\r\n    private ngZone: NgZone,\r\n    private mapComponent: NgxPlayerMapComponentService,\r\n    public playerService: NgxCvbspPlayerService,\r\n    private componentFactoryResolver: ComponentFactoryResolver) {\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.playerService.loadConfigComp(this.config);\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // if no path set up, init here otherwise init in ngOnChanges\r\n    if(!this.init) {\r\n      this.init = true;\r\n      /** hide the player frame until a component is loaded */\r\n      this.player.nativeElement.style.visibility = 'hidden';\r\n      /** init registration id if exist */\r\n      if (this.registrationId) {\r\n        this.playerService.registrationId = this.registrationId;\r\n      }\r\n      /** set animator in player */\r\n      this.playerService.animator = this.animator;\r\n\r\n      /** set force lang if any */\r\n      this.playerService.forceLang = this.lang;\r\n\r\n      this.loadMainBlockDesign();\r\n      const redirect = this.path !== null && this.path !== undefined && this.path !== '';\r\n      this.playerService.initialize(this.block, redirect, this.path).subscribe(_ => {\r\n        /** set username in player */\r\n        this.playerService.initUsername(this.username);  \r\n        /** hide the player frame until a component is loaded */\r\n        this.player.nativeElement.style.visibility = 'visible';\r\n        this.playerService.initializedEvent.next();\r\n        this.loadNextContent();\r\n        // set to null to make sure it will be different if change with the same value\r\n        this.path = null;\r\n        this.pathChange.next(this.path);\r\n      });\r\n    }\r\n    this.playerService.closeEvent.subscribe(_ => {\r\n      this.closeEvent.next();\r\n    });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    // if path set up, init here otherwise init in ngOnInit\r\n    if(changes.path && !changes.path.isFirstChange() && changes.path.currentValue !== null && changes.path.currentValue !== undefined) {\r\n      this.init = true;\r\n      /** hide the player frame until a component is loaded */\r\n      this.player.nativeElement.style.visibility = 'hidden';\r\n      /** init registration id if exist */\r\n      if (this.registrationId) {\r\n        this.playerService.registrationId = this.registrationId;\r\n      }\r\n      /** set animator in player */\r\n      this.playerService.animator = this.animator;      \r\n\r\n      this.loadMainBlockDesign();\r\n      this.playerService.stopAll().subscribe(_ => {\r\n        this.playerService.reset();\r\n        this.playerService.initialize(this.block, !changes.path.isFirstChange(), changes.path.currentValue + '').subscribe(_ => {\r\n          /** set username in player */\r\n          this.playerService.initUsername(this.username);\r\n          this.playerService.initializedEvent.next();\r\n          /** hide the player frame until a component is loaded */\r\n          this.player.nativeElement.style.visibility = 'visible';\r\n          this.loadNextContent();\r\n          // set to null to make sure it will be different if change with the same value\r\n          this.path = null;\r\n          this.pathChange.next(this.path);\r\n        });\r\n      });     \r\n    }\r\n\r\n    // init regsitration id\r\n    if (changes.registrationId && changes.registrationId.currentValue !== changes.registrationId.previousValue) {\r\n      if (this.registrationId) {\r\n        this.playerService.registrationId = this.registrationId;\r\n      }\r\n    }\r\n\r\n    // init animator id\r\n    if (changes.animator && changes.animator.currentValue !== changes.animator.previousValue) {\r\n      this.playerService.animator = changes.animator.currentValue;\r\n    }\r\n\r\n    // username set up\r\n    if (changes.username && changes.username.currentValue !== changes.username.previousValue) {\r\n      this.playerService.initUsername(changes.username.currentValue);\r\n    }\r\n\r\n    // fullname set up\r\n    if (changes.fullname && changes.fullname.currentValue !== changes.fullname.previousValue) {\r\n      this.playerService.fullname = changes.fullname.currentValue;\r\n    }\r\n\r\n    \r\n  }\r\n\r\n  loadNextContent() {\r\n    this.error = null;\r\n    if (this.playerService.currentContent) {\r\n      this.overLoadDesignContent();\r\n      this.player.nativeElement.style.animation = 'contentIn' + this.playerService.currentContent.data.animDir + ' 0.5s';  \r\n      if (this.eval) {\r\n        // this.eval.nativeElement.style.display = '';\r\n      } \r\n      if (this.actions) {\r\n        // this.actions.nativeElement.style.animation = 'contentIn' + this.playerService.currentContent.data.animDir + ' 0.5s'; \r\n        // this.actions.nativeElement.style.display = '';\r\n      }  \r\n      if (this.actionstop) {\r\n        // this.actions.nativeElement.style.animation = 'contentIn' + this.playerService.currentContent.data.animDir + ' 0.5s';  \r\n        // this.actionstop.nativeElement.style.display = '';\r\n      }    \r\n      const componentName = this.playerService.currentContent.component;\r\n      const component = this.mapComponent.components[componentName];\r\n      if (!component) {\r\n        const viewContainerRef = this.contentHost.viewContainerRef;\r\n        viewContainerRef.clear();\r\n        this.error = {\r\n          message : 'Component doesn\\'t exist'\r\n        };\r\n        return;\r\n      }\r\n      const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\r\n\r\n      const viewContainerRef = this.contentHost.viewContainerRef;\r\n      viewContainerRef.clear();\r\n\r\n      const componentRef = viewContainerRef.createComponent(componentFactory);\r\n      this.componentInstance = componentRef.instance as IContentComponent;\r\n      this.componentInstance.data = this.playerService.currentContent.data;\r\n      this.componentInstance.tracking = this.playerService.currentContent.tracking;\r\n      this.componentInstance.nextEvent.subscribe(tracking => {\r\n          this.player.nativeElement.style.animation = 'contentOut' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n          if (this.eval) {\r\n            // this.eval.nativeElement.style.display = 'none';\r\n          } \r\n          if (this.actions) {\r\n            // this.actions.nativeElement.style.animation = 'contentOut' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n            // this.actions.nativeElement.style.display = 'none';\r\n          }    \r\n          if (this.actionstop) {\r\n            // this.actionstop.nativeElement.style.display = 'none';\r\n            // this.actions.nativeElement.style.animation = 'contentOut' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n          } \r\n          setTimeout(() => {\r\n            this.player.nativeElement.style.visibility = 'hidden';\r\n            this.loading = true;\r\n            this.contentHost.viewContainerRef.clear();\r\n            this.playerService.next(tracking).subscribe(value => {              \r\n              this.loading = false;\r\n              if (value) {\r\n                this.player.nativeElement.style.visibility = 'visible';\r\n                this.ngZone.run(() => {\r\n                  this.loadNextContent();\r\n                });\r\n              } else {\r\n                viewContainerRef.clear();\r\n              }\r\n            });\r\n          }, 250);\r\n          // close any left opened connections to avoid memory leak\r\n          this.instantConnector.close();\r\n      });\r\n      this.componentInstance.backEvent.subscribe(tracking => {\r\n        this.player.nativeElement.style.animation = 'contentOutBack' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n        if (this.eval) {\r\n          // this.eval.nativeElement.style.display = 'none';\r\n        } \r\n        if (this.actions) {\r\n          // this.actions.nativeElement.style.display = 'none';\r\n          // this.actions.nativeElement.style.animation = 'contentOutBack' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n        }   \r\n        if (this.actionstop) {\r\n          // this.actionstop.nativeElement.style.display = 'none';\r\n          // this.actions.nativeElement.style.animation = 'contentOutBack' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n        } \r\n        setTimeout(() => {\r\n          this.player.nativeElement.style.visibility = 'hidden';\r\n          this.loading = true;\r\n          this.contentHost.viewContainerRef.clear();\r\n          this.playerService.back(tracking).subscribe(value => {\r\n            this.loading = false;\r\n            if (value) {\r\n              this.player.nativeElement.style.visibility = 'visible';\r\n              this.ngZone.run(() => {\r\n                this.loadBackContent();\r\n              });\r\n            } else {\r\n              viewContainerRef.clear();\r\n            }\r\n          });\r\n        }, 250);\r\n        // close any left opened connections to avoid memory leak\r\n        this.instantConnector.close();\r\n      });\r\n      if (this.componentInstance.trackingChange) {\r\n        this.componentInstance.trackingChange.subscribe(tracking => {\r\n          this.playerService.saveTracking(tracking);\r\n          this.playerService.save();\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  loadBackContent() {\r\n    this.error = null;\r\n    if (this.playerService.currentContent) {\r\n      this.overLoadDesignContent();\r\n      this.player.nativeElement.style.animation = 'contentInBack' + this.playerService.currentContent.data.animDir + ' 0.5s';\r\n      if (this.eval) {\r\n        // this.eval.nativeElement.style.display = '';\r\n      } \r\n      if (this.actions) {\r\n        // this.actions.nativeElement.style.display = '';\r\n        // this.actions.nativeElement.style.animation = 'contentInBack' + this.playerService.currentContent.data.animDir + ' 0.5s';\r\n      }   \r\n      if (this.actionstop) {\r\n        // this.actionstop.nativeElement.style.display = '';\r\n        // this.actions.nativeElement.style.animation = 'contentInBack' + this.playerService.currentContent.data.animDir + ' 0.5s';\r\n      } \r\n      const componentName = this.playerService.currentContent.component;\r\n      const component = this.mapComponent.components[componentName];\r\n      if (!component) {\r\n        this.error = {\r\n          message : 'Component doesn\\'t exist'\r\n        };\r\n        return;\r\n      }\r\n      const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\r\n\r\n      const viewContainerRef = this.contentHost.viewContainerRef;\r\n      viewContainerRef.clear();\r\n\r\n      const componentRef = viewContainerRef.createComponent(componentFactory);\r\n      this.componentInstance = componentRef.instance as IContentComponent;\r\n      this.componentInstance.data = this.playerService.currentContent.data;\r\n      this.componentInstance.tracking = this.playerService.currentContent.tracking;\r\n      this.componentInstance.nextEvent.subscribe(tracking => {\r\n          this.player.nativeElement.style.animation = 'contentOut' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n          if (this.eval) {\r\n            // this.eval.nativeElement.style.display = 'none';\r\n          } \r\n          if (this.actions) {\r\n            // this.actions.nativeElement.style.display = 'none';\r\n            // this.actions.nativeElement.style.animation = 'contentOut' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n          }   \r\n          if (this.actionstop) {\r\n            // this.actionstop.nativeElement.style.display = 'none';\r\n            // this.actions.nativeElement.style.animation = 'contentOut' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n          } \r\n          setTimeout(() => {\r\n            this.player.nativeElement.style.visibility = 'hidden';\r\n            this.contentHost.viewContainerRef.clear();\r\n            this.loading = true;\r\n            this.playerService.next(tracking).subscribe(value => {\r\n              this.loading = false;\r\n              if (value) {\r\n                this.player.nativeElement.style.visibility = 'visible';\r\n                this.ngZone.run(() => {\r\n                  this.loadNextContent();\r\n                });\r\n              } else {\r\n                viewContainerRef.clear();\r\n              }\r\n            });\r\n          }, 250);\r\n          // close any left opened connections to avoid memory leak\r\n          this.instantConnector.close();\r\n      });\r\n      this.componentInstance.backEvent.subscribe(tracking => {\r\n        this.player.nativeElement.style.animation = 'contentOutBack' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n        if (this.eval) {\r\n          // this.eval.nativeElement.style.display = 'none';\r\n        } \r\n        if (this.actions) {\r\n          // this.actions.nativeElement.style.display = 'none';\r\n          // this.actions.nativeElement.style.animation = 'contentOutBack' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n        }   \r\n        if (this.actionstop) {\r\n          // this.actionstop.nativeElement.style.display = 'none';\r\n          // this.actions.nativeElement.style.animation = 'contentOutBack' + this.playerService.currentContent.data.animDir + ' 0.3s';\r\n        } \r\n        setTimeout(() => {\r\n          this.player.nativeElement.style.visibility = 'hidden';\r\n          this.loading = true;\r\n          this.contentHost.viewContainerRef.clear();\r\n          this.playerService.back(tracking).subscribe(value => {\r\n            this.loading = false;\r\n            if (value) {\r\n              this.player.nativeElement.style.visibility = 'visible';\r\n              this.ngZone.run(() => {\r\n                this.loadBackContent();\r\n              });\r\n            } else {\r\n              viewContainerRef.clear();\r\n            }\r\n          });\r\n        }, 250);\r\n        // close any left opened connections to avoid memory leak\r\n        this.instantConnector.close();\r\n      });\r\n      if (this.componentInstance.trackingChange) {\r\n        this.componentInstance.trackingChange.subscribe(tracking => {\r\n          this.playerService.saveTracking(tracking);\r\n          this.playerService.save();\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  loadMainBlockDesign() {\r\n    const root = this.elRef.nativeElement;\r\n    if(!this.block || !this.block.design) {\r\n      return;\r\n    }\r\n    for (const prop in this.block.design) {\r\n      if (this.block.design.hasOwnProperty(prop)) {\r\n        /** TODO: deprecated , to remove in the next version  */\r\n        root.style.setProperty('--' + prop, this.block.design[prop]);\r\n        /** new way */\r\n        root.style.setProperty('--player-' + prop, this.block.design[prop]);\r\n      }\r\n    }\r\n    // load preloaded property in css if not set in design\r\n    if(!this.block.design['eval-react-btn-font-color']) {\r\n      root.style.setProperty('--player-eval-react-btn-font-color', this.block.design['primary-color']);\r\n    }\r\n  }\r\n\r\n  overLoadDesignContent() {\r\n    this.unLoadDesignContent();\r\n    const root = this.elRef.nativeElement;\r\n    if (!this.playerService.currentContent.design) {\r\n      return;\r\n    }\r\n    const design = this.playerService.currentContent.design;\r\n    for (const prop in design) {\r\n      if (design.hasOwnProperty(prop)) {\r\n        /** TODO: deprecated , to remove in the next version  */\r\n        this.currentDesign[prop] = root.style.getPropertyValue('--' + prop);\r\n        root.style.setProperty('--' + prop, design[prop]);\r\n        /** new way */\r\n        this.currentDesign[prop] = root.style.getPropertyValue('--player-' + prop);\r\n        root.style.setProperty('--player-' + prop, design[prop]);\r\n      }\r\n    }\r\n  }\r\n\r\n  unLoadDesignContent() {\r\n    const root = this.elRef.nativeElement;\r\n    for (const prop in this.currentDesign) {\r\n      if (this.currentDesign.hasOwnProperty(prop)) {\r\n        /** TODO: deprecated , to remove in the next version  */\r\n        root.style.setProperty('--' + prop, this.currentDesign[prop]);\r\n        /** new way */\r\n        root.style.setProperty('--player-' + prop, this.currentDesign[prop]);\r\n      }\r\n    }\r\n  }\r\n\r\n  evalChangeEvent(tracking: Tracking) {\r\n    this.playerService.saveTracking(tracking);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.playerService.currentBlock) {\r\n      this.playerService.shutDown().subscribe();     \r\n    }\r\n    // close any left opened connections to avoid memory leak\r\n    this.instantConnector.close();\r\n  }\r\n\r\n  @HostListener('window:beforeunload', ['$event']) \r\n  windowForceClosing($event) {\r\n    if (this.playerService && this.playerService.currentBlock) {\r\n      this.playerService.shutDown().subscribe();     \r\n    }\r\n    return;\r\n  }\r\n\r\n  classEvalAndAction() {\r\n    if (!this.playerService?.currentContent?.data) {\r\n      return this.classEvalAndActionVal;\r\n    }\r\n    this.classEvalAndActionVal =  ( this.playerService?.currentContent?.data?.showEval ? 'with-eval ' : '')\r\n    + ( this.playerService?.currentContent?.data?.showStdActions ? 'with-actions ' : '')\r\n    + ( this.playerService?.currentContent?.data?.showStdActionsTop ? 'with-actions-top ' : '');\r\n    return this.classEvalAndActionVal;\r\n  }\r\n\r\n}\r\n","<!-- style of the main block -->\r\n<div *ngIf=\"block?.cssStyle\" [innerHtml]=\"style +  block.cssStyle + endStyle | safeHtml\">\r\n</div>\r\n<cvbsp-std-actions-bar #actionstop \r\n[position]=\"'top'\"\r\n[tracking]=\"playerService?.currentContent?.tracking\"\r\n[data]=\"playerService?.currentContent?.data\"\r\n[title]=\"playerService?.currentContent?.title\"\r\n(nextEvent)=\"componentInstance ? componentInstance.next() : null\"\r\n(backEvent)=\"componentInstance ? componentInstance.back() : null\"\r\n></cvbsp-std-actions-bar>\r\n<div #player [class]=\"'ngx-cvbsp-player-container ' \r\n+ this.classEvalAndAction()\r\n+ class + ' ' + config?.class\">\r\n    <!-- style of the current content loaded in the content-host -->\r\n    <div *ngIf=\"playerService?.currentContent?.data?.cssStyle\" [innerHtml]=\"style +  playerService?.currentContent?.data?.cssStyle + endStyle | safeHtml\">\r\n    </div>\r\n    <!-- container where the content is loaded -->\r\n    <ng-template content-host>\r\n    </ng-template>\r\n    <div *ngIf=\"error\">\r\n        {{ error?.message }}\r\n    </div>\r\n    <div *ngIf=\"loading && config\" class=\"loading-container\">\r\n        <img class=\"loading-img\"\r\n        *ngIf=\"config?.loadingImgUrl\"\r\n            [src]=\"config?.loadingImgUrl\"><br/>\r\n        {{ config?.loadingMessage | multilang }}\r\n    </div>\r\n</div>\r\n<!-- eval board -->\r\n<cvbsp-eval-board #eval\r\n[reactsAvailable]=\"config.evalReacts\"\r\n[label]=\"config.evalLabel | multilang\"\r\n[data]=\"playerService?.currentContent?.data\"\r\n[tracking]=\"playerService?.currentContent?.tracking\"\r\n(trackingChange)=\"evalChangeEvent($event)\"\r\n>\r\n</cvbsp-eval-board>\r\n<cvbsp-std-actions-bar #actions \r\n[position]=\"'bottom'\"\r\n[tracking]=\"playerService?.currentContent?.tracking\"\r\n[data]=\"playerService?.currentContent?.data\"\r\n[title]=\"playerService?.currentContent?.title\"\r\n(nextEvent)=\"componentInstance ? componentInstance.next() : null\"\r\n(backEvent)=\"componentInstance ? componentInstance.back() : null\"\r\n>\r\n</cvbsp-std-actions-bar>\r\n\r\n<lib-modal>\r\n</lib-modal>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { PlayerConfig } from './model/player-config';\r\nimport { NgxCvbspPlayerComponent } from './ngx-cvbsp-player/ngx-cvbsp-player.component';\r\nimport { ContentDirective } from './ngx-cvbsp-player/content.directive';\r\nimport { RichTextComponent } from './contents/rich-text/rich-text.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxCvbspPlayerService } from './ngx-cvbsp-player.service';\r\nimport { NgxCvbspPersistorService } from './ngx-cvbsp-persistor.service';\r\nimport { LocalPersistorService } from './local-persistor.service';\r\nimport { SafeHtmlPipe } from './util/safe-html.pipe';\r\nimport { QcuComponent } from './contents/qcu/qcu.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { QcmComponent } from './contents/qcm/qcm.component';\r\nimport { LangComponent } from './contents/lang/lang.component';\r\nimport { RemoteCtrlComponent } from './contents/remote-ctrl/remote-ctrl.component';\r\nimport { ListBlockOrderComponent } from './contents/list-block-order/list-block-order.component';\r\nimport { ActionsBarComponent } from './contents/actions-bar/actions-bar.component';\r\nimport { HtmlCompilerComponent } from './html-compiler/html-compiler.component';\r\nimport { ModalComponent } from './modal/modal.component';\r\nimport { EvalBoardComponent } from './eval-board/eval-board.component';\r\nimport { StdActionsBarComponent } from './std-actions-bar/std-actions-bar.component';\r\nimport { EllipsisPipeModule, HtmlToPdfModule } from 'ngx-cvbsp-util';\r\nimport { ExportDocComponent } from './contents/export-doc/export-doc.component';\r\nimport { MultilangPipe } from './util/multilang.pipe';\r\nimport { PluginViewerComponent } from './contents/plugin-viewer/plugin-viewer.component';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        RichTextComponent,\r\n        NgxCvbspPlayerComponent,\r\n        ContentDirective,\r\n        SafeHtmlPipe,\r\n        QcuComponent,\r\n        QcmComponent,\r\n        LangComponent,\r\n        RemoteCtrlComponent,\r\n        ListBlockOrderComponent,\r\n        ActionsBarComponent,\r\n        HtmlCompilerComponent,\r\n        ModalComponent,\r\n        EvalBoardComponent,\r\n        StdActionsBarComponent,\r\n        ExportDocComponent,\r\n        MultilangPipe,\r\n        PluginViewerComponent\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        EllipsisPipeModule,\r\n        HtmlToPdfModule\r\n    ],\r\n    providers: [\r\n        LocalPersistorService\r\n    ],\r\n    exports: [\r\n        NgxCvbspPlayerComponent,\r\n        RichTextComponent,\r\n        SafeHtmlPipe,\r\n        QcuComponent,\r\n        QcmComponent,\r\n        RemoteCtrlComponent,\r\n        ListBlockOrderComponent,\r\n        ActionsBarComponent,\r\n        HtmlCompilerComponent,\r\n        MultilangPipe,\r\n        PluginViewerComponent\r\n    ]\r\n})\r\nexport class NgxCvbspPlayerModule {\r\n  static forRoot( config: PlayerConfig ): ModuleWithProviders<NgxCvbspPlayerModule> {\r\n    return {\r\n      ngModule: NgxCvbspPlayerModule,\r\n      providers: [\r\n        {provide: PlayerConfig, useValue: config },\r\n        NgxCvbspPlayerService,\r\n        NgxCvbspPersistorService\r\n      ]\r\n    };\r\n  }\r\n}\r\n","export class ModalButton {\r\n    title: string;\r\n    status: string;\r\n    value: any;\r\n}","export class TrainingCertificat {\r\n    /** ref to the user this trainingCertificatUser belong to */\r\n    userId: any;\r\n    /** ref to the block this trainingCertificatUser is a certificat for*/\r\n    blockId: any;\r\n    /** title of trainingCertificat */\r\n    title: string;\r\n    /** content of trainingCertificat (html) */\r\n    content: string;\r\n    /** pdf content in base 64 */\r\n    pdfB64: string;\r\n}\r\n","/*\r\n * Public API Surface of ngx-cvbsp-player\r\n */\r\n\r\nexport * from './lib/model/block';\r\nexport * from './lib/model/content';\r\nexport * from './lib/model/persistor';\r\nexport * from './lib/model/tracking';\r\nexport * from './lib/model/player-config';\r\nexport * from './lib/model/content-component';\r\nexport * from './lib/model/content-data';\r\nexport * from './lib/model/multilang';\r\nexport * from './lib/model/rich-text-data';\r\nexport * from './lib/model/remote-ctrl-data';\r\nexport * from './lib/model/question-data';\r\nexport * from './lib/model/lazy-loader';\r\nexport * from './lib/model/instant-connector';\r\nexport * from './lib/model/lang-data';\r\nexport * from './lib/model/variable';\r\nexport * from './lib/model/remote-order';\r\nexport * from './lib/contents/remote-ctrl/remote-ctrl.component';\r\nexport * from './lib/contents/actions-bar/actions-bar.component';\r\nexport * from './lib/contents/qcm/qcm.component';\r\nexport * from './lib/contents/qcu/qcu.component';\r\nexport * from './lib/contents/rich-text/rich-text.component';\r\nexport * from './lib/ngx-cvbsp-player/ngx-cvbsp-player.component';\r\nexport * from './lib/ngx-cvbsp-persistor.service';\r\nexport * from './lib/ngx-cvbsp-player.service';\r\nexport * from './lib/util/util.service';\r\nexport * from './lib/ngx-cvbsp-instant-connector.service';\r\nexport * from './lib/lazy-loading.service';\r\nexport * from './lib/util/multilang.pipe';\r\nexport * from './lib/util/safe-html.pipe';\r\nexport * from './lib/ngx-cvbsp-player.module';\r\nexport * from './lib/remote-control.service';\r\nexport * from './lib/model/remote-control';\r\nexport * from './lib/html-compiler/html-compiler.component';\r\nexport * from './lib/modal/modal.service';\r\nexport * from './lib/modal/modal';\r\nexport * from './lib/modal/modal-button';\r\nexport * from './lib/model/realtime-multi';\r\nexport * from './lib/ngx-cvbsp-realtime-multi.service';\r\nexport * from './lib/preview-persistor.service';\r\nexport * from './lib/local-persistor.service';\r\nexport * from './lib/contents/export-doc/doc-export-data';\r\nexport * from './lib/model/training-certificat';\r\nexport * from './lib/contents/plugin-viewer/plugin-data';\r\nexport * from './lib/contents/plugin-viewer/plugin-viewer.component';\r\nexport * from './lib/map-component.service';\r\nexport * from './lib/contents/list-block-order/list-block-order.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlayerConfig","i2.PreviewPersistorService","i3.LocalPersistorService","i2.RemoteControlService","i3.NgxCvbspPersistorService","i4.LazyLoadingService","i5.CvbspModalService","i1.NgxCvbspPlayerService","i3.MultilangPipe","i1","i2.MultilangPipe","i2.ListBlockOrderComponent","i3.ActionsBarComponent","i2","i1.NgxCvbspInstantConnectorService","i2.NgxCvbspPlayerService","i3","i5.SafeHtmlPipe","i6.MultilangPipe","i4.SafeHtmlPipe","i5.MultilangPipe","i1.SafeHtmlPipe","i3.CvbspModalService","i4.NgxCvbspRealtimeMultiService","i5.NgxCvbspPlayerService","i6.HtmlCompilerComponent","i7","i8.SafeHtmlPipe","i9.MultilangPipe","i3.SafeHtmlPipe","i4.MultilangPipe","i3.NgxCvbspPlayerService","i4","i1.CvbspModalService","i2.NgxPlayerMapComponentService","i4.StdActionsBarComponent","i5.EvalBoardComponent","i6.ModalComponent","i8.ContentDirective","i9.SafeHtmlPipe","i10.MultilangPipe"],"mappings":"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"}