{"version":3,"sources":["LangSettings.js","store/reducer.js","AppOuter.js","serviceWorker.js","index.js","store/actions.js","WBCReactGA.js","mylocalStorage.js","lazyWithRetry.js","Translator/Translations.js","CookieConsent.js"],"names":["GetLang","string","language","lang","window","personalConfig","studLang","boardConfig","parsedLang","JSON","parse","parsedStudLang","sessLang","ll","mylocalStorage","initialState","user","userProfile","undefined","tutorGroup","tutorUsertype","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","Date","getTime","timedOut","key","obj1","obj2","KEEPALIVE_TIMEOUT_SECONDS","checkIfPartsUpdateNeeded","newParts","removeMSTeamsEmail","em","email","includes","split","replace","pendingTimer","processDice","e","classDice","teacherDice","rollerName","inval","value","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","processPoll","d","cp","question","forEach","q","mainReducer","action","type","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","useCookies","cookies","React","useEffect","wbcAnalyticsCC","WBCReactGA","CookiesProvider","defaultSetOptions","path","ThemeProvider","fallback","exact","component","console","log","CookieConsent","location","hostname","match","require","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","message","SET_USER","SET_EXP_REMIND","SET_USER_PROFILE","SET_TUTOR_GROUP","SET_TUTOR_USERTYPE","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","openAuthDialog","setBoardConfig","starterMode","fourToolsStudent","addParticipant","flushParticipants","processPendingParticipants","setAvatarDialogOpen","deleteActive","setCommunityUser","spinnerEvent","fDiceEvent","getPageLock","pg","sessID","href","p","pgNum","letItSnowEvent","event","ReactGA","pageview","exception","initializeGA","initialize","debug","initializeGoogleTagManager","w","s","l","f","getElementsByTagName","j","createElement","async","src","parentNode","insertBefore","initializeClarityTagManager","a","r","t","y","arguments","LOCAL_STORAGE","getItem","localStorage","setItem","alert","removeItem","clear","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","reload","Translations","Translate","translated","setCookie","useState","insideMSTeams","setInsideMSTeams","cookiesAccepted","setUTCMilliseconds","now","expires","sameSite","wbcAdsCC","onlyAnalyticsCookiesAccepted","cookiesPanelClosed","microsoftTeams","getContext","context","msHost","app","host","setTimeout","parent","className","mdUp","target","rel","onClick","aria-label","smDown","alt"],"mappings":"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","file":"static/js/main.856893b9.chunk.js","sourcesContent":["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 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 (!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_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}","// 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 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}\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}","\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 { 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 });","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;","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}"],"sourceRoot":""}