{"version":3,"sources":["CookieConsent.js","LangSettings.js","store/reducer.js","AppOuter.js","serviceWorker.js","index.js","store/actions.js","WBCReactGA.js","lazyWithRetry.js","mylocalStorage.js","Translator/Translations.js"],"names":["CookieConsent","useCookies","cookies","setCookie","useState","undefined","insideMSTeams","setInsideMSTeams","cookiesAccepted","d","Date","setUTCMilliseconds","now","path","expires","sameSite","window","wbcAnalyticsCC","wbcAdsCC","onlyAnalyticsCookiesAccepted","cookiesPanelClosed","React","useEffect","microsoftTeams","initialize","then","getContext","context","msHost","app","host","setTimeout","location","parent","className","mdUp","action","href","target","rel","onClick","type","value","aria-label","smDown","alt","src","GetLang","string","language","lang","personalConfig","studLang","boardConfig","parsedLang","JSON","parse","parsedStudLang","sessLang","ll","mylocalStorage","initialState","user","userProfile","tutorGroup","tutorUsertype","tutorTourDone","communityUser","authDialog","open","countryCode","clientLoc","BoardConfig","participants","activeUsers","noUser","gvPage","sessionDialog","boardType","name","single","tab","selected","allTabs","assistanceRequest","studentAsked","pendingList","boardChat","started","messages","timer","running","events","boardLocked","locked","allEvents","pageLocked","myev","showCase","dialog","palletDrawer","openCol","ref","richText","object","cb","loc","pendingParticipants","avatarDialogOpen","diceShow","teacher","values","obj","board","followTeacher","set","clockDrift","hideNotification","syncDisabled","drawerWalker","page","gradingWalker","clickMode","mode","ctx","spinnerEvt","fDiceEvt","letItSnowEvt","font","inkColor","dblClickDisable","gridBrowser","pageNum","realTime","groupGridOnly","search","showLabels","hideLabels","matrixGrid","classroom","gridMap","timeMachine","selectedTime","slider","background","color","image","pickerOpen","pickerImageOpen","notmine","boardTools","formSubmit","engagementScore","engagementSticker","meetingToJoin","apiMode","adsEnable","keybMode","enable","lastKey","videoState","modeSelected","mobileModeSelected","videoConfig","pendingSubscriptions","alertMessages","sharedScreen","boardRecording","classPoll","embeddedMode","pageAdding","sharedScreenDialog","gParts","timedOutParticipants","getIdToUse","data","idUse","id","UserProfile","content","jp","localID","setLocal","authid","username","luid","uuid","setLocalPaidPlan","paidPlan","TenantID","pendingRequests","old","req","arr","i","length","splice","State","push","Boolean","pendingChat","state","Content","filter","ff","deleted","pendingFollow","pendingLock","pendingPageLock","rt","Actions","ev","pendingShowCase","readOnlyShowCase","isObject","compareParticipant","object1","object2","partId","keys1","Object","keys","keys2","curTime","getTime","timedOut","key","obj1","obj2","KEEPALIVE_TIMEOUT_SECONDS","checkIfPartsUpdateNeeded","newParts","removeMSTeamsEmail","em","email","includes","split","replace","pendingTimer","processDice","e","classDice","teacherDice","rollerName","inval","inval2","Array","isArray","processSpinner","myTime","evtTime","createdAt","Math","abs","processFdice","processLetItSnow","formSubmitprocess","processScore","dataIn","eng","max","scoreData","calc","calculated","trendown","c","current","per","peak","samp","samples","avg","trenddown","prev","percent","k","kk","v","checkAds","profile","st","isFree","isStudent","session","TutorClass","processPoll","cp","question","forEach","q","mainReducer","ar","shift","appMode","ad","pc","setLangauge","val","pp","rr","stringify","remind","jj","ppp","oper","idx","item","fdiceEvt","HomePage","lazyWithRetry","App","store","createStore","reducer","__REDUX_DEVTOOLS_EXTENSION__","theme","createMuiTheme","palette","primary","purple","secondary","main","status","danger","typography","fontSize","overrides","MuiCssBaseline","width","height","backgroundColor","borderRadius","AppOuter","props","WBCReactGA","CookiesProvider","defaultSetOptions","ThemeProvider","fallback","exact","component","console","log","hostname","match","require","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","error","message","SET_USER","SET_EXP_REMIND","SET_USER_PROFILE","SET_TUTOR_GROUP","SET_TUTOR_USERTYPE","SET_TUTOR_TOURDONE","OPEN_AUTH_DIALOG","SET_CONFIG","ADD_PARTICIPANT","REMOVE_PARTICIPANT","FLUSH_PARTICIPANT","PROCESS_PENDING_PARTICIPANTS","AVATAR_DIALOG_OPEN","ADD_ACTIVE","DELETE_ACTIVE","SET_NOUSER","SET_GVPAGE","SET_SESSION_DIALOG","SET_BOARD_TYPE","SET_TAB","SET_TEACHER","SET_COUNTRY","SET_CLIENT_LOC","RAISE_HAND","ASSISTANCE_REQUEST","CHAT_MSG","TIMER_EVENT","BOARD_LOCK","PAGE_LOCK","SET_PALETTE","SHOWCASE","SET_RICH_TEXT","SET_DICE","SET_FOLLOW","SET_CLOCK_DRIFT","SET_NOTIFICATION","SET_SYNC_DISABLED","SET_DRAWER_WALKER","SET_GRADING_WALKER","SET_CLICK_MODE","SET_COMMUNITYUSER","SET_SPINNER_EVENT","SET_PERSONAL_CONFIG","SET_GRID_BROWSER","SET_MATRIX_GRID","SET_LETITSNOW_EVENT","SET_TIME_MACHINE","SET_BACK_GROUND","SET_BOARD_TOOLS","SET_FDICE_EVENT","ALL_EVENTS","FORM_SUBMIT","UPDATE_ENGAGEMENT_SCORE","MEETING_TO_JOIN","SET_API_MODE","SET_ENGAGEMENT_STICKER","SET_KEYB_MODE","SET_VIDEO_STATE","SET_MODE","SET_MOBILE_MODE","SET_ALERT_MESSAGES","POP_ALERT_MESSAGES","SET_VIDEO_CONFIG","PENDING_SUBSCRIPTIONS","SET_SHARED_SCREEN","SET_BOARD_RECORDING","ADD_CLASSPOLL_EVENT","SET_EMBEDDED_MODE","SET_PAGE_ADDING","SET_SHARED_SCREEN_DIALOG","setSharedScreenDialog","setEmbeddedMode","addClassPollEvent","setPageAdding","setBoardRecording","setSharedScreen","setPendingSubsciptions","setVideoConfig","setAlertMessages","popAlertMessage","setMobileMode","setVideoState","setKeyBMode","disableKeyBMode","setEngagementSticker","setApiMode","updateEngagementScore","addFormSubmit","addAllEvents","setBoardTools","setBackGround","setTimeMachine","setMatrixGrid","setGridBrowser","setClickMode","setPersonalConfig","setDrawerWalker","setGradingWalker","setSyncDisabled","setNotification","setDrift","setFollow","showDice","setRichText","setShowcase","setPalette","setBoardLock","setPageLock","setTimerEvent","setRaiseHand","setChatMsg","setTeacher","setCountry","setClientLoc","setBoardType","setTab","setSessionDialog","setGVPage","setNoUser","setUser","setNotificationRemind","setUserProfile","setTutorGroup","setTutorUsertype","setTutorTourDone","openAuthDialog","setBoardConfig","starterMode","fourToolsStudent","addParticipant","flushParticipants","processPendingParticipants","setAvatarDialogOpen","deleteActive","setCommunityUser","spinnerEvent","fDiceEvent","getPageLock","pg","sessID","p","pgNum","letItSnowEvent","event","ReactGA","pageview","exception","initializeGA","debug","initializeGoogleTagManager","w","s","l","f","getElementsByTagName","j","createElement","async","parentNode","insertBefore","initializeClarityTagManager","a","r","t","y","arguments","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","reload","LOCAL_STORAGE","getItem","localStorage","setItem","alert","removeItem","clear","Translations","Translate","translated"],"mappings":"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","file":"static/js/main.867f8e09.chunk.js","sourcesContent":["import React, { useState } from 'react';\nimport { useCookies } from 'react-cookie';\nimport \"./styles/accessinclusion.scss\";\nimport \"./styles/fontawesome/scss/fontawesome.scss\"\nimport \"./styles/cookieConsent.css\";\nimport { IconButton } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Hidden from '@material-ui/core/Hidden';\nimport * as microsoftTeams from \"@microsoft/teams-js\";\n// import CookieIcon from '@material-ui/core/Cookie';\n\nexport default function CookieConsent() {\n const [cookies, setCookie] = useCookies(['wbcAnalyticsCC', 'wbcAdsCC']);\n const [insideMSTeams, setInsideMSTeams] = useState(undefined)\n // const [temporaryBannerDisable, setTemporaryBannerDisable] = useState(true)\n const temporaryBannerDisable = false;\n \n function iniFrame() {\n var withiniframe = false;\n if (window.location !== window.parent.location) {\n // The page is in an iFrames\n // console.log(\"The page is in an iFrame\");\n withiniframe = true;\n }\n else {\n // The page is not in an iFrame\n // console.log(\"The page is not in an iFrame\");\n withiniframe = false;\n }\n return withiniframe;\n }\n\n React.useEffect(() => {\n if (insideMSTeams !== undefined) {\n return;\n }\n try {\n microsoftTeams.app.initialize().then(() => {\n // console.log(\"Detected inside msteams in initialize function\")\n window.insideMSTeams = true\n setInsideMSTeams(true)\n microsoftTeams.app.getContext().then((context) => {\n window.msHost = context.app.host\n // console.log(\"Detected msHost = \", window.msHost);\n // console.log(\"Detected clientType = \", context.app.host.clientType);\n })\n }, () => {\n window.insideMSTeams = false\n setInsideMSTeams(false)\n })\n setTimeout(() => {\n if (window.insideMSTeams === undefined) {\n window.insideMSTeams = false\n setInsideMSTeams(false)\n }\n }, 3000)\n } catch {\n window.insideMSTeams = false\n setInsideMSTeams(false)\n }\n }, [insideMSTeams])\n\n function cookiesAccepted() {\n var d = new Date(0);\n // Six months per regulations\n d.setUTCMilliseconds(Date.now()+15780000000);\n setCookie('wbcAnalyticsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n setCookie('wbcAdsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n window.wbcAnalyticsCC = true\n window.wbcAdsCC = true\n }\n\n function onlyAnalyticsCookiesAccepted() {\n var d = new Date(0);\n // Six months per regulations\n d.setUTCMilliseconds(Date.now()+15780000000);\n setCookie('wbcAnalyticsCC', true, { path: \"/\", expires: d, sameSite: \"strict\" })\n setCookie('wbcAdsCC', false, { path: \"/\", expires: d, sameSite: \"strict\" })\n window.wbcAnalyticsCC = true\n window.wbcAdsCC = false\n }\n\n function cookiesPanelClosed() {\n var d = new Date(0);\n // Show again after 2 days\n d.setUTCMilliseconds(Date.now()+172800000);\n setCookie('wbcAnalyticsCC', false, { path: \"/\", expires: d })\n setCookie('wbcAdsCC', false, { path: \"/\", expires: d })\n window.wbcAnalyticsCC = false\n window.wbcAdsCC = false\n }\n\n React.useEffect(() => {\n\n },[cookies])\n\n return(\n <div>\n {temporaryBannerDisable === false && !iniFrame() && (insideMSTeams === false && !cookies.wbcAnalyticsCC &&\n <div className=\"inclusion-main\">\n <Hidden mdUp>\n <div className=\"contact-form-wrapper justify-content-center\">\n <form action=\"#\" className=\"cookie-consent-form-mini\">\n <p className=\"cc-description-mini\">We use cookies for application analytics and to display ads on the free plan.\n We do not sell your personal data.\n </p>\n <a className=\"privacy-link\" href=\"/privacy\" target=\"_blank\" rel=\"noopener noreferrer\"> Privacy Details</a>\n <div className=\"cc-form-controls-mini\">\n <div className=\"submit-button-wrapper-mini\" onClick={cookiesAccepted}>\n <input type=\"submit\" value=\"Accept\"/>\n </div>\n <div className=\"submit-button-wrapper-mini\" onClick={onlyAnalyticsCookiesAccepted}>\n <input className=\"outline\" type=\"submit\" value=\"Necessary Only\"/>\n </div>\n <IconButton aria-label=\"delete\" onClick={cookiesPanelClosed}>\n <CloseIcon />\n </IconButton>\n </div>\n </form>\n </div>\n </Hidden>\n <Hidden smDown>\n <div className=\"contact-form-wrapper justify-content-center\">\n <form action=\"#\" className=\"cookie-consent-form\">\n <img alt=\"cookie icon\" className=\"cookieImg\" src=\"/WBCCookie.svg\"/>\n <p className=\"cc-description\">We use cookies for application analytics and to display ads on the free plan.\n We do not sell your personal data.\n <a className=\"privacy-link\" href=\"/privacy\" target=\"_blank\" rel=\"noopener noreferrer\"> Privacy Details</a>\n </p>\n {/* <div onClick={}>Privacy</div> */}\n <div className=\"cc-form-controls\">\n <div className=\"submit-button-wrapper\" onClick={cookiesAccepted}>\n <input type=\"submit\" value=\"Accept All\"/>\n </div>\n <div className=\"submit-button-wrapper\" onClick={onlyAnalyticsCookiesAccepted}>\n <input className=\"outline\" type=\"submit\" value=\"Necessary Only\"/>\n </div>\n {/* <div className=\"submit-button-wrapper\" onClick={customizeCookies}>\n <input className=\"outline\" type=\"submit\" value=\"Custom\"/>\n </div> */}\n <IconButton aria-label=\"delete\" onClick={cookiesPanelClosed}>\n <CloseIcon />\n </IconButton>\n </div>\n </form>\n </div>\n </Hidden>\n </div>)}\n </div>\n )\n}","import * as mylocalStorage from \"./mylocalStorage\";\n\nconst GetLang = (string) => {\n var language = \"\"\n const lang = window.personalConfig;\n const studLang = window.boardConfig\n const parsedLang = lang && JSON.parse(lang);\n const parsedStudLang = studLang && JSON.parse(studLang);\n if (parsedStudLang && parsedStudLang.sessLang) {\n language = parsedStudLang.sessLang\n } else {\n if (parsedLang && parsedLang.language) {\n language = parsedLang.language\n }\n }\n let ll = mylocalStorage.getItem(\"language\")\n if (ll) language = ll\n if(!language || language === \"\")\n language = \"EN\"\n return language;\n};\n\nexport default GetLang;","\nimport * as Actions from \"./actions\"\nimport { v4 as uuid } from \"uuid\";\n// import { KEEPALIVE_TIMEOUT_SECONDS } from \"../../src/ibdata\"\nimport * as mylocalStorage from \"../mylocalStorage\";\nimport { setLangauge } from \"../Translator/Translations\";\n\nexport const KEEPALIVE_TIMEOUT_SECONDS = 60;\nconst initialState = {\n user: null,\n userProfile: undefined,\n tutorGroup: null,\n tutorUsertype: null,\n tutorTourDone: false,\n communityUser: null,\n authDialog: {\n open: false\n },\n countryCode: null,\n clientLoc: null,\n BoardConfig: {},\n participants: {},\n activeUsers: {},\n noUser: false,\n gvPage: 1,\n sessionDialog: {\n open: false\n },\n boardType: {\n name: \"\",\n single: false,\n },\n tab: {\n selected: 0,\n allTabs: [],\n },\n assistanceRequest: {\n studentAsked: false,\n pendingList: [],\n },\n boardChat: {\n started: false,\n messages: [],\n language: null\n },\n timer: {\n running: false,\n events: [],\n },\n boardLocked: {\n locked: false,\n events: [],\n },\n allEvents: {\n events: [],\n },\n pageLocked: {\n events: [],\n locked: false,\n myev: null,\n },\n showCase: {\n locked: false,\n dialog: false,\n events: [],\n },\n palletDrawer: {\n open: false,\n openCol: false,\n ref: null,\n },\n richText: {\n open: false,\n object: null,\n cb: null,\n loc: null,\n },\n pendingParticipants: [],\n avatarDialogOpen: false,\n diceShow: {\n teacher: {\n open: false,\n values: [],\n obj: null\n },\n board: {\n open: false,\n values: [],\n obj: null,\n }\n },\n followTeacher: {\n set: false,\n events: [],\n },\n clockDrift: 0,\n teacher: 0,\n hideNotification: false,\n syncDisabled: false,\n drawerWalker: {\n open: false,\n page: 1\n },\n gradingWalker: {\n open: false,\n page: 1\n },\n clickMode: {\n mode: \"none\",\n ctx: \"none\"\n },\n spinnerEvt: null,\n fDiceEvt: null,\n letItSnowEvt: null,\n personalConfig: {\n font: \"Roboto\",\n inkColor: true,\n dblClickDisable: false,\n language: mylocalStorage.getItem(\"language\")\n },\n gridBrowser: {\n open: false,\n pageNum: 1,\n realTime: true,\n groupGridOnly: false,\n search: \"\",\n showLabels: [],\n hideLabels: []\n },\n matrixGrid: {\n classroom: null,\n gridMap: {}\n },\n timeMachine: {\n open: false,\n realTime: false,\n selectedTime: null,\n slider: 50,\n },\n background: {\n color: null,\n image: null,\n pickerOpen: false,\n pickerImageOpen: false,\n notmine: false,\n },\n boardTools: {},\n formSubmit: {\n events: [],\n },\n engagementScore: {},\n engagementSticker: null,\n meetingToJoin: null,\n apiMode: null,\n adsEnable: false,\n keybMode: { enable: false, lastKey: \"\" },\n videoState: { mode: \"none\" },\n modeSelected: null,\n mobileModeSelected: { open: false },\n videoConfig: null,\n pendingSubscriptions: {},\n alertMessages: {\n open: false,\n messages: []\n },\n sharedScreen: null,\n boardRecording: null,\n classPoll: {\n open: false,\n messages: {}\n },\n embeddedMode: null,\n pageAdding: false,\n sharedScreenDialog: {\n open: false\n }\n}\n\nvar gParts = {};\nvar timedOutParticipants = {};\n\nfunction getIdToUse(data) {\n var idUse = data.id\n if (data.UserProfile) {\n idUse = data.UserProfile\n } else {\n if (data.content) {\n const jp = JSON.parse(data.content)\n if (jp.localID) {\n idUse = jp.localID\n }\n }\n }\n return idUse\n}\n\nfunction setLocal(user) {\n const authid = user ? user.username : null;\n var luid = mylocalStorage.getItem('mystoreID');\n if (!luid) {\n luid = uuid()\n mylocalStorage.setItem('mystoreID', luid)\n }\n if (authid && luid !== authid) {\n mylocalStorage.setItem('mystoreID', authid)\n mylocalStorage.setItem('backupLocalID', luid);\n luid = authid //from now on the authenicated user and the stored user will be same\n }\n return luid\n}\n\nfunction setLocalPaidPlan(userProfile) {\n if (userProfile) {\n if (!userProfile.paidPlan) {\n mylocalStorage.removeItem('paidPlan');\n } else {\n mylocalStorage.setItem('paidPlan', userProfile.paidPlan);\n }\n if (!userProfile.TenantID) {\n mylocalStorage.removeItem('tenant');\n } else {\n mylocalStorage.setItem('tenant', userProfile.TenantID);\n }\n } else {\n mylocalStorage.removeItem('paidPlan');\n\n }\n}\n\nfunction studentRaiseHand(set) {\n\n}\nfunction pendingRequests(old, req) {\n var arr = [...old.pendingList]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n studentAsked: Boolean(arr.length > 0),\n pendingList: arr\n }\n return (ff)\n}\nfunction pendingChat(old, req, state) {\n var arr = [...old.messages]\n if (!req) return { started: false, messages: [] }\n var luid = mylocalStorage.getItem('mystoreID');\n if (state.teacher === 0 && req && req.Content && req.Content.filter) {\n //check for filter\n if (!req.Content.filter[luid]) {\n var ff = {\n started: Boolean(arr.length > 0),\n messages: arr\n }\n return (ff)\n }\n }\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\" && !req.deleted) arr.push(req)\n // //sort by ttime \n // arr.sort((a, b) => {\n // var dt1 = new Date(a.updatedAt)\n // var dt2 = new Date(b.updatedAt)\n // if (dt1 < dt2) return 1\n // return -1 \n // })\n // for (let i=0; i<arr.length; i++) {\n // let c = arr[i]\n // console.log(\"ITEM \", i, c.Content.msg)\n // }\n\n ff = {\n started: Boolean(arr.length > 0),\n messages: arr\n }\n return (ff)\n}\n\nfunction pendingFollow(state, req) {\n if (!req) {\n return {\n set: false,\n events: [],\n }\n }\n var arr = [...state.followTeacher.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n set: Boolean(arr.length > 0),\n events: arr\n }\n return ({ ...ff })\n}\nfunction allEvents(state, req) {\n var arr = [...state.allEvents.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n arr.push(req)\n var ff = { events: arr }\n return (ff)\n}\nfunction pendingLock(state, req) {\n if (!req) {\n return {\n locked: false,\n events: [],\n }\n }\n var arr = [...state.boardLocked.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n locked: Boolean(arr.length > 0),\n events: arr\n }\n return (ff)\n}\nfunction pendingPageLock(state, req) {\n if (!req) {\n return {\n events: [],\n }\n }\n var arr = [...state.pageLocked.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = { events: arr }\n var rt = Actions.getPageLock(ff)\n ff['locked'] = rt.locked\n ff['myev'] = rt.ev\n return (ff)\n}\nfunction pendingShowCase(state, req) {\n if (!req) {\n return {\n locked: false,\n events: [],\n }\n }\n var arr = [...state.showCase.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n\n var ff = {\n locked: Boolean(arr.length > 0),\n dialog: Boolean(arr.length > 1) || (Boolean(arr.length > 0) && state.BoardConfig.readOnlyShowCase),\n events: arr\n }\n return (ff)\n}\nfunction isObject(object) {\n return object != null && typeof object === 'object';\n}\n\nfunction compareParticipant(object1, object2, partId) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n const curTime = new Date().getTime();\n let timedOut = 0;\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (let key of keys1) {\n let obj1 = isObject(object1[key]);\n let obj2 = isObject(object2[key]);\n\n if (obj1 && obj2) {\n continue;\n } else if ((obj1 && !obj2) || (obj2 && !obj1)) {\n return false;\n }\n\n if (key === 'updatedAt') {\n let updTime = new Date(object2[key]);\n /**\n * Because the updates can happen at different times between different\n * participants, we need to check if an update was not received for\n * 2 timeout intervals to truly mark a participant as down or else\n * the state could keep fluctuating between timedOut = 0 and timedOut = 1\n */\n if (((curTime - updTime) / 1000) > (KEEPALIVE_TIMEOUT_SECONDS * 2)) {\n timedOut = 1;\n }\n\n if (!(timedOutParticipants[partId])) {\n timedOutParticipants[partId] = 0;\n }\n\n if (timedOutParticipants[partId] !== timedOut) {\n timedOutParticipants[partId] = timedOut;\n return false;\n }\n } else if (object1[key] !== object2[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction checkIfPartsUpdateNeeded(newParts) {\n const keys1 = Object.keys(gParts);\n const keys2 = Object.keys(newParts);\n\n if (keys1.length !== keys2.length) {\n return true;\n }\n\n for (let key of keys1) {\n if (newParts[key] === undefined) {\n return true;\n }\n\n if (!compareParticipant(gParts[key],\n newParts[key], key)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction removeMSTeamsEmail(em) {\n let email = em\n if (em && email.includes(\"@microsoftteams\")) {\n email = email.split(\"@\")[0]\n email = email.replace(\"__\", \"@\")\n }\n return email\n}\nfunction pendingTimer(state, req) {\n if (!req) {\n return {\n running: false,\n events: [],\n }\n }\n var arr = [...state.timer.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n if (req.State !== \"Done\") arr.push(req)\n var ff = {\n running: Boolean(arr.length > 0),\n events: arr\n }\n return (ff)\n}\nfunction processDice(state, e) {\n var open = true\n if (e.State === \"Done\") open = false\n var classDice = \"board\"\n if (e.teacherDice) {\n classDice = \"teacher\"\n }\n if (!e.Content.rollerName) e.Content.rollerName = \"\"\n var inval = e.Content.value\n var inval2 = Array.isArray(inval) ? inval : null\n var setVal = {\n ...state.diceShow,\n [classDice]: {\n open: open,\n obj: e,\n value: inval2,\n rollerName: e.Content.rollerName\n }\n }\n return (setVal)\n}\nfunction processSpinner(spinnerEvt, e, clockDrift) {\n const myTime = new Date()\n const evtTime = new Date(e.createdAt)\n // console.log(\"My time = \", myTime)\n // console.log(\"evtTime = \", evtTime)\n // console.log(\"Drift = \", clockDrift)\n // console.log(\"Difference = \", Math.abs(myTime - evtTime - clockDrift*1000))\n if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n // Too much difference in time, ignore event\n // console.log(\"Too much time difference in spin event, ignoring\")\n return spinnerEvt;\n }\n return e;\n}\nfunction processFdice(fDiceEvt, e, clockDrift) {\n const myTime = new Date()\n const evtTime = new Date(e.createdAt)\n // console.log(\"My time = \", myTime)\n // console.log(\"evtTime = \", evtTime)\n // console.log(\"Drift = \", clockDrift)\n // console.log(\"Difference = \", Math.abs(myTime - evtTime - clockDrift*1000))\n if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n // Too much difference in time, ignore event\n // console.log(\"Too much time difference in spin event, ignoring\")\n return fDiceEvt;\n }\n return e;\n}\nfunction processLetItSnow(letItSnowEvt, e, clockDrift) {\n const myTime = new Date()\n const evtTime = new Date(e.createdAt)\n if (Math.abs(myTime - evtTime - clockDrift * 1000) > 5000) {\n return letItSnowEvt;\n }\n return e;\n}\nfunction formSubmitprocess(state, req) {\n var arr = [...state.formSubmit.events]\n for (var i = 0; i < arr.length; i++) {\n var c = arr[i]\n if (c.id === req.id) {\n arr.splice(i, 1)\n }\n }\n arr.push(req)\n var ff = { events: arr }\n return (ff)\n}\nfunction processScore(state, dataIn) {\n if (!dataIn) {\n return {}\n }\n for (let i = 0; i < dataIn.length; i++) {\n var data = dataIn[i]\n\n var eng = state.engagementScore\n var max = 1\n if (!eng['all']) eng['all'] = []\n eng['all'].push(data)\n\n if (eng['max']) {\n max = eng[\"max\"]\n }\n var luid = data.luid\n var scoreData = JSON.parse(data.Content)\n if (scoreData && scoreData.engagementScore) {\n var s = scoreData.engagementScore\n var calc = s.calculated;\n if (calc > max) {\n max = calc\n }\n if (eng[luid]) {\n var trendown = false\n let c = eng[luid].current\n if (c > calc) trendown = true\n var per = 100 * calc / max\n var peak = per > eng[luid].peak ? per : eng[luid].peak\n var samp = eng[luid].samples + 1\n let avg = (((samp - 1) * eng[luid].avg) + per) / samp;\n\n eng[luid] = { current: calc, trenddown: trendown, prev: c, percent: per, peak: peak, samples: samp, avg: avg }\n } else {\n per = 100 * calc / max\n eng[luid] = { current: calc, trenddown: false, prev: 0, samples: 1, peak: per, percent: per, avg: per }\n }\n if (calc >= max) {\n eng['max'] = calc\n var k = Object.keys(eng)\n for (let i = 0; i < k.length; i++) {\n let kk = k[i]\n if (kk !== \"max\" && kk !== \"all\") {\n var v = eng[kk]\n v.percent = (100 * v.current) / max\n if (v.percent > 100) v.percent = 100\n }\n }\n }\n }\n\n }\n return { ...eng }\n}\n\nfunction checkAds(profile, boardType, st) {\n if (st.apiMode && st.apiMode.obj && st.apiMode.obj.content && st.apiMode.obj.content.includes(\"noAds\")) {\n return false\n }\n if (profile === undefined) return true\n if (boardType && boardType.name && boardType.name.length > 0) {\n var isFree = false\n var isStudent = true\n var forTest = false\n if(boardType && boardType.session && boardType.session.TutorClass) return false\n if (!profile || !profile.paidPlan || profile.paidPlan === \"educator-free\") isFree = true\n if (boardType.name.includes(\"Instructor\")) isStudent = false\n if (boardType.name.includes(\"Single\")) isStudent = false\n // if (profile && profile.email && profile.email.includes(\"epiphani\")) forTest = true\n if (isFree && !isStudent) {\n // check creator of the board too if they have a paid plan\n return true\n }\n if (forTest) {\n return true\n }\n }\n return false\n}\n\nfunction processPoll(d, state) {\n let cp = state.classPoll.messages\n if (!(d.Content.question in cp)) {\n cp[d.Content.question] = {}\n }\n if (d.State !== \"DONE\") {\n cp[d.Content.question][d.Content.luid] = d\n } else {\n delete cp[d.Content.question][d.Content.luid]\n }\n let open = false;\n Object.values(cp).forEach(q =>(\n Object.values(q).forEach(d => {\n if (d) open = true\n })\n ))\n let ns = {\n ...state,\n classPoll: {\n open: open,\n messages: { ...cp }\n }\n }\n return ns\n}\n\nconst mainReducer = function (state = initialState, action) {\n switch (action.type) {\n case Actions.SET_SHARED_SCREEN_DIALOG: {\n return {\n ...state,\n sharedScreenDialog: action.data\n }\n } \n case Actions.SET_EMBEDDED_MODE: {\n return {\n ...state,\n embeddedMode: action.data\n }\n }\n case Actions.ADD_CLASSPOLL_EVENT: {\n if (!action.data) {\n return {\n ...state,\n classPoll: {\n open: false,\n messages: {}\n }\n }\n }\n return processPoll(action.data, state)\n }\n case Actions.SET_PAGE_ADDING: {\n return {\n ...state,\n pageAdding: action.data\n }\n }\n case Actions.SET_BOARD_RECORDING: {\n return {\n ...state,\n boardRecording: action.data\n }\n }\n case Actions.SET_SHARED_SCREEN: {\n return {\n ...state,\n sharedScreen: action.data\n }\n }\n case Actions.SET_ALERT_MESSAGES: {\n let ar = []\n if (action.data) {\n ar = [...state.alertMessages.messages, action.data]\n }\n return {\n ...state,\n alertMessages: { messages: ar, open: ar.length > 0 }\n }\n }\n case Actions.PENDING_SUBSCRIPTIONS: {\n let d = action.data\n return {\n ...state,\n pendingSubscriptions: {\n ...state.pendingSubscriptions,\n [d.type]: d.value\n }\n }\n }\n case Actions.POP_ALERT_MESSAGES: {\n let ar = state.alertMessages.messages\n ar.shift()\n return {\n ...state,\n alertMessages: { messages: ar, open: ar.length > 0 }\n }\n }\n case Actions.SET_VIDEO_CONFIG: {\n return {\n ...state,\n videoConfig: action.data\n }\n }\n case Actions.SET_MODE: {\n return {\n ...state,\n modeSelected: action.data\n }\n }\n case Actions.SET_MOBILE_MODE: {\n const appMode = mylocalStorage.getItem('appMode');\n return {\n ...state,\n mobileModeSelected: {\n ...action.data,\n appMode: appMode\n }\n }\n }\n case Actions.SET_VIDEO_STATE: {\n return {\n ...state,\n videoState: action.data\n }\n }\n case Actions.SET_KEYB_MODE: {\n return {\n ...state,\n keybMode: action.data\n }\n }\n case Actions.SET_ENGAGEMENT_STICKER: {\n return {\n ...state,\n engagementSticker: action.data\n }\n }\n case Actions.SET_API_MODE: {\n return {\n ...state,\n apiMode: action.data\n }\n }\n case Actions.MEETING_TO_JOIN: {\n return {\n ...state,\n meetingToJoin: action.data\n }\n }\n case Actions.UPDATE_ENGAGEMENT_SCORE: {\n return {\n ...state,\n engagementScore: processScore(state, action.data)\n }\n }\n case Actions.FORM_SUBMIT: {\n return {\n ...state,\n formSubmit: formSubmitprocess(state, action.data)\n }\n }\n case Actions.SET_BOARD_TOOLS: {\n let ad = action.data\n if (Object.keys(ad).length === 0 && Object.keys(state.boardTools).length === 0) {\n return state\n }\n return {\n ...state,\n boardTools: action.data\n }\n }\n case Actions.SET_PERSONAL_CONFIG: {\n const pc = action.data\n if (pc.font) {\n mylocalStorage.setItem(\"font\", pc.font)\n }\n if (pc.language) {\n mylocalStorage.setItem(\"language\", pc.language)\n setLangauge()\n }\n if (!pc.inkColor) {\n mylocalStorage.setItem(\"inkCopy\", \"yes\")\n } else {\n mylocalStorage.removeItem(\"inkCopy\")\n }\n if (pc.dblClickDisable) {\n mylocalStorage.setItem(\"dblClickDisable\", \"yes\")\n } else {\n mylocalStorage.removeItem(\"dblClickDisable\")\n }\n // window.personalConfig = JSON.stringify(action.data);\n return {\n ...state,\n personalConfig: action.data\n }\n }\n case Actions.SET_BACK_GROUND: {\n var val = action.data ? action.data : {\n color: null,\n pickerOpen: false,\n pickerImageOpen: false,\n notmine: false,\n image: null\n }\n if (val.color === state.background.color &&\n val.pickerImageOpen === state.background.pickerImageOpen &&\n val.pickerOpen === state.background.pickerOpen &&\n val.image === state.background.image &&\n val.notmine === state.background.notmine) {\n return state\n }\n return {\n ...state,\n background: val\n }\n }\n case Actions.SET_TIME_MACHINE: {\n return {\n ...state,\n timeMachine: action.data\n }\n }\n case Actions.SET_MATRIX_GRID: {\n return {\n ...state,\n matrixGrid: action.data\n }\n }\n case Actions.SET_GRID_BROWSER: {\n return {\n ...state,\n gridBrowser: action.data\n }\n }\n case Actions.SET_CLICK_MODE: {\n return {\n ...state,\n clickMode: action.data\n }\n }\n case Actions.SET_DRAWER_WALKER: {\n return {\n ...state,\n drawerWalker: action.data\n }\n }\n case Actions.SET_GRADING_WALKER: {\n return {\n ...state,\n gradingWalker: action.data\n }\n }\n case Actions.SET_SYNC_DISABLED: {\n return {\n ...state,\n syncDisabled: action.data\n }\n }\n case Actions.SET_NOTIFICATION: {\n return {\n ...state,\n hideNotification: action.data\n }\n }\n case Actions.SET_DICE: {\n return {\n ...state,\n diceShow: processDice(state, action.data)\n }\n }\n case Actions.SET_CLOCK_DRIFT: {\n return {\n ...state,\n clockDrift: action.data\n }\n }\n case Actions.SET_PALETTE: {\n var pp = action.data\n if (pp.open || pp.openCol) {\n var rr = {}\n rr.open = pp.open\n rr.openCol = pp.openCol\n mylocalStorage.setItem(\"palette\", JSON.stringify(rr))\n } else {\n mylocalStorage.removeItem(\"palette\")\n }\n return {\n ...state,\n palletDrawer: action.data\n }\n }\n case Actions.TIMER_EVENT: {\n return {\n ...state,\n timer: pendingTimer(state, action.data)\n }\n }\n case Actions.SHOWCASE: {\n return {\n ...state,\n showCase: pendingShowCase(state, action.data)\n }\n }\n case Actions.PAGE_LOCK: {\n return {\n ...state,\n pageLocked: pendingPageLock(state, action.data)\n }\n }\n case Actions.BOARD_LOCK: {\n return {\n ...state,\n boardLocked: pendingLock(state, action.data)\n }\n }\n case Actions.ALL_EVENTS: {\n return {\n ...state,\n allEvents: allEvents(state, action.data)\n }\n }\n case Actions.SET_FOLLOW: {\n return {\n ...state,\n followTeacher: pendingFollow(state, action.data)\n }\n }\n case Actions.SET_RICH_TEXT: {\n return {\n ...state,\n richText: action.data\n }\n }\n case Actions.CHAT_MSG: {\n var ff = pendingChat(state.boardChat, action.data, state)\n return {\n ...state,\n boardChat: {\n ...state.boardChat,\n started: ff.started,\n messages: ff.messages\n }\n }\n }\n\n case Actions.RAISE_HAND: {\n return {\n ...state,\n assistanceRequest: {\n studentAsked: studentRaiseHand(action.data),\n pendingList: []\n }\n }\n }\n case Actions.ASSISTANCE_REQUEST: {\n let ff = pendingRequests(state.assistanceRequest, action.data)\n return {\n ...state,\n assistanceRequest: {\n studentAsked: ff.studentAsked,\n pendingList: ff.pendingList\n }\n }\n }\n case Actions.SET_GVPAGE: {\n return {\n ...state,\n gvPage: action.data\n }\n }\n case Actions.SET_COUNTRY: {\n return {\n ...state,\n countryCode: action.data\n }\n }\n case Actions.SET_CLIENT_LOC: {\n return {\n ...state,\n clientLoc: action.data\n }\n }\n case Actions.SET_TEACHER: {\n return {\n ...state,\n teacher: action.data\n }\n }\n case Actions.SET_BOARD_TYPE: {\n return {\n ...state,\n adsEnable: checkAds(state.userProfile, action.data, state),\n boardType: action.data\n }\n }\n case Actions.SET_TAB: {\n return {\n ...state,\n tab: action.data\n }\n }\n case Actions.SET_NOUSER: {\n return {\n ...state,\n noUser: true\n }\n }\n case Actions.SET_USER: {\n setLocal(action.data)\n return {\n ...state,\n user: action.data\n }\n }\n case Actions.SET_EXP_REMIND: {\n return {\n ...state,\n remind: action.data\n }\n }\n case Actions.SET_USER_PROFILE: {\n setLocalPaidPlan(action.data);\n return {\n ...state,\n adsEnable: checkAds(action.data, state.boardType, state),\n userProfile: action.data\n }\n }\n\n case Actions.SET_TUTOR_GROUP: {\n return {\n ...state,\n tutorGroup: action.data\n }\n }\n\n case Actions.SET_TUTOR_USERTYPE: {\n return {\n ...state,\n tutorUsertype: action.data\n }\n }\n case Actions.SET_TUTOR_TOURDONE: {\n return {\n ...state,\n tutorTourDone: action.data\n }\n }\n case Actions.SET_SESSION_DIALOG: {\n return {\n ...state,\n sessionDialog: action.data\n }\n }\n case Actions.OPEN_AUTH_DIALOG: {\n return {\n ...state,\n authDialog: action.data\n }\n }\n case Actions.SET_CONFIG: {\n return {\n ...state,\n BoardConfig: { ...action.data }\n }\n }\n case Actions.ADD_ACTIVE: {\n let pp = state.activeUsers\n const data = action.data\n pp[data.id] = data\n return {\n ...state,\n activeUsers: { ...pp }\n }\n }\n case Actions.DELETE_ACTIVE: {\n let pp = state.activeUsers\n const data = action.data\n delete pp[data.id]\n return {\n ...state,\n activeUsers: { ...pp }\n }\n }\n case Actions.ADD_PARTICIPANT: {\n const data = action.data\n if (data.content && data.content.length > 0 && data.content.includes(\"microsoftteams\")) {\n try {\n let jj = JSON.parse(data.content)\n if (jj.email) {\n jj.email = removeMSTeamsEmail(jj.email)\n }\n data.email = removeMSTeamsEmail(data.email)\n data.content = JSON.stringify(jj)\n } catch {\n\n }\n }\n var idUse = getIdToUse(data)\n\n if (state.avatarDialogOpen) {\n let ppp = state.pendingParticipants;\n ppp.push({ oper: \"ADD\", data: data });\n\n return {\n ...state,\n pendingParticipants: [...ppp]\n }\n }\n\n let pp = state.participants\n pp[idUse] = data\n if (checkIfPartsUpdateNeeded(pp)) {\n gParts = pp;\n } else {\n return state;\n }\n return {\n ...state,\n participants: { ...pp }\n }\n }\n case Actions.REMOVE_PARTICIPANT: {\n const data = action.data\n let idUse = getIdToUse(data)\n\n if (state.avatarDialogOpen) {\n let ppp = state.pendingParticipants;\n ppp.push({ oper: \"REMOVE\", data: data });\n\n return {\n ...state,\n pendingParticipants: [...ppp]\n }\n }\n\n let pp = state.participants\n delete pp[idUse]\n gParts = pp;\n\n if (idUse in timedOutParticipants) {\n delete timedOutParticipants[idUse];\n }\n\n return {\n ...state,\n participants: { ...pp }\n }\n }\n case Actions.FLUSH_PARTICIPANT: {\n gParts = {};\n timedOutParticipants = {};\n\n return {\n ...state,\n pendingParticipants: [],\n participants: {}\n }\n }\n case Actions.AVATAR_DIALOG_OPEN: {\n return {\n ...state,\n avatarDialogOpen: action.data\n }\n }\n case Actions.PROCESS_PENDING_PARTICIPANTS: {\n let ppp = state.pendingParticipants;\n let pp = state.participants;\n\n for (let idx in ppp) {\n let item = ppp[idx];\n\n // Defensive check to prevent crash due to data being undefined\n if (!(item && item.data)) continue\n\n let idUse = getIdToUse(item.data)\n\n if (item.oper === \"ADD\") {\n pp[idUse] = item.data;\n } else {\n delete pp[idUse];\n\n if (idUse in timedOutParticipants) {\n delete timedOutParticipants[idUse];\n }\n\n }\n }\n\n if (checkIfPartsUpdateNeeded(pp)) {\n gParts = pp;\n }\n return {\n ...state,\n pendingParticipants: [],\n participants: { ...pp }\n }\n }\n case Actions.SET_COMMUNITYUSER: {\n setLocal(action.data)\n return {\n ...state,\n communityUser: action.data\n }\n }\n case Actions.SET_SPINNER_EVENT: {\n return {\n ...state,\n spinnerEvt: processSpinner(state.spinnerEvt, action.data, state.clockDrift)\n }\n }\n case Actions.SET_LETITSNOW_EVENT: {\n return {\n ...state,\n letItSnowEvt: processLetItSnow(state.letItSnowEvt, action.data, state.clockDrift)\n }\n }\n case Actions.SET_FDICE_EVENT: {\n return {\n ...state,\n fdiceEvt: processFdice(state.fDiceEvt, action.data, state.clockDrift)\n }\n }\n default:\n return state;\n }\n}\n\nexport default mainReducer\n","import React, { Suspense } from 'react';\nimport { lazyWithRetry } from './lazyWithRetry';\nimport { ThemeProvider } from '@material-ui/core/styles'\nimport { Provider } from 'react-redux'\nimport { createMuiTheme } from '@material-ui/core/styles';\nimport purple from '@material-ui/core/colors/purple';\nimport { Route, BrowserRouter as Router, Switch } from 'react-router-dom';\nimport { useCookies } from 'react-cookie';\nimport { CookiesProvider } from 'react-cookie';\nimport CookieConsent from './CookieConsent';\n\nimport { createStore } from 'redux';\nimport reducer from \"./store/reducer\"\nimport * as WBCReactGA from './WBCReactGA';\nconst HomePage = lazyWithRetry(() => import(/* webpackPrefetch: true, webpackChunkName: \"homepage\" */'./Home/HomePage'));\nconst App = lazyWithRetry(() => import(/* webpackPrefetch: true, webpackChunkName: \"app\" */'./App'));\nconst store = createStore(reducer,\n window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())\n// WBCReactGA.initialize('UA-169613319-1', { debug: false });\n\nconst theme = createMuiTheme({\n palette: {\n primary: purple,\n secondary: {\n main: \"#1CB1C4\"\n },\n },\n status: {\n danger: 'orange',\n },\n typography: {\n // In Chinese and Japanese the characters are usually larger,\n // so a smaller fontsize may be appropriate.\n fontSize: 7,\n },\n overrides: {\n MuiCssBaseline: {\n '@global': {\n '*': {\n 'scrollbar-width': 'thin',\n },\n '*::-webkit-scrollbar': {\n width: '6px',\n height: '6px',\n },\n '*::-webkit-scrollbar-track': {\n background: 'white'\n },\n '*::-webkit-scrollbar-thumb': {\n backgroundColor: 'grey',\n borderRadius: '2px',\n },\n }\n }\n }\n});\n\nexport default function AppOuter(props) {\n const [cookies] = useCookies(['wbcAnalyticsCC', 'wbcAdsCC']);\n\n React.useEffect(() => {\n if (cookies.wbcAnalyticsCC && cookies.wbcAnalyticsCC === \"true\") {\n window.wbcAnalyticsCC = true;\n WBCReactGA.initializeGoogleTagManager();\n WBCReactGA.initializeClarityTagManager();\n WBCReactGA.initializeGA();\n }\n }, [cookies])\n\n return (\n <div >\n <Provider store={store}>\n <CookiesProvider defaultSetOptions={{ path: '/' }}>\n <ThemeProvider theme={theme}>\n <Router>\n <Suspense fallback={<div>Loading...</div>}>\n <Switch>\n <Route exact path=\"/\" component={HomePage} />\n <Route component={App} />\n </Switch>\n </Suspense>\n </Router>\n { console.log(\"cookies.wbcAnalyticsCC = \", cookies)}\n {!cookies.wbcAnalyticsCC && <CookieConsent />}\n </ThemeProvider>\n </CookiesProvider>\n </Provider>\n </div >\n\n );\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './AppOuter';\nimport * as serviceWorker from './serviceWorker';\nimport './styles/iosStyles.css'\n\nrequire('./styles/indexBasic.scss')\n\n//window.LOG_LEVEL = 'DEBUG';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export const SET_USER = \"[MAIN] __SET_USER__ \"\nexport const SET_EXP_REMIND = \"[MAIN] __SET_EXP_REMIND \"\nexport const SET_USER_PROFILE = \"[MAIN] SET_USER_PROFILE\"\nexport const SET_TUTOR_GROUP = \"[MAIN] SET_TUTOR_GROUP\"\nexport const SET_TUTOR_USERTYPE = \"[MAIN] SET_TUTOR_USERTYPE\"\nexport const SET_TUTOR_TOURDONE = \"[MAIN] SET_TUTOR_TOURDONE\"\nexport const OPEN_AUTH_DIALOG = \"[MAIN] _OPEN_AUTH_DIALOG \"\nexport const SET_CONFIG= \"[MAIN] SET_CONFIG\"\nexport const ADD_PARTICIPANT= \"[MAIN] ADD_PARTICIPANT\"\nexport const REMOVE_PARTICIPANT= \"[MAIN] REMOVE_PARTICIPANT\"\nexport const FLUSH_PARTICIPANT= \"[MAIN] FLUSH_PARTICIPANT\"\nexport const PROCESS_PENDING_PARTICIPANTS = \"[MAIN] PROCESS_PENDING_PARTICIPANTS\"\nexport const AVATAR_DIALOG_OPEN = \"[MAIN] AVATAR_DIALOG_OPEN\"\nexport const ADD_ACTIVE= \"[MAIN] ADD_ACTIVE\"\nexport const DELETE_ACTIVE = \"[MAIN] DELETE_ACTIVE\"\nexport const SET_NOUSER = \"[MAIN] SET_NO_USER\"\nexport const SET_GVPAGE = \"[MAIN] SET_GVPAGE\"\nexport const SET_SESSION_DIALOG = \"[MAIN] SET_SESSION_DIALOG\"\nexport const SET_BOARD_TYPE = \"[MAIN] SET_BOARD_TYPE\"\nexport const SET_TAB = \"[MAIN] SET_TAB\"\nexport const SET_TEACHER = \"[MAIN] SET_TEACHER\"\nexport const SET_COUNTRY= \"[MAIN] SET_COUNTRY\"\nexport const SET_CLIENT_LOC= \"[MAIN] SET_CLIENT_LOC\"\nexport const RAISE_HAND= \"[MAIN] RAISE_HAND\"\nexport const ASSISTANCE_REQUEST= \"[MAIN] ASSISTANCE_REQUEST\"\nexport const CHAT_MSG= \"[MAIN] CHAT_MSG\"\nexport const TIMER_EVENT= \"[MAIN] TIMER_EVENT\"\nexport const BOARD_LOCK= \"[MAIN] BOARD_LOCK\"\nexport const PAGE_LOCK= \"[MAIN] PAGE_LOCK\"\nexport const SET_PALETTE= \"[MAIN] SET_PALETTE\"\nexport const SHOWCASE= \"[MAIN] SHOWCASE\"\nexport const SET_RICH_TEXT= \"[MAIN] SET_RICH_TEXT\"\nexport const SET_DICE= \"[MAIN] SET_DICE\"\nexport const SET_FOLLOW= \"[MAIN] SET_FOLLOW\"\nexport const SET_CLOCK_DRIFT= \"[MAIN] SET_CLOCK_DRIFT\"\nexport const SET_NOTIFICATION= \"[MAIN] SET_NOTIFICATION\"\nexport const SET_SYNC_DISABLED= \"[MAIN] SET_SYNC_DISABLED\"\nexport const SET_DRAWER_WALKER= \"[MAIN] SET_DRAWER_WALKER\"\nexport const SET_GRADING_WALKER= \"[MAIN] SET_GRADING_WALKER\"\nexport const SET_CLICK_MODE= \"[MAIN] SET_CLICK_MODE\"\nexport const SET_COMMUNITYUSER = \"[MAIN] SET_COMMUNITYUSER\"\nexport const SET_SPINNER_EVENT = \"[MAIN] SET_SPINNER_EVENT\"\nexport const SET_PERSONAL_CONFIG = \"[MAIN] SET_PERSONAL_CONFIG\"\nexport const SET_GRID_BROWSER = \"[MAIN] SET_GRID_BROWSER\"\nexport const SET_MATRIX_GRID = \"[MAIN] SET_MATRIX_GRID\"\nexport const SET_LETITSNOW_EVENT = \"[MAIN] SET_LETITSNOW_EVENT\"\nexport const SET_TIME_MACHINE = \"[MAIN] SET_TIME_MACHINE\"\nexport const SET_BACK_GROUND = \"[MAIN] SET_BACK_GROUND\"\nexport const SET_BOARD_TOOLS = \"[MAIN] SET_BOARD_TOOLS\"\nexport const SET_FDICE_EVENT = \"[MAIN] SET_FDICE_EVENT\"\nexport const ALL_EVENTS = \"[MAIN] ALL_EVENTS\"\nexport const FORM_SUBMIT = \"[MAIN] FORM_SUBMIT\"\nexport const UPDATE_ENGAGEMENT_SCORE = \"[MAIN] UPDATE_ENGAGEMENT_SCORE\"\nexport const MEETING_TO_JOIN = \"[MAIN] MEETING_TO_JOIN\"\nexport const SET_API_MODE = \"[MAIN] SET_API_MODE\"\nexport const SET_ENGAGEMENT_STICKER = \"[MAIN] SET_ENGAGEMENT_STICKER\"\nexport const SET_KEYB_MODE = \"[MAIN] SET_KEYB_MODE\"\nexport const SET_VIDEO_STATE = \"[MAIN] SET_VIDEO_STATE\"\nexport const SET_MODE = \"[MAIN] SET_MODE\"\nexport const SET_MOBILE_MODE = \"[MAIN] SET_MOBILE_MODE\"\nexport const SET_ALERT_MESSAGES = \"[MAIN] SET_ALERT_MESSAGES\"\nexport const POP_ALERT_MESSAGES = \"[MAIN] POP_ALERT_MESSAGES\"\nexport const SET_VIDEO_CONFIG = \"[MAIN] SET_VIDEO_CONFIG\"\nexport const PENDING_SUBSCRIPTIONS = \"[MAIN] PENDING_SUBSCRIPTIONS\"\nexport const SET_SHARED_SCREEN = \"[MAIN] SET_SHARED_SCREEN\"\nexport const SET_BOARD_RECORDING = \"[MAIN] SET_BOARD_RECORDING\"\nexport const ADD_CLASSPOLL_EVENT = \"[MAIN] ADD_CLASSPOLL_EVENT\"\nexport const SET_EMBEDDED_MODE = \"[MAIN] SET_EMBEDDED_MODE\"\nexport const SET_PAGE_ADDING = \"[MAIN] SET_PAGE_ADDING\"\nexport const SET_SHARED_SCREEN_DIALOG = \"[MAIN] SET_SHARED_SCREEN_DIALOG\"\n\nexport function setSharedScreenDialog(data) {\n return {\n type: SET_SHARED_SCREEN_DIALOG,\n data\n }\n}\nexport function setEmbeddedMode(data) {\n return {\n type: SET_EMBEDDED_MODE,\n data\n }\n}\nexport function addClassPollEvent(data) {\n return {\n type: ADD_CLASSPOLL_EVENT,\n data\n }\n}\n\nexport function setPageAdding(data) {\n return {\n type: SET_PAGE_ADDING,\n data\n }\n}\nexport function setBoardRecording(data) {\n return {\n type: SET_BOARD_RECORDING,\n data\n }\n}\nexport function setSharedScreen(data) {\n return {\n type: SET_SHARED_SCREEN,\n data\n }\n}\nexport function setPendingSubsciptions(data) {\n return {\n type: PENDING_SUBSCRIPTIONS,\n data\n }\n}\nexport function setVideoConfig(data) {\n return {\n type: SET_VIDEO_CONFIG,\n data\n }\n}\nexport function setAlertMessages(data) {\n return {\n type: SET_ALERT_MESSAGES,\n data\n }\n}\nexport function popAlertMessage() {\n let data = null\n return {\n type: POP_ALERT_MESSAGES,\n data\n }\n}\nexport function setMobileMode(data) {\n return {\n type: SET_MOBILE_MODE,\n data\n }\n}\nexport function setMode(data) {\n return {\n type: SET_MODE,\n data\n }\n}\nexport function setVideoState(data) {\n return {\n type: SET_VIDEO_STATE,\n data\n }\n}\nexport function setKeyBMode(data) {\n return {\n type: SET_KEYB_MODE,\n data\n }\n}\n\nexport function disableKeyBMode() {\n let data = {enable: false, lastKey: \"\"}\n return {\n type: SET_KEYB_MODE,\n data\n }\n}\n\nexport function setEngagementSticker(data) {\n return {\n type: SET_ENGAGEMENT_STICKER,\n data\n }\n}\nexport function setApiMode(data) {\n return {\n type: SET_API_MODE,\n data\n }\n}\nexport function meetingToJoin(data) {\n return {\n type: MEETING_TO_JOIN,\n data\n }\n}\nexport function updateEngagementScore(data) {\n return {\n type: UPDATE_ENGAGEMENT_SCORE,\n data\n }\n}\nexport function addFormSubmit(data) {\n return {\n type: FORM_SUBMIT,\n data\n }\n}\nexport function addAllEvents(data) {\n return {\n type: ALL_EVENTS,\n data\n }\n}\nexport function setBoardTools(data) {\n return {\n type: SET_BOARD_TOOLS,\n data\n }\n}\n\nexport function setBackGround(data) {\n return {\n type: SET_BACK_GROUND,\n data\n }\n}\n\nexport function setTimeMachine(data) {\n return {\n type: SET_TIME_MACHINE,\n data\n }\n}\nexport function setMatrixGrid(data) {\n return {\n type: SET_MATRIX_GRID,\n data\n }\n}\nexport function setGridBrowser(data) {\n return {\n type: SET_GRID_BROWSER,\n data\n }\n}\nexport function setClickMode(data) {\n return {\n type: SET_CLICK_MODE,\n data\n }\n}\n\nexport function setPersonalConfig(data) {\n return {\n type: SET_PERSONAL_CONFIG,\n data\n }\n}\n\nexport function setDrawerWalker(data) {\n return {\n type: SET_DRAWER_WALKER,\n data\n }\n}\n\nexport function setGradingWalker(data) {\n return {\n type: SET_GRADING_WALKER,\n data\n }\n}\n\nexport function setSyncDisabled(data) {\n return {\n type: SET_SYNC_DISABLED,\n data\n }\n}\nexport function setNotification(data) {\n return {\n type: SET_NOTIFICATION,\n data\n }\n}\nexport function setDrift(data) {\n return {\n type: SET_CLOCK_DRIFT,\n data\n }\n}\nexport function setFollow(data) {\n return {\n type: SET_FOLLOW,\n data\n }\n}\nexport function showDice(data) {\n return {\n type: SET_DICE,\n data\n }\n}\nexport function setRichText(data) {\n return {\n type: SET_RICH_TEXT,\n data\n }\n}\nexport function setShowcase(data) {\n return {\n type: SHOWCASE, \n data\n } \n}\nexport function setPalette(data) {\n return {\n type: SET_PALETTE, \n data\n } \n}\nexport function setBoardLock(data) {\n return {\n type: BOARD_LOCK, \n data\n } \n}\nexport function setPageLock(data) {\n return {\n type: PAGE_LOCK, \n data\n } \n}\nexport function setTimerEvent(data) {\n return {\n type: TIMER_EVENT, \n data\n } \n}\nexport function setRaiseHand(data) {\n return {\n type: RAISE_HAND, \n data\n } \n}\nexport function setChatMsg(data) {\n return {\n type: CHAT_MSG, \n data\n } \n\n}\nexport function assistanceRequest(data) {\n return {\n type: ASSISTANCE_REQUEST, \n data\n } \n}\n\nexport function setTeacher(data) {\n return {\n type: SET_TEACHER, \n data\n } \n}\n\nexport function setCountry(data) {\n return {\n type: SET_COUNTRY, \n data\n } \n}\n\nexport function setClientLoc(data) {\n return {\n type: SET_CLIENT_LOC,\n data\n }\n}\n\nexport function setBoardType(data) {\n return {\n type: SET_BOARD_TYPE, \n data\n } \n}\n\nexport function setTab(data) {\n return {\n type: SET_TAB, \n data\n } \n}\n\nexport function setSessionDialog(data) {\n return {\n type: SET_SESSION_DIALOG, \n data\n }\n}\n\nexport function setGVPage(data) {\n return {\n type: SET_GVPAGE,\n data\n }\n}\n\nexport function setNoUser() {\n return {\n type: SET_NOUSER,\n }\n}\n\nexport function setUser(data) {\n return {\n type: SET_USER,\n data\n }\n}\n\nexport function setNotificationRemind(data) {\n return {\n type: SET_EXP_REMIND,\n data\n }\n}\n\nexport function setUserProfile(data) {\n return {\n type: SET_USER_PROFILE,\n data\n }\n}\n\nexport function setTutorGroup(data) {\n return {\n type: SET_TUTOR_GROUP,\n data\n }\n}\n\nexport function setTutorUsertype(data) {\n return {\n type: SET_TUTOR_USERTYPE,\n data\n }\n}\n\nexport function setTutorTourDone(data) {\n return {\n type: SET_TUTOR_TOURDONE,\n data\n }\n}\n\nexport function openAuthDialog(data) {\n return {\n type: OPEN_AUTH_DIALOG,\n data\n }\n}\n\nexport function setBoardConfig(data) {\n if (data.starterMode) {\n data.fourToolsStudent = true\n }\n return {\n type: SET_CONFIG,\n data\n }\n}\nexport function addParticipant(data) {\n return {\n type: ADD_PARTICIPANT,\n data\n }\n}\nexport function removeParticipants(data) {\n return {\n type: REMOVE_PARTICIPANT,\n data\n }\n}\nexport function flushParticipants() {\n return {\n type: FLUSH_PARTICIPANT\n }\n}\nexport function processPendingParticipants() {\n return {\n type: PROCESS_PENDING_PARTICIPANTS\n }\n}\n\nexport function setAvatarDialogOpen(data) {\n return {\n type: AVATAR_DIALOG_OPEN,\n data\n }\n}\n\nexport function addActive(data) {\n return {\n type: ADD_ACTIVE,\n data\n }\n}\nexport function deleteActive(data) {\n return {\n type: DELETE_ACTIVE,\n data\n }\n}\n\nexport function setCommunityUser(data) {\n return {\n type: SET_COMMUNITYUSER,\n data\n }\n}\n\nexport function spinnerEvent(data) {\n return {\n type: SET_SPINNER_EVENT,\n data\n }\n}\n\nexport function fDiceEvent(data) {\n return {\n type: SET_FDICE_EVENT,\n data\n }\n}\n\nexport function getPageLock(pg) {\n const JOINURL = window.location.href.split(\"/board/\")\n var sessID = JOINURL[1].split(\"-pgNum-\")\n var match = false \n var ev = null \n for (let i=0; i< pg.events.length; i++) {\n const p = pg.events[i]\n var ff = p.id.split(\"-LockPage-\")\n if (ff[1] === sessID[1]) {\n match = true\n ev = p \n break \n }\n }\n return ({pgNum: sessID[1], locked: match, ev: ev})\n}\nexport function letItSnowEvent(data) {\n return {\n type: SET_LETITSNOW_EVENT,\n data\n }\n}","import ReactGA from 'react-ga';\n\nexport function event(props) {\n if (window.wbcAnalyticsCC) {\n ReactGA.event(props);\n }\n}\n\nexport function pageview(props) {\n if (window.wbcAnalyticsCC) {\n ReactGA.pageview(props);\n }\n}\n\nexport function exception(props) {\n if (window.wbcAnalyticsCC) {\n ReactGA.exception(props);\n }\n}\n\n// Google Analytics\nexport function initializeGA() {\n if (window.wbcAnalyticsCC) {\n ReactGA.initialize('UA-169613319-1', { debug: false });\n }\n}\n\n// Google Tag Manager\nexport function initializeGoogleTagManager() {\n console.log(\"Initializing Google Tag Manager\");\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= // eslint-disable-line eqeqeq\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','GTM-M8MPR46');\n}\n\nexport function initializeClarityTagManager() {\n (function(c,l,a,r,i,t,y){\n c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\n t=l.createElement(r);t.async=1;t.src='https://www.clarity.ms/tag/'+i;\n var y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n })(window, document, 'clarity', 'script', 'kkk0idu6gt');\n}","import { lazy } from 'react';\nimport * as mylocalStorage from \"./mylocalStorage\";\n\nexport const lazyWithRetry = (componentImport) =>\n lazy(async () => {\n const pageHasAlreadyBeenForceRefreshed = JSON.parse(\n mylocalStorage.getItem(\n 'page-has-been-force-refreshed'\n ) || 'false'\n );\n\n try {\n const component = await componentImport();\n\n mylocalStorage.setItem(\n 'page-has-been-force-refreshed',\n 'false'\n );\n\n return component;\n } catch (error) {\n if (!pageHasAlreadyBeenForceRefreshed) {\n // Assuming that the user is not on the latest version of the application.\n // Let's refresh the page immediately.\n mylocalStorage.setItem(\n 'page-has-been-force-refreshed',\n 'true'\n );\n return window.location.reload();\n }\n\n // The page has already been reloaded\n // Assuming that user is already using the latest version of the application.\n // Let's let the application crash and raise the error.\n throw error;\n }\n });","\nvar LOCAL_STORAGE = {}\n\nexport function getItem(name) {\n try {\n return localStorage.getItem(name)\n } catch {\n // console.error(\"cannot get storage\", name, LOCAL_STORAGE[name])\n return LOCAL_STORAGE[name];\n }\n}\n\nexport function setItem(name, value) {\n try {\n return localStorage.setItem(name, value) \n } catch {\n if (!(name in LOCAL_STORAGE) && (name === \"mystoreID\")) {\n alert(\"Cookies are disabled. Whiteboard.Chat functionality will be impaired.\");\n }\n LOCAL_STORAGE[name] = value;\n // console.error(\"cannot set storage:\", name, \"value:\", value)\n return value;\n }\n}\n\n\nexport function removeItem(name) {\n try {\n return localStorage.removeItem(name) \n } catch {\n delete LOCAL_STORAGE[name];\n // console.error(\"cannot remove storage\", name) \n return null \n }\n}\n\nexport function clear() {\n try {\n return localStorage.clear() \n } catch {\n LOCAL_STORAGE = {};\n // console.error(\"cannot clear\") \n return null \n }\n}\n","import Translations from './translations.json';\nimport GetLang from '../LangSettings';\n\nvar language = \"EN\";\n\nexport function setLangauge() {\n language = GetLang();\n if (!Translations[language]) {\n language = \"EN\"\n }\n}\n\nconst Translate = (string) => {\n if ((language && language!==\"EN\")) {\n const translated = Translations[language][string];\n if (translated) {\n return translated;\n } else {\n return string\n }\n } else {\n return string\n }\n};\n\nexport default Translate;"],"sourceRoot":""}