\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n
{{ $t('Den Showroom entdecken') }}
\r\n
{{ $t('Ziehen Sie nach links/rechts, um den Raum zu erkunden.') }}
\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n

\r\n
{{ $t('Hilfe') }}
\r\n
{{ $t('Durch klicken auf dieses Icon erhalten Sie erneut diese Hilfestellung aller Funktion.') }}
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n
{{ $t('Vollbildmodus') }}
\r\n
{{ $t('Durch klicken auf dieses Icon wird der gesamte Showroom im Vollbildmodus dargestellt.') }}
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TutorialDialogue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TutorialDialogue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TutorialDialogue.vue?vue&type=template&id=18f6e282&\"\nimport script from \"./TutorialDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./TutorialDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TutorialDialogue.vue?vue&type=style&index=0&id=18f6e282&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","
\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=258a1f40&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=258a1f40&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import axios from 'axios';\r\n//import * as VUEAXIOSPLUGIN from 'vue-axios-plugin';\r\nimport JSZip from 'jszip';\r\nimport JSZipUtils from 'jszip-utils';\r\n\r\nclass FluxCMS{\r\n constructor(\r\n {\r\n app_id = 'ElementsAustellung', // decormetallShowroom, HallePanoTour, HSEmdenLeer, ElementsAustellung\r\n app_secret = 'elementsAustellung2020', // decormetallShowroom2020, hallePanoTour2020, HSEmdenLeerChemie, elementsAustellung2020\r\n baseURL = 'https://rt-ar-app.ar-cms.de',\r\n worldsPath = '/getAllWorldsForUser',\r\n projectsPath = '/getAllArProjectsOfWorldForUser/',\r\n zipPath = '/getBuildZipFile/',\r\n rawContentFilePath = '/getRawContentFile/',\r\n rawContentFileURLPath = '/flux/api/media/RawContent/url/get/',\r\n } = {}\r\n ) {\r\n this.baseURL = baseURL;\r\n this.worldsPath = worldsPath;\r\n this.projectsPath = projectsPath;\r\n this.zipPath = zipPath;\r\n this.rawContentFilePath = rawContentFilePath;\r\n this.rawContentFileURLPath = rawContentFileURLPath;\r\n\r\n this.setAppInformation( app_id, app_secret );\r\n }\r\n\r\n get worldsURL() {\r\n return this.baseURL + this.worldsPath;\r\n }\r\n\r\n get projectsURL() {\r\n return this.baseURL + this.projectsPath;\r\n }\r\n\r\n get rawContentFileURL() {\r\n return this.baseURL + this.rawContentFilePath;\r\n }\r\n\r\n get rawContentFileURLURL() {\r\n return this.baseURL + this.rawContentFileURLPath;\r\n }\r\n\r\n get zipURL() {\r\n return this.baseURL + this.zipPath;\r\n }\r\n\r\n setAppInformation( app_id, app_secret ) {\r\n this.app_id = app_id;\r\n this.app_secret = app_secret;\r\n this.axios_app_instance = axios.create({\r\n headers: {'X-APP-TOKEN': this.app_secret, 'Content-Type': 'application/json'}\r\n });\r\n this.post_data = {'appId': this.app_id, 'appSecret': this.app_secret }\r\n }\r\n\r\n getWorlds() {\r\n var fluxCMS = this;\r\n return new Promise( function( resolve, reject ) {\r\n console.log(\"FluxCMS::getWorlds: \" + fluxCMS.worldsURL );\r\n console.log(\"post_data: \" + fluxCMS.post_data.appId + \" -> \" + fluxCMS.post_data.appSecret );\r\n //this.post_data = {'appId': this.app_id, 'appSecret': this.app_secret }\r\n fluxCMS.axios_app_instance.get(fluxCMS.worldsURL, fluxCMS.post_data).then((response) => {\r\n console.log(response.data.content);\r\n resolve( response.data.content);\r\n }).catch(function (error) {\r\n if (error.response) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n console.log(error.response.data);\r\n console.log(error.response.status);\r\n console.log(error.response.headers);\r\n reject(Error(error.response))\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\r\n // http.ClientRequest in node.js\r\n console.log(error.request);\r\n reject(Error(error.request))\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n console.log('Error', error.message);\r\n reject(Error(error.message))\r\n }\r\n console.log(error.config);\r\n });\r\n });\r\n }\r\n\r\n getProjects( projectID ) {\r\n var fluxCMS = this;\r\n return new Promise( function( resolve, reject ) {\r\n console.log(\"FluxCMS::getProjects: \" + fluxCMS.projectsURL + projectID );\r\n console.log(\"post_data: \" + fluxCMS.post_data.appId + \" -> \" + fluxCMS.post_data.appSecret );\r\n //this.post_data = {'appId': this.app_id, 'appSecret': this.app_secret }\r\n fluxCMS.axios_app_instance.get(fluxCMS.projectsURL + projectID, fluxCMS.post_data).then((response) => {\r\n console.log(response.data.content);\r\n resolve( response.data.content);\r\n }).catch(function (error) {\r\n if (error.response) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n console.log(error.response.data);\r\n console.log(error.response.status);\r\n console.log(error.response.headers);\r\n reject(Error(error.response))\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\r\n // http.ClientRequest in node.js\r\n console.log(error.request);\r\n reject(Error(error.request))\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n console.log('Error', error.message);\r\n reject(Error(error.message))\r\n }\r\n console.log(error.config);\r\n });\r\n });\r\n }\r\n\r\n async getZIP( projectID, preview ) {\r\n const url=`${this.zipURL}${projectID}${preview ? \"?preview=true\" : \"\"}`;\r\n const {promisify} = require('util');\r\n const getBinaryContent = promisify(JSZipUtils.getBinaryContent);\r\n const data = await getBinaryContent(url);\r\n return JSZip.loadAsync(data);\r\n }\r\n\r\n getRawContentFile( rawContentFileID ) {\r\n var fluxCMS = this;\r\n return new Promise( function( resolve, reject ) {\r\n console.log(\"FluxCMS::getRawContentFile: \" + fluxCMS.rawContentFileURL + rawContentFileID );\r\n fluxCMS.axios_app_instance.get(fluxCMS.rawContentFileURL + rawContentFileID).then((response) => {\r\n //console.log(response.data.content);\r\n resolve( response.data.content);\r\n }).catch(function (error) {\r\n if (error.response) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n console.log(error.response.data);\r\n console.log(error.response.status);\r\n console.log(error.response.headers);\r\n reject(Error(error.response))\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\r\n // http.ClientRequest in node.js\r\n console.log(error.request);\r\n reject(Error(error.request))\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n console.log('Error', error.message);\r\n reject(Error(error.message))\r\n }\r\n console.log(error.config);\r\n });\r\n });\r\n }\r\n\r\n getRawContentFileURL( rawContentFileID ) {\r\n return this.rawContentFileURL + rawContentFileID;\r\n }\r\n\r\n getRawContentFileURLURL( rawContentFileID ) {\r\n var fluxCMS = this;\r\n return new Promise( function( resolve, reject ) {\r\n // console.log(\"FluxCMS::getRawContentFileURLURL: \" + fluxCMS.rawContentFileURLURL + rawContentFileID );\r\n fluxCMS.axios_app_instance.get(fluxCMS.rawContentFileURLURL + rawContentFileID).then((response) => {\r\n //console.log(response);\r\n // console.log(\"=>\" + response.data.content.url);\r\n resolve( response.data.content.url );\r\n }).catch(function (error) {\r\n if (error.response) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n console.log(error.response.data);\r\n console.log(error.response.status);\r\n console.log(error.response.headers);\r\n reject(Error(error.response))\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\r\n // http.ClientRequest in node.js\r\n console.log(error.request);\r\n reject(Error(error.request))\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n console.log('Error', error.message);\r\n reject(Error(error.message))\r\n }\r\n console.log(error.config);\r\n });\r\n });\r\n }\r\n}\r\n\r\n// Exports\r\nexport default FluxCMS;\r\nexport { FluxCMS };\r\n","import * as BABYLON from 'babylonjs';\r\n\r\nclass Converter\r\n{\r\n name = \"Babylonjs\";\r\n\r\n convertPositionFromCMS( p ) {\r\n var v = new BABYLON.Vector3( p.x, p.y, -1.0 * p.z );\r\n v = v.rotateByQuaternionToRef(BABYLON.Quaternion.RotationAxis( BABYLON.Vector3.Up(), Math.PI ), v );\r\n return v;\r\n }\r\n\r\n convertRotationFromCMS( r ) {\r\n //console.log(\"Converting rotation \" + JSON.stringify(r));\r\n if( !isNaN(r) ) {\r\n let result = BABYLON.Quaternion.FromEulerAngles(0, r ? r * Math.PI /180 + 90*Math.PI / 180: 90*Math.PI / 180, 0 );\r\n //console.log(\" = (Euler) > \" + JSON.stringify(result ));\r\n return result;\r\n }\r\n else {\r\n //console.log(\" => \" + r );\r\n return r;\r\n }\r\n }\r\n}\r\n\r\nconst instance = new Converter();\r\nObject.freeze(instance);\r\n\r\nexport default instance;\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nclass Command {\r\n\r\n constructor({ id, sourceUserID, target, time, type }) {\r\n this.id = id ? id : uuidv4();\r\n Object.assign(this, { sourceUserID, target });\r\n this.type = type ? type : \"Command\";\r\n this.time = time ? time : Date.now();\r\n this.completed = false;\r\n }\r\n\r\n getType() { return this.type; }\r\n\r\n setID(id) { this.id = id; return this; }\r\n getID() { return this.id; }\r\n\r\n setSourceUserID(id) { this.sourceUserID = id; return this; }\r\n getSourceUserID() { return this.sourceUserID; }\r\n\r\n setTarget(id) { this.target = id; return this; }\r\n getTarget() { return this.target; }\r\n\r\n setTime(time) { this.time = time; return this; }\r\n getTime() { return this.time; }\r\n\r\n isOfType(type) {\r\n return type === this.type;\r\n }\r\n\r\n setCompleted() { this.completed = true; return this; }\r\n isCompleted() { return this.completed; }\r\n\r\n parseFromJSON(json) {\r\n if (json && json.id) {\r\n this\r\n .setID(json.id)\r\n .setSourceUserID(json.sourceUserID)\r\n .setTarget(json.target)\r\n .setTime(json.time)\r\n } else {\r\n console.error(\"Trying to parse unknown command type\");\r\n }\r\n return this;\r\n }\r\n}\r\n\r\nclass CommandComeTo extends Command {\r\n constructor({ id, sourceUserID, situationID, time, position, rotation\r\n } = {}) {\r\n super({ id, sourceUserID, time, type: \"ComeTo\" });\r\n Object.assign(this, { situationID, position, rotation });\r\n }\r\n\r\n isOfType(type) {\r\n return type === this.type || super.isOfType(type);\r\n }\r\n\r\n setSituationID(id) { this.situationID = id; return this; }\r\n getSituationID() { return this.situationID; }\r\n\r\n setPosition(pos) { this.position = pos; return this; }\r\n getPosition() { return this.position; }\r\n\r\n setRotation(rot) { this.rotation = rot; return this; }\r\n getRotation() { return this.rotation; }\r\n\r\n parseFromJSON(json) {\r\n if (json && json.id) {\r\n super.parseFromJSON( json )\r\n .setSituationID( json.situationID )\r\n .setPosition(json.position)\r\n .setRotation(json.rotation)\r\n } else {\r\n console.error(\"Trying to parse unknown command type\");\r\n }\r\n return this;\r\n }\r\n\r\n createFromJSON( json ) {\r\n return new CommandComeTo().parseFromJSON( json );\r\n } \r\n}\r\n\r\nclass DeleteMessage extends Command {\r\n constructor({ id, sourceUserID, time, message} = {}) {\r\n super({ id, sourceUserID, time, type: \"DeleteMessage\" });\r\n Object.assign(this, {message});\r\n }\r\n\r\n isOfType(type) {\r\n return type === this.type || super.isOfType(type);\r\n }\r\n\r\n setMessage(message) { this.message = message; return this; }\r\n getMessage() { return this.message; }\r\n\r\n parseFromJSON(json) {\r\n if (json && json.id) {\r\n super.parseFromJSON(json)\r\n .setMessage(json.message)\r\n } else {\r\n console.error(\"Trying to parse unknown command type\");\r\n }\r\n return this;\r\n }\r\n\r\n createFromJSON( json ) {\r\n return new DeleteMessage().parseFromJSON( json );\r\n }\r\n}\r\n\r\nclass CommandBuilder {\r\n constructor() {\r\n this.supportedCommandTypes = new Map();\r\n }\r\n\r\n registerCommandType( command ) {\r\n if( command.getType ) {\r\n this.supportedCommandTypes.set( command.getType(), command );\r\n }\r\n }\r\n\r\n createFromJSON( json ) {\r\n if( json && json.type ) {\r\n //console.log(\"Trying to instantiate a command for type \" + json.type);\r\n if( this.supportedCommandTypes.has( json.type ) ) \r\n return this.supportedCommandTypes.get( json.type ).createFromJSON( json );\r\n else\r\n console.log(\"Unknown command type \" + json.type );\r\n } else {\r\n // Unknown datatype...\r\n console.error(\"Trying to parse unknown command type \");\r\n }\r\n }\r\n}\r\n\r\nconst CommandBuilderInstance = new CommandBuilder();\r\nObject.freeze(CommandBuilderInstance);\r\n\r\nCommandBuilderInstance.registerCommandType( new CommandComeTo() );\r\nCommandBuilderInstance.registerCommandType(new DeleteMessage());\r\n\r\nexport { Command, CommandBuilder, CommandBuilderInstance, CommandComeTo, DeleteMessage }\r\n","import Vue from 'vue';\r\nimport {FluxCMS} from \"@/api/FluxCMS\";\r\nimport {Prefab, PrefabBuilderInstance} from \"./PrefabDataTypes\";\r\nimport {EventBuilderInstance} from \"./EventDataTypes\";\r\nimport {User} from \"./UserDataTypes\";\r\nimport MediaManager from '@/api/MediaManager';\r\nimport Converter from '@/components/babylonjs/Converter';\r\nimport { SoundTrack } from \"babylonjs\";\r\nimport axios from 'axios';\r\nimport { DeleteMessage, CommandComeTo, CommandBuilderInstance } from './CommandDataTypes';\r\n\r\nconst Flux360Store = {\r\n state: {\r\n flux360Version: process.env.VUE_APP_VERSION || '0.0.0',\r\n // Configuration of the Flux360 Tour.\r\n // These are the defaults set in the application.\r\n // Defaults will be overwritten by a file flux_config.json on the server\r\n config: {\r\n sessionID: undefined, // ID to use for the video session, if undefined, use tour ID\r\n panoramaTourZIP: undefined,\r\n panoramaTourZIPEN: undefined,\r\n showLanguageSelection: false,\r\n enableWatermark: true,\r\n logoURL: \"/Flux360Logo.svg\",\r\n enableCommunication: true,\r\n enableBugReport: true,\r\n enableZooming: false,\r\n enablePermanentPanoramaVideoControls: false,\r\n secondaryColor: \"#a34400\",\r\n primaryColor: \"#E76101\",\r\n fontFamily: \"Avenir\",\r\n enableMap: true,\r\n enablePanoramaVideoAutoplay: true,\r\n enableSharing: true,\r\n mapURL: null,\r\n mapPins: [],\r\n favIcon: \"/favicon.ico\",\r\n websiteTitle: \"Flux 360°\",\r\n enableWaitForModerator: false,\r\n roomRotations: [],\r\n thumbnailType: \"jpg\",\r\n roomOrder: null,\r\n cameraZoom: 0.9,\r\n enablePreloadAllSituations: false,\r\n },\r\n\r\n converter: Converter,\r\n prefabs: [],\r\n users: [],\r\n events: [],\r\n commands: [],\r\n localUserID: undefined,\r\n media: MediaManager,\r\n inSetup: false,\r\n vrMode: false,\r\n gyrosActive: false,\r\n sounds: SoundTrack,\r\n overwriteStartSituationID: undefined, // If this is set to a certain ID, it will overwrite the ID from the CMS\r\n doRendering: true,\r\n isDialogueOpen: false,\r\n loadingscreenVisible: true,\r\n moderatorMode: false,\r\n stopModeratorModeSignals: false,\r\n\r\n /*** Language ***/\r\n activeLanguage: null,\r\n \r\n /*** Settings for publisher ***/\r\n audioDeviceId: undefined,\r\n videoDeviceId: undefined,\r\n audioOn: false,\r\n videoOn: false,\r\n framerate: 30,\r\n audiobitrate: undefined,\r\n audioProcessingDeactivated: false,\r\n blockSitutationTransition: false,\r\n },\r\n getters: {\r\n appVersion: (state) => {\r\n return state.flux360Version\r\n }, \r\n panoramaTour: (state) => {\r\n const apps = state.prefabs.filter( x => x.isOfType( Prefab.PrefabType.Application360 ) );\r\n\t\t\tif( apps.length == 1 )\r\n\t\t\t\treturn apps[0];\r\n\t\t\telse\r\n\t\t\t\tconsole.error(\"No App defined!\");\r\n },\r\n currentSituationID: (state, getters) => {\r\n return getters.localUser ? getters.localUser.getCurrentSituationID() : undefined;\r\n },\r\n situations: state => {\r\n return state.prefabs.filter( x => x.isOfType( Prefab.PrefabType.Situation ) );\r\n },\r\n users: state => {\r\n return state.users;\r\n },\r\n events: state => {\r\n return state.events;\r\n },\r\n commands: state => {\r\n return state.commands;\r\n },\r\n localUserID: state => {\r\n return state.localUserID;\r\n },\r\n currentSituation: (state, getters) => {\r\n return state.prefabs.find(x => x.getID() === getters.currentSituationID);\r\n },\r\n currentPrefabs: (state, getters) => {\r\n return state.prefabs.filter(x => x.getSituation && x.getSituation() === getters.currentSituationID);\r\n },\r\n prefabsForSituation: (state) => (situationID) => {\r\n return state.prefabs.filter(x => x.getSituation && x.getSituation() === situationID);\r\n },\r\n remoteUsersInCurrentSituation: (state, getters) => {\r\n return state.users.filter(x => (x.getCurrentSituationID() === getters.currentSituationID) && (x.getID() !== state.localUserID));\r\n },\r\n localUser: (state) => {\r\n return state.users.find(x => x.getID() === state.localUserID);\r\n },\r\n allPrefabs: (state) => {\r\n return state.prefabs;\r\n },\r\n moderatorInSession: (state) => {\r\n return state.users.find(user => user.getRole() == \"moderator\") != undefined;\r\n }, \r\n panoramaTourZIP: (state) => { return state.config.panoramaTourZIP; },\r\n panoramaTourZIPEN: (state) => { return state.config.panoramaTourZIPEN; },\r\n showLanguageSelection: (state) => { return state.config.showLanguageSelection; },\r\n roomOrder: (state) => { return state.config.roomOrder; },\r\n cameraZoom: (state) => { return state.config.cameraZoom; },\r\n thumbnailType: (state) => { return state.config.thumbnailType; },\r\n roomRotations: (state) => { return state.config.roomRotations; },\r\n enableWaitForModerator: (state) => { return state.config.enableWaitForModerator; },\r\n stopModeratorModeSignals: (state) => { return state.stopModeratorModeSignals; },\r\n moderatorMode: (state) => { return state.moderatorMode; },\r\n enableSharing: (state) => { return state.config.enableSharing; },\r\n isDialogueOpen: (state) => { return state.isDialogueOpen; },\r\n doRendering: (state) => { return state.doRendering; },\r\n loadingscreenVisible: (state) => { return state.loadingscreenVisible; },\r\n fontFamily: (state) => { return state.config.fontFamily; },\r\n mapURL: (state) => { return state.config.mapURL; },\r\n favIcon: (state) => { return state.config.favIcon; },\r\n websiteTitle: (state) => { return state.config.websiteTitle; },\r\n mapPins: (state) => { return state.config.mapPins; },\r\n enablePanoramaVideoAutoplay: (state) => { return state.config.enablePanoramaVideoAutoplay; },\r\n enableMap: (state) => { return state.config.enableMap; },\r\n primaryColor: (state) => { return state.config.primaryColor; },\r\n secondaryColor: (state) => { return state.config.secondaryColor; },\r\n enableZooming: (state) => { return state.config.enableZooming; },\r\n enablePermanentPanoramaVideoControls: (state) => { return state.config.enablePermanentPanoramaVideoControls; },\r\n enableWatermark: (state) => { return state.config.enableWatermark; },\r\n logoURL: (state) => { return state.config.logoURL; },\r\n enableCommunication: (state) => { return state.config.enableCommunication; },\r\n enableBugReport: (state) => { return state.config.enableBugReport; },\r\n isVRMode: (state) => { return state.vrMode; },\r\n isInSetup: (state) => { return state.inSetup; },\r\n getAudioDeviceId: (state) => {return state.audioDeviceId;},\r\n getVideoDeviceId: (state) => {return state.videoDeviceId;},\r\n isAudioOn: (state) => {return state.audioOn},\r\n isVideoOn: (state) => {return state.videoOn},\r\n getFramerate: (state) => {return state.framerate},\r\n getAudiobitrate: (state) => {return state.audiobitrate},\r\n isAudioProcessingDeactivated: (state) => {return state.audioProcessingDeactivated},\r\n isGyrosActive: (state) => {return state.gyrosActive},\r\n enablePreloadAllSituations: (state) => {return state.config.enablePreloadAllSituations},\r\n activeLanguage: (state) => {return state.activeLanguage}\r\n },\r\n mutations: {\r\n removeSituation(state, situationID){\r\n let situation = state.prefabs.find(x => x.getID() === getters.situationID);\r\n var index = state.prefabs.indexOf(situation);\r\n if (index > -1) {\r\n state.prefabs.splice(index, 1);\r\n } \r\n },\r\n setLoadingscreenVisible(state, boolean){\r\n state.loadingscreenVisible = boolean;\r\n },\r\n setEnableZooming(state, boolean){\r\n state.config.enableZooming = boolean;\r\n },\r\n setActiveLanguage(state, code){\r\n state.activeLanguage = code;\r\n },\r\n overwriteStartSituationID( state, { situationID } = {} ) {\r\n if( situationID )\r\n state.overwriteStartSituationID = situationID;\r\n },\r\n setSessionID( state, id ) {\r\n state.config.sessionID = id;\r\n },\r\n setBlockSitutationTransition( state, bool ) {\r\n state.blockSitutationTransition = bool;\r\n },\r\n setStopModeratorModeSignals( state, bool ) {\r\n state.stopModeratorModeSignals = bool;\r\n },\r\n setModeratorMode( state, mode ) {\r\n state.moderatorMode = mode;\r\n },\r\n setVRMode( state, mode ) {\r\n state.vrMode = mode;\r\n },\r\n setIsInSetup( state, setup ) {\r\n state.inSetup = setup;\r\n },\r\n setOpenTokTest(state, status) {\r\n state.openTokTest = status;\r\n },\r\n setOpenTokConnectivityResult(state, result) {\r\n state.openTokConnectivityResult = result;\r\n },\r\n setOpenTokQualityResult(state, result) {\r\n state.openTokQualityResult = result;\r\n },\r\n setOpenTokConnectivityError(state, error) {\r\n state.openTokConnectivityError = error;\r\n },\r\n setOpenTokQualityError(state, error) {\r\n state.openTokQualityError = error;\r\n },\r\n setAudioDeviceId(state, id) {\r\n state.audioDeviceId = id;\r\n },\r\n setVideoDeviceId(state, id) {\r\n state.videoDeviceId = id;\r\n },\r\n setAudioOn(state, boolean){\r\n state.audioOn = boolean;\r\n },\r\n setVideoOn(state, boolean){\r\n state.videoOn = boolean;\r\n },\r\n setFramerate(state, number){\r\n state.framerate = number;\r\n },\r\n setAudiobitrate(state, number){\r\n state.audiobitrate = number;\r\n },\r\n setAudioProcessingDeactivated(state, number){\r\n state.audioProcessingDeactivated = number;\r\n },\r\n setPrefabs (state, prefabs) {\r\n state.prefabs = prefabs;\r\n const apps = state.prefabs.filter(x => x.isOfType(Prefab.PrefabType.Application360));\r\n if (!apps.length) {\r\n console.warn(\"No App defined!\");\r\n } else {\r\n if (state.localUserID) {\r\n console.log(\"New panorama tour set, setting local user in starting situation.\");\r\n console.log(\"ID is \" + apps[0].getID() + \" start is \" + apps[0].getStartSituationID())\r\n let localUser = state.users.find(x => x.getID() === state.localUserID);\r\n if(!localUser){\r\n this.commit('updateUser', {id: state.localUserID});\r\n localUser = state.users.find(x => x.getID() === state.localUserID);\r\n }\r\n\r\n if( state.overwriteStartSituationID ) {\r\n // it might be that the overwriteStartSituationID is actually false, so we\r\n // have to make a sanity check to avoid setting the user in non existing situations\r\n const sit = state.prefabs.find( x => x.getID() == state.overwriteStartSituationID && x.isOfType(Prefab.PrefabType.Situation))\r\n if( sit )\r\n localUser.setCurrentSituationID(state.overwriteStartSituationID);\r\n else {\r\n console.log(\"Overwrite situation ID is \" + state.overwriteStartSituationID + \" but this situation is not in the tour, using predefined startID \" + apps[0].getStartSituationID());\r\n localUser.setCurrentSituationID(apps[0].getStartSituationID()); \r\n }\r\n }\r\n else\r\n localUser.setCurrentSituationID(apps[0].getStartSituationID()); \r\n }\r\n }\r\n },\r\n setCurrentSituation (state, situation) {\r\n //console.log(\"Setting current situation to \" + situation )\r\n const user = state.users.find(x => x.getID() === state.localUserID);\r\n const currentSituationID = situation ? situation.id : undefined;\r\n //console.log(\"Situation ID is \" + currentSituationID );\r\n //state.currentSituationID = currentSituationID;\r\n if (user) {\r\n user.setCurrentSituationID(currentSituationID);\r\n }\r\n },\r\n setLocalUser (state, user) {\r\n if (user) {\r\n state.users.push(user);\r\n state.localUserID = user.getID();\r\n }\r\n },\r\n setLocalUserID (state, id) {\r\n state.localUserID = id;\r\n },\r\n addUser (state, user) {\r\n console.info(`Flux360Store::addUser: ${JSON.stringify(user)}`);\r\n state.users.push(user);\r\n // If a new user is updated, broadcast our own data to welcome him!\r\n if( user.getID() !== this.localUserID ) {\r\n console.log(\"### Welcoming new user...\");\r\n let localUser = state.users.find(x => x.getID() === state.localUserID);\r\n if( localUser ) {\r\n localUser.setShouldSync(true);\r\n }\r\n }\r\n },\r\n pauseSound(state, file){\r\n console.info(\"Pausing Sound \" + file);\r\n\r\n },\r\n removeUser(state, id) {\r\n const user = state.users.find(u => u.id === id);\r\n if (user) {\r\n state.users.splice(state.users.indexOf(user), 1);\r\n }\r\n },\r\n updateRuntimeState(state, data={}){\r\n const {\r\n id,\r\n paused,\r\n muted,\r\n playing, \r\n duration, \r\n currentTime,\r\n volume,\r\n percentageLoaded\r\n } = data;\r\n //console.log(\"updateRuntimeState: \" + JSON.stringify(data));\r\n let prefab = state.prefabs.find(x => (x.getID() === id));\r\n if(prefab){\r\n if(\"paused\" in data) prefab.runtimeState.paused = paused;\r\n if(\"muted\" in data) prefab.runtimeState.muted = muted;\r\n if(\"playing\" in data) prefab.runtimeState.playing = playing;\r\n if(\"duration\" in data) prefab.runtimeState.duration = duration;\r\n if(\"currentTime\" in data) Vue.set(prefab.runtimeState, \"currentTime\", currentTime);\r\n if(\"volume\" in data) Vue.set(prefab.runtimeState, \"volume\", volume);\r\n if(\"percentageLoaded\" in data) Vue.set(prefab.runtimeState, \"percentageLoaded\", percentageLoaded);\r\n }\r\n },\r\n\r\n updateUser (state, data = {}) {\r\n //console.info(`Flux360Store::updateUser: ${JSON.stringify(data)}`);\r\n //console.info(`Flux360Store::currentUsers: ${JSON.stringify(state.users)}`);\r\n const {\r\n id,\r\n position,\r\n rotation,\r\n gazePosition,\r\n cursorPosition,\r\n name,\r\n color,\r\n role,\r\n acronym,\r\n userIcon,\r\n cmsID,\r\n isCMSUser,\r\n currentSituationID,\r\n onlineStatus\r\n } = data;\r\n let user = state.users.find(x => (x.getID() === id));\r\n if (!user) {\r\n user = new User(data);\r\n this.commit('addUser', user);\r\n }\r\n if (\"position\" in data) user.setPosition(position);\r\n if (\"rotation\" in data) user.setRotation(rotation);\r\n if (\"gazePosition\" in data) user.setGazePosition(gazePosition);\r\n if (\"cursorPosition\" in data) user.setCursorPosition(cursorPosition);\r\n if (\"name\" in data) user.setName(name);\r\n if (\"color\" in data) user.setColor(color);\r\n if (\"acronym\" in data) user.setAcronym(acronym);\r\n if (\"userIcon\" in data) user.setUserIcon(userIcon);\r\n if (\"role\" in data) user.setRole(role);\r\n if (\"cmsID\" in data) user.setCMSID(cmsID);\r\n if (\"isCMSUser\" in data) user.setIsCMSUser(isCMSUser);\r\n if (\"currentSituationID\" in data) user.setCurrentSituationID(currentSituationID);\r\n\r\n // Getters like 'usersInCurrentSituation' will not trigger because\r\n // the collection itself has not changed. Therefore the panorama scene\r\n // will not be updated with this information. To avoid this, we need to\r\n // trigger an event that changes the collection.\r\n \r\n // Why?\r\n // state.users.push(state.users.pop());\r\n\r\n // Finally update userData (session store)\r\n if (id === state.localUserID) {\r\n this.commit('updateUserData', user);\r\n if( name || acronym || color || role || currentSituationID ) {\r\n user.setShouldSync();\r\n }\r\n } else {\r\n if(onlineStatus===\"streamCreated\") {\r\n console.log(\"#### Stream created\");\r\n let localUser = state.users.find(x => (x.getID() === state.localUserID));\r\n localUser.setShouldSync(true);\r\n }\r\n }\r\n },\r\n clearMediaManager (state) {\r\n state.media.MediaManager.clear();\r\n },\r\n addMedia (state, media) {\r\n state.media.addMedia(media);\r\n },\r\n\r\n handleGotoSituationTransition (state, {situationID, rotation, comesFromModerator = false} = {}) {\r\n if(!state.blockSitutationTransition || comesFromModerator){\r\n const user = state.users.find(x => x.getID() === state.localUserID);\r\n if (user) {\r\n if (!(rotation === \"undefined\" || rotation === undefined)){\r\n console.log(\"handleGotoSituationTransition -- setting Rotation: \" + JSON.stringify(rotation));\r\n user.setRotation(rotation);\r\n } else\r\n console.log(\"handleGotoSituationTransition -- no rotation update requested\");\r\n user.setCurrentSituationID(situationID);\r\n }\r\n }\r\n \r\n },\r\n postEvent (state, event) {\r\n console.info(`Flux360Store::postEvent: ${JSON.stringify(event)}`);\r\n // Check if it is a string...\r\n let e = event;\r\n if( typeof e === \"string\" ) {\r\n e = JSON.parse(event);\r\n console.log(\"Converted Event to JSON from String: \" + JSON.stringify(e));\r\n }\r\n if( !e.getType ) {\r\n e = EventBuilderInstance.createFromJSON(e);\r\n console.log(\"Converted Event to Eventclass from JSON: \" + JSON.stringify(e));\r\n }\r\n state.events.push(e);\r\n if( e.userID === state.localUserID ) {\r\n // If this is a local user event, let the others now\r\n this.dispatch('broadcastPostEvent', e );\r\n }\r\n },\r\n removeEventByID(state, { id } ) {\r\n const event = state.events.find(u => u.getID() === id);\r\n if (event) {\r\n state.events.splice(state.events.indexOf(event), 1);\r\n }\r\n },\r\n activateGyros(state, value){\r\n state.gyrosActive = value;\r\n },\r\n doRendering(state, value){\r\n state.doRendering = value;\r\n },\r\n setDialogueOpen(state,value){\r\n state.isDialogueOpen = value;\r\n },\r\n ///***********************************************************************************/\r\n /// Command Handling\r\n ///***********************************************************************************/ \r\n postCommand(state, command){\r\n console.info(`Flux360Store::postCommand: ${JSON.stringify(command)}`);\r\n // Check if it is a string...\r\n let c = command;\r\n console.log(typeof c);\r\n if( typeof c === \"string\" ) {\r\n c = JSON.parse(command);\r\n //console.log(\"Converted Command to JSON from String: \" + JSON.stringify(c));\r\n }\r\n if( !c.getType ) {\r\n c = CommandBuilderInstance.createFromJSON(c);\r\n //console.log(\"Converted Command to CommandClass from JSON: \" + JSON.stringify(c));\r\n }\r\n state.commands.push(c);\r\n }\r\n },\r\n actions: {\r\n ///***********************************************************************************/\r\n /// Moderator Commands\r\n ///***********************************************************************************/ \r\n requestUsersToMe( context, { targetRotation } ) {\r\n // This function is only allowed if the moderator is calling...\r\n if( context.getters.localUser && context.getters.localUser.getRole() === \"moderator\" ) {\r\n console.log(\"Local moderator calls all users to come.\");\r\n\r\n let localUser = context.getters.localUser;\r\n\r\n let command = new CommandComeTo( \r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tsourceUserID: localUser.getID(),\r\n\t\t\t\t\t situationID: localUser.getCurrentSituationID(),\r\n\t\t\t\t\t\tposition: localUser.getPosition(),\r\n rotation: targetRotation,\r\n\t\t\t\t\t} );\r\n\r\n //console.log(\"Broadcasting \" + JSON.stringify(command));\r\n this.dispatch('broadcastCommand', command );\r\n\r\n } else {\r\n console.log(\"Normal users cannot call all users.\");\r\n }\r\n },\r\n deleteMessage(context, messageToDelete) {\r\n // This function is only allowed if the moderator is calling...\r\n //if( context.getters.localUser && context.getters.localUser.getRole() === \"moderator\" ) {\r\n console.log(\"Local moderator calls all users to delete a message.\");\r\n\r\n let localUser = context.getters.localUser;\r\n\r\n let command = new DeleteMessage(\r\n {\r\n sourceUserID: localUser.getID(),\r\n message: messageToDelete,\r\n type: 'deleteMessage'\r\n });\r\n\r\n //console.log(\"Broadcasting \" + JSON.stringify(command));\r\n this.dispatch('broadcastCommand', command);\r\n\r\n //} else {\r\n // console.log(\"Normal users cannot call all users to delete a message.\");\r\n //}\r\n },\r\n ///***********************************************************************************/\r\n /// User Creation\r\n ///***********************************************************************************/ \r\n createLocalUser (context) {\r\n const u = new User({name: \"Hiro Protagonist\", acronym: \"HP\"});\r\n context.commit('addUser', u);\r\n const id = u.getID();\r\n context.commit('setLocalUserID', id);\r\n if (context.getters.panoramaTour) {\r\n var currentSituationID = context.getters.panoramaTour.getStartSituationID();\r\n if( context.state.overwriteStartSituationID )\r\n currentSituationID = context.state.overwriteStartSituationID;\r\n context.commit('updateUser', {id, currentSituationID});\r\n }\r\n // Update session store\r\n context.commit('updateUserData', u);\r\n },\r\n\r\n addTestUser( context ) {\r\n const u = new User();\r\n\t\t\tif( context.getters.localUser ) {\r\n let localUser = context.getters.localUser;\r\n u.setPosition( localUser.getPosition() );\r\n u.setGazePosition( localUser.getGazePosition() );\r\n u.setCursorPosition( localUser.getCursorPosition() );\r\n u.setRotation( localUser.getRotation() );\r\n u.setCurrentSituationID( localUser.getCurrentSituationID() );\r\n\t\t\t\tu.setName(\"User\"+Math.floor(Math.random() * 100));\r\n \t\t\tlet r = 0;\r\n\t\t\t\tlet g = 0;\r\n\t\t\t\tlet b = 0;\r\n\t\t\t\twhile((r+g+b == 0 || r+g+b < 300)){\r\n\t\t\t\t\tr = Math.floor(Math.random()*255).toString(16);\r\n\t\t\t\t\tg = Math.floor(Math.random()*255).toString(16);\r\n\t\t\t\t\tb = Math.floor(Math.random()*255).toString(16);\r\n\t\t\t\t}\r\n\t\t\t\tif(r.length == 1) r = (\"0\"+r).toString(16);\r\n\t\t\t\tif(g.length == 1) g = (\"0\"+g).toString(16);\r\n\t\t\t\tif(b.length == 1) b = (\"0\"+b).toString(16);\r\n\t\t\t\tu.setColor(\"#\"+r+g+b);\r\n \t\t\tconsole.log(\"Adding user with position and rotation: \" + JSON.stringify(u.getPosition()) + \" / \" + JSON.stringify(u.getRotation()) );\r\n \t\t\tconsole.log(\"And color \" + u.getColor() );\r\n \t\t}\r\n \t\tcontext.commit('addUser', u );\r\n },\r\n ///***********************************************************************************/\r\n /// Startup and Loading Functions\r\n ///***********************************************************************************/ \r\n async loadLocalConfiguration ( context ) {\r\n console.log(\"FluxCMS::loadingLocalConfiguration\");\r\n return axios.get(\"./flux_config.json\").then((response) => {\r\n console.log(\"Found local config with parameters \" + JSON.stringify(response.data));\r\n const config = response.data;\r\n console.log(config);\r\n console.log(\"########\");\r\n Object.assign( context.state.config, config );\r\n }).catch(function (error) {\r\n // handle error\r\n console.log(error);\r\n });\r\n },\r\n // Loads a Flux360 panorama tour from ZIP\r\n async loadPanoramaTour (context, {zip, preview}) {\r\n console.log(\"Loading panorama tour with ID \" + zip)\r\n const fluxCMS = new FluxCMS();\r\n let prefabs = [];\r\n let name = \"unknown\";\r\n let packageName = \"unknown\";\r\n let description = \"unknown\";\r\n\r\n // Load the ZIP file\r\n console.log(\"FluxCMS::loading...\");\r\n const zipFile = await fluxCMS.getZIP(zip, preview);\r\n //console.log(\"FluxCMS::looping files...\");\r\n // Iterate through all files\r\n\r\n const filenames = Object.keys(zipFile.files).sort();\r\n const contents = await Promise.all(filenames.map(fileName => zipFile.file(fileName).async(\"string\")));\r\n for (let content of contents) {\r\n const json = JSON.parse(content);\r\n if (json.idName) {\r\n // console.log(\"##########################################\")\r\n // console.log(\"ID: \" + json.idName );\r\n // console.log(\"Type: \" + json.type);\r\n // console.log(\"Content: \" + content);\r\n if (json.type === 30000) {\r\n const prefab = PrefabBuilderInstance.createFromJSON(json);\r\n if (prefab)\r\n prefabs.push(prefab);\r\n } else {\r\n const media = MediaManager.createFromJSON(json);\r\n if (media)\r\n MediaManager.addMedia(media);\r\n }\r\n } else {\r\n if (json.package_name) {\r\n //console.log(\"FluxCMS::Parsing application package\");\r\n packageName = json.package_name;\r\n name = json.package_display_name;\r\n description = json.package_description;\r\n //panoramaTour.setContentFileIDs( json.contentFileIds );\r\n //console.log(content);\r\n } else {\r\n console.log(\"FluxCMS::Unknown content\");\r\n console.log(content);\r\n }\r\n }\r\n }\r\n // See if we have an app\r\n // to patch missing information into it\r\n const apps = prefabs.filter(x => x.isOfType(Prefab.PrefabType.Application360));\r\n if (apps.length === 1) {\r\n apps[0].setName(name);\r\n apps[0].setDescription(description);\r\n apps[0].setPackageName(packageName);\r\n }\r\n prefabs = prefabs.map(x => {\r\n //console.log(\"Checking \" + x.getType())\r\n if (x.isOfType(Prefab.PrefabType.ContentPrefab)) {\r\n //console.log(\"### Converting \"+ x.getPosition().x + \" / \" + x.getPosition().y + \" / \" + x.getPosition().z )\r\n x.setPosition(context.state.converter.convertPositionFromCMS(x.getPosition()));\r\n //console.log(\"### Converted to \"+ x.getPosition() )\r\n x.setRotation(context.state.converter.convertRotationFromCMS(x.getRotation()));\r\n }\r\n return x;\r\n });\r\n prefabs = prefabs.map(x => {\r\n if (x.isOfType(Prefab.PrefabType.Transition)) {\r\n if (x.getImageID() === undefined)\r\n x.setImageID(MediaManager.defaultTransitionTextureID);\r\n x.setTargetRotation(context.state.converter.convertRotationFromCMS(x.getTargetRotation()));\r\n }\r\n return x;\r\n });\r\n await MediaManager.resolveContent(fluxCMS);\r\n context.commit('setPrefabs', prefabs);\r\n\r\n // Let session store know.\r\n const tourId = context.getters.panoramaTour.id;\r\n // Here we are setting the ID to use for the video-conferencing session...\r\n if( context.state.config.sessionID ) {\r\n console.log(\"Session ID has been set by config to \" + context.state.config.sessionID);\r\n await this.dispatch('setupDefaultChatRooms', context.state.config.sessionID);\r\n } else {\r\n console.log(\"Session ID is set to the tour ID \" + tourId);\r\n await this.dispatch('setupDefaultChatRooms', tourId);\r\n }\r\n \r\n }\r\n }\r\n};\r\n\r\nexport default Flux360Store;\r\n","import Vue from 'vue';\r\nimport Vuex from 'vuex';\r\nVue.use(Vuex);\r\n\r\nimport Flux360Store from './flux360/Flux360Store';\r\nconst store = new Vuex.Store({\r\n modules: {\r\n flux360: Flux360Store\r\n }\r\n});\r\n\r\n// Hand to the session store the tour info and the vuex store\r\nconst options = {\r\n store\r\n}\r\nimport FluxWebCommunication from 'flux-web-communication';\r\nVue.use(FluxWebCommunication, options);\r\n\r\nexport default store;\r\n","import Vue from 'vue';\r\nimport VueI18n from 'vue-i18n';\r\n\r\nVue.use(VueI18n);\r\n\r\nconst messages = {\r\n 'en': {\r\n 'Zurzeit in diesem Raum:' : 'Currently in this room:', //SituationCard\r\n 'Ein Moderator hat die Session für Sie geschlossen!' : \"A host has closed the session for you!\", //ForceDisconnect\r\n 'Auf einen Moderator warten...' : 'Waiting for a moderator...', // WaitForModeratorDialogue\r\n\r\n // LoginDialogue\r\n 'Anzeigename' : 'Displayed name',\r\n 'Email' : 'Email',\r\n 'Passwort' : 'Password',\r\n 'Gast': 'Guest', \r\n 'Moderator' : 'Host', \r\n 'Abbrechen' : 'Cancel', \r\n 'Weiter' : 'Continue', \r\n 'Die Email und/oder das Passwort ist falsch.' : 'The Email and/or the passoword are incorrect',\r\n\r\n // AudioVideoDialogue\r\n 'Mikrofon- und Kameraeinstellungen' : 'Microphone and camera settings',\r\n 'Audiotest' : 'Audio Test',\r\n 'Browser-Zugriff auf Ihre Kamera wurde nicht erlaubt. Klicken Sie' : 'You denied the permission to access your camera. Please click',\r\n 'hier' : 'here',\r\n ', um nach dem Zugriff gefragt zu werden.' : 'to be asked for access again.',\r\n 'Es wurde keine Kamera erkannt': 'No camera was detected',\r\n \"Kamera\" : \"Camera\",\r\n 'Browser-Zugriff auf Ihr Mikrofon wurde nicht erlaubt. Klicken Sie' : 'You denied the permission to access your microphone. Please click',\r\n 'Es wurde keine Mikrofon erkannt': 'No microphone was detected',\r\n 'Mikrofon' : \"Microphone\",\r\n 'Zurück' : 'Back', \r\n 'Jetzt teilnehmen': \"Enter\",\r\n 'Problembehandlung' : 'Troubleshooting',\r\n 'Verbindungstest' : 'Connection Test',\r\n\r\n // Connection Test\r\n 'Ihre Verbindung wird überprüft' : 'Checking your connection',\r\n 'Der Verbindungsaufbau war erfolgreich' : 'The connection buildup was successful',\r\n 'Der Verbindungsaufbau war nicht erfolgreich' : 'The connection buildup was not successful',\r\n 'Folgende Fehler sind aufgetreten:': 'The following errors occurred:',\r\n 'Ihre Verbindungsqualität wird überprüft' : \"Checking the quality of the connection\",\r\n 'Die Überprüfung ihrer Verbindungsqualität war erfolgreich' : 'Checking the quality of the connection was successful',\r\n 'Ergebniss des Tests:': 'Results of the test:',\r\n 'Fehler bei der Video Übertragung:' : \"Video transmission error:\",\r\n 'Fehler bei der Audio Übertragung:' : \"Audio transmission error:\",\r\n 'Folgender Fehler ist aufgetreten:' : \"The following error occurred:\",\r\n 'Der Qualitäts Test konnte nicht durchgeführt werden!': 'Checking the quality of the connection was not successful',\r\n 'Test Wiederholen' :'Repeat test',\r\n 'Qualität' : 'Quality',\r\n 'Fertig' : 'Done',\r\n\r\n // Bugreport?\r\n 'Fehlerbericht senden' : 'Send Error Report',\r\n 'Bandwidth too low.' : 'Bandwidth too low.', \r\n 'Durchschnittliche Bitrate' : 'Average Bitrate',\r\n 'Durchschnittliche Framerate' : 'Average Framerate',\r\n 'Verlustrate der Pakete' : 'Packet Loss Ratio',\r\n 'Aufgetretene Fehler' : 'Occured Errors',\r\n 'Die Videofunktion wird nicht unterstützt.' : 'The video function is not supported.',\r\n 'Die Audiofunktion wird nicht unterstützt.' : 'The audio function is not supported.',\r\n 'Grund' : 'Reason',\r\n \r\n //ScreenSharingPanel\r\n 'Screen Sharing Fenster anzeigen' : 'Show screen sharing window', \r\n 'Screen Sharing Fenster ausblenden' : 'Hide screen sharing window',\r\n\r\n //ChatTab\r\n 'Nachrichten': 'Messages',\r\n 'Ihre Nachricht eingeben...' : 'Please enter your message...', \r\n\r\n // ParticipantTab\r\n 'Teilnehmende' : 'Participants',\r\n 'Teilnehmende suchen': 'Search for participants', \r\n 'Zu Raum des Teilnehmer gehen' : \"Go to the participant's room\",\r\n 'Teilnehmer stummschalten' : 'Mute participant',\r\n 'Teilnehmer Entfernen' : \"Remove participant\",\r\n 'Video des Teilnehmer ausstellen' : \"Switch off the participant's video\",\r\n\r\n // ModeratorMenue\r\n 'Bildschirm teilen' : 'Share screen',\r\n 'Bildschirm teilen abbrechen' : 'Cancel Share screen',\r\n 'Alle Teilnehmer stummschalten' : 'Mute all participants',\r\n \"Geführter Modus aktivieren\" : 'Activate guided mode',\r\n \"Geführter Modus deaktivieren\" : 'Deactivate guided mode',\r\n \"Videos aller Teilnehmer ausstellen\" : \"Switch off videos of all participants\",\r\n \"Alle Teilnehmer Entfernen\" : 'Remove all participants',\r\n\r\n // AudioTest\r\n 'Der Audiotest simuliert eine Verbindung zum Server. Sie können ihre Audioübertragung dann abhören, um sie zu überprüfen.' : 'The audio test simulates a connection to the server. You can listen to your audio transmission to monitor it.',\r\n 'Zurück' : 'Back',\r\n 'Wiederholen' : \"Retry\",\r\n 'Verbindung zum Server fehlgeschlagen!': \"Connection to the server failed!\",\r\n\r\n // ShareDialog\r\n 'Raum teilen': 'Share room', \r\n 'Tour teilen': 'Share tour',\r\n\r\n // TroubleShooting\r\n 'Ich höre niemanden': \"I don't hear anyone\",\r\n 'Das Standardkommunikationsgerät umstellen (Windows 10)': 'Change the default communication device (Windows 10)',\r\n 'Öffnen Sie die Soundeinstellungen (am besten direkt in die Suche eingeben). Scrollen Sie nach unten, bis Sie zur Überschrift \"Verwandte Einstellungen\" gelangen. Darunter klicken Sie auf \"Sound-Systemsteuerung\". Es öffnet sich ein kleines Fenster, in dem verschiedene Ausgabegeräte zu sehen sind. Machen Sie einen Rechtsklick auf das Gerät, das Sie verwenden möchten und klicken Sie dann auf \"Als Standardkommunikationsgerät auswählen\". Nun sollte das korrekte Gerät für die Ausgabe verwendet werden.' : 'Open the sound settings (it is best to enter it directly into the search). Scroll down until you get to the Related Settings heading. Below that click on \"Sound Control Panel\". A small window opens in which various output devices can be seen. Right-click the device you want to use, then click \"Set as default communication device\". The correct device should now be used for the output.',\r\n 'Ich höre Echogeräusche' : 'I hear echo noises',\r\n 'Ein Headset verwenden' : 'Use a headset',\r\n 'Wenn Sie ein Notebook oder ein ähnliches Gerät verwenden, kann es sein, dass der Lautsprecher und das Mikrofon zu nah beieinander sind und der Ton aus dem Lautsprecher direkt vom Mikrofon aufgenommen wird. Dadurch hört Ihr Gegenüber die eigene Stimme, was es schwieriger macht, sich auf das Gespräch zu konzentrieren. Wenn dies der Fall ist, schießen Sie bitte ein Headset an.' : 'If you are using a notebook or similar device, the speaker and microphone may be too close together and the sound from the speaker may be picked up directly by the microphone. This allows the other person to hear their own voice, which makes it more difficult to concentrate on the conversation. If so, plug in a headset.',\r\n 'Nur ein Mikrofon und einen Lautsprecher pro Raum verwenden' : 'Use only one microphone and speaker per room',\r\n 'Wenn Sie mit weiteren Personen an einer Tour teilnehmen und sich diese Personen im selben Raum befinden wie Sie, kann es sein, dass das ihre Stimme mehrmals aufgenommen wird und Echo Geräusche entstehen. Achten Sie daher darauf, dass nur ein Microfon aktiviert ist oder die Personen weitgenug auseinander sitzen.' : 'If you take part in a tour with other people and these people are in the same room as you, their voices may be recorded several times and echo noises may arise. Make sure that only one microphone is activated or that people are sitting far enough apart.',\r\n 'Meine Kamera/Mikrofon wird nicht erkannt' : 'My camera / microphone is not recognized',\r\n 'Erlauben Sie den Zugriff' : 'Allow access',\r\n 'Beim Öffnen der Mikrofon- und Kameraeinstellungen fragt der Browser nach dem Zugriff auf Ihre Mikrofone und Kameras. Ohne Ihre Erlaubnis kann die Anwendung ihre Kamera und Mikrofon nicht nutzen. Überprüfen Sie die Mikrofon- und Kameraeinstellungen ihres Browsers, falls Sie nicht nach dem Zugriff gefragt werden.' : \"When opening the microphone and camera settings, the browser asks for access to your microphones and cameras. The application cannot use its camera and microphone without your permission. Check your browser's microphone and camera settings if you are not asked for access.\",\r\n 'Ändern Sie die Datenschutzeinstellungen' : 'Change privacy settings',\r\n 'Ihr Betriebssystem kann dem Browser den generellen Zugriff auf die Kamera und Mikrofon blockieren. Überprüfen sie die Datenschutzeinstellungen ihres Betriebssystemes, und erlauben Sie ihrem Browser ggf. Zugriff!': 'Your operating system can block general access to the camera and microphone from the browser. Check the data protection settings of your operating system and, if necessary, allow your browser access!',\r\n 'Kamera/Mikrofon wird bereits genutzt' : 'The camera / microphone is already in use',\r\n 'Es könnte sein, dass andere Anwendungen wie Microsoft Teams oder ein anderer geöffneter Browser bereits Kamera oder Mikrofon nutzen. Stellen Sie sicher, das ihre Kamera nicht von anderen Anwendungen genutzt wird und schließen Sie diese Anwendungen gegebenenfalls.' : 'It could be that other applications such as Microsoft Teams or another open browser are already using the camera or microphone. Make sure that your camera is not being used by other applications and close these applications if necessary.',\r\n 'Beim Audiotest wird meine Audio nicht übertragen' : 'My audio is not transmitted during the audio test',\r\n 'Die Firewall-Einstellungen anpassen' : 'Adjust the firewall settings',\r\n 'Zur Kommunikation mit dem Server ist es notwendig, dass Sie den TCP Port 443 freigeben. Wenn Sie eine Whitelist für Domains pflegen, ist es außerdem wichtig, dass Sie die Domains \"*.tokbox.com\" und \"*.opentok.com\" (ohne Anführungszeichen) in die Liste einfügen.' : 'To communicate with the server it is necessary that you enable the TCP port 443. If you maintain a whitelist for domains, it is also important that you include the domains \"* .tokbox.com\" and \"* .opentok.com\" (without quotation marks) in the list.',\r\n 'Die Proxy-Einstellungen anpassen' : 'Adjust the proxy settings',\r\n 'Am besten funktioniert der Videochat ohne einen Proxy. Wenn Sie ohne Proxy keinen Zugang zum Internet haben, sollten Sie einen transparenten Proxy verwenden oder den Proxy im Browser für HTTPS-Verbindungen konfigurieren.' : 'The video chat works best without a proxy. If you cannot access the Internet without a proxy, you should use a transparent proxy or configure the proxy in the browser for HTTPS connections',\r\n 'Sonstiges' : 'Other',\r\n 'Unterstützte Browser' : 'Supported browsers',\r\n 'Am besten wird die Anwendung von den Browsern Firefox, Chrome, Safari, Opera und Edge unterstützt. Achten Sie bitte darauf, dass Sie die jeweils aktuelle Version installiert haben und aktualisieren Sie diese ggf. manuel, da die Browser dies nicht immer automatisch tun.' : 'The application is best supported by the browsers Firefox, Chrome, Safari, Opera and Edge. Please make sure that you have installed the latest version and update it manually if necessary, as the browser does not always do this automatically.',\r\n \r\n // Navigation\r\n 'Sprachauswahl' : 'Language selection',\r\n 'Vollbildmodus starten' : 'Start Fullscreen Mode',\r\n 'Tutorial öffnen' : 'Open Tutorial',\r\n 'Kontaktseite öffnen' : 'Open Contact Page',\r\n 'Venjakob Success Stories ansehen' : 'Open Venjakob Success Stories',\r\n 'Venjakob Praxisvorträge ansehen' : 'Open Venjakob Practical Lectures',\r\n 'Venjakob Betriebsrundgang ansehen' : 'Watch Venjakob Company Tour',\r\n 'Virtual Showroom \"Akkustikdeckenplatten\" betreten' : 'Enter Virtual Showroom \"Akkustikdeckenplatten\"',\r\n 'Virtual Showroom \"Fenstereinzelteilbeschichtung\" betreten' : 'Enter Virtual Showroom \"Fenstereinzelteilbeschichtung\"',\r\n 'Virtual Showroom \"Flexible Beschichtungen\" betreten' : 'Enter Virtual Showroom \"Flexible Beschichtungen\"',\r\n 'Virtual Showroom \"Hochleistungsbeschichtung\" betreten' : 'Enter Virtual Showroom \"Hochleistungsbeschichtung\"',\r\n 'Einen Präsenz-Termin per E-Mail vereinbaren' : 'Make a presence appointment by e-mail',\r\n 'Einen Online-Termin per E-Mail vereinbaren' : 'Make an online appointment by e-mail',\r\n 'Eingang betreten' : 'Enter Entrance',\r\n ' Videowall betreten' : 'Enter Videowall',\r\n\r\n // Tutorial\r\n 'Den Showroom entdecken' : 'Discover the Showroom',\r\n 'Ziehen Sie nach links/rechts, um den Raum zu erkunden.' : 'Drag left/right to explore the room.',\r\n 'Hilfe' : 'Help',\r\n 'Durch klicken auf dieses Icon erhalten Sie erneut diese Hilfestellung aller Funktion.' : 'By clicking on this icon you will get again this help of all function.',\r\n 'Vollbildmodus' : 'Fullscreen Mode',\r\n 'Durch klicken auf dieses Icon wird der gesamte Showroom im Vollbildmodus dargestellt.' : 'Clicking on this icon will display the entire showroom in full screen mode.',\r\n\r\n // WebsiteDialogue\r\n 'Venjakob Success Stories' : 'Venjakob Success Stories',\r\n 'Venjakob Praxisvorträge' : 'Venjakob Practical Lectures',\r\n 'Venjakob Registrierung' : 'Venjakob Register',\r\n 'Venjakob Betriebsrundgang' : 'Venjakob Company Tour',\r\n 'Virtual Showroom \"Akkustikdeckenplatten\"' : 'Virtual Showroom \"Akkustikdeckenplatten\"',\r\n 'Virtual Showroom \"Fenstereinzelteilbeschichtung\"' : 'Virtual Showroom \"Fenstereinzelteilbeschichtung\"',\r\n 'Virtual Showroom \"Flexible Beschichtungen\"' : 'Virtual Showroom \"Flexible Beschichtungen\"',\r\n 'Virtual Showroom \"Hochleistungsbeschichtung\"' : 'Virtual Showroom \"Hochleistungsbeschichtung\"',\r\n\r\n 'GILJE TRE' : 'GILJE TRE',\r\n 'RWD SCHLATTER AG' : 'RWD SCHLATTER AG',\r\n 'JELD-WEN' : 'JELD-WEN',\r\n 'GARANT TÜREN UND ZARGEN GMBH' : 'GARANT TÜREN UND ZARGEN GMBH',\r\n 'ETS TREPPENBAU UND SCHREINEREI GMBH' : 'ETS TREPPENBAU UND SCHREINEREI GMBH',\r\n 'NOLTE KÜCHEN' : 'NOLTE KÜCHEN',\r\n \r\n 'Vollautomatische Lackierung von Fenstereinzelteilen ermöglicht schnelle und flexible Produktion' : 'Fully automated painting of individual window parts enables fast and flexible production',\r\n 'Flexible Oberflächenbeschichtung im Chargenbetrieb' : 'Flexible surface coating in batch operation',\r\n 'Flexible Kantenspritzlackieranlage für präzise und umweltfreundliche Türkantenlackierung' : 'Flexible edge spray painting system for precise and environmentally friendly door edge painting',\r\n 'Ressourcenschonende Türenbeschichtungslinie' : 'Resource-saving door coating line',\r\n 'Automatische Treppen-Beschichtungsanlage' : 'Automatic stair coating machine',\r\n 'Spritzlackierlinie zur Beschichtung und Trocknung matter Oberflächen' : 'Spray painting line for coating and drying matt surfaces',\r\n\r\n 'Betriebsführung' : 'Company Tour',\r\n 'Objekttüren nach Maß' : 'Customized object doors',\r\n 'Automatisierungslösung in der Fördertechnik' : 'Automation solution in conveyor technology',\r\n 'Individuelle Beschichtungsmethoden für Möbel im Spritzverfahren' : 'Individual coating methods for furniture in the spraying process',\r\n 'Excimertechnologie im Spritzverfahren' : 'Excimer technology in the spraying process',\r\n 'Der Einstieg in die automatisierte Spritzlackierung' : 'The entry into automated spray painting',\r\n\r\n 'Video ansehen ➝' : 'Watch Video ➝',\r\n 'Dokument ansehen ➝' : 'Open Document ➝',\r\n \r\n // Success Stories\r\n 'deutsch1.pdf' : 'english1.pdf',\r\n 'deutsch2.pdf' : 'english2.pdf',\r\n 'deutsch3.pdf' : 'english3.pdf',\r\n 'deutsch4.pdf' : 'english5.pdf',\r\n 'deutsch5.pdf' : 'english4.pdf',\r\n 'nolteKuechen.pdf' : 'Success_Story_Nolte_EN.pdf',\r\n\r\n // Praxisvorträge\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Betriebsführung - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Betriebsführung - Englisch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Stender - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Stender - Englisch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Runschke - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Runschke - Englisch (live) (H.264 1080p25 @ 10.000 kbit_s).mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Feldmann - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Feldmann - Englisch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY PERFECT - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY PERFECT - Englisch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY ONE - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY ONE - Englisch.mp4',\r\n \r\n // Videowall\r\n '456265' : '456265', // Ven Spray Smart\r\n '456284' : '456284', // Ven spray Perfect\r\n '456303' : '456303', // Ven Spray Comfort\r\n\r\n '456341' : '456550', // VSO Produkteinführung\r\n '456360' : '456569', // VSO Aufbau\r\n '456379' : '456588', // VSO Inbetriebnahme\r\n '456398' : '456607', // VSO Rezepte\r\n '456417' : '456626', // VSO Reinigung\r\n\r\n \"456436\" : \"456436\", // Hochleistungsbeschichtung im Durchlauf\r\n \"456455\" : \"456455\", // Höchst Flexible Beschichtungslinie\r\n \"456474\" : \"456474\" , // Automatische Beschichtungslinie für die Möbelindustrie\r\n \"456493\" : \"456493\", // Fenster Einzelteil Lackierung\r\n \"456512\" : \"456512\", // VenDryVarioTime\r\n \"456531\" : \"456531\", // Kleberapplikation\r\n\r\n \"Ven Spray Smart\" : 'VEN SPRAY SMART',\r\n \"Ven spray Perfect\" : 'VEN SPRAY PERFECT',\r\n \"Ven Spray Comfort\" : 'VEN SPRAY COMFORT',\r\n\r\n \"Ven Spray One Produkteinführung\" : 'VEN SPRAY ONE Product Launch',\r\n \"Ven Spray One Aufbau\" : 'VEN SPRAY ONE\\nMaschine installation',\r\n \"Ven Spray One Inbetriebnahme\" : 'VEN SPRAY ONE Start-Up',\r\n \"Ven Spray One Rezepte\" : 'VEN SPRAY ONE Creating a Recipe',\r\n \"Ven Spray One Reinigung\" : 'VEN SPRAY ONE Cleaning', \r\n\r\n \"Hochleistungsbeschichtung\\nim Durchlauf\" : 'High performance coating\\nin throughfeed mode',\r\n \"Höchst Flexible\\nBeschichtungslinie\" : 'Highly flexible coating line',\r\n \"Automatische Beschichtungslinie\\nfür die Möbelindustrie\" : 'Fully automated finishing line\\nfor furniture production',\r\n \"Fenster Einzelteil\\nLackierung\" : 'Window coating\\n(separate components)',\r\n \"Ven Dry Vario Time\" : 'VEN DRY VARIO TIME',\r\n \"Kleber-Applikationslinie\" : 'Glue application line',\r\n\r\n // E-Mail\r\n \"Tec-Together: Präsenz-Termin vereinbaren\" : \"Tec-Together: Arrange presence appointment\",\r\n \"Tec-Together: Online-Termin vereinbaren\" : \"Tec-Together: Make an online appointment\",\r\n\r\n \"Liebes Venjakob Team,\\r\\n\\r\\ngerne komme ich nach Rheda-Wiedenbrück, um Neues zu sehen und ins Gespräch zu kommen.\\r\\n\\r\\nMein Wunsch-Tag: __________\\r\\n\\r\\nMein Wunsch-Zeitraum:\\r\\n 〇 Vormittags\\r\\n 〇 Nachmittags\\r\\n\\r\\nMeine Branche:\\r\\n 〇 Holz/Möbel\\r\\n 〇 Baustoffindustrie\\r\\n 〇 Bauelemente\\r\\n 〇 Glas\\r\\n 〇 Kunststoff\\r\\n 〇 Metall\\r\\n\" :\r\n \"Dear Venjakob Team,\\r\\n\\r\\nI like to come to Rheda-Wiedenbrück to see new things and to get into conversation.\\r\\n\\r\\nMy prefered day: __________\\r\\n\\r\\nMy prefered Time period:\\r\\n 〇 Morning\\r\\n 〇 Afternoon\\r\\n\\r\\nMy industry:\\r\\n 〇 Wood/Furniture\\r\\n 〇 Building materials industry\\r\\n 〇 Components\\r\\n 〇 Glass\\r\\n 〇 Plastic\\r\\n 〇 Metal\\r\\n\",\r\n\r\n \"Liebes Venjakob Team,\\r\\n\\r\\nein Termin vor Ort ist leider nicht möglich. Gerne würde ich Sie jedoch online treffen, um Neues zu sehen und ins Gespräch zu kommen.\\r\\nMein Wunsch-Termin: __________\\r\\n\\r\\nMeine Branche:\\r\\n 〇 Holz/Möbel\\r\\n 〇 Baustoffindustrie\\r\\n 〇 Bauelemente\\r\\n 〇 Glas\\r\\n 〇 Kunststoff\\r\\n 〇 Metall\\r\\n\" : \r\n \"Dear Venjakob Team,\\r\\n\\r\\nunfortunately an appointment on site is not possible. However, I would be happy to meet you online to see new things and engage in conversation.\\r\\n\\r\\nMy prefered day: __________\\r\\n\\r\\nMy industry:\\r\\n 〇 Wood/Furniture\\r\\n 〇 Building materials industry\\r\\n 〇 Components\\r\\n 〇 Glass\\r\\n 〇 Plastic\\r\\n 〇 Metal\\r\\n\",\r\n\r\n // Signs\r\n 'Videowall' : 'Videowall',\r\n 'Informieren Sie sich anhand von Videos und Animationen über unsere Anlagenlösungen.' : 'Find out more about our plant solutions with the help of videos and animations.',\r\n 'Besuchen Sie uns in Rheda-Wiedenbrück im Rahmen der TecTogether und nennen uns hier einfach Ihren Wunsch-Tag, damit wir besser planen können.' : 'Visit us in Rheda-Wiedenbrück as part of TecTogether and simply tell us your desired day here so that we can plan better.',\r\n 'Sollten Sie verhindert sein, freuen wir uns, Sie zu einem anderen Zeitpunkt online begrüßen zu dürfen.' : 'If you are unable to attend, we will be happy to welcome you online at another time.',\r\n 'Ihre Möglichkeiten' : 'Your possibilities',\r\n 'Text-Praxis' : 'Our offer for you.\\nRequest per click.',\r\n\r\n // Empfangsvideo\r\n \"457319\" : \"457300\",\r\n },\r\n 'de': {\r\n 'Zurzeit in diesem Raum:' : 'Zurzeit in diesem Raum:', //SituationCard\r\n 'Ein Moderator hat die Session für Sie geschlossen!' : \"Ein Moderator hat die Session für Sie geschlossen!\", //ForceDisconnect\r\n 'Auf einen Moderator warten...' : 'Auf einen Moderator warten...', // WaitForModeratorDialogue\r\n\r\n // LoginDialogue\r\n 'Anzeigename' : 'Anzeigename',\r\n 'Email' : 'Email',\r\n 'Passwort' : 'Passwort',\r\n 'Gast': 'Gast', \r\n 'Moderator' : 'Moderator', \r\n 'Abbrechen' : 'Abbrechen', \r\n 'Weiter' : 'Weiter', \r\n 'Die Email und/oder das Passwort ist falsch.' : 'Die Email und/oder das Passwort ist falsch.',\r\n\r\n // AudioVideoDialogue\r\n 'Mikrofon- und Kameraeinstellungen' : 'Mikrofon- und Kameraeinstellungen',\r\n 'Audiotest' : 'Audiotest',\r\n 'Browser-Zugriff auf Ihre Kamera wurde nicht erlaubt. Klicken Sie' : 'Browser-Zugriff auf Ihre Kamera wurde nicht erlaubt. Klicken Sie',\r\n 'hier' : 'hier',\r\n ', um nach dem Zugriff gefragt zu werden.' : ', um nach dem Zugriff gefragt zu werden.',\r\n 'Es wurde keine Kamera erkannt': 'Es wurde keine Kamera erkannt',\r\n \"Kamera\" : \"Kamera\",\r\n 'Browser-Zugriff auf Ihr Mikrofon wurde nicht erlaubt. Klicken Sie' : 'Browser-Zugriff auf Ihr Mikrofon wurde nicht erlaubt. Klicken Sie',\r\n 'Es wurde keine Mikrofon erkannt': 'Es wurde keine Mikrofon erkannt',\r\n 'Mikrofon' : \"Mikrofon\",\r\n 'Zurück' : 'Zurück', \r\n 'Jetzt teilnehmen': \"Jetzt teilnehmen\",\r\n 'Problembehandlung' : 'Problembehandlung',\r\n 'Verbindungstest' : 'Verbindungstest',\r\n\r\n // Connection Test\r\n 'Ihre Verbindung wird überprüft' : 'Ihre Verbindung wird überprüft',\r\n 'Der Verbindungsaufbau war erfolgreich' : 'Der Verbindungsaufbau war erfolgreich',\r\n 'Der Verbindungsaufbau war nicht erfolgreich' : 'Der Verbindungsaufbau war nicht erfolgreich',\r\n 'Folgende Fehler sind aufgetreten:': 'Folgende Fehler sind aufgetreten:',\r\n 'Ihre Verbindungsqualität wird überprüft' : \"Ihre Verbindungsqualität wird überprüft\",\r\n 'Die Überprüfung ihrer Verbindungsqualität war erfolgreich' : 'Die Überprüfung ihrer Verbindungsqualität war erfolgreich',\r\n 'Ergebniss des Tests:': 'Ergebniss des Tests:',\r\n 'Fehler bei der Video Übertragung:' : \"Fehler bei der Video Übertragung:\",\r\n 'Fehler bei der Audio Übertragung:' : \"Fehler bei der Audio Übertragung:\",\r\n 'Folgender Fehler ist aufgetreten:' : \"Folgender Fehler ist aufgetreten:\",\r\n 'Der Qualitäts Test konnte nicht durchgeführt werden!': 'Der Qualitäts Test konnte nicht durchgeführt werden!',\r\n 'Test Wiederholen' :'Test Wiederholen',\r\n 'Qualität' : 'Qualität',\r\n 'Fertig' : 'Fertig',\r\n\r\n // Bugreport?\r\n 'Fehlerbericht senden' : 'Fehlerbericht senden',\r\n 'Durchschnittliche Bitrate' : 'Durchschnittliche Bitrate',\r\n 'Durchschnittliche Framerate' : 'Durchschnittliche Framerate',\r\n 'Verlustrate der Pakete' : 'Verlustrate der Pakete',\r\n 'Aufgetretene Fehler' : 'Aufgetretene Fehler',\r\n 'Die Videofunktion wird nicht unterstützt.' : 'Die Videofunktion wird nicht unterstützt.',\r\n 'Die Audiofunktion wird nicht unterstützt.' : 'Die Audiofunktion wird nicht unterstützt.',\r\n\r\n // ScreenSharingPanel\r\n 'Screen Sharing Fenster anzeigen' : 'Screen Sharing Fenster anzeigen',\r\n 'Screen Sharing Fenster ausblenden' : 'Screen Sharing Fenster ausblenden',\r\n \r\n //ChatTab\r\n 'Nachrichten': 'Nachrichten',\r\n 'Ihre Nachricht eingeben...' : 'Ihre Nachricht eingeben...',\r\n \r\n // ParticipantTab\r\n 'Teilnehmende suchen': 'Teilnehmende suchen', \r\n 'Zu Raum des Teilnehmer gehen' : \"Zu Raum des Teilnehmer gehen\",\r\n 'Teilnehmer stummschalten' : 'Teilnehmer stummschalten',\r\n 'Teilnehmer Entfernen' : \"Teilnehmer Entfernen\",\r\n 'Video des Teilnehmer ausstellen' : \"Video des Teilnehmer ausstellen\",\r\n 'Teilnehmende' : 'Teilnehmende',\r\n\r\n // ModeratorMenue\r\n 'Bildschirm teilen' : 'Bildschirm teilen',\r\n 'Bildschirm teilen abbrechen' : 'Bildschirm teilen abbrechen',\r\n 'Alle Teilnehmer stummschalten' : 'Alle Teilnehmer stummschalten',\r\n \"Geführter Modus aktivieren\" : 'Geführter Modus aktivieren',\r\n \"Geführter Modus deaktivieren\" : 'Geführter Modus deaktivieren',\r\n \"Videos aller Teilnehmer ausstellen\" : \"Videos aller Teilnehmer ausstellen\",\r\n \"Alle Teilnehmer Entfernen\" : 'Alle Teilnehmer Entfernen',\r\n\r\n // AudioTest\r\n 'Der Audiotest simuliert eine Verbindung zum Server. Sie können ihre Audioübertragung dann abhören, um sie zu überprüfen.' : 'Der Audiotest simuliert eine Verbindung zum Server. Sie können ihre Audioübertragung dann abhören, um sie zu überprüfen.',\r\n 'Zurück' : 'Zurück',\r\n 'Wiederholen' : \"Wiederholen\",\r\n 'Verbindung zum Server fehlgeschlagen!': \"Verbindung zum Server fehlgeschlagen!\",\r\n\r\n //ShareDialog\r\n 'Raum teilen': 'Raum teilen',\r\n 'Tour teilen': 'Tour teilen',\r\n\r\n // TroubleShooting\r\n 'Ich höre niemanden': \"Ich höre niemanden\",\r\n 'Das Standardkommunikationsgerät umstellen (Windows 10)': 'Das Standardkommunikationsgerät umstellen (Windows 10)',\r\n 'Öffnen Sie die Soundeinstellungen (am besten direkt in die Suche eingeben). Scrollen Sie nach unten, bis Sie zur Überschrift \"Verwandte Einstellungen\" gelangen. Darunter klicken Sie auf \"Sound-Systemsteuerung\". Es öffnet sich ein kleines Fenster, in dem verschiedene Ausgabegeräte zu sehen sind. Machen Sie einen Rechtsklick auf das Gerät, das Sie verwenden möchten und klicken Sie dann auf \"Als Standardkommunikationsgerät auswählen\". Nun sollte das korrekte Gerät für die Ausgabe verwendet werden.' : 'Öffnen Sie die Soundeinstellungen (am besten direkt in die Suche eingeben). Scrollen Sie nach unten, bis Sie zur Überschrift \"Verwandte Einstellungen\" gelangen. Darunter klicken Sie auf \"Sound-Systemsteuerung\". Es öffnet sich ein kleines Fenster, in dem verschiedene Ausgabegeräte zu sehen sind. Machen Sie einen Rechtsklick auf das Gerät, das Sie verwenden möchten und klicken Sie dann auf \"Als Standardkommunikationsgerät auswählen\". Nun sollte das korrekte Gerät für die Ausgabe verwendet werden.',\r\n 'Ich höre Echogeräusche' : 'Ich höre Echogeräusche',\r\n 'Ein Headset verwenden' : 'Ein Headset verwenden',\r\n 'Wenn Sie ein Notebook oder ein ähnliches Gerät verwenden, kann es sein, dass der Lautsprecher und das Mikrofon zu nah beieinander sind und der Ton aus dem Lautsprecher direkt vom Mikrofon aufgenommen wird. Dadurch hört Ihr Gegenüber die eigene Stimme, was es schwieriger macht, sich auf das Gespräch zu konzentrieren. Wenn dies der Fall ist, schießen Sie bitte ein Headset an.' : 'Wenn Sie ein Notebook oder ein ähnliches Gerät verwenden, kann es sein, dass der Lautsprecher und das Mikrofon zu nah beieinander sind und der Ton aus dem Lautsprecher direkt vom Mikrofon aufgenommen wird. Dadurch hört Ihr Gegenüber die eigene Stimme, was es schwieriger macht, sich auf das Gespräch zu konzentrieren. Wenn dies der Fall ist, schießen Sie bitte ein Headset an.',\r\n 'Nur ein Mikrofon und einen Lautsprecher pro Raum verwenden' : 'Nur ein Mikrofon und einen Lautsprecher pro Raum verwenden',\r\n 'Wenn Sie mit weiteren Personen an einer Tour teilnehmen und sich diese Personen im selben Raum befinden wie Sie, kann es sein, dass das ihre Stimme mehrmals aufgenommen wird und Echo Geräusche entstehen. Achten Sie daher darauf, dass nur ein Microfon aktiviert ist oder die Personen weitgenug auseinander sitzen.' : 'Wenn Sie mit weiteren Personen an einer Tour teilnehmen und sich diese Personen im selben Raum befinden wie Sie, kann es sein, dass das ihre Stimme mehrmals aufgenommen wird und Echo Geräusche entstehen. Achten Sie daher darauf, dass nur ein Microfon aktiviert ist oder die Personen weitgenug auseinander sitzen.',\r\n 'Meine Kamera/Mikrofon wird nicht erkannt' : 'Meine Kamera/Mikrofon wird nicht erkannt',\r\n 'Erlauben Sie den Zugriff' : 'Erlauben Sie den Zugriff',\r\n 'Beim Öffnen der Mikrofon- und Kameraeinstellungen fragt der Browser nach dem Zugriff auf Ihre Mikrofone und Kameras. Ohne Ihre Erlaubnis kann die Anwendung ihre Kamera und Mikrofon nicht nutzen. Überprüfen Sie die Mikrofon- und Kameraeinstellungen ihres Browsers, falls Sie nicht nach dem Zugriff gefragt werden.' : \"Beim Öffnen der Mikrofon- und Kameraeinstellungen fragt der Browser nach dem Zugriff auf Ihre Mikrofone und Kameras. Ohne Ihre Erlaubnis kann die Anwendung ihre Kamera und Mikrofon nicht nutzen. Überprüfen Sie die Mikrofon- und Kameraeinstellungen ihres Browsers, falls Sie nicht nach dem Zugriff gefragt werden.\",\r\n 'Ändern Sie die Datenschutzeinstellungen' : 'Ändern Sie die Datenschutzeinstellungen',\r\n 'Ihr Betriebssystem kann dem Browser den generellen Zugriff auf die Kamera und Mikrofon blockieren. Überprüfen sie die Datenschutzeinstellungen ihres Betriebssystemes, und erlauben Sie ihrem Browser ggf. Zugriff!': 'Ihr Betriebssystem kann dem Browser den generellen Zugriff auf die Kamera und Mikrofon blockieren. Überprüfen sie die Datenschutzeinstellungen ihres Betriebssystemes, und erlauben Sie ihrem Browser ggf. Zugriff!',\r\n 'Kamera/Mikrofon wird bereits genutzt' : 'Kamera/Mikrofon wird bereits genutzt',\r\n 'Es könnte sein, dass andere Anwendungen wie Microsoft Teams oder ein anderer geöffneter Browser bereits Kamera oder Mikrofon nutzen. Stellen Sie sicher, das ihre Kamera nicht von anderen Anwendungen genutzt wird und schließen Sie diese Anwendungen gegebenenfalls.' : 'Es könnte sein, dass andere Anwendungen wie Microsoft Teams oder ein anderer geöffneter Browser bereits Kamera oder Mikrofon nutzen. Stellen Sie sicher, das ihre Kamera nicht von anderen Anwendungen genutzt wird und schließen Sie diese Anwendungen gegebenenfalls.',\r\n 'Beim Audiotest wird meine Audio nicht übertragen' : 'Beim Audiotest wird meine Audio nicht übertragen',\r\n 'Die Firewall-Einstellungen anpassen' : 'Die Firewall-Einstellungen anpassen',\r\n 'Zur Kommunikation mit dem Server ist es notwendig, dass Sie den TCP Port 443 freigeben. Wenn Sie eine Whitelist für Domains pflegen, ist es außerdem wichtig, dass Sie die Domains \"*.tokbox.com\" und \"*.opentok.com\" (ohne Anführungszeichen) in die Liste einfügen.' : 'Zur Kommunikation mit dem Server ist es notwendig, dass Sie den TCP Port 443 freigeben. Wenn Sie eine Whitelist für Domains pflegen, ist es außerdem wichtig, dass Sie die Domains \"*.tokbox.com\" und \"*.opentok.com\" (ohne Anführungszeichen) in die Liste einfügen.',\r\n 'Die Proxy-Einstellungen anpassen' : 'Die Proxy-Einstellungen anpassen',\r\n 'Am besten funktioniert der Videochat ohne einen Proxy. Wenn Sie ohne Proxy keinen Zugang zum Internet haben, sollten Sie einen transparenten Proxy verwenden oder den Proxy im Browser für HTTPS-Verbindungen konfigurieren.' : 'Am besten funktioniert der Videochat ohne einen Proxy. Wenn Sie ohne Proxy keinen Zugang zum Internet haben, sollten Sie einen transparenten Proxy verwenden oder den Proxy im Browser für HTTPS-Verbindungen konfigurieren.',\r\n 'Sonstiges' : 'Sonstiges',\r\n 'Unterstützte Browser' : 'Unterstützte Browser',\r\n 'Am besten wird die Anwendung von den Browsern Firefox, Chrome, Safari, Opera und Edge unterstützt. Achten Sie bitte darauf, dass Sie die jeweils aktuelle Version installiert haben und aktualisieren Sie diese ggf. manuel, da die Browser dies nicht immer automatisch tun.' : 'Am besten wird die Anwendung von den Browsern Firefox, Chrome, Safari, Opera und Edge unterstützt. Achten Sie bitte darauf, dass Sie die jeweils aktuelle Version installiert haben und aktualisieren Sie diese ggf. manuel, da die Browser dies nicht immer automatisch tun.',\r\n \r\n // Navigation\r\n 'Sprachauswahl' : 'Sprachauswahl',\r\n 'Vollbildmodus starten' : 'Vollbildmodus starten',\r\n 'Tutorial öffnen' : 'Tutorial öffnen',\r\n 'Kontaktseite öffnen' : 'Kontaktseite öffnen',\r\n 'Venjakob Success Stories ansehen' : 'Venjakob Success Stories ansehen',\r\n 'Venjakob Praxisvorträge ansehen' : 'Venjakob Praxisvorträge ansehen',\r\n 'Venjakob Betriebsrundgang ansehen' : 'Venjakob Betriebsrundgang ansehen',\r\n 'Virtual Showroom \"Akkustikdeckenplatten\" betreten' : 'Virtual Showroom \"Akkustikdeckenplatten\" betreten',\r\n 'Virtual Showroom \"Fenstereinzelteilbeschichtung\" betreten' : 'Virtual Showroom \"Fenstereinzelteilbeschichtung\" betreten',\r\n 'Virtual Showroom \"Flexible Beschichtungen\" betreten' : 'Virtual Showroom \"Flexible Beschichtungen\" betreten',\r\n 'Virtual Showroom \"Hochleistungsbeschichtung\" betreten' : 'Virtual Showroom \"Hochleistungsbeschichtung\" betreten',\r\n 'Einen Präsenz-Termin per E-Mail vereinbaren' : 'Einen Präsenz-Termin per E-Mail vereinbaren',\r\n 'Einen Online-Termin per E-Mail vereinbaren' : 'Einen Online-Termin per E-Mail vereinbaren',\r\n 'Eingang betreten' : 'Eingang betreten',\r\n ' Videowall betreten' : 'Videowall betreten',\r\n\r\n // Tutorial\r\n 'Den Showroom entdecken' : 'Den Showroom entdecken',\r\n 'Ziehen Sie nach links/rechts, um den Raum zu erkunden.' : 'Ziehen Sie nach links/rechts, um den Raum zu erkunden.',\r\n 'Hilfe' : 'Hilfe',\r\n 'Durch klicken auf dieses Icon erhalten Sie erneut diese Hilfestellung aller Funktion.' : 'Durch klicken auf dieses Icon erhalten Sie erneut diese Hilfestellung aller Funktion.',\r\n 'Vollbildmodus' : 'Vollbildmodus',\r\n 'Durch klicken auf dieses Icon wird der gesamte Showroom im Vollbildmodus dargestellt.' : 'Durch klicken auf dieses Icon wird der gesamte Showroom im Vollbildmodus dargestellt.',\r\n\r\n // Websitedialogue\r\n 'Venjakob Success Stories' : 'Venjakob Success Stories',\r\n 'Venjakob Praxisvorträge' : 'Venjakob Praxisvorträge',\r\n 'Venjakob Registrierung' : 'Venjakob Registrierung',\r\n 'Venjakob Betriebsrundgang' : 'Venjakob Betriebsrundgang',\r\n 'Virtual Showroom \"Akkustikdeckenplatten\"' : 'Virtual Showroom \"Akkustikdeckenplatten\"',\r\n 'Virtual Showroom \"Fenstereinzelteilbeschichtung\"' : 'Virtual Showroom \"Fenstereinzelteilbeschichtung\"',\r\n 'Virtual Showroom \"Flexible Beschichtungen\"' : 'Virtual Showroom \"Flexible Beschichtungen\"',\r\n 'Virtual Showroom \"Hochleistungsbeschichtung\"' : 'Virtual Showroom \"Hochleistungsbeschichtung\"',\r\n\r\n 'GILJE TRE' : 'GILJE TRE',\r\n 'RWD SCHLATTER AG' : 'RWD SCHLATTER AG',\r\n 'JELD-WEN' : 'JELD-WEN',\r\n 'GARANT TÜREN UND ZARGEN GMBH' : 'GARANT TÜREN UND ZARGEN GMBH',\r\n 'ETS TREPPENBAU UND SCHREINEREI GMBH' : 'ETS TREPPENBAU UND SCHREINEREI GMBH',\r\n 'NOLTE KÜCHEN' : 'NOLTE KÜCHEN',\r\n \r\n 'Vollautomatische Lackierung von Fenstereinzelteilen ermöglicht schnelle und flexible Produktion' : 'Vollautomatische Lackierung von Fenstereinzelteilen ermöglicht schnelle und flexible Produktion',\r\n 'Flexible Oberflächenbeschichtung im Chargenbetrieb' : 'Flexible Oberflächenbeschichtung im Chargenbetrieb',\r\n 'Flexible Kantenspritzlackieranlage für präzise und umweltfreundliche Türkantenlackierung' : 'Flexible Kantenspritzlackieranlage für präzise und umweltfreundliche Türkantenlackierung',\r\n 'Ressourcenschonende Türenbeschichtungslinie' : 'Ressourcenschonende Türenbeschichtungslinie',\r\n 'Automatische Treppen-Beschichtungsanlage' : 'Automatische Treppen-Beschichtungsanlage',\r\n 'Spritzlackierlinie zur Beschichtung und Trocknung matter Oberflächen' : 'Spritzlackierlinie zur Beschichtung und Trocknung matter Oberflächen',\r\n\r\n 'Betriebsführung' : 'Betriebsführung',\r\n 'Objekttüren nach Maß' : 'Objekttüren nach Maß',\r\n 'Automatisierungslösung in der Fördertechnik' : 'Automatisierungslösung in der Fördertechnik',\r\n 'Individuelle Beschichtungsmethoden für Möbel im Spritzverfahren' : 'Individuelle Beschichtungsmethoden für Möbel im Spritzverfahren',\r\n 'Excimertechnologie im Spritzverfahren' : 'Excimertechnologie im Spritzverfahren',\r\n 'Der Einstieg in die automatisierte Spritzlackierung' : 'Der Einstieg in die automatisierte Spritzlackierung',\r\n\r\n 'Video ansehen ➝' : 'Video ansehen ➝',\r\n 'Dokument ansehen ➝' : 'Dokument ansehen ➝',\r\n\r\n // Success Stories\r\n 'deutsch1.pdf' : 'deutsch1.pdf',\r\n 'deutsch2.pdf' : 'deutsch2.pdf',\r\n 'deutsch3.pdf' : 'deutsch3.pdf',\r\n 'deutsch4.pdf' : 'deutsch4.pdf',\r\n 'deutsch5.pdf' : 'deutsch5.pdf',\r\n 'nolteKuechen.pdf' : 'Success_Story_Nolte_DE.pdf',\r\n \r\n // Praxisvorträge\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Betriebsführung - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Betriebsführung - Deutsch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Stender - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Stender - Deutsch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Runschke - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Runschke - Deutsch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Feldmann - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Vortrag Feldmann - Deutsch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY PERFECT - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY PERFECT - Deutsch.mp4',\r\n 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY ONE - Deutsch.mp4' : 'https://projects.flux-cms.de/onlineAssets/Venjakob/Venjakob - TECH TOGETHER - Maschinenvorführung VEN SPRAY ONE - Deutsch.mp4',\r\n\r\n // Videowall\r\n '456265' : '456265', // Ven Spray Smart\r\n '456284' : '456284', // Ven spray Perfect\r\n '456303' : '456303', // Ven Spray Comfort\r\n\r\n '456341' : '456341', // VSO Produkteinführung\r\n '456360' : '456360', // VSO Aufbau\r\n '456379' : '456379', // VSO Inbetriebnahme\r\n '456398' : '456398', // VSO Rezepte\r\n '456417' : '456417', // VSO Reinigung\r\n\r\n \"456436\" : \"456436\", // Hochleistungsbeschichtung im Durchlauf\r\n \"456455\" : \"456455\", // Höchst Flexible Beschichtungslinie\r\n \"456474\" : \"456474\" , // Automatische Beschichtungslinie für die Möbelindustrie\r\n \"456493\" : \"456493\", // Fenster Einzelteil Lackierung\r\n \"456512\" : \"456512\", // VenDryVarioTime\r\n \"456531\" : \"456531\", // Kleberapplikation\r\n\r\n \"Ven Spray Smart\" : 'VEN SPRAY SMART',\r\n \"Ven spray Perfect\" : 'VEN SPRAY PERFECT',\r\n \"Ven Spray Comfort\" : 'VEN SPRAY COMFORT',\r\n\r\n \"Ven Spray One Produkteinführung\" : 'VEN SPRAY ONE Produkteinführung',\r\n \"Ven Spray One Aufbau\" : 'VEN SPRAY ONE Aufbau',\r\n \"Ven Spray One Inbetriebnahme\" : 'VEN SPRAY ONE nbetriebnahme',\r\n \"Ven Spray One Rezepte\" : 'VEN SPRAY ONE Rezepte',\r\n \"Ven Spray One Reinigung\" : 'VEN SPRAY ONE Reinigung', \r\n\r\n \"Hochleistungsbeschichtung\\nim Durchlauf\" : 'Hochleistungsbeschichtung\\nim Durchlauf',\r\n \"Höchst Flexible\\nBeschichtungslinie\" : 'Höchst Flexible\\nBeschichtungslinie',\r\n \"Automatische Beschichtungslinie\\nfür die Möbelindustrie\" : 'Automatische Beschichtungslinie\\nfür die Möbelindustrie',\r\n \"Fenster Einzelteil\\nLackierung\" : 'Fenster Einzelteil\\nLackierung',\r\n \"Ven Dry Vario Time\" : 'VEN DRY VARIO TIME',\r\n \"Kleber-Applikationslinie\" : 'Kleber-Applikationslinie',\r\n\r\n // E-Mail\r\n \"Tec-Together: Präsenz-Termin vereinbaren\" : \"Tec-Together: Präsenz-Termin vereinbaren\",\r\n \"Tec-Together: Online-Termin vereinbaren\" : \"Tec-Together: Online-Termin vereinbaren\",\r\n\r\n \"Liebes Venjakob Team,\\r\\n\\r\\ngerne komme ich nach Rheda-Wiedenbrück, um Neues zu sehen und ins Gespräch zu kommen.\\r\\n\\r\\nMein Wunsch-Tag: __________\\r\\n\\r\\nMein Wunsch-Zeitraum:\\r\\n 〇 Vormittags\\r\\n 〇 Nachmittags\\r\\n\\r\\nMeine Branche:\\r\\n 〇 Holz/Möbel\\r\\n 〇 Baustoffindustrie\\r\\n 〇 Bauelemente\\r\\n 〇 Glas\\r\\n 〇 Kunststoff\\r\\n 〇 Metall\\r\\n\" :\r\n \"Liebes Venjakob Team,\\r\\n\\r\\ngerne komme ich nach Rheda-Wiedenbrück, um Neues zu sehen und ins Gespräch zu kommen.\\r\\n\\r\\nMein Wunsch-Tag: __________\\r\\n\\r\\nMein Wunsch-Zeitraum:\\r\\n 〇 Vormittags\\r\\n 〇 Nachmittags\\r\\n\\r\\nMeine Branche:\\r\\n 〇 Holz/Möbel\\r\\n 〇 Baustoffindustrie\\r\\n 〇 Bauelemente\\r\\n 〇 Glas\\r\\n 〇 Kunststoff\\r\\n 〇 Metall\\r\\n\",\r\n\r\n \"Liebes Venjakob Team,\\r\\n\\r\\nein Termin vor Ort ist leider nicht möglich. Gerne würde ich Sie jedoch online treffen, um Neues zu sehen und ins Gespräch zu kommen.\\r\\nMein Wunsch-Termin: __________\\r\\n\\r\\nMeine Branche:\\r\\n 〇 Holz/Möbel\\r\\n 〇 Baustoffindustrie\\r\\n 〇 Bauelemente\\r\\n 〇 Glas\\r\\n 〇 Kunststoff\\r\\n 〇 Metall\\r\\n\" : \r\n \"Liebes Venjakob Team,\\r\\n\\r\\nein Termin vor Ort ist leider nicht möglich. Gerne würde ich Sie jedoch online treffen, um Neues zu sehen und ins Gespräch zu kommen.\\r\\nMein Wunsch-Termin: __________\\r\\n\\r\\nMeine Branche:\\r\\n 〇 Holz/Möbel\\r\\n 〇 Baustoffindustrie\\r\\n 〇 Bauelemente\\r\\n 〇 Glas\\r\\n 〇 Kunststoff\\r\\n 〇 Metall\\r\\n\",\r\n \r\n // Signs\r\n 'Videowall' : 'Videowall',\r\n 'Informieren Sie sich anhand von Videos und Animationen über unsere Anlagenlösungen.' : 'Informieren Sie sich anhand von Videos und Animationen über unsere Anlagenlösungen.',\r\n 'Besuchen Sie uns in Rheda-Wiedenbrück im Rahmen der TecTogether und nennen uns hier einfach Ihren Wunsch-Tag, damit wir besser planen können.' : 'Besuchen Sie uns in Rheda-Wiedenbrück im Rahmen der TecTogether und nennen uns hier einfach Ihren Wunsch-Tag, damit wir besser planen können.',\r\n 'Sollten Sie verhindert sein, freuen wir uns, Sie zu einem anderen Zeitpunkt online begrüßen zu dürfen.' : 'Sollten Sie verhindert sein, freuen wir uns, Sie zu einem anderen Zeitpunkt online begrüßen zu dürfen.',\r\n 'Ihre Möglichkeiten' : 'Ihre Möglichkeiten',\r\n 'Text-Praxis' : 'Unser Angebot für Sie.\\nPer Klick anfordern.',\r\n\r\n // Empfangsvideo\r\n \"457319\" : \"457319\",\r\n }\r\n};\r\n\r\n\r\nconst getNavigatorLanguage = () => {\r\n if (navigator.languages && navigator.languages.length) {\r\n return navigator.languages[0];\r\n } \r\n else {\r\n return navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en';\r\n }\r\n}\r\n\r\nconst i18n = new VueI18n({\r\n locale: getNavigatorLanguage() ? getNavigatorLanguage() : 'en', // set locale\r\n fallbackLocale: 'en', // set fallback locale\r\n silentFallbackWarn: true,\r\n messages, // set locale messages\r\n});\r\n\r\nexport{i18n}","import Vue from 'vue'\r\nVue.config.productionTip = false\r\n\r\nimport FluxWebCommunication from 'flux-web-communication';\r\nVue.use(FluxWebCommunication);\r\n\r\n// vue-material\r\nimport VueMaterial from 'vue-material'\r\nimport 'vue-material/dist/vue-material.min.css'\r\nimport 'vue-material/dist/theme/default.css'\r\nimport 'vue-material-design-icons/styles.css'\r\nimport 'vue-js-modal/dist/styles.css'\r\nVue.use(VueMaterial)\r\n\r\nimport VueTimers from 'vue-timers'\r\nVue.use(VueTimers)\r\n\r\nimport browserDetect from \"vue-browser-detect-plugin\";\r\nVue.use(browserDetect);\r\n\r\n// vue-js-modal\r\nimport VModal from 'vue-js-modal/dist/index.nocss.js'\r\nVue.use(VModal)\r\n\r\n\r\nimport App from './App.vue'\r\nimport store from './store'\r\nimport {i18n} from '@/plugins/i18n';\r\n\r\nnew Vue({\r\n i18n,\r\n store,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","module.exports = __webpack_public_path__ + \"img/play.0c5ae399.svg\";","module.exports = __webpack_public_path__ + \"img/translate.235cd0fe.svg\";","module.exports = __webpack_public_path__ + \"img/pause-button.84f8a7de.png\";","export * from \"-!../../../node_modules/vue-style-loader/index.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TransitionPreview.vue?vue&type=style&index=0&id=dae6b7f0&prod&lang=css&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"#audio-video-dialogue[data-v-6ef7eb06]{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.avd-title[data-v-6ef7eb06]{font-size:30px;text-align:center;margin-bottom:50px}.avd-content-left[data-v-6ef7eb06]{margin-right:40px;float:left}.avd-content-right[data-v-6ef7eb06]{float:right}.subheading[data-v-6ef7eb06]{font-size:1.2em;margin-bottom:20px}.avd-switch[data-v-6ef7eb06]{margin:0;float:right}.avd-switch-container[data-v-6ef7eb06]{margin-bottom:12px}.avd-button-container[data-v-6ef7eb06]{text-align:center}.avd-audiotest[data-v-6ef7eb06]{width:100%}.avd-login-button[data-v-6ef7eb06]{font-size:20px;height:45px;width:60%;margin:60px 0 20px 0!important}.avd-troubleshooting-button[data-v-6ef7eb06]{height:50px;width:200px;margin-right:20px!important}.avd-connectiontest-button[data-v-6ef7eb06]{height:50px;width:200px}.avd-button-text[data-v-6ef7eb06]{font-size:12px!important}.audio-video-loading-screen[data-v-6ef7eb06]{position:absolute;width:100%;height:100%;z-index:10;background:rgba(0,0,0,.7);display:flex;justify-content:center;align-items:center}#audio-video-dialogue *[data-v-6ef7eb06]{--md-theme-default-text-primary-on-background:#fff;--md-theme-default-icon-on-background:#fff}.settings-section[data-v-6ef7eb06]{background-color:#585858;margin-bottom:40px;padding:20px;width:430px}.settings-section[data-v-6ef7eb06]:last-child{margin-bottom:0}.select-label[data-v-6ef7eb06]{margin-bottom:5px}.slide-and-fade-enter-active[data-v-6ef7eb06],.slide-and-fade-leave-active[data-v-6ef7eb06]{transition:all .3s ease}.slide-and-fade-enter[data-v-6ef7eb06],.slide-and-fade-leave-to[data-v-6ef7eb06]{opacity:0;width:0}select[data-v-6ef7eb06]{background:rgba(36,36,36,.4);color:#fff;margin-right:5px;transition:none;width:calc(100% - 41px);height:30px;border-radius:3px;border:0;box-shadow:none;padding:2px 2px 2px 8px}select[data-v-6ef7eb06]:focus{padding:0 0 0 6px;border:2px solid var(--primaryColor);outline:none}select[data-v-6ef7eb06]:disabled{background:rgba(36,36,36,f0.4);color:#8a8888}#audio-meter[data-v-6ef7eb06]{margin-top:10px;min-height:10px;width:100%}#video-container[data-v-6ef7eb06]{position:relative;height:210px;width:280px;margin-bottom:10px;background:rgba(0,0,0,.658)}#publisher-container[data-v-6ef7eb06]{position:absolute}#publisher-container[data-v-6ef7eb06],#publisher-container *[data-v-6ef7eb06]{min-width:100%;min-height:100%;max-height:100%;max-width:100%}.camera-placeholder[data-v-6ef7eb06]{position:relative;background-color:#262626;top:50%}.error-access-denied[data-v-6ef7eb06]{font-size:14px;color:#ff3737}.error-access-denied-button[data-v-6ef7eb06]{font-size:16px;cursor:pointer;text-decoration:underline;color:#ff6e6e}.error-access-denied-content[data-v-6ef7eb06]{margin-bottom:5px}.error[data-v-6ef7eb06]{margin-top:5px}.error-container[data-v-6ef7eb06]{min-height:20px;margin-bottom:20px}#audio-video-dialogue .md-switch[data-v-6ef7eb06]{--md-theme-default-accent:var(--primaryColor);--md-theme-default-accent-on-:var(--secondaryColor);min-width:-moz-max-content;min-width:max-content}.md-checkbox.md-theme-default .md-checkbox-container[data-v-6ef7eb06]{border-color:#fff}.md-checkbox.md-theme-default.md-checked .md-checkbox-container[data-v-6ef7eb06]:after{border-color:#fff!important;z-index:2}.badge[data-v-6ef7eb06]{position:absolute;border-radius:100%;top:calc(50% - 15px);left:calc(50% - 15px);height:30px;max-height:30px;width:30px;min-width:30px}.user-badge[data-v-6ef7eb06]{z-index:6}.user-badge-audio[data-v-6ef7eb06]{opacity:.6;z-index:5}.renew[data-v-6ef7eb06]{border-radius:4px;height:30px;min-width:0;max-width:30px;margin:0}.md-button[data-v-6ef7eb06]{margin:0;text-transform:none}.md-button.md-theme-default[disabled][data-v-6ef7eb06]{background:#494949!important}.md-button-content>div[data-v-6ef7eb06]{font-size:.55rem;letter-spacing:.125em;text-transform:none}.md-button .material-design-icon[data-v-6ef7eb06]{font-size:.6rem}#audio-video-dialogue .md-button[data-v-6ef7eb06]{min-width:-moz-max-content;min-width:max-content}#audio-video-dialogue .md-button *[data-v-6ef7eb06]{display:flex;flex-direction:column;margin:2px auto}.avd-audiotest-loading[data-v-6ef7eb06]{position:relative;width:30px;height:30px;margin:0 auto 0 auto}.big-symbol-container[data-v-6ef7eb06]{position:relative;width:140px;height:150px}.avd-audiotest-icons[data-v-6ef7eb06]{text-align:center}.avd-audiotest-icons .alert-circle-icon[data-v-6ef7eb06],.avd-audiotest-icons .alert-circle-icon *[data-v-6ef7eb06]{fill:#be0000}.alert-circle-icon[data-v-6ef7eb06]{position:relative}.check-circle-icon[data-v-6ef7eb06],.check-circle-icon *[data-v-6ef7eb06]{fill:#037000}.flux-animation-circle[data-v-6ef7eb06]{position:absolute;background-color:var(--primaryColor);width:12px;height:12px;border-radius:100%}.flux-animation-circle-one[data-v-6ef7eb06]{animation:fly-one-6ef7eb06 1.1s ease-in-out infinite;left:calc(100% - 4px);top:33.3%}.flux-animation-circle-two[data-v-6ef7eb06]{animation:fly-two-6ef7eb06 1.1s ease-in-out infinite;left:4px;top:66.6%}.flux-animation-circle-three[data-v-6ef7eb06]{animation:fly-three-6ef7eb06 1.1s ease-in-out infinite;left:4px;top:calc(33.3% - 2px)}@keyframes fly-one-6ef7eb06{0%{left:calc(100% - 4px);top:33.3%}18%{left:calc(50% - 2px);top:4px}40%{left:4px;top:calc(33.3% - 2px)}49.9%{left:4px;top:calc(66.6% - 2px)}66.6%{left:calc(50% - 2px);top:calc(100% - 2px)}81%{left:calc(100% - 4px);top:66.6%}to{left:calc(100% - 4px);top:33.3%}}@keyframes fly-two-6ef7eb06{0%{left:calc(50% - 2px);top:4px}25%{left:4px;top:calc(33.3% - 2px)}33.3%{left:4px;top:calc(66.6% - 2px)}49.9%{left:calc(50% - 2px);top:calc(100% - 2px)}63%{left:calc(100% - 4px);top:66.6%}75%{left:calc(100% - 4px);top:33.3%}to{left:calc(50% - 2px);top:4px}}@keyframes fly-three-6ef7eb06{0%{left:4px;top:calc(33.3% - 2px)}16.6%{left:4px;top:calc(66.6% - 2px)}33.3%{left:calc(50% - 2px);top:calc(100% - 2px)}45%{left:calc(100% - 4px);top:66.6%}57%{left:calc(100% - 4px);top:33.3%}74%{left:calc(50% - 2px);top:4px}to{left:4px;top:calc(33.3% - 2px)}}@media screen and (max-width:900px){#audio-video-dialogue[data-v-6ef7eb06]{align-items:normal}.audio-video-content[data-v-6ef7eb06]{width:90%}.avd-title[data-v-6ef7eb06]{margin-bottom:10px;margin-top:10px}.avd-content-left[data-v-6ef7eb06]{margin-right:0;float:none;text-align:center}.avd-content-right[data-v-6ef7eb06]{float:none}.avd-audiotest[data-v-6ef7eb06]{width:260px}.avd-login-button[data-v-6ef7eb06]{font-size:18px;height:50px;width:90%;margin:20px 0 10px 0!important}.avd-troubleshooting-button[data-v-6ef7eb06]{height:50px;width:80px;margin-right:20px!important}.avd-connectiontest-button[data-v-6ef7eb06]{height:50px;width:80px}.avd-button-text[data-v-6ef7eb06]{font-size:10px!important}.avd-audiotest[data-v-6ef7eb06]{margin-bottom:20px}.settings-section[data-v-6ef7eb06]{width:100%}#video-container[data-v-6ef7eb06]{margin:0 auto 20px auto}.error-access-denied[data-v-6ef7eb06]{margin:0 auto;margin-bottom:5px}}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","export * from \"-!../../../node_modules/vue-style-loader/index.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MediaController.vue?vue&type=style&index=0&id=5bce7096&prod&scoped=true&lang=css&\"","export * from \"-!../../../../../node_modules/vue-style-loader/index.js??ref--6-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapDialogue.vue?vue&type=style&index=0&id=5e90d808&prod&scoped=true&lang=css&\"","// style-loader: Adds some css to the DOM by adding a