{"version":3,"sources":["../../blackbox/Scripts/Libraries/state-machine/state-machine.min.js","Stepper/stepper.js","Stepper/stepper.factory.js","Stepper/stepper.component.js","Stepper/stepper.header.js","Stepper/stepper.loginHeader.js","Stepper/stepper.controlBar.js","Stepper/stepper.loginControlBar.js","Stepper/stepper.step.js","Stepper/stepper.card.js","Stepper/stepper.button.js","Shells/base.js","Shells/header.js","Shells/mastershell.js","NetworkDiagnostics/nd.js","NetworkDiagnostics/nd.bandwidthtester.js","NetworkDiagnostics/nd.capacitycalculator.js","Stepper/Cards/card_av_base.js","Stepper/Cards/card_av_camera.js","Stepper/Cards/card_av_sound.js","Stepper/Cards/card_av_recorder.js","Stepper/Cards/card_av_video.js","Stepper/Cards/card_av_tts2.js","Stepper/Cards/card_network.js","Stepper/Cards/card_network_browser.js","Stepper/Cards/card_network_bandwidth.js","Stepper/Cards/card_rtc_connectivity.js","Stepper/Steps/Diagnostics/step_networkcheck.js","Stepper/Steps/Diagnostics/step_ttscheck.js","Stepper/Steps/Diagnostics/step_avCheck.js","Stepper/Steps/Diagnostics/step_rtcConnectivityCheck.js","Shells/diagnosticshell.js"],"names":["tds","window","Stepper","STEPPER","CONTAINER","_registeredSteps","_registeredCards","_registeredButtons","constructor","el","controlBar","arguments","length","ControlBar","console","error","_controlBar","_el","$","get","_$stepContainer","_isRendered","_isLoading","_step","_progressInstance","Util","Event","Emitter","$el","currentStep","isLoading","Steps","Cards","Buttons","render","_renderStepper","_renderComponents","$stepper","append","Shells","Header","init","messages","manager","processLanguage","scrollTop","beforeRender","beforeAttach","html","_hideProgress","loadStep","step","Step","Error","beforeLeave","_showProgress","dispose","setControls","controls","on","_fireTransition","forEach","control","beforeEnter","ex","MasterShell","reportError","Dialog","showProgressInstance","hideProgress","transitionName","params","fire","remove","removeAllListeners","Factory","create","stepper","stateMachine","steps","components","setTimeout","call","StateMachine","Object","assign","data","methods","onBeforeTransition","lifecycle","newStep","newStepClass","to","concat","Promise","resolve","reject","then","success","from","transition","setFocus","delegateEventSplitter","Component","tagName","className","template","document","createElement","addClass","_template","_events","delegateEvents","templateFunc","_scopedTemplate","eval","templateString","cb","context","dataKeys","dataVals","key","push","func","Function","apply","_getEventKey","event","selector","addEvent","handler","removeEvent","addClickEvent","method","_getHandlerMethod","e","which","removeClickEvent","undelegateEvents","match","delegate","bind","eventName","listener","off","undelegate","attr","HEADER","LoginHeader","exitButton","Browser","isSecure","storage","getTestee","userInfo","infoParts","join","_requestLogoutApproval","showPrompt","Messages","_logout","Student","Storage","getTestProperties","API","pauseTest","logout","CONTROL_BAR","_controls","$controlContainer","find","LoginControlBar","badgeOpen","inPTMode","isProxyLogin","getAppSetting","showLaunchPad","badgeHidden","ptMode","testSiteLink","year","Date","getFullYear","evt","preventDefault","stopPropagation","secureBrowser","api","releaseLockDown","href","target","location","TITLE","id","title","titleKey","subtitle","subtitleKey","_id","_title","_titleKey","_subtitle","_subtitleKey","_cards","Map","_renderedCards","_errors","_setValidationSummaryDelegate","debounce","_setValidationSummary","_instructionsCard","_initInstructionsCard","register","slice","instructionsCard","message","_getInstructionsContent","Instructions","stepId","instructionsContentKey","addCard","instructionsKey","session","getTestSession","isRemote","remoteInstructionsKey","remoteInstructionsMessage","getAlt","_cardBeforeRender","all","getCards","filter","card","map","templateData","_setDocumentTitle","_renderCard","afterRender","stepTitle","pageTitle","isCardRendered","getCard","indexOf","Array","values","hasCard","Card","has","_validate","_setError","set","removeCard","delete","addControl","controlOptions","Button","_onControlClick","validate","onClick","_clearValidationSummary","setCardError","cardId","setError","silent","$errors","translation","removeClass","_setErrorFocus","empty","$focusError","scrollToElement","force","$elementToScroll","focusElement","element","$elementToFocus","focus","preventScroll","elementTop","offset","top","elementHeight","outerHeight","$stepContainer","parent","containerTop","containerHeight","height","containerBottom","percentage","Math","floor","containerScroll","abs","animate","name","ERROR_BOX","_$error","getData","keys","hasClass","warn","$errorEl","hideError","_get","toggleClass","isArray","param","encodeURIComponent","clearError","validateStep","toggleCheckmark","value","addCheckmark","removeCheckmark","text","i18n","transitionParams","handlerContext","isSubmit","_text","_handler","_handlerContext","_transition","_transitionParams","click","Base","ShellBase","BUTTON_CLASSES","ttsReadPage","instructions","settings","close","DISABLED_CLASS","ShellHeader","toggleSettingsButton","isVisible","_toggleButtonVisibility","_getButton","_onSpeakStatusChangeProxy","_onSpeakStatusChange","_addClickEvent","_onSettingsClick","tts","$ttsPageButtonPlaceHolder","elParent","elToSpeak","getElementById","language","getAttribute","_speakButton","SpeakButton","ParserFilters","invisibleContent","speakMsgKey","speakText","stopMsgKey","stopText","buttonCSSClass","getNodes","_window$LoginShell","LoginShell","stepperComponents","frame","doc","contentDocument","body","highlighter","_buttonRendering","_stepTransition","events","button","updateButtons","updateLoginInfo","showSettingsButton","canShowGlobalAccs","Config","languageUIToggleEnabled","_updateReadPageButton","pageName","stepID","ReviewShell","ttsSupported","ttsReadPageSetting","toLowerCase","accProps","getAccProps","accList","getAccList","isAfterAccs","hasTTS","tdsLang","getLanguage","setLanguage","testee","displayName","studentId","sessionId","testProperties","testName","$userInfo","getOppInfo","stop","shell","returnStep","state","ttsStatus","$btnTTSReadPageContainer","$btnTTSReadPage","TTS","Status","Stopped","Playing","speaking","TDS","MS","getAccommodations","testAccommodations","Accommodations","Manager","getDefault","globalAccommodations","accommodations","removeCSS","updateLanguage","setLanguageUI","applyCSS","setup","mainAccs","dialogAccs","dialog","onBeforeSave","subscribe","onSave","onCancel","accs","currentGlobalAccs","getSelectedJson","acc","selectCodes","type","codes","YUE","ToolManager","hideAll","clone","show","getLanguageUI","setITSDocumentAttribute","msg","showAlert","Diagnostics","report","setupAccs","removeAccs","applyAccs","onShellReady","preinit","KeyManager","onKeyEvent","obj","keyCode","stopEvent","Help","getKey","lang","panel","headerText","createPanel","toggle","currentPage","idleTimer","IdleTimer","timeout","logoutProctor","start","isChromeOS","BatteryMonitor","UI","onShellUnload","unloader","initiateUnload","closeWindow","Cache","isAvailable","YAHOO","later","showProgress","closeBrowser","onDOMReady","Events","showInfo","getFrame","Dom","copyCSSFrame","networkDiagnostics","riskTypes","unknown","veryLow","moderate","high","nearCertain","BandWidthTester","Timer","performance","testSettings","download_url","upload_url","max_download_size","max_upload_size","max_test_duration","max_parallel_requests","delay_between_tests","download_grace_time","upload_grace_time","overheadCompensationFactor","uploadData","Blob","ArrayBuffer","NetworkTester","_testInProgress","_tasks","_interval","_startTime","_graceTime","_graceTimeDone","_totalLoaded","_clearTasks","tasks","entries","task","onprogress","onload","onerror","abort","_startTimer","now","setInterval","_update","_stopTimer","clearInterval","_runTask","upload","prevLoaded","xhr","XMLHttpRequest","status","promise","isPending","progressHandler","loadDiff","loaded","isNaN","isFinite","uploadUrl","random","open","setRequestHeader","send","downloadUrl","resolveAssetUrl","duration","instantSpeed","speed","toFixed","_runNetworkTest","Q","defer","i","_runDownloadTest","ds","_runUploadTest","us","downloadResults","lineSpeed","uploadResults","byUser","log","CapacityCalculator","_veryLow","_moderate","_high","_risk","_probability","_recommendedNumber","prototype","getRisk","getRecommendedStudentCount","probabilityWithinCapacity","goodput","itemsize","students","responseTime","maxItems","_maxItemsPerSecond","_probabilityWithinCapacity_1","_calculateRisk","_recommendNumber","itemSize","probability","max1","_probabilityWithinCapacityPerSecond_1","_probabilityBelowEquilibrium","respTime","Statistics","poisson","equilibriumTime","meanResponses","recommendation","ceil","direction","lastRecommendation","p","dir","max","round","DONE","AvCheckBase","_validated","_doneId","validated","doneId","getAvCheck","_mark","markPassed","markFailed","options","$doneEl","removeAttr","setAvCheck","Rtc","deviceManager","DeviceManager","allCameras","disconnectedDevice","deviceStore","videoInputDevices","TEMPLATE","SELECT_TEMPLATE","errorCodes","NotAllowedError","NotFoundError","NotReadableError","TypeError","BrowserNotSupported","defaultOptions","required","AvCameraCheck","rendererOptions","_options","_disposeResources","_showErrorView","_videoEl","_video","userAckReceived","agreeCb","prop","isBrowserSupportAccessToMediaDevices","_disableAction","_hideAllViews","hide","_showCheckView","err","headerKey","instructionKey","logServerError","errTemplate","_showSelectView","cameras","_getCameras","$selectEl","_cameraSelectRenderer","renderer","createCameraSelectUI","showCameraPreview","deviceId","constraints","getMediaConstraints","saveMediaConstraintsToSessionStorage","scanForMediaDevices","checkForMediaPermission","_toggleConnectCamera","disabled","_userAckReceived","canAskForMediaPermission","connectCameraEl","_enableAction","actionEl","_connectCamera","videoEl","localMediaStream","navigator","mediaDevices","getUserMedia","videoTrack","getTracks","track","kind","srcObject","MediaStream","play","_disconnectCamera","pause","_onConnectCameraClick","_onPassClick","_onSkipClick","skipAlert","altText","getPromise","_onFailClick","_onRetryClick","_localMediaDevice","rtc","mediaManager","ERROR","AvSoundCheck","_audioMedium","_enableBtnPassCallback","_enableBtnPass","onidle","unsubscribe","elAudioPlayer","hasRecorderCheck","$audioControls","delay","audioMedium","instanciateMedium","types","audio","sysVol","getSystemVolume","getAccommodationProperties","hasSoundPlayVolCheck","css","elVolSliderContainer","_volumeSlider","Slider","appendChild","getEl","onChange","sliderValue","fromUserInterface","onEnd","setSystemVolume","curVol","setValue","$btnPass","_toggleSoundCheck","currentTarget","Audio","stopAll","Recorder","PREAMBLE","RECORDER","SOURCES","RECORDER_ERROR","PERMISSION_ERROR","Sections","Preamble","Sources","RecorderError","PermissionError","AvRecorderCheck","_recorderPermissionPromise","_audioSourceSelect","_audioSourceSelectPromise","_audioSourceSelectController","_audioRecorder","_recorderSupported","initialize","Widget","createRecorder","_enableButton","onPlayStop","checkPermission","createSourceSelect","setSource","removeSourceFromSessionStorage","saveSourceInSessionStorage","$button","_toggleSection","section","s","_showRecorderPreamble","RecorderPreamble","granted","_showRecorderCheck","RecorderPermissionError","catch","classNameEvent","_showSourcesCheck","sourcesSection","sourcesPlaceholder","sourcesError","sourcesContent","buildDeviceList","_showSoundError","returnSection","getSources","sources","_onRecorderRetryClick","_onSourceSelectClick","_onNoSuitableSourceClick","_onSourceSelectedClick","AvVideoCheck","noSound","hasVideoOnlyPlayback","videoElement","videoFactory","getFactoryForContent","videoPromise","instanciate","medium","_toggleVideoCheck","getTTSSettings","langs","getLanguages","getXmlFromITS","voice","util","getVoice","volume","getVolume","pitch","getPitch","rate","getRate","\"#sectionTTSCheckHeader\"","en","es","prefix","\".instructions-top\"","\"#checkSoundButtons .actions h3\"","\".instructions-bottom\"","\".btn-sound-yes\"","\".btn-sound-no\"","\".btn-skip\"","\"#checkErrorDiv > h2\"","\"#checkErrorDiv .instructions > p\"","\"#checkErrorDiv .instructions > div\"","\"#checkErrorDiv .actions > h3\"","\".btn-error-try-again\"","\".btn-continue-error\"","\"#ttsNotAvailable > h2\"","\"#ttsNotAvailable .instructions > p\"","\"#ttsNotAvailable .actions > h3\"","DEFAULT_VOLUME","DEFAULT_PITCH","DEFAULT_RATE","AvTTSCheck","config","_cfg","_defaultSettings","_getSettings","_DOM","_ttsCheck","_curIndexCheckLanguage","_checkLanguages","languageDisablerOn","getTTSLanguages","permitLanguage","hasTTSDisablePassages","hasTTSDisableItems","checked","_connectEvents","_initialSettings","showButtons","lengthInPixels","showPitch","maxPitch","minPitch","showVolume","maxVolume","minVolume","showRate","maxRate","minRate","showAdjustments","ttsTestMessage","showVoicePacks","voicePacks","defaultVoice","requireTTSCheck","getVoices","showVoicePackControl","showVolumeControl","supportsVolumeControl","showPitchControl","supportsPitchControl","showRateControl","supportsRateControl","_init","_reset","initialSettings","currentSettings","_ttsCompletedDelegate","_enablePassButton","NONE","DEFAULTS","reset","checkLanguage","setVolume","setPitch","setRate","_render","_hideAll","_renderErrors","_renderSections","_show","getStatus","NotSupported","checkLang","hasVoicePack","_disablePassButton","_showTTSCheck","els","_hide","_hideTTSCheck","_error","_nextLang","_soundOK","_continue","every","_noSound","_tryAgain","getLanguageCode","Check","parms","property","setVoice","elTTSCheck","applyMessages","elTTSCard","destroy","removeListener","selectors","selectTestEl","studentCountEl","downloadEl","uploadEl","bandwidthEl","launchBtnEl","defaultDisclaimer","CardNetwork","_userInput","isCardRenderComplete","clientDiagnosticSettings","isSpeedTestInProgress","launchBtn","osLabel","BrowserInfo","browserLabel","label","isSecureBrowser","_configureClient","_enableLaunchBtn","clientId","DiagnosticShell","clientTestInfo","atsEl","testinfo","subjectInfo","subject","val","accs_global","_onKeydown","ke","_startSpeedTest","_onClick","me","errorSummary","_clearResults","selectedTest","numStudents","parseInt","testSubjectInfo","si","numStudentsToTest","testInfo","_showProgressBar","_disableLaunchBtn","speedTest","ntResolver","results","_displayResults","_hideProgressBar","resultsEl","disclaimer","messageClass","userInput","responsetime","capacityCalculator","probablityOfSuccess","recommendedCount","risk","bsEl","BrowserInfoCard","defaultMessage","instructionsBody","bandwidthResultBody","webcamControl","testSubjectControl","studentCountControl","userType","selectedUserType","webcamEl","isWebcamOn","estimatedCapacity","resultsContainerEl","userTypes","remoteStudent","remoteProctor","schoolDistrictAdmin","messageTemplates","insufficientBandwidth","default","meetsBandwidth","BandwidthInfoCard","_bandwidthTester","instructionTemplate","_renderUserControls","_renderStudentOnlyCheck","_renderRemoteProctorCheck","_renderSchoolDistrictAdminCheck","tscEl","_start","_showResults","actualDownloadSpeed","actualUploadSpeed","riskType","recommendedDownloadSpeed","recommendedUploadSpeed","REPORT_TEMPLATE","SECTIONS","CheckRtcConnectivity","RtcConnectivityReport","messageStore","WEBRTC_NOT_SUPPORTED","SIGNALING_SERVICE_NOTREACHABLE","STUN_NOTREACHABLE","TURN_NOTREACHABLE","WEBRTC_DATACHANNEL_NOTSUPPORTED","WEBRTC_MEDIA_NOTSUPPORTED","RtcConnectivityCheck","_state","_inProgress","didWePassEveryTest","connectivity","complete","result","checkState","getRtcConnectivityCheck","_initRtcConnectivityCheck","_markDone","_startTest","diag","RtcConnectionTestState","url","signalingUrl","jwtFromServer","rtctoken","identity","Identity","fromToken","tests","RtcConnectionTestSuite","signaling","peer","setRtcConnectivityCheck","_generateReport","_renderHumanReadableSummary","JSON","stringify","$summaryEl","categories","category","categoryTestResults","defaults","camera","recorder","video","NetworkCheck","_loadCards","_loadControls","version","requireAVCheck","hasSoundPlayCheck","hasVideoPlayCheck","requireHWChecks","requiredHW","hardwarechecks","isDataEntry","remoteRules","Remote","getRules","media","requireRemoteConnectivityCheck","returnToLogin","TTSCheck","hwCheckdefaults","AvCheck","getId","EventManager","defaultBodyCSS","proxy","startSection","$container","querystring","QueryString","parse","c","messageContexts","loadConfig","transitions","getTransitions","loadGlobalAccommodations","loadClientSettings","baseUrl","json","_fetchConfig","cs","client","accsJson","importJson","selectDefaults","response","returnUrl","returnurl"],"mappings":"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","file":"tds_sat_diagnosticshell.js","sourcesContent":["!function(t,n){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(\"StateMachine\",[],n):\"object\"==typeof exports?exports.StateMachine=n():t.StateMachine=n()}(this,function(){return function(t){function n(e){if(i[e])return i[e].exports;var s=i[e]={i:e,l:!1,exports:{}};return t[e].call(s.exports,s,s.exports,n),s.l=!0,s.exports}var i={};return n.m=t,n.c=i,n.i=function(t){return t},n.d=function(t,i,e){n.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(i,\"a\",i),i},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p=\"\",n(n.s=5)}([function(t,n,i){\"use strict\";t.exports=function(t,n){var i,e,s;for(i=1;i=0:this.state===t},isPending:function(){return this.pending},can:function(t){return!this.isPending()&&!!this.seek(t)},cannot:function(t){return!this.can(t)},allStates:function(){return this.config.allStates()},allTransitions:function(){return this.config.allTransitions()},transitions:function(){return this.config.transitionsFor(this.state)},seek:function(t,n){var i=this.config.defaults.wildcard,e=this.config.transitionFor(this.state,t),s=e&&e.to;return\"function\"==typeof s?s.apply(this.context,n):s===i?this.state:s},fire:function(t,n){return this.transit(t,this.state,this.seek(t,n),n)},transit:function(t,n,i,e){var s=this.config.lifecycle,r=this.config.options.observeUnchangedState||n!==i;return i?this.isPending()?this.context.onPendingTransition(t,n,i):(this.config.addState(i),this.beginTransit(),e.unshift({transition:t,from:n,to:i,fsm:this.context}),this.observeEvents([this.observersForEvent(s.onBefore.transition),this.observersForEvent(s.onBefore[t]),r?this.observersForEvent(s.onLeave.state):a,r?this.observersForEvent(s.onLeave[n]):a,this.observersForEvent(s.on.transition),r?[\"doTransit\",[this]]:a,r?this.observersForEvent(s.onEnter.state):a,r?this.observersForEvent(s.onEnter[i]):a,r?this.observersForEvent(s.on[i]):a,this.observersForEvent(s.onAfter.transition),this.observersForEvent(s.onAfter[t]),this.observersForEvent(s.on[t])],e)):this.context.onInvalidTransition(t,n,i)},beginTransit:function(){this.pending=!0},endTransit:function(t){return this.pending=!1,t},failTransit:function(t){throw this.pending=!1,t},doTransit:function(t){this.state=t.to},observe:function(t){if(2===t.length){var n={};n[t[0]]=t[1],this.observers.push(n)}else this.observers.push(t[0])},observersForEvent:function(t){for(var n,i=0,e=this.observers.length,s=[];i control.on('transition', this._fireTransition, this));\r\n\r\n // execute new step beforeEnter prior to rendering\r\n // if beforeEnter return false then skip rendering but return true so that transition will take\r\n if (await this._step.beforeEnter() === false) {\r\n return true;\r\n }\r\n\r\n // re-render the stepper\r\n await this._renderComponents();\r\n\r\n } catch (ex) {\r\n MasterShell.reportError(ex, true);\r\n return false;\r\n } finally {\r\n this._isLoading = false;\r\n }\r\n\r\n return true;\r\n\r\n }\r\n\r\n _showProgress() {\r\n this._progressInstance = tds.Dialog.showProgressInstance();\r\n }\r\n\r\n _hideProgress() {\r\n tds.Dialog.hideProgress(this._progressInstance);\r\n }\r\n\r\n // bubble transition event up from controls so that state machine (and others) can listen\r\n _fireTransition(transitionName, params) {\r\n this.fire('transition', transitionName, params);\r\n }\r\n\r\n dispose() {\r\n\r\n // dispose of the current step\r\n if (this._step) {\r\n this._step.dispose();\r\n this._step = null;\r\n }\r\n\r\n // dispose of bottom control bar\r\n this._controlBar.dispose();\r\n this._controlBar = null;\r\n\r\n // remove element from dom\r\n this.$el.remove();\r\n this._el = null;\r\n this._$stepContainer = null;\r\n\r\n this._isRendered = null;\r\n this._isLoading = null;\r\n this._progressInstance = null;\r\n\r\n this.removeAllListeners();\r\n\r\n }\r\n\r\n }\r\n\r\n return Stepper;\r\n\r\n})();","/*\r\n * Factory class for creating a stepper instance with corresponding components (i.e. state machine)\r\n */\r\n\r\n(function (Stepper) {\r\n \r\n class Factory {\r\n\r\n static create({ stepper = {}, stateMachine = {}, steps = null } = {}) {\r\n\r\n const components = {\r\n stepper: new Stepper(stepper)\r\n };\r\n\r\n // if state options provided then create a state machine and \r\n if (stateMachine && steps) {\r\n // add listener for 'transition' event to toggle transition in state machine\r\n components.stepper.on('transition', (transitionName, params) => {\r\n if (components.stepper.isLoading) {\r\n setTimeout(() => components.stateMachine[transitionName].call(components.stateMachine, params), 0);\r\n } else {\r\n components.stateMachine[transitionName].call(components.stateMachine, params);\r\n }\r\n });\r\n\r\n // TODO: add param validation\r\n // create state machine object\r\n components.stateMachine = new StateMachine(Object.assign({\r\n data: {\r\n steps\r\n },\r\n methods: {\r\n onBeforeTransition: function(lifecycle, params) {\r\n\r\n let newStep;\r\n\r\n try {\r\n // check that step class is in the map\r\n const newStepClass = this.steps[lifecycle.to];\r\n if (newStepClass == null) {\r\n throw new Error(`Could not find step with key: ${lifecycle.to}`);\r\n }\r\n\r\n // instantiate instance of the new step\r\n newStep = new newStepClass(params);\r\n } catch (ex) {\r\n MasterShell.reportError(ex, true);\r\n return false;\r\n }\r\n\r\n // if loadStep fails (false from beforeLeave) then cancel the transition\r\n // return promise to allow for async cancellation\r\n return new Promise((resolve, reject) => {\r\n components.stepper.loadStep(newStep).then(success => {\r\n if (success !== false) {\r\n // if this is not the initial load then set focus to the top of the step\r\n if (lifecycle.transition !== 'init') {\r\n newStep.setFocus();\r\n }\r\n\r\n resolve();\r\n } else {\r\n reject(`Load step failed. Remain in ${lifecycle.from}`);\r\n }\r\n });\r\n });\r\n\r\n }\r\n }\r\n }, stateMachine));\r\n\r\n }\r\n\r\n return components;\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.create = Factory.create;\r\n\r\n})(tds.Stepper);","/*\r\n * Base class for the different component classes used in the Stepper\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n const delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\r\n\r\n class Component {\r\n\r\n constructor({ el = null, tagName = 'div', className = '', template = '' } = {}) {\r\n\r\n // use the element passed in if exists or just create a div for the container\r\n this._el = el || document.createElement(tagName);\r\n this.$el.addClass(className);\r\n\r\n this._template = template;\r\n\r\n this._events = {};\r\n\r\n Util.Event.Emitter(this);\r\n\r\n }\r\n\r\n get el() { return this._el; }\r\n get $el() { return $(this._el); }\r\n\r\n render() {\r\n // TODO: is this necessary?\r\n this.delegateEvents();\r\n }\r\n\r\n template(data) {\r\n\r\n try {\r\n const templateFunc = this._scopedTemplate(function () {\r\n return eval(templateString);\r\n }, this);\r\n return templateFunc(`\\`${this._template}\\``, data);\r\n } catch (ex) {\r\n console.error('Error when executing template: ', ex);\r\n }\r\n\r\n return '';\r\n\r\n }\r\n\r\n _scopedTemplate(cb, context) {\r\n return function (templateString, data) {\r\n const dataKeys = [];\r\n const dataVals = [templateString];\r\n for (let key in data) {\r\n dataKeys.push(key);\r\n dataVals.push(data[key]);\r\n }\r\n const func = new Function('templateString', ...dataKeys, 'return (' + cb + ')();');\r\n return func.apply(context, dataVals);\r\n }\r\n }\r\n\r\n _getEventKey(event, selector) {\r\n return `${event + (selector ? ` ${selector}` : '')}`;\r\n }\r\n\r\n // add an event to the hash\r\n // event: name of the event to listen to\r\n // selector: optional jQuery selector for the target, pass null to listen to event on entire component\r\n // handler: callback for the event, may be a function OR a string value with a function name that is on the component class\r\n // Example: this.addEvent('click', 'button', 'onClick') attaches a click event for all button elements and call the onClick function on the class\r\n addEvent(event, selector, handler) {\r\n this._events[this._getEventKey(event, selector)] = handler;\r\n }\r\n\r\n // remove an event from the hash\r\n removeEvent(event, selector) {\r\n delete this._events[this._getEventKey(event, selector)];\r\n }\r\n\r\n // add a click event which will include the corresponding keypress for enter/space\r\n addClickEvent(selector, handler) {\r\n\r\n // check that handler is function or exists as function on component\r\n const method = this._getHandlerMethod(handler);\r\n if (!method) return;\r\n\r\n this.addEvent('click.clickEvent', selector, method);\r\n this.addEvent('keypress.clickEvent', selector, (e) => {\r\n // trigger method with enter/space\r\n if (e.which === 13 || e.which === 32) {\r\n method.call(this, e);\r\n }\r\n\r\n return true;\r\n });\r\n\r\n }\r\n\r\n // remove a click event\r\n removeClickEvent(selector) {\r\n this.removeEvent('click.clickEvent', selector);\r\n this.removeEvent('keypress.clickEvent', selector);\r\n }\r\n\r\n delegateEvents() {\r\n\r\n this.undelegateEvents();\r\n for (const key in this._events) {\r\n const handler = this._events[key];\r\n\r\n const method = this._getHandlerMethod(handler);\r\n if (!method) continue;\r\n\r\n // split key into eventName and selector and delegate event\r\n const match = key.match(delegateEventSplitter);\r\n this.delegate(match[1], match[2], method.bind(this));\r\n }\r\n\r\n }\r\n\r\n delegate(eventName, selector, listener) {\r\n this.$el.on(`${eventName}.delegateEvents`, selector, listener);\r\n }\r\n\r\n undelegateEvents() {\r\n this.$el.off('.delegateEvents');\r\n }\r\n\r\n undelegate(eventName, selector, listener) {\r\n this.$el.off(`${eventName}.delegateEvents`, selector, listener);\r\n }\r\n\r\n _getHandlerMethod(method) {\r\n\r\n // if value is not a function then check the component's proto for the callback\r\n if (typeof method !== 'function') {\r\n method = this[method];\r\n }\r\n\r\n // if does not exist or still not a function then warn and skip\r\n if (!method || typeof method !== 'function') {\r\n console.error(`Could not find listener for \"${key}: ${this._events[key]}\".`);\r\n return null;\r\n }\r\n\r\n return method;\r\n\r\n }\r\n\r\n dispose() {\r\n\r\n this.$el.remove();\r\n\r\n this._el = null;\r\n this._template = null;\r\n this._events = null;\r\n\r\n this.removeAllListeners();\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.Component = Component;\r\n\r\n})(tds.Stepper);","/*\r\n * Header element for the Stepper\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n class Header extends Stepper.Component {\r\n\r\n constructor({ template = '' } = {}) {\r\n\r\n super({\r\n className: 'tds-banner',\r\n template\r\n });\r\n\r\n this.$el.attr('id', 'tds-banner');\r\n this.$el.attr('role', 'banner');\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.Header = Header;\r\n\r\n})(tds.Stepper);","/*\r\n * Header for the login stepper\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n const HEADER = `
\r\n\t\t\t Client Logo Text Goes Here. AIR Assessment \r\n\t\t
\r\n\t\t
\\${userInfo}
\r\n\t\t `;\r\n\r\n class LoginHeader extends Stepper.Header {\r\n\r\n constructor() {\r\n\r\n super({\r\n template: HEADER\r\n });\r\n\r\n this.addEvent('click', '.logOutButton', '_requestLogoutApproval');\r\n\r\n }\r\n\r\n render() {\r\n\r\n super.render();\r\n\r\n \r\n\r\n // add \"exit\" button\r\n // if this is secure browser and not logged in then show \"Close SB\" button\r\n // if logged in then show \"Logout\" button\r\n let exitButton = '';\r\n if (Util.Browser.isSecure() && !storage.getTestee()) {\r\n exitButton = '
  • Close Secure Browser
  • ';\r\n } else if (storage.getTestee()) {\r\n exitButton = '
  • Back to Login
  • ';\r\n }\r\n\r\n this.$el.html(this.template({\r\n userInfo: infoParts.join(' | '),\r\n exitButton\r\n }));\r\n\r\n }\r\n\r\n _requestLogoutApproval() {\r\n\r\n // open dialog and verify\r\n tds.Dialog.showPrompt(Messages.get('Global.Label.LogoutVerify'), () => {\r\n this._logout();\r\n });\r\n\r\n }\r\n\r\n async _logout() {\r\n\r\n // if a test is selected then pause (this scenario only occurs on login shell for sat)\r\n if (tds.Student.Storage.getTestProperties() != null) {\r\n // pause test\r\n await tds.Student.API.pauseTest('Login');\r\n }\r\n\r\n tds.logout();\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.LoginHeader = LoginHeader;\r\n\r\n})(tds.Stepper);","/*\r\n * ControlBar element for the Stepper.\r\n * Template can be overriden but step controls will always be rendered inside of div#bottom-controls\r\n */\r\n\r\n(function (Stepper) {\r\n\r\n const CONTROL_BAR = `\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n `;\r\n\r\n // --------------------------------\r\n\r\n class ControlBar extends Stepper.Component {\r\n\r\n constructor({ template = null } = {}) {\r\n\r\n super({\r\n className: 'tds-bottom',\r\n template: template || CONTROL_BAR\r\n });\r\n\r\n this.$el.attr('id', 'tds-bottom-ControlBar')\r\n .attr('role', 'region');\r\n\r\n this.$el.attr('id', 'tds-bottom-ControlBar')\r\n .attr('aria-label', 'footer');\r\n\r\n this._controls = [];\r\n\r\n }\r\n\r\n render(data = {}) {\r\n\r\n super.render();\r\n\r\n this.$el.html(this.template(data));\r\n\r\n // find the control container (#bottomControls)\r\n const $controlContainer = this.$el.find('#bottom-controls .air-btn-container');\r\n\r\n // append and render each control\r\n this._controls.forEach(control => {\r\n $controlContainer.append(control.$el);\r\n control.render();\r\n });\r\n\r\n }\r\n\r\n setControls(controls) {\r\n this._controls = controls || [];\r\n }\r\n\r\n dispose() {\r\n\r\n this._controls = null;\r\n\r\n super.dispose();\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.ControlBar = ControlBar;\r\n\r\n})(tds.Stepper);","/*\r\n * ControlBar for the login stepper\r\n */\r\n\r\n(function (Stepper) {\r\n\r\n const CONTROL_BAR = `\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t\t \\${!badgeHidden ?\r\n \\`
    \r\n \r\n \\${ptMode ? 'Practice' : 'Operational'} Assessment\r\n \r\n
    \r\n

    This is \\${ptMode ? 'a' : 'an'}
    \r\n \\${ptMode ? 'Practice' : 'Operational'} Assessment

    \r\n

    If you wish to take \\${ptMode ? 'an operational test' : 'a practice test'} please click the button below

    \r\n \r\n
    \t\t\t\r\n
    \\`\r\n : ''}\r\n \\${showLaunchPad ? \r\n\t\t \\`\\`\r\n : ''}\r\n
    \r\n Copyright © \\${year} Cambium Assessment, Inc. All rights reserved.\r\n
    \r\n `;\r\n\r\n // --------------------------------\r\n\r\n class LoginControlBar extends Stepper.ControlBar {\r\n\r\n constructor() {\r\n\r\n super({\r\n template: CONTROL_BAR\r\n });\r\n\r\n }\r\n\r\n render() {\r\n\r\n // badge is open if no testee (not logged in) AND we are in SB or on the Operational site AND you are not in proxy mode\r\n const badgeOpen = tds.Student.Storage.getTestee() == null \r\n && (Util.Browser.isSecure() || !tds.inPTMode) \r\n && !tds.isProxyLogin\r\n && !tds.getAppSetting('student.login.badge.collapse', false);\r\n const showLaunchPad = (tds.Student.Storage.getTestee() == null);\r\n\r\n super.render({\r\n badgeHidden: tds.getAppSetting('student.login.badge.hide', false),\r\n badgeOpen,\r\n ptMode: tds.inPTMode,\r\n testSiteLink: 'Login.Badge.Link',\r\n showLaunchPad, // only put launchpad in DOM if user is not logged\r\n year: new Date().getFullYear()\r\n });\r\n\r\n // SB-1280: When exiting the student app to an external app we need to\r\n // ensure that we are no longer locked down\r\n if (showLaunchPad) {\r\n $('#launch-pad a').on('click', async (evt) => {\r\n\r\n // Prevent the link from being processed so we can wait until lockdown is released\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n\r\n // We need to try/catch because if release fails (as it does on iOS when we're\r\n // not locked down) the promise is rejected\r\n try {\r\n await tds.secureBrowser.api.releaseLockDown();\r\n } catch (ex) {\r\n\r\n }\r\n\r\n // Now that we're not locked down we can follow the link\r\n const href = $(evt.target).attr('href');\r\n location.href = href;\r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n Stepper.LoginControlBar = LoginControlBar;\r\n\r\n})(tds.Stepper);","/*\r\n * Class that is loaded inside of the Stepper. Contains 1-n cards.\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n const TITLE = `\r\n

    \\${title}

    \r\n

    \\${subtitle}

    \r\n
    \r\n

    This page has the following errors

    \r\n
      \r\n
      \r\n `;\r\n\r\n\r\n // -----------------------------------------------\r\n\r\n class Step extends Stepper.Component {\r\n\r\n constructor({ id, title, titleKey = '', subtitle = '', subtitleKey = '', className = '', template = '' } = {}) {\r\n \r\n super({\r\n template: `\r\n ${TITLE}\r\n ${template}\r\n `,\r\n className\r\n });\r\n\r\n this._id = id;\r\n\r\n this.$el.attr('id', 'tds-contentarea-' + id);\r\n\r\n this._title = title;\r\n this._titleKey = titleKey;\r\n this._subtitle = subtitle;\r\n this._subtitleKey = subtitleKey;\r\n\r\n this._cards = new Map();\r\n this._renderedCards = [];\r\n\r\n this._errors = [];\r\n // create a debounced delegate for setting the validation summary\r\n this._setValidationSummaryDelegate = Util.Function.debounce(this._setValidationSummary.bind(this), 100);\r\n\r\n this._controls = [];\r\n\r\n this._instructionsCard = null;\r\n this._initInstructionsCard();\r\n }\r\n\r\n static register(key) {\r\n Stepper.Steps[key] = this;\r\n }\r\n\r\n get controls() { return this._controls.slice(); }\r\n\r\n get id() { return this._id; }\r\n get instructionsCard() { return this._instructionsCard; }\r\n\r\n _initInstructionsCard() {\r\n\r\n // If TTS instructions are off then we're done\r\n if (!tds.getAppSetting('student.login.allowTTSInstructions', false)) {\r\n return;\r\n }\r\n\r\n // only show the instructions card if the message is not an empty string\r\n const { key, message } = this._getInstructionsContent();\r\n if (message === '') {\r\n return;\r\n }\r\n\r\n // Add TTS Instructions card\r\n this._instructionsCard = new Stepper.Cards.Instructions({\r\n stepId: this.id,\r\n instructionsContentKey: key\r\n });\r\n this.addCard('instructions', this._instructionsCard);\r\n }\r\n\r\n _getInstructionsContent() {\r\n const instructionsKey = `Login.Instructions.Content.${this.id}`;\r\n const session = tds.Student.Storage.getTestSession();\r\n\r\n if (session?.isRemote) {\r\n // session is remote so check the remote specific message first\r\n const remoteInstructionsKey = instructionsKey + '.Remote';\r\n const remoteInstructionsMessage = Messages.getAlt(remoteInstructionsKey, '');\r\n if (remoteInstructionsMessage) {\r\n // only return remote message if it exists\r\n return {\r\n key: remoteInstructionsKey,\r\n message: remoteInstructionsMessage\r\n };\r\n }\r\n }\r\n\r\n // always fallback to regular message\r\n return {\r\n key: instructionsKey,\r\n message: Messages.getAlt(instructionsKey, '')\r\n };\r\n }\r\n\r\n async beforeRender() {\r\n \r\n // if step has instructionsCard, call its beforeRender first so it is the first card to be rendered later\r\n if (this._instructionsCard) {\r\n await this._cardBeforeRender(this._instructionsCard);\r\n }\r\n\r\n // execute card beforeRender to see if render is aborted\r\n await Promise.all(this.getCards()\r\n .filter(card => card !== this._instructionsCard)\r\n .map(card => this._cardBeforeRender(card))\r\n );\r\n }\r\n\r\n async _cardBeforeRender(card) {\r\n\r\n const success = await card.beforeRender();\r\n if (success === false) return;\r\n \r\n // save the card to the list rendered cards\r\n this._renderedCards.push(card);\r\n\r\n }\r\n\r\n async render(data) {\r\n\r\n super.render();\r\n\r\n const templateData = Object.assign({}, data, {\r\n title: this._title,\r\n titleKey: this._titleKey,\r\n subtitle: this._subtitle,\r\n subtitleKey: this._subtitleKey\r\n });\r\n\r\n // render step title and template\r\n this.$el.html(this.template(templateData));\r\n\r\n // update document title for accessibility\r\n this._setDocumentTitle();\r\n \r\n // render all cards async and wait for all to finish\r\n await Promise.all(this._renderedCards.map(card => this._renderCard(card)));\r\n\r\n // execute card afterRender functions\r\n await Promise.all(this._renderedCards.map(card => card.afterRender()));\r\n\r\n }\r\n\r\n // set the document title, preferring text from this._titleKey, and falling back to this._title\r\n _setDocumentTitle() {\r\n const stepTitle = Messages.getAlt(this._titleKey, this._title || '');\r\n const pageTitle = Messages.getAlt('loginshell.page.docTitle', 'Student: Login, {0}', [stepTitle]);\r\n document.title = pageTitle;\r\n }\r\n\r\n async _renderCard(card) {\r\n\r\n // attach card el to the step container\r\n this.$el.append(card.$el);\r\n\r\n // render the card\r\n await card.render();\r\n \r\n }\r\n\r\n\r\n // check if the card was rendered\r\n // NOTE: can take id or card\r\n isCardRendered(card) {\r\n if (typeof card === 'string') {\r\n card = this.getCard(card);\r\n }\r\n\r\n return this._renderedCards.indexOf(card) > -1;\r\n }\r\n\r\n // get a specific card by id\r\n getCard(id) {\r\n return this._cards.get(id);\r\n }\r\n\r\n // return all cards on the step\r\n getCards() {\r\n return Array.from(this._cards.values());\r\n }\r\n\r\n // check if step has a specific card\r\n hasCard(id) {\r\n return this.getCard(id) != null;\r\n }\r\n \r\n // add a card, assigning a specific id\r\n addCard(id, card) {\r\n\r\n if (!(card instanceof Stepper.Card)) {\r\n console.error('Can only add instance of tds.Stepper.Card to a Step.');\r\n return;\r\n }\r\n\r\n if (this._cards.has(id)) {\r\n console.error(`Step already has a card with id: ${id}.`);\r\n return;\r\n }\r\n\r\n // listen for card events\r\n card.on('validate:step', this._validate, this);\r\n card.on('transition', this.transition, this);\r\n card.on('error', this._setError, this);\r\n\r\n this._cards.set(id, card);\r\n\r\n }\r\n\r\n // remove a card by id\r\n removeCard(id) {\r\n const card = this.getCard(id);\r\n if (card) {\r\n this._cards.delete(id);\r\n card.dispose();\r\n }\r\n }\r\n\r\n addControl(control, controlOptions) {\r\n // only allow Stepper.Button object to be added\r\n // TODO: create a control base class?\r\n if (!(control instanceof Stepper.Button)) {\r\n throw new Error('ControlCollection may only contain a Button object.');\r\n }\r\n\r\n // listen for click event from button\r\n control.on('click', () => this._onControlClick(control, controlOptions), this);\r\n\r\n this._controls.push(control);\r\n\r\n }\r\n\r\n _onControlClick(control, { validate = false, onClick = null } = {}) {\r\n\r\n // validate step, return false if validate fails\r\n if (validate === true && !this._validate()) {\r\n return false;\r\n }\r\n\r\n // clear validation errors\r\n this._clearValidationSummary();\r\n\r\n // run onClick handler if exists, return false if onClick returns false\r\n if (onClick && typeof onClick === 'function' && onClick.call(this) === false) {\r\n return false;\r\n }\r\n\r\n return true;\r\n\r\n }\r\n\r\n // call validate function on all cards\r\n _validate() {\r\n let success = true;\r\n this._cards.forEach(card => {\r\n if (card.validate() === false) {\r\n success = false;\r\n }\r\n });\r\n\r\n return success;\r\n }\r\n\r\n setCardError(cardId, key, message) {\r\n\r\n const card = this.getCard(cardId);\r\n if (!(card || this.isCardRendered(card))) return false;\r\n\r\n // set error on card silently and take care of setting error on step here\r\n card.setError(key, { silent: true, message });\r\n this._setError(key);\r\n\r\n return true;\r\n\r\n }\r\n\r\n _setError(error) {\r\n // add error to list\r\n this._errors.push(error);\r\n\r\n // call debounced delegate so that the validation summary sets all errors at once\r\n this._setValidationSummaryDelegate();\r\n }\r\n\r\n _setValidationSummary() {\r\n\r\n // map errors to list items and load into validation summary\r\n const $errors = this._errors.map(error => $(`
    • ${error.translation}
    • `));\r\n this.$el.find('#validationSummaryIntro').removeClass('tds-removed');\r\n this.$el.find('#validationSummaryList').html($errors);\r\n\r\n // set focus to the first invalid input or error on the page\r\n this._setErrorFocus();\r\n\r\n // clear errors list\r\n this._errors = [];\r\n\r\n }\r\n\r\n _clearValidationSummary() {\r\n\r\n this.$el.find('#validationSummaryIntro').addClass('tds-removed');\r\n this.$el.find('#validationSummaryList').empty();\r\n\r\n }\r\n\r\n _setErrorFocus() {\r\n\r\n // TODO: add helper functions to get the Stepper, step container and/or error boxes and elements\r\n\r\n // first try to find the first input on the screen with an error\r\n let $focusError = this.$el.find('input.tds-error:not(.tds-removed):first');\r\n\r\n if ($focusError && $focusError.length) {\r\n // get the position of error box associated with the invalid input\r\n $focusError = this.$el.find(`#${$focusError.attr('aria-describedby')}`);\r\n } else {\r\n // if no input then focus the first error box\r\n $focusError = this.$el.find('.tds-error:not(.tds-removed):first');\r\n }\r\n \r\n this.scrollToElement($focusError, { force: true });\r\n }\r\n\r\n scrollToElement($elementToScroll, { $elementToFocus = undefined, force = false } = {}) {\r\n if (!$elementToScroll) return;\r\n \r\n // TODO: ensure jQuery elements?\r\n \r\n function focusElement() {\r\n const element = $elementToFocus?.get(0) || $elementToScroll.get(0);\r\n // focus with preventScroll since already scrolled where we want\r\n element.focus({ preventScroll: true }); \r\n }\r\n\r\n // get element top and height (top + height = bottom)\r\n const elementTop = $elementToScroll.offset().top;\r\n const elementHeight = $elementToScroll.outerHeight();\r\n \r\n // get container dimensions\r\n const $stepContainer = this.$el.parent();\r\n const containerTop = $stepContainer.offset().top;\r\n const containerHeight = $stepContainer.height() - 10; // remove 10 from height due to bottom bar overlap\r\n const containerBottom = containerTop + containerHeight;\r\n\r\n // calculate percentage of element that has been scrolled into view ()\r\n // if forcing scroll then ignore percentage threshold by setting percentage to 0\r\n const percentage = force ? 0 : Math.floor((containerBottom - elementTop) / elementHeight * 100) / 100;\r\n\r\n // if elementTop < containerTop then need to scroll up\r\n // percentage < 0.9 means not enough is showing and need to scroll down\r\n if (elementTop > containerTop && percentage > 0.9) {\r\n // enough of element is in view, just set focus\r\n focusElement();\r\n return;\r\n }\r\n\r\n const containerScroll = $stepContainer.scrollTop();\r\n // calculate the distance to scroll the container\r\n // TODO: is the Math.abs necessary?\r\n const scrollTop = Math.abs(elementTop - containerTop + containerScroll) - 10;\r\n\r\n // animate the scroll\r\n $stepContainer.animate({ scrollTop }, 500, () => {\r\n // set focus when scroll is done\r\n focusElement();\r\n });\r\n }\r\n\r\n // fire a transition event for the Stepper\r\n transition(name, params = { validate: false }) {\r\n\r\n // validate step, return false if validate fails\r\n if (params.validate && !this._validate()) {\r\n return false;\r\n }\r\n\r\n this.fire('transition', name, params);\r\n }\r\n\r\n // set focus to the title\r\n setFocus() {\r\n this.$el.find('h1').focus();\r\n }\r\n\r\n async beforeEnter() {\r\n\r\n }\r\n\r\n // called right be fore the step is attached to the DOM\r\n // return false to prevent attaching\r\n async beforeAttach() {\r\n\r\n }\r\n\r\n // return false to prevent leaving the step\r\n async beforeLeave() {\r\n\r\n }\r\n\r\n dispose() {\r\n\r\n // dispose of controls\r\n this._controls.forEach(control => control.dispose());\r\n this._controls = null;\r\n\r\n // dispose of cards\r\n if (this._instructionsCard) {\r\n this._instructionsCard.dispose();\r\n }\r\n this._instructionsCard = null;\r\n\r\n this._cards.forEach(card => card.dispose());\r\n this._cards = null;\r\n\r\n super.dispose();\r\n \r\n this._title = null;\r\n this._subtitle = null;\r\n this._errors = null;\r\n this._setValidationSummaryDelegate = null;\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.Step = Step;\r\n\r\n})(tds.Stepper);","/*\r\n * Card element that is used inside of a step.\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n const ERROR_BOX = '
      ';\r\n\r\n // -----------------------------------\r\n\r\n class Card extends Stepper.Component {\r\n\r\n constructor({ title = '', titleKey = '', template = '', className = '' } = {}) {\r\n\r\n super({\r\n className: `tds-card ${className}`,\r\n template\r\n });\r\n\r\n this._title = title;\r\n this._titleKey = titleKey;\r\n this._$error = $(ERROR_BOX);\r\n\r\n }\r\n\r\n static register(key) {\r\n Stepper.Cards[key] = this;\r\n }\r\n\r\n // override to perform actions before rendering, i.e. load data\r\n // return false to abort render\r\n async beforeRender() {\r\n return true;\r\n }\r\n\r\n async render(data) {\r\n\r\n super.render();\r\n\r\n this.$el.empty();\r\n \r\n // add error box\r\n this.$el.append(this._$error);\r\n\r\n // render title if exists\r\n if (this._title || (this._titleKey && Messages.has(this._titleKey))) {\r\n this.$el.append(`

      ${this._title}

      `);\r\n }\r\n \r\n // render card template and append\r\n this.$el.append(this.template(Object.assign({}, this.getData(), data)));\r\n\r\n }\r\n\r\n async afterRender() {\r\n\r\n }\r\n\r\n /**\r\n * set an error message on the card\r\n * @param {any} key - message key to translate for the error message\r\n * @param {any} options\r\n * {\r\n * message: default message if the key is not found\r\n * params: optional message params for formatting message\r\n * el: pass an error element to set instead of the card error\r\n * silent: if silent then do not fire an error event\r\n * }\r\n */\r\n setError(keys, { message = null, params = null, el = null, silent = false } = {}) {\r\n // if el is provided check that it is an error box and located in the card\r\n if (el && !this.$el.find(el).hasClass('tds-error')) {\r\n console.warn('Cannot find the error box provided.');\r\n return;\r\n }\r\n\r\n // default to card error box if el not provided\r\n const $errorEl = el ? $(el) : this._$error;\r\n\r\n // ensure keys is an array\r\n if (typeof keys === 'string') {\r\n keys = [keys];\r\n }\r\n\r\n // if null or empty string then clear error and hide\r\n const hideError = (keys == null || keys.length === 0);\r\n // TODO Messages: using private _get for now since it supports multiple keys\r\n const translation = hideError ? null : tds.messages._get([...keys, message], { params });\r\n $errorEl.toggleClass('tds-removed', hideError)\r\n .attr('aria-hidden', hideError)\r\n .attr('i18n-content', hideError ? null : keys.join(' '))\r\n .attr('i18n-params', Array.isArray(params) ? params.map(param => encodeURIComponent(param)).join(' ') : null)\r\n .html(translation);\r\n\r\n // if not silent then trigger error event for step\r\n if (silent !== true) this.fire('error', { keys, translation, params });\r\n }\r\n\r\n // clear the card's error message\r\n clearError(el) {\r\n this.setError(null, { el, silent: true });\r\n }\r\n\r\n // implement this function for a formal method to get card data in the step\r\n getData() {\r\n return null;\r\n }\r\n\r\n // performs validation and returns true/false\r\n validate() {\r\n return true;\r\n }\r\n\r\n // fire an event to tell the step to run validation on all cards (including this one)\r\n validateStep() {\r\n return this.fire('validate:step');\r\n }\r\n\r\n // fire a transition event to the step (bubbles up to Stepper)\r\n transition(name, params) {\r\n this.fire('transition', name, params);\r\n }\r\n\r\n // toggle the green corner checkmark on this card\r\n toggleCheckmark(value = undefined) {\r\n this.$el.toggleClass('tds-card-done', value);\r\n }\r\n\r\n // add the green corner checkmark\r\n addCheckmark() {\r\n this.toggleCheckmark(true);\r\n }\r\n \r\n // remove the green corner checkmark\r\n removeCheckmark() {\r\n this.toggleCheckmark(false);\r\n }\r\n\r\n dispose() {\r\n\r\n super.dispose();\r\n\r\n this._title = null;\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.Card = Card;\r\n\r\n})(tds.Stepper);","/*\r\n * Button control to be used inside the ControlBar\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n class Button extends Stepper.Component {\r\n\r\n constructor({ id = null, text = '', i18n = '', transition = '', transitionParams = {}, handler = null, handlerContext = null, className = '', isSubmit = false } = {}) {\r\n\r\n super({\r\n tagName: 'a',\r\n template: '${text}',\r\n className\r\n });\r\n\r\n this._text = text;\r\n this._handler = handler;\r\n this._handlerContext = handlerContext;\r\n this._transition = transition;\r\n this._transitionParams = transitionParams;\r\n\r\n this.$el.attr('href', '#').attr('role', isSubmit ? 'submit' : 'button').attr('tabindex', '0');\r\n\r\n if (id) {\r\n this.$el.attr('id', id);\r\n }\r\n\r\n if (i18n) {\r\n this.$el.attr('i18n-content', i18n);\r\n }\r\n\r\n // add click event if either handler or transition is provided\r\n if (handler || transition) {\r\n this.addClickEvent(null, this.click);\r\n }\r\n\r\n }\r\n\r\n static register(key) {\r\n Stepper.Buttons[key] = this;\r\n }\r\n\r\n render() {\r\n super.render();\r\n this.$el.html(this.template({\r\n text: this._text\r\n }));\r\n }\r\n\r\n async click(e) {\r\n try {\r\n e.preventDefault();\r\n\r\n // trigger click event, abort if false is returned\r\n if (this.fire('click') === false) {\r\n return;\r\n }\r\n\r\n // abort transition if handler returns false\r\n if (this._handler && await this._handler.call(this._handlerContext || this, e) === false) {\r\n return;\r\n }\r\n } catch (ex) {\r\n MasterShell.reportError(ex);\r\n return;\r\n }\r\n\r\n // fire transition event if name provided\r\n if (this._transition) {\r\n this.fire('transition', this._transition, this._transitionParams);\r\n }\r\n \r\n }\r\n\r\n dispose() {\r\n\r\n super.dispose();\r\n\r\n this._text = null;\r\n this._handler = null;\r\n this._transition = null;\r\n this._validate = null;\r\n\r\n }\r\n\r\n }\r\n\r\n Stepper.Button = Button;\r\n\r\n})(tds.Stepper);","/*\r\n * Base class for the shells (to replace mastershell eventually)\r\n */\r\n\r\ntds = window.tds || {};\r\ntds.Shells = tds.Shells || {};\r\n\r\ntds.Shells.Base = (function() {\r\n\r\n class ShellBase {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n }\r\n\r\n return ShellBase;\r\n\r\n})();","/*\r\n * Shared header for the shells\r\n */\r\n\r\ntds.Shells.Header = (function (Storage) {\r\n\r\n const BUTTON_CLASSES = {\r\n ttsReadPage: 'tds-ear-playericon-container',\r\n instructions: 'instructionsButton',\r\n settings: 'settingsButton',\r\n close: 'closeButton',\r\n logout: 'logOutButton'\r\n };\r\n\r\n const DISABLED_CLASS = 'disabled';\r\n\r\n\r\n class ShellHeader {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n // TODO: Fix this HACK once there is a good way to determine the current step\r\n static toggleSettingsButton(isVisible) {\r\n this._toggleButtonVisibility(BUTTON_CLASSES.settings, isVisible);\r\n }\r\n\r\n static get $el() { return $('#tds-banner'); }\r\n\r\n static _getButton(className) {\r\n return this.$el.find(`.${className}`);\r\n }\r\n\r\n static init() {\r\n\r\n this._onSpeakStatusChangeProxy = this._onSpeakStatusChange.bind(this);\r\n\r\n // add events\r\n this._addClickEvent(BUTTON_CLASSES.logout, this._requestLogoutApproval);\r\n this._addClickEvent(BUTTON_CLASSES.settings, this._onSettingsClick);\r\n\r\n // TTS Read Page is for the Login/Review Shell\r\n if (window.tts) {\r\n\r\n const $ttsPageButtonPlaceHolder = $('#tds-bannerButtons .ttsPageButtonPlaceHolder');\r\n const elParent = $ttsPageButtonPlaceHolder.parent().get(0);\r\n const elToSpeak = document.getElementById('tds-content-Stepper');\r\n const language = tds.language.getAttribute(elToSpeak);\r\n\r\n this._speakButton = new tts.SpeakButton({\r\n parent: elParent,\r\n language: language,\r\n filter: tts.ParserFilters.invisibleContent,\r\n speakMsgKey: 'StudentMaster.Button.TTSReadPage',\r\n speakText: 'Read Page',\r\n stopMsgKey: 'StudentMaster.Button.TTSStopReadPage',\r\n stopText: 'Stop',\r\n buttonCSSClass: 'ttsPageButton',\r\n getNodes: () => {\r\n\r\n // We're on the Help Guide so speak the context of the Help Guide iFrame\r\n // instead of the stepper page contents\r\n if (window.LoginShell?.stepperComponents?.stepper?.currentStep?.id === 'HelpGuide') {\r\n const frame = $('#helpFrame').get(0);\r\n if (frame) {\r\n const doc = frame.contentDocument;\r\n const body = doc.body;\r\n\r\n return [body];\r\n }\r\n }\r\n\r\n return [elToSpeak];\r\n },\r\n highlighter: false\r\n });\r\n this._buttonRendering = this._speakButton.render();\r\n\r\n $ttsPageButtonPlaceHolder.remove();\r\n\r\n if (window.LoginShell) {\r\n LoginShell.stepperComponents.stepper.on('transition', this._stepTransition);\r\n }\r\n\r\n tts.events.on('status', this._onSpeakStatusChangeProxy);\r\n }\r\n }\r\n\r\n static _addClickEvent(button, handler) {\r\n\r\n this.$el.off('.headerEvent', `.${button}`);\r\n\r\n this.$el.on('click.headerEvent', `.${button}`, (e) => {\r\n e.preventDefault();\r\n handler(e);\r\n });\r\n this.$el.on('keypress.headerEvent', `.${button}`, (e) => {\r\n if (e.which === 13 || e.which === 32) {\r\n e.preventDefault();\r\n handler(e);\r\n }\r\n });\r\n }\r\n\r\n static render() {\r\n\r\n this.updateButtons();\r\n this.updateLoginInfo();\r\n }\r\n\r\n /**\r\n * Update which header buttons are available (visible).\r\n */\r\n static async updateButtons() {\r\n\r\n // TODO: show Test Instructions buttons if message exists\r\n this._toggleButtonVisibility(BUTTON_CLASSES.instructions, false);\r\n\r\n // show settings button if on LoginShell AND no test is selected (to show global accs) OR there TTS Instructions is enabled OR UI Language Toggle is enabled\r\n const showSettingsButton = window.LoginShell && ((LoginShell.canShowGlobalAccs() && !tds.isProxyLogin)\r\n || tds.getAppSetting('student.login.allowTTSInstructions', false) === true)\r\n || tds.Config.languageUIToggleEnabled();\r\n this._toggleButtonVisibility(BUTTON_CLASSES.settings, showSettingsButton);\r\n\r\n // show SB close if we are in SB and not logged in\r\n this._toggleButtonVisibility(BUTTON_CLASSES.close, (Util.Browser.isSecure() && !Storage.getTestee()));\r\n\r\n // show logout button if logged in\r\n this._toggleButtonVisibility(BUTTON_CLASSES.logout, Storage.getTestee() != null);\r\n\r\n this._updateReadPageButton();\r\n }\r\n\r\n static async _updateReadPageButton() {\r\n\r\n if (!this._buttonRendering) {\r\n return;\r\n }\r\n\r\n // Get page specific info\r\n let pageName;\r\n let stepID;\r\n if (window.LoginShell) {\r\n pageName = 'login';\r\n stepID = LoginShell.stepperComponents.stepper.currentStep.id;\r\n } else if (window.ReviewShell) {\r\n pageName = 'review';\r\n stepID = ReviewShell.stepperComponents.stepper.currentStep.id;\r\n }\r\n\r\n // If we're on a page where we support Reading the Page\r\n if (pageName) {\r\n\r\n let ttsSupported = false;\r\n\r\n await this._buttonRendering;\r\n\r\n // App setting can be 'off' to turn off the read page button, 'on' to turn it on, or\r\n // 'on-accs' to turn to turn it on when the accs have been set or when they are not yet set\r\n // and 'off-accs' to turn it on once accs have been chosen and can tell us what to do.\r\n // Furthermore, we can config this on a per step basis.\r\n let ttsReadPageSetting = tds.getAppSetting(`student.${pageName}.ttsReadPage`, 'off');\r\n ttsReadPageSetting = tds.getAppSetting(`student.${pageName}.ttsReadPage.${stepID}`, ttsReadPageSetting);\r\n ttsReadPageSetting = ttsReadPageSetting.toLowerCase();\r\n\r\n const accProps = tds.getAccProps();\r\n const accList = tds.Student.Storage.getAccList();\r\n const isAfterAccs = (accList != null && accList.length > 0) && (stepID !== 'Accommodations');\r\n if (ttsReadPageSetting === 'on' ||\r\n (ttsReadPageSetting === 'on-accs' && (!isAfterAccs || accProps.hasTTS())) ||\r\n (ttsReadPageSetting === 'off-accs' && isAfterAccs && accProps.hasTTS())) {\r\n ttsSupported = await tts.api.init();\r\n }\r\n this._toggleButtonVisibility(BUTTON_CLASSES.ttsReadPage, ttsSupported);\r\n\r\n // Update Speak Button as language accommodation may change as we move from step to step\r\n if (this._speakButton) {\r\n const tdsLang = tds.getLanguage();\r\n this._speakButton.setLanguage(tdsLang);\r\n }\r\n }\r\n }\r\n\r\n static _toggleButtonVisibility(button, isVisible) {\r\n this._getButton(button).parent().toggleClass('tds-removed', !isVisible);\r\n }\r\n\r\n static updateLoginInfo() {\r\n\r\n const infoParts = [];\r\n\r\n // build testee string\r\n const testee = Storage.getTestee();\r\n if (testee) {\r\n const { displayName = '', id: studentId = '' } = testee;\r\n infoParts.push(`${displayName} (student ID ${studentId})`);\r\n }\r\n\r\n // build test session string\r\n const session = Storage.getTestSession();\r\n if (session) {\r\n const { id: sessionId = '' } = session;\r\n infoParts.push(`${sessionId}`);\r\n }\r\n\r\n // build test name string\r\n const testProperties = Storage.getTestProperties();\r\n if (testProperties) {\r\n const { displayName: testName = '' } = testProperties;\r\n infoParts.push(testName);\r\n }\r\n\r\n const $userInfo = this.$el.find('#tds-userInfo');\r\n $userInfo.html(infoParts.join(' | '));\r\n tds.messages.manager.processLanguage($userInfo.get(0));\r\n }\r\n\r\n static _requestLogoutApproval() {\r\n\r\n // open dialog and verify\r\n tds.Dialog.showPrompt(Messages.get('Global.Label.LogoutVerify'), () => {\r\n ShellHeader._logout();\r\n });\r\n }\r\n\r\n static async _logout() {\r\n\r\n const storage = tds.Student.Storage;\r\n\r\n // if a test is selected then pause (this scenario only occurs on login shell for sat)\r\n if (storage.getTestProperties() != null && storage.getOppInfo() != null) {\r\n // pause test\r\n await tds.Student.API.pauseTest('Logout');\r\n }\r\n\r\n tds.logout();\r\n }\r\n\r\n static _onSettingsClick() {\r\n\r\n tts.api.stop();\r\n\r\n const shell = window.LoginShell || window.ReviewShell;\r\n\r\n if (shell) {\r\n const { stateMachine } = shell.stepperComponents;\r\n stateMachine.settings({ returnStep: stateMachine.state });\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for the speak page button.\r\n * \r\n * Note: This monitors TTS events so that when other TTS is active then the header's\r\n * speak button will be disabled. Inside the test the TTS Page Plugin handles this\r\n * for all media (not just TTS) as only one media type can be active at a time. However,\r\n * on the login shell we only have TTS, but we can have multiple speak buttons\r\n * (e.g. TTS Instructions) so we need to ensure that if one is pressed then others \r\n * (like this one) become disabled.\r\n */\r\n\r\n static _onSpeakStatusChange(ttsStatus) {\r\n\r\n const $btnTTSReadPageContainer = this._getButton(BUTTON_CLASSES.ttsReadPage);\r\n const $btnTTSReadPage = $btnTTSReadPageContainer.find('.tds-ear-playback-button');\r\n\r\n if (ttsStatus === TTS.Status.Stopped) {\r\n $btnTTSReadPage.removeClass(DISABLED_CLASS);\r\n } else if (ttsStatus === TTS.Status.Playing && !this._speakButton.speaking) {\r\n // TTS started and it wasn't the speak page button\r\n $btnTTSReadPage.addClass(DISABLED_CLASS);\r\n }\r\n }\r\n\r\n /**\r\n * On a move to a new step stop any TTS that is in progress.\r\n */\r\n static _stepTransition() {\r\n tts.api.stop();\r\n }\r\n }\r\n\r\n return ShellHeader;\r\n\r\n})(tds.Student.Storage);\r\n","/*\r\nCommon code between login and review shell.\r\nThis is kind of a mess and we should move this into some kind of infrastructure.\r\n*/\r\n\r\nvar MasterShell = {};\r\n\r\n// accommodations code\r\n(function(TDS, MS) {\r\n\r\n var dialog = null;\r\n var currentGlobalAccs = null; // copy of global accs\r\n\r\n function getAccommodations() {\r\n var testAccommodations = Accommodations.Manager.getDefault();\r\n if (testAccommodations) {\r\n return testAccommodations;\r\n } else {\r\n return TDS.globalAccommodations;\r\n }\r\n }\r\n\r\n function remove(accommodations) {\r\n accommodations.removeCSS(document.body);\r\n }\r\n\r\n async function updateLanguage(language) {\r\n tds.Config.setLanguageUI(language);\r\n await tds.messages.manager.setLanguage(language);\r\n }\r\n\r\n function apply(accommodations) {\r\n\r\n // update css\r\n accommodations.applyCSS(document.body);\r\n }\r\n\r\n function setup() {\r\n\r\n var mainAccs = getAccommodations();\r\n var dialogAccs = TDS.globalAccommodations;\r\n\r\n // apply accs\r\n apply(mainAccs);\r\n\r\n // create global accs selector dialog\r\n dialog = new Accommodations.Dialog(dialogAccs, 'globalAccDialog');\r\n\r\n // remove existing accs\r\n dialog.onBeforeSave.subscribe(remove);\r\n\r\n // apply new accs\r\n dialog.onSave.subscribe(apply);\r\n\r\n dialog.onCancel.subscribe(function () {\r\n var accs = currentGlobalAccs.getSelectedJson();\r\n accs.forEach(function (acc) {\r\n dialogAccs.selectCodes(acc.type, acc.codes);\r\n });\r\n });\r\n\r\n // listen for cog wheel click\r\n YUE.on('btnAccGlobal', 'click', function (evt) {\r\n TDS.ToolManager.hideAll(); // hide help\r\n currentGlobalAccs = dialogAccs.clone(); // make a copy of accs for onCancel\r\n dialog.show();\r\n });\r\n\r\n // sync HTML lang attribute with UI Language\r\n if (tds.Config.languageUIToggleEnabled() && tds.Config.getLanguageUI()) {\r\n tds.language.setITSDocumentAttribute(tds.Config.getLanguageUI());\r\n }\r\n }\r\n\r\n // log an exception from a try/catch, pass true for logout to log the user out after closing the error dialog\r\n function reportError(ex, logout) {\r\n const msg = Messages.getAlt('LoginShell.Alert.ErrorProcessingRequest', 'There was an error processing this request.');\r\n tds.Dialog.showAlert(msg, () => {\r\n if (logout === true) {\r\n TDS.logout();\r\n }\r\n });\r\n\r\n tds.Diagnostics.report(ex);\r\n }\r\n\r\n MS.setupAccs = setup;\r\n MS.removeAccs = remove;\r\n MS.applyAccs = apply;\r\n MS.updateLanguage = updateLanguage;\r\n MS.reportError = reportError;\r\n\r\n})(TDS, MasterShell);\r\n\r\n// misc code\r\n(function (TDS, MS) {\r\n \r\n // fires when the DOM is loaded (but not all the images)\r\n function onShellReady() {\r\n\r\n // Sets focus to the current window\r\n // BUG: #13529 - Focus is lost on 'Is this your test?' page\r\n window.focus();\r\n\r\n // fire preinit function if it exists\r\n if (typeof window.preinit == 'function') {\r\n try {\r\n window.preinit();\r\n } catch (ex) {\r\n TDS.Diagnostics.report(ex);\r\n }\r\n }\r\n\r\n // setup keyboard listener\r\n KeyManager.init();\r\n\r\n // global key events\r\n KeyManager.onKeyEvent.subscribe(function (obj) {\r\n // check for escape\r\n if (obj.type == 'keydown' && obj.keyCode == 27) {\r\n // hide help\r\n TDS.ToolManager.hideAll();\r\n }\r\n });\r\n\r\n // setup help:\r\n YUE.on('btnHelp', 'click', function (evt) {\r\n // stop mouse click\r\n YUE.stopEvent(evt);\r\n\r\n // get the tools path\r\n var key = TDS.Help.getKey();\r\n var lang = TDS.getLanguage(); // this is because we need the key to unique if someone switches global language\r\n var id = 'tool-' + key + '-' + lang;\r\n\r\n var panel = TDS.ToolManager.get(id);\r\n\r\n if (panel == null) {\r\n var headerText = Messages.getAlt('StudentMaster.Label.HelpGuider', 'Help');\r\n panel = TDS.ToolManager.createPanel(id, 'helpguide', headerText, null, key);\r\n $(panel.close).attr('href', '#');\r\n }\r\n\r\n TDS.ToolManager.toggle(panel);\r\n });\r\n\r\n // attach buttons events\r\n TDS.Button.init();\r\n\r\n // setup accommodations\r\n MS.setupAccs();\r\n\r\n // perform some proxy specific code\r\n if (TDS.isProxyLogin) {\r\n\r\n //initialize a timeout handler. in the proxy app we want to log the proctor out if he is idle on any page.\r\n //testshell has a separate timer. the timer here handles idling in student login and review shells.\r\n //do not do this on the proctor login pages i.e. clslogin.aspx or replogin.aspx.\r\n var currentPage = (location.href).toLowerCase();\r\n if (currentPage.indexOf('login') == -1) {\r\n //the time the user gets to respond is hardcoded to 30 seconds right now.\r\n var idleTimer = new TDS.IdleTimer(TDS.timeout, 30, function() {\r\n TDS.logoutProctor(false);\r\n });\r\n idleTimer.start();\r\n }\r\n }\r\n\r\n // check if there is an init function on the page\r\n if (typeof window.init == 'function') {\r\n setTimeout(function () {\r\n try {\r\n window.init();\r\n } catch (ex) {\r\n TDS.Diagnostics.report(ex);\r\n }\r\n }, 0);\r\n }\r\n\r\n // Hook up the battery indicator if the accomodations for this are enabled.\r\n // We only support this for chrome books currently (TDS-62)\r\n if (Util.Browser.isChromeOS() && TDS.BatteryMonitor) {\r\n var element = $('#batteryIndicator');\r\n (new TDS.BatteryMonitor.UI(element)).render();\r\n }\r\n }\r\n\r\n YUE.onDOMReady(onShellReady);\r\n\r\n // fires before the page gets unloaded\r\n function onShellUnload() {\r\n\r\n TDS.unloader.initiateUnload();\r\n\r\n // always try and stop TTS before leaving a page\r\n if (window.tts) {\r\n tts.api.stop();\r\n }\r\n }\r\n\r\n YUE.on(window, 'beforeunload', onShellUnload);\r\n\r\n function closeWindow() {\r\n if (TDS.isProxyLogin) {\r\n TDS.logout();\r\n } else {\r\n // check if offline cache is available for this browser\r\n if (TDS.Cache.isAvailable()) {\r\n // stop the cache and wait for it to be shutdown\r\n TDS.Cache.stop();\r\n\r\n // failsafe timer for shutting down (wait 1 min)\r\n YAHOO.lang.later(60000, this, function () {\r\n TDS.Dialog.showProgress();\r\n tds.secureBrowser.api.closeBrowser();\r\n });\r\n } else {\r\n TDS.Dialog.showProgress();\r\n tds.secureBrowser.api.closeBrowser();\r\n }\r\n }\r\n }\r\n\r\n window.closeWindow = closeWindow;\r\n\r\n // this gets triggered when someone tries to stop the cache\r\n TDS.Cache.Events.subscribe('onStop', function () {\r\n TDS.Dialog.showProgress();\r\n });\r\n\r\n // this gets triggered when the cache has been forced to shutdown\r\n TDS.Cache.Events.subscribe('onShutdown', function () {\r\n tds.secureBrowser.api.closeBrowser();\r\n });\r\n\r\n // apply accommodations css to help guide\r\n TDS.ToolManager.Events.subscribe('onShow', function (showInfo) {\r\n var frame = showInfo.panel.getFrame();\r\n Util.Dom.copyCSSFrame(frame);\r\n });\r\n\r\n})(TDS, MasterShell);\r\n","Util = window.Util || {};\r\nUtil.networkDiagnostics = Util.networkDiagnostics || {};\r\n\r\nUtil.networkDiagnostics.riskTypes = {\r\n unknown: 'Unknown',\r\n veryLow: 'VeryLow',\r\n moderate: 'Moderate',\r\n high: 'High',\r\n nearCertain: 'NearCertain'\r\n};","// Utility to allow us to run bandwidth measurement tests.\r\n// require Utilities/util_promise.js\r\nUtil = window.Util || {};\r\nUtil.networkDiagnostics = Util.networkDiagnostics || {};\r\nUtil.networkDiagnostics.BandWidthTester = (function (Util) {\r\n\r\n // Performance API uses HighResolutionTime\r\n const Timer = window.performance;\r\n if (!Timer) {\r\n console.error('Performance API is not supported.');\r\n return;\r\n }\r\n\r\n const testSettings = {\r\n download_url: 'Scripts/NetworkDiagnostics/data/16M.jpg',\r\n upload_url: 'API/Diagnostics.axd/Upload',\r\n max_download_size: 16000000, // 16MB\r\n max_upload_size: 1000000, // 1MB\r\n max_test_duration: 5, // duration of test in sec\r\n max_parallel_requests: 6, // number of concurrent xhr's. Most modern browsers support 6 and legacy browsers support 2 concurrent xhr requests per hostname.\r\n delay_between_tests: 300, // cool off period between tasks\r\n download_grace_time: 1.5, //How long to wait (in seconds) before actually measuring the download speed. This is a good idea because we want to wait for the TCP window to be at its maximum (or close to it)\r\n upload_grace_time: 3, //How long to wait (in seconds) before actually measuring the upload speed. This is a good idea because we want to wait for the buffers to be full (avoids the peak at the beginning of the test) https://github.com/librespeed/speedtest/blob/master/doc.md\r\n overheadCompensationFactor: 1.06, //https://github.com/librespeed/speedtest/: can be changed to compensatie for transport overhead. (see doc.md for some other values) \r\n };\r\n\r\n const uploadData = new Blob([new ArrayBuffer(testSettings.max_upload_size)], { type: 'application/octet-stream' });\r\n\r\n\r\n class NetworkTester {\r\n constructor() {\r\n this._testInProgress = null;\r\n\r\n this._tasks = null; // tasks related for test in progress\r\n this._interval = null;\r\n\r\n this._startTime = 0.0; \r\n this._graceTime = 1.5;\r\n this._graceTimeDone = false;\r\n this._totalLoaded = 0.0; // total bytes for test in progress \r\n }\r\n\r\n _clearTasks() {\r\n const tasks = Object.entries(this._tasks);\r\n for (const [id, task] of tasks) {\r\n // remove all listeners\r\n task.onprogress = null;\r\n task.onload = null;\r\n task.onerror = null;\r\n\r\n // abort\r\n task.abort();\r\n }\r\n\r\n this._tasks = null;\r\n }\r\n\r\n _startTimer() {\r\n // set test properties \r\n this._startTime = performance.now();\r\n this._graceTimeDone = false;\r\n this._totalLoaded = 0.0;\r\n\r\n this._interval = setInterval(this._update.bind(this), 200); // check on the test results every 200ms\r\n }\r\n\r\n _stopTimer() {\r\n clearInterval(this._interval);\r\n\r\n // reset test properties\r\n this._startTime = 0.0;\r\n this._graceTime = 1.5;\r\n this._graceTimeDone = false;\r\n this._totalLoaded = 0.0;\r\n }\r\n\r\n _runTask(id, upload) {\r\n // last loaded bytes during progress updates\r\n let prevLoaded = 0.0;\r\n\r\n // xhr\r\n const xhr = new XMLHttpRequest();\r\n\r\n // list of tasks we are waiting on\r\n this._tasks[id] = xhr;\r\n\r\n // fetch is successfull\r\n xhr.onload = async (event) => {\r\n // If endpoint is not found..fail immediately. \r\n if (xhr.status === 404) {\r\n xhr.abort();\r\n\r\n // exit the test\r\n await this.stop(false);\r\n return;\r\n }\r\n\r\n xhr.abort();\r\n\r\n // still have time..run the test again\r\n if (this._testInProgress.promise.isPending()) {\r\n this._runTask(id, upload);\r\n }\r\n };\r\n\r\n // fetch failed\r\n xhr.onerror = async (event) => {\r\n xhr.abort();\r\n\r\n // exit the test\r\n await this.stop(false);\r\n };\r\n\r\n const progressHandler = (event) => {\r\n\r\n // ignore event comes after the test has timed out.\r\n if (!this._testInProgress.promise.isPending()) {\r\n xhr.abort();\r\n return;\r\n }\r\n\r\n // new bytes\r\n var loadDiff = event.loaded <= 0 ? 0 : event.loaded - prevLoaded;\r\n if (isNaN(loadDiff) || !isFinite(loadDiff) || loadDiff < 0) return; // just in case\r\n\r\n // update bytes loaded\r\n this._totalLoaded += loadDiff;\r\n prevLoaded = event.loaded;\r\n };\r\n\r\n if (upload) {\r\n xhr.upload.onprogress = progressHandler;\r\n\r\n const uploadUrl = testSettings.upload_url + `?cache=${Math.random()}`;\r\n xhr.open('POST', uploadUrl, true);\r\n xhr.setRequestHeader('ContentLength', testSettings.max_upload_size);\r\n xhr.setRequestHeader('Cache-Control', 'no-cache');\r\n xhr.send(uploadData);\r\n\r\n } else {\r\n\r\n // progress listener\r\n xhr.onprogress = progressHandler;\r\n const downloadUrl = TDS.resolveAssetUrl(testSettings.download_url, \"student\") + `?cache=${Math.random()}&size=${testSettings.max_download_size}`;\r\n xhr.open('GET', downloadUrl, true);\r\n xhr.send();\r\n }\r\n\r\n }\r\n\r\n _update() {\r\n // check if we have no tasks.. stop the timer\r\n if (!this._tasks || this._tasks.length === 0) {\r\n this._stopTimer();\r\n return;\r\n }\r\n\r\n // measure the network performance\r\n // We have few adjustment such as give the test a grace time of 1.5 secs and a overheadcompensation factor of 1.06. \r\n const duration = (performance.now() - this._startTime) / 1000;\r\n if (!this._graceTimeDone) {\r\n if (duration > this._graceTime) {\r\n if (this._totalLoaded > 0) {\r\n this._startTime = performance.now();\r\n this._totalLoaded = 0.0;\r\n }\r\n this._graceTimeDone = true;\r\n }\r\n\r\n } else {\r\n\r\n let instantSpeed = this._totalLoaded / duration;\r\n const speed = ((instantSpeed * 8 * testSettings.overheadCompensationFactor) / 1000000).toFixed(3); // make is Mbps\r\n\r\n // check if max test time is passed then clean up\r\n if (duration > testSettings.max_test_duration) {\r\n this._testInProgress.resolve(speed);\r\n }\r\n }\r\n\r\n }\r\n\r\n async _runNetworkTest(upload) {\r\n this._testInProgress = Q.defer();\r\n\r\n // set grace time\r\n this._graceTime = upload ? testSettings.upload_grace_time : testSettings.download_grace_time;\r\n\r\n // init tasks\r\n this._tasks = {};\r\n\r\n // start timer\r\n this._startTimer();\r\n\r\n // create concurrent requests..max allowed in modern browsers is 6. Any thing greater than 6 will be queued.\r\n for (let i = 0; i < testSettings.max_parallel_requests; i++) {\r\n setTimeout(() => { this._runTask(i, upload); }, i * testSettings.delay_between_tests);\r\n }\r\n\r\n const speed = await this._testInProgress.promise;\r\n\r\n // clear tasks\r\n this._clearTasks();\r\n\r\n // stop the timer\r\n this._stopTimer();\r\n\r\n return speed;\r\n\r\n }\r\n\r\n async _runDownloadTest() { \r\n const ds = await this._runNetworkTest(false);\r\n return ds;\r\n }\r\n\r\n async _runUploadTest() { \r\n const us = await this._runNetworkTest(true);\r\n return us;\r\n }\r\n\r\n async start() {\r\n const ds = await this._runDownloadTest();\r\n\r\n const us = await this._runUploadTest();\r\n\r\n return {\r\n downloadResults: { lineSpeed: ds },\r\n uploadResults: { lineSpeed: us }\r\n };\r\n }\r\n\r\n async stop(byUser = false) {\r\n\r\n if (this._testInProgress.isPending()) {\r\n this._clearTasks();\r\n\r\n // stop the timer\r\n this._stopTimer();\r\n\r\n console.log(byUser ? 'User initiated abort.' : 'System initiated abort due to task error.');\r\n\r\n // clear promise\r\n this._testInProgress.reject(byUser ? 'User initiated abort.' : 'System initiated abort due to task error.');\r\n }\r\n }\r\n }\r\n\r\n return NetworkTester;\r\n\r\n})(Util);","\r\n// Utility to use bandwidth test results and determine risk for given capacity\r\n// require Utilities/util_statistics.js\r\nUtil.networkDiagnostics.CapacityCalculator = (function (Util) {\r\n\r\n const riskTypes = Util.networkDiagnostics.riskTypes;\r\n\r\n function CapacityCalculator() {\r\n this._veryLow = .999;\r\n this._moderate = .85;\r\n this._high = .6;\r\n this._risk = riskTypes.unknown; //Unknown, VeryLow, Moderate, High, NearCertain\r\n this._probability = 0.0;\r\n this._recommendedNumber = -1;\r\n }\r\n\r\n\r\n CapacityCalculator.prototype.getRisk = function () {\r\n return this._risk;\r\n };\r\n\r\n CapacityCalculator.prototype.getRecommendedStudentCount = function () {\r\n return this._recommendedNumber;\r\n };\r\n\r\n /**\r\n * Compute the probability of students taking the test.\r\n * \r\n * @param {Number} goodput - download speed in KBps\r\n * @param {Number} itemsize - request size in KB\r\n * @param {Number} students - number of students taking the test\r\n * @param {Number} responseTime - average response time for each student in seconds\r\n * @returns {Number} probability - probability for number of students will be successfull in taking the test with given download speed.\r\n */\r\n CapacityCalculator.prototype.probabilityWithinCapacity = function (goodput, itemsize, students, responseTime) {\r\n var maxItems = this._maxItemsPerSecond(goodput, itemsize);\r\n this._probability = this._probabilityWithinCapacity_1(students, responseTime, maxItems);\r\n this._risk = this._calculateRisk(students);\r\n \r\n switch (this._risk) {\r\n case riskTypes.high:\r\n case riskTypes.nearCertain:\r\n this._recommendedNumber = this._recommendNumber(students, responseTime, maxItems);\r\n break;\r\n }\r\n return this._probability;\r\n };\r\n\r\n CapacityCalculator.prototype._maxItemsPerSecond = function (goodput, itemSize) {\r\n return goodput / itemSize;\r\n };\r\n\r\n CapacityCalculator.prototype._probabilityWithinCapacity_1 = function (students, responseTime, maxItems) {\r\n var probability = 0.0;\r\n var max1 = Math.floor(maxItems);\r\n if (max1 > 0) probability = this._probabilityWithinCapacityPerSecond_1(students, responseTime, max1);\r\n else probability = this._probabilityBelowEquilibrium(students, responseTime, maxItems);\r\n return probability;\r\n };\r\n\r\n CapacityCalculator.prototype._probabilityWithinCapacityPerSecond_1 = function (students, respTime, maxItems) {\r\n return Util.Statistics.poisson(maxItems, students / respTime);\r\n };\r\n\r\n CapacityCalculator.prototype._probabilityBelowEquilibrium = function (students, responseTime, maxItems) {\r\n var equilibriumTime = 1.0 / maxItems;\r\n var meanResponses = equilibriumTime * students / responseTime;\r\n return Util.Statistics.poisson(1, meanResponses);\r\n };\r\n\r\n\r\n CapacityCalculator.prototype._calculateRisk = function (students) {\r\n if (this._probability == -1) this._risk = riskTypes.unknown;\r\n // determine the risk level based on the probability value,\r\n // removed the code that would always set risk level as 'Moderate' if there is only one student (bug# 180305)\r\n if (this._probability < this._high) this._risk = riskTypes.nearCertain;\r\n else if (this._probability < this._moderate) this._risk = riskTypes.high;\r\n else if (this._probability < this._veryLow) this._risk = riskTypes.moderate;\r\n else this._risk = riskTypes.veryLow;\r\n\r\n return this._risk;\r\n };\r\n\r\n CapacityCalculator.prototype._recommendNumber = function (students, responseTime, maxItems) {\r\n var recommendation = students;\r\n var step = Math.ceil(.25 * students);\r\n var direction = -1;\r\n var lastRecommendation = students;\r\n\r\n var p = this._probabilityWithinCapacity_1(students, responseTime, maxItems);\r\n\r\n var dir = direction;\r\n while ((p > this._veryLow) || (p < this._moderate)) {\r\n if (dir != direction) step = Math.max(1, Math.round(.5 * step));\r\n students = Math.max(1, students + dir * step);\r\n\r\n p = this._probabilityWithinCapacity_1(students, responseTime, maxItems);\r\n if (p > this._veryLow) dir = 1;\r\n else if (p < this._moderate) dir = -1;\r\n\r\n }\r\n this._recommendedNumber = students;\r\n return this._recommendedNumber;\r\n };\r\n\r\n return CapacityCalculator;\r\n\r\n})(Util);","/*\r\n * Base card for all A/V checks\r\n */\r\n\r\n(function(Stepper) {\r\n\r\n const DONE = `
      Done
      `;\r\n\r\n class AvCheckBase extends Stepper.Card {\r\n\r\n constructor({ id, template = '' } = {}) {\r\n\r\n super({\r\n template: `\r\n ${DONE}\r\n ${template}\r\n `\r\n });\r\n\r\n this._id = id;\r\n this._validated = false;\r\n\r\n }\r\n\r\n get _doneId() { return `tds-av-done-${this._id}`; }\r\n get validated() { return this._validated; }\r\n\r\n render(data) {\r\n\r\n super.render(Object.assign({}, data, {\r\n doneId: this._doneId\r\n }));\r\n\r\n if (tds.Student.Storage.getAvCheck(this._id)) {\r\n this._mark(true);\r\n }\r\n\r\n }\r\n\r\n // set AV check as passed\r\n markPassed() {\r\n this._mark(true);\r\n this.fire('passed');\r\n }\r\n\r\n // set AV check as failed\r\n markFailed() {\r\n this._mark(false);\r\n this.fire('failed');\r\n }\r\n\r\n validate(key, options) {\r\n if (!this._validated) {\r\n this.setError(key, options);\r\n } else {\r\n this.clearError();\r\n }\r\n\r\n return this._validated;\r\n }\r\n\r\n _mark(value) {\r\n this.clearError();\r\n this._validated = value;\r\n\r\n // toggle the done state for the card\r\n this.toggleCheckmark(value);\r\n\r\n // toggle screen reader visibility on the \"done\" element \r\n // it is always visually hidden\r\n const $doneEl = this.$el.find(`#${this._doneId}`);\r\n $doneEl.toggleClass('tds-removed', !value).toggleClass('tds-invisible', value);\r\n\r\n // add/remove aria-describedby on the card\r\n if (value) {\r\n this.$el.attr('aria-describedby', this._doneId);\r\n } else {\r\n this.$el.removeAttr('aria-describedby');\r\n }\r\n\r\n // save state in storage\r\n tds.Student.Storage.setAvCheck(this._id, value);\r\n }\r\n\r\n dispose() {\r\n\r\n super.dispose();\r\n\r\n this._id = null;\r\n this._validated = null;\r\n\r\n }\r\n }\r\n\r\n AvCheckBase.register('AvCheckBase');\r\n\r\n})(tds.Stepper);","(function (Stepper, Rtc) {\r\n // debug: catch scripts\r\n const deviceManager = Rtc.DeviceManager;\r\n if (!deviceManager) {\r\n throw `DeviceManager not found!!`;\r\n }\r\n\r\n // device collection\r\n let allCameras = [];\r\n deviceManager.on('mediaDeviceChanged', async (evt) => {\r\n console.log('media device changed');\r\n if (evt.data && evt.data.disconnectedDevice) {\r\n allCameras = evt.data.deviceStore.videoInputDevices;\r\n }\r\n });\r\n\r\n\r\n // #region Templates \r\n\r\n const TEMPLATE = ` \r\n
      \r\n

      Camera Check

      \r\n \r\n
      Make sure you are able to use camera. Click the checkbox to grant permission, then test your camera
      \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n Connect Camera \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n

      Next Step:

      \r\n
      \r\n If you see live stream of your camera, choose Works!. If not, choose Doesn't Work.\r\n
      \r\n
      \r\n Works! \r\n Doesn't Work \r\n \\${required ? '' : ''} \r\n\t\t
      \r\n
      \r\n
      \r\n`;\r\n\r\n const SELECT_TEMPLATE = `\r\n
      \r\n

      Camera Selection

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

      \r\n Please select the camera and if you can see yourself, and then click [Yes].
      \r\n If you cannot see yourself, click [Problem (No)]. \r\n

      \r\n
      \r\n
      \r\n \r\n
      \r\n Works! \r\n Doesn't Work \r\n\t
      \r\n
      \r\n `;\r\n //#endregion \r\n\r\n //#region Constants \r\n\r\n /* Refer to exceptions segment in https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\r\n * NotAllowedError: It happens if the user has denied access to device for the current session, or user media devices globally.\r\n * NotFoundError: No media tracks of the type specified were found that satisfy the given constraints.\r\n * NotReadableError: Although the user granted permission, a hardware error occurred at the operating system, browser, or Web page level which prevented access to the device.\r\n * TypeError : The list of constraints specified is empty, or has all constraints set to false. This can also happen if you try to call getUserMedia() in an insecure context, since navigator.mediaDevices is undefined in an insecure context.\r\n * */\r\n const errorCodes = {\r\n NotAllowedError: 'NotAllowedError',\r\n NotFoundError: 'NotFoundError',\r\n NotReadableError: 'NotReadableError',\r\n TypeError: 'TypeError',\r\n BrowserNotSupported: 'BrowserNotSupported'\r\n };\r\n\r\n // renderer options\r\n const defaultOptions = {\r\n required: false\r\n };\r\n\r\n //#endregion \r\n\r\n\r\n class AvCameraCheck extends Stepper.Cards.AvCheckBase {\r\n\r\n constructor({ rendererOptions = {} } = {}) {\r\n\r\n super({\r\n id: 'camera',\r\n template: `${TEMPLATE}\r\n ${SELECT_TEMPLATE}`\r\n });\r\n\r\n // consolidate renderer options\r\n this._options = Object.assign({}, defaultOptions, rendererOptions);\r\n\r\n // attach listeners for action el's\r\n this.addEvent('click', '.camera-disclaimer-agree', '_toggleConnectCamera');\r\n this.addEvent('click', '.btn-connectCamera', '_onConnectCameraClick');\r\n this.addEvent('click', '.btn-pass', '_onPassClick');\r\n this.addEvent('click', '.btn-fail', '_onFailClick');\r\n this.addEvent('click', '.btn-skip-cameracheck', '_onSkipClick');\r\n this.addEvent('click', '.btn-retry', '_onRetryClick');\r\n this.addEvent('click', '.btn-continue-error', '_onPassClick');\r\n this.addEvent('click', '.btn-source-selected', '_onPassClick');\r\n this.addEvent('click', '.btn-nosource-selected', async () => {\r\n this.markFailed();\r\n await this._disposeResources();\r\n this._showErrorView({ name: errorCodes.NotFoundError });\r\n });\r\n\r\n // RTC \r\n this._videoEl = null;\r\n this._video = null;\r\n }\r\n\r\n validate() {\r\n return super.validate('AvCheck.Camera.Required', { message: 'Please check your camera before continuing.' });\r\n }\r\n\r\n //Check if camera check is required or preferred for the current student. \r\n get required() {\r\n return this._options.required;\r\n }\r\n\r\n // Check if user agreed to let us request permission for website to have access to media devices\r\n get userAckReceived() {\r\n const agreeCb = this.$el.find('.camera-disclaimer-agree');\r\n return agreeCb && agreeCb.prop('checked');\r\n }\r\n\r\n async render() {\r\n\r\n // build template data to keep unintended parameters out of render.\r\n const templateData = {\r\n required: this.required\r\n };\r\n\r\n super.render(templateData);\r\n\r\n if (!deviceManager.isBrowserSupportAccessToMediaDevices) {\r\n this._showErrorView({ name: errorCodes.BrowserNotSupported });\r\n }\r\n\r\n // let user read and agree to instructions\r\n this.$el.find('.btn-connectCamera').prop('disabled', true);\r\n this._disableAction(this.$el.find('.btn-pass').get(0));\r\n\r\n }\r\n\r\n _hideAllViews() {\r\n // hide check view\r\n this.$el.find('.checkCamera').hide();\r\n\r\n // remove error\r\n this.$el.find('.checkCameraError').remove();\r\n\r\n // remove select view\r\n this.$el.find('.checkSelectView').hide();\r\n }\r\n\r\n _showCheckView() {\r\n\r\n this._hideAllViews();\r\n\r\n // show check page\r\n this.$el.find('.checkCamera').show();\r\n }\r\n\r\n _showErrorView(err) {\r\n // Unknown error\r\n err = err || { name: 'unknown' };\r\n\r\n // hide views\r\n this._hideAllViews();\r\n\r\n // template fillers\r\n let headerKey, instructionKey;\r\n\r\n switch (err.name) {\r\n case errorCodes.NotAllowedError:\r\n headerKey = 'Sections.Label.CameraAccessDenied';\r\n instructionKey = 'Sections.Instruction.CameraAccessDenied';\r\n break;\r\n case errorCodes.NotReadableError:\r\n headerKey = 'Sections.Label.CameraHardwareFailed';\r\n instructionKey = 'Sections.Instruction.CameraHardwareFailed';\r\n break;\r\n case errorCodes.NotFoundError:\r\n headerKey = 'Sections.Label.NoCameraFound';\r\n instructionKey = 'Sections.Instruction.NoCameraFound';\r\n break;\r\n case errorCodes.BrowserNotSupported:\r\n headerKey = 'Sections.Label.BrowserNotSupported';\r\n instructionKey = 'Sections.Instruction.BrowserNotSupported';\r\n break;\r\n default:\r\n headerKey = 'Sections.Label.UnknownCameraError';\r\n instructionKey = 'Sections.Instruction.UnknownCameraError';\r\n }\r\n\r\n const msg = `camera check error (${err.name}): headerKey: (${headerKey}), instructionKey: (${instructionKey})`;\r\n TDS.Diagnostics.logServerError(msg, err);\r\n\r\n // show error \r\n const errTemplate = ` \r\n
      \r\n

      Problem Connecting To Camera

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

      \r\n To try the camera check again, choose Try Again. If your Test Administrator tells you to log out, choose Log Out.\r\n

      \r\n
      \r\n \r\n
      \r\n Try again\r\n ${this.required ? '' : 'Continue'}\r\n
      \r\n
      \r\n `;\r\n this.$el.append(errTemplate);\r\n }\r\n\r\n async _showSelectView() {\r\n const cameras = await this._getCameras();\r\n \r\n // hide all views\r\n this._hideAllViews(); \r\n\r\n // refresh camera select ui \r\n const $selectEl = this.$el.find('div.cameraSelect'); \r\n $selectEl.empty(); \r\n \r\n if (this._cameraSelectRenderer) { \r\n this._cameraSelectRenderer.dispose();\r\n }\r\n\r\n const renderer = this._cameraSelectRenderer = deviceManager.createCameraSelectUI(cameras, {\r\n showCameraPreview: true\r\n });\r\n renderer.render($selectEl);\r\n\r\n // neeed to think about this\r\n renderer.on('deviceSelect', async (deviceId) => {\r\n // save device id to session storage\r\n const constraints = await deviceManager.getMediaConstraints(deviceId);\r\n deviceManager.saveMediaConstraintsToSessionStorage(constraints);\r\n });\r\n\r\n this.$el.find('.checkSelectView').show();\r\n }\r\n\r\n async _getCameras() {\r\n // application should not call getCameras before ack\r\n if (!this.userAckReceived) {\r\n throw `Website doesn't have media device permission.`;\r\n }\r\n\r\n if (allCameras.length === 0) {\r\n const deviceStore = await deviceManager.scanForMediaDevices({\r\n checkForMediaPermission: async () => {\r\n return true;\r\n }\r\n });\r\n allCameras = deviceStore ? deviceStore.videoInputDevices : [];\r\n }\r\n return allCameras;\r\n }\r\n\r\n _toggleConnectCamera() {\r\n // once agreed don't let user switch back\r\n const agreeCb = this.$el.find('.camera-disclaimer-agree');\r\n if (agreeCb.length === 0 || agreeCb[0].disabled) {\r\n return;\r\n }\r\n agreeCb.prop('disabled', true).attr('aria-disabled', true);\r\n\r\n // we have the ack\r\n this._userAckReceived = true;\r\n\r\n // have the deviceManager save the permission, so we can access it in other shells\r\n deviceManager.canAskForMediaPermission = true;\r\n\r\n // scan for cameras\r\n this._getCameras().then((cameras) => {\r\n if (cameras.length === 0) {\r\n this._showErrorView({ name: errorCodes.NotFoundError });\r\n }\r\n\r\n // once user agreed with the disclaimer allow user to connect local camera\r\n const connectCameraEl = this.$el.find('.btn-connectCamera');\r\n this._enableAction(connectCameraEl);\r\n });\r\n }\r\n\r\n _enableAction(actionEl) {\r\n if (!actionEl) {\r\n return;\r\n }\r\n\r\n $(actionEl).prop('disabled', false)\r\n .attr('aria-disabled', false)\r\n .removeClass('disabled');\r\n }\r\n\r\n _disableAction(actionEl) {\r\n if (!actionEl) {\r\n return;\r\n }\r\n $(actionEl).prop('disabled', true)\r\n .attr('aria-disabled', true)\r\n .addClass('disabled');\r\n }\r\n\r\n // TODO: move to deviceManager\r\n async _connectCamera() {\r\n // put local media on page \r\n const videoEl = this._videoEl = this.$el.find('video.local').get(0);\r\n try {\r\n\r\n // get media constraints\r\n let constraints = await deviceManager.getMediaConstraints();\r\n \r\n // get local devices..may throw permission denied if user doesn't want to give access to camera.\r\n const localMediaStream = await navigator.mediaDevices.getUserMedia(constraints);\r\n\r\n // fetch the video track\r\n const videoTrack = this._video = localMediaStream.getTracks().filter((track) => track.kind === 'video')[0] || null;\r\n\r\n // play live feed from local camera\r\n videoEl.srcObject = new MediaStream([videoTrack]);\r\n await videoEl.play();\r\n\r\n // save constraints\r\n deviceManager.saveMediaConstraintsToSessionStorage(constraints);\r\n\r\n // ask user if he can see himself..enable works! \r\n this._enableAction(this.$el.find('.btn-pass').get(0));\r\n\r\n // add marker so we can style the feed\r\n this.$el.find('.avControls').addClass('camera-active');\r\n\r\n } catch (err) {\r\n this._showErrorView(err);\r\n }\r\n }\r\n\r\n async _disconnectCamera() {\r\n // detach video el from the media stream\r\n if (this._videoEl) {\r\n // stop video\r\n this._videoEl.pause();\r\n\r\n // detach the video element\r\n this._videoEl.srcObject = null;\r\n }\r\n\r\n this.$el.find('.avControls').removeClass('camera-active');\r\n\r\n }\r\n\r\n //#region Event Handlers\r\n\r\n async _onConnectCameraClick(e) {\r\n e.preventDefault();\r\n\r\n // disable connect camera..prevent duplicate clicks\r\n this._disableAction(e.target);\r\n\r\n await this._connectCamera();\r\n\r\n // enable connect camera\r\n this._enableAction(e.target);\r\n }\r\n\r\n // if user is able to successfully connect to camera \r\n _onPassClick(e) {\r\n e.preventDefault();\r\n\r\n this.markPassed();\r\n }\r\n\r\n // user chose to skip camera check\r\n async _onSkipClick(e) {\r\n e.preventDefault();\r\n\r\n if (!this.userAckReceived) {\r\n // show an alert warning the user that they will not be able to use the camera if they do not acknowledge the permission checkbox\r\n const skipAlert = tds.Dialog.showAlert({\r\n text: 'AvCheck.Camera.SkipWarning',\r\n altText: 'If you choose to continue without checking the box above you will not be able to use the camera.'\r\n });\r\n await skipAlert.getPromise();\r\n }\r\n\r\n this._onPassClick(e);\r\n }\r\n\r\n // if user gave permission but failed connect to camera \r\n _onFailClick(e) {\r\n e.preventDefault();\r\n\r\n this._disconnectCamera();\r\n\r\n this._getCameras().then(async (cameras) => {\r\n if (cameras.length === 0) {\r\n this._showErrorView({ name: errorCodes.NotFoundError });\r\n } else if (cameras.length > 1) {\r\n await this._showSelectView();\r\n } else {\r\n this.markFailed();\r\n\r\n this._showErrorView({ name: 'unknown' });\r\n }\r\n });\r\n\r\n }\r\n\r\n // retry connect to camera \r\n _onRetryClick(e) {\r\n e.preventDefault();\r\n\r\n // reset the check page\r\n this.markFailed();\r\n\r\n // disable pass\r\n this._disableAction(this.$el.find('.btn-pass').get(0));\r\n\r\n // disconnect camera so user can try\r\n this._disconnectCamera();\r\n\r\n // show check page for retry\r\n this._showCheckView();\r\n }\r\n\r\n //#endregion\r\n\r\n // dispose any media resources\r\n async _disposeResources() {\r\n // 1. check page resources \r\n await this._disconnectCamera();\r\n\r\n // 2. select camera resources\r\n if (this._cameraSelectRenderer) {\r\n await this._cameraSelectRenderer.dispose();\r\n }\r\n\r\n }\r\n\r\n // dispose the card \r\n async dispose() {\r\n super.dispose();\r\n\r\n await this._disposeResources();\r\n\r\n this._videoEl = null;\r\n\r\n this._localMediaDevice = null;\r\n\r\n }\r\n }\r\n\r\n AvCameraCheck.register('AvCameraCheck');\r\n\r\n})(tds.Stepper, tds.rtc);","/*\r\n * Card for sound check\r\n */\r\n\r\n(function (Stepper, mediaManager) {\r\n\r\n const TEMPLATE = `\r\n
      \r\n

      Sound Playback Check

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

      \r\n
      \r\n
      0
      \r\n
      \r\n\r\n
      \r\n

      \r\n
      \r\n
      \r\n Works!\r\n Doesn't Work\r\n\t\t\t
      \r\n
      \r\n
      \r\n `;\r\n const ERROR = `\r\n
      \r\n

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

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

      \r\n
      \r\n
      \r\n Try again\r\n
      \r\n
      \r\n \r\n
      \r\n `;\r\n\r\n class AvSoundCheck extends Stepper.Cards.AvCheckBase {\r\n\r\n constructor() {\r\n \r\n super({\r\n id: 'sound',\r\n template: `${TEMPLATE}${ERROR}`\r\n });\r\n\r\n this.addEvent('click', '.btn-pass', '_onPassClick');\r\n this.addEvent('click', '.btn-fail', '_onFailClick');\r\n this.addEvent('click', '.btn-retry', '_onRetryClick');\r\n\r\n this._audioMedium = null;\r\n this._enableBtnPassCallback = this._enableBtnPass.bind(this);\r\n }\r\n\r\n dispose() {\r\n\r\n super.dispose();\r\n\r\n if (this._audioMedium != null) {\r\n this._audioMedium.onidle.unsubscribe(this._enableBtnPassCallback);\r\n }\r\n this._enableBtnPassCallback = null;\r\n this._audioMedium = null;\r\n }\r\n\r\n async render() {\r\n\r\n super.render();\r\n\r\n const elAudioPlayer = this.$el.find('#audioPlayer').get(0);\r\n\r\n if (!elAudioPlayer) {\r\n return false;\r\n }\r\n\r\n if (tds.getAccProps().hasRecorderCheck()) {\r\n // Delay of 1.5 seconds to fix audio recorder crackling on OS X\r\n const $audioControls = this.$el.find('.checkSound .audioControls');\r\n $audioControls.addClass('load_start');\r\n await Promise.delay(1500);\r\n $audioControls.removeClass('load_start');\r\n }\r\n\r\n // create player ui\r\n const audioMedium = await mediaManager.instanciateMedium(mediaManager.types.audio, elAudioPlayer);\r\n if (!audioMedium) {\r\n return false;\r\n }\r\n\r\n this._audioMedium = audioMedium;\r\n audioMedium.onidle.subscribe(this._enableBtnPassCallback);\r\n\r\n // if sound has already been checked then enable pass button\r\n if (tds.Student.Storage.getAvCheck(this._id)) {\r\n this._enableBtnPass();\r\n }\r\n\r\n // Show volume slider if it's enabled and we're in SB\r\n let sysVol = await tds.secureBrowser.api.getSystemVolume();\r\n if (tds.getAccommodationProperties().hasSoundPlayVolCheck() && sysVol >= 0) {\r\n\r\n this.$el.find('.sliderWrap').css('display', 'block');\r\n\r\n // Create volume slider\r\n const elVolSliderContainer = this.$el.find('#SoundCheck_Adjust_Volume').get(0);\r\n this._volumeSlider =\r\n Util.Slider.create('SoundCheck_Adjust_Volume_slider', 0, 10, 200); // Range=0-10, Width=200px\r\n elVolSliderContainer.appendChild(this._volumeSlider.getEl());\r\n $(this._volumeSlider.getEl()).attr('aria-labeledby', 'SoundCheck_Volume_Value');\r\n\r\n this._volumeSlider.onChange.subscribe((sliderValue, fromUserInterface) => {\r\n $('#SoundCheck_Volume_Value').text(sliderValue);\r\n });\r\n\r\n this._volumeSlider.onEnd.subscribe((sliderValue, fromUserInterface) => {\r\n $('#SoundCheck_Volume_Value').text(sliderValue);\r\n tds.secureBrowser.api.setSystemVolume(sliderValue);\r\n });\r\n\r\n // Init slider to current System Volume\r\n let curVol = await tds.secureBrowser.api.getSystemVolume();\r\n if (curVol < 0 || curVol > 10) { // Range check\r\n curVol = 0;\r\n }\r\n this.$el.find('#SoundCheck_Volume_Value').text(curVol);\r\n this._volumeSlider.setValue(curVol, true); // true means skip animation\r\n }\r\n\r\n return true;\r\n }\r\n\r\n validate() {\r\n return super.validate('AvCheck.Sound.Required', { message: 'Please check your audio before continuing.' });\r\n }\r\n\r\n _enableBtnPass() {\r\n const $btnPass = this.$el.find('.btn-pass');\r\n\r\n // enable this for screen reader\r\n $btnPass.attr('aria-disabled', 'false');\r\n\r\n $btnPass.removeClass('disabled');\r\n }\r\n\r\n _toggleSoundCheck(show) {\r\n this.$el.find('.checkSound').toggle(show);\r\n this.$el.find('.checkSoundError').toggle(!show);\r\n }\r\n\r\n _onPassClick(e) {\r\n e.preventDefault();\r\n\r\n if ($(e.currentTarget).hasClass('disabled')) return;\r\n\r\n this.markPassed();\r\n }\r\n\r\n _onFailClick(e) {\r\n e.preventDefault();\r\n\r\n tds.Audio.stopAll();\r\n\r\n this.markFailed();\r\n this._toggleSoundCheck(false);\r\n }\r\n\r\n _onRetryClick(e) {\r\n e.preventDefault();\r\n this._toggleSoundCheck(true);\r\n }\r\n }\r\n\r\n AvSoundCheck.register('AvSoundCheck');\r\n\r\n})(tds.Stepper, window.mediaManager);\r\n","/*\r\n * Card for recorder check\r\n */\r\n\r\n(function (Stepper) {\r\n\r\n const Recorder = tds.Audio.Recorder;\r\n\r\n const PREAMBLE = `\r\n
      \r\n

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

      \r\n Preparing to record audio, please wait.\r\n

      \r\n
      \r\n
      \r\n `;\r\n const RECORDER = `\r\n
      \r\n

      Recorder Playback Check

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

      \r\n
      \r\n
      \r\n Works!\r\n Doesn't Work\r\n \\${required ? '' : 'Skip'} \r\n\t\t\t
      \r\n\t\t\t
      \r\n \r\n
      \r\n `;\r\n const SOURCES = `\r\n
      \r\n

      Recording Input Device Selection

      \r\n\r\n
      \r\n
      \r\n Finding recording input devices, please wait.\r\n
      \r\n
      \r\n There was a problem finding recording devices, click [Problem (No)].\r\n
      \r\n
      \r\n Please speak and select the recording input device which best detects your voice, and then click [Yes].
      \r\n If there are no devices, or if none of the devices detects your voice, click [Problem (No)].\r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n

      \r\n
      \r\n
      \r\n Works!\r\n Doesn't Work\r\n\t\t\t
      \r\n\t\t\t
      \r\n \r\n
      \r\n `;\r\n const ERROR = `\r\n
      \r\n

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

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

      \r\n
      \r\n
      \r\n Try again\r\n \\${required ? '' : 'Continue'} \r\n
      \r\n
      \r\n \r\n
      \r\n `;\r\n const RECORDER_ERROR = `\r\n
      \r\n

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

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

      \r\n
      \r\n
      \r\n Try Again\r\n Select\r\n \\${required ? '' : 'Continue'} \r\n
      \r\n
      \r\n \r\n
      \r\n `;\r\n const PERMISSION_ERROR = `\r\n
      \r\n

      Unable to Access Microphone

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

      \r\n Please grant permission for Secure Browser to use the microphone on your device.\r\n

      \r\n

      \r\n Please grant permission for Secure Browser to use the microphone on your device.\r\n

      \r\n
      \r\n \r\n
      \r\n `;\r\n\r\n const Sections = {\r\n Preamble: 'checkRecorderPreamble',\r\n Recorder: 'checkRecorder',\r\n Sources: 'checkRecorderSources',\r\n Error: 'checkSoundError',\r\n RecorderError: 'checkRecorderError',\r\n PermissionError: 'checkRecorderPermissionError'\r\n };\r\n\r\n // renderer options\r\n const defaultOptions = {\r\n required: true\r\n };\r\n\r\n class AvRecorderCheck extends Stepper.Cards.AvCheckBase {\r\n\r\n constructor({ rendererOptions = {} } = {}) {\r\n\r\n super({\r\n id: 'recorder',\r\n template: `\r\n ${PREAMBLE}\r\n ${RECORDER}\r\n ${SOURCES}\r\n ${ERROR}\r\n ${RECORDER_ERROR}\r\n ${PERMISSION_ERROR}\r\n `\r\n });\r\n\r\n // consolidate renderer options\r\n this._options = Object.assign({}, defaultOptions, rendererOptions);\r\n\r\n this._recorderPermissionPromise = null;\r\n this._audioSourceSelect = null;\r\n this._audioSourceSelectPromise = null;\r\n this._audioSourceSelectController = null;\r\n this._audioRecorder = null;\r\n this._recorderSupported = false;\r\n\r\n this.addEvent('click', '.btn-pass', '_onPassClick');\r\n this.addEvent('click', '.btn-fail', '_onFailClick');\r\n this.addEvent('click', '.btn-recorder-retry', '_onRecorderRetryClick');\r\n this.addEvent('click', '.btn-source-select', '_onSourceSelectClick');\r\n this.addEvent('click', '.btn-no-source', '_onNoSuitableSourceClick');\r\n this.addEvent('click', '.btn-source-selected', '_onSourceSelectedClick');\r\n this.addEvent('click', '.btn-skip-check', '_onPassClick');\r\n this.addEvent('click', '.btn-continue-error', '_onPassClick');\r\n }\r\n\r\n get required() {\r\n return this._options.required;\r\n }\r\n\r\n render() {\r\n\r\n const templateData = {\r\n required: this.required\r\n };\r\n\r\n super.render(templateData);\r\n\r\n this._recorderSupported = tds.Audio.Recorder.initialize();\r\n\r\n this._audioRecorder = this.$el.find('#audioRecorder').get(0);\r\n tds.Audio.Widget.createRecorder(this._audioRecorder);\r\n\r\n // check if recorder has already been tested\r\n if (tds.Student.Storage.getAvCheck(this._id)) {\r\n this._enableButton('btn-pass');\r\n } else {\r\n Recorder.onPlayStop.subscribe(() => {\r\n this._enableButton('btn-pass');\r\n });\r\n }\r\n\r\n this._recorderPermissionPromise = Recorder.checkPermission();\r\n\r\n this._audioSourceSelect = this.$el.find('#audioSourceSelect').get(0);\r\n\r\n this._audioSourceSelectController = tds.Audio.Widget.createSourceSelect(this._audioSourceSelect, deviceId => {\r\n if (deviceId !== null) {\r\n this._enableButton('btn-source-selected');\r\n\r\n // set the selected device's id to be used for recording, and save it in session storage as well\r\n Recorder.setSource(deviceId);\r\n Recorder.saveSourceInSessionStorage(deviceId);\r\n } else {\r\n this._enableButton('btn-source-selected');\r\n\r\n // clear the selected device's id to be used for recording, and remove it from session storage as well\r\n Recorder.setSource(null);\r\n Recorder.removeSourceFromSessionStorage();\r\n }\r\n });\r\n\r\n // we want to clear any saved device selection\r\n Recorder.removeSourceFromSessionStorage();\r\n\r\n }\r\n\r\n validate() {\r\n return super.validate('AvCheck.Recorder.Required', { message: 'Please check your recorder before continuing.' });\r\n }\r\n\r\n _enableButton(className) {\r\n const $button = this.$el.find(`.${className}`);\r\n $button.removeClass('disabled');\r\n $button.attr('aria-disabled', false);\r\n }\r\n\r\n _toggleSection(section) {\r\n // hide all sections\r\n this.$el.find(Object.values(Sections).map(s => `.${s}`).join(',')).hide();\r\n\r\n // show the section\r\n this.$el.find(`.${section}`).show();\r\n }\r\n\r\n _showRecorderPreamble() {\r\n this._toggleSection(Sections.RecorderPreamble);\r\n\r\n this._recorderPermissionPromise.then(granted => {\r\n if (granted) {\r\n this._showRecorderCheck();\r\n }\r\n else {\r\n this._toggleSection(Sections.RecorderPermissionError);\r\n }\r\n })\r\n .catch(error => {\r\n this._toggleSection(Sections.RecorderPermissionError);\r\n });\r\n }\r\n\r\n _showRecorderCheck() {\r\n this._toggleSection(Sections.Recorder);\r\n\r\n // BUG #16088: Record button remains disabled\r\n if (this._audioRecorder && $(this._audioRecorder).hasClass('recording_fail')) {\r\n this._audioRecorder.classNameEvent = 'recording_ready'; // BUG #16238: Another Mic icon displays\r\n this._audioRecorder.className = 'elicitedwrap recording_ready';\r\n }\r\n }\r\n\r\n _showSourcesCheck() {\r\n\r\n this._toggleSection(Sections.Sources);\r\n\r\n const sourcesSection = $(`.${Sections.Sources}`),\r\n sourcesPlaceholder = sourcesSection.find('.sources-placeholder'),\r\n sourcesError = sourcesSection.find('.sources-error'),\r\n sourcesContent = sourcesSection.find('.sources-content');\r\n\r\n sourcesPlaceholder.show();\r\n sourcesError.hide();\r\n sourcesContent.hide();\r\n\r\n if (this._audioSourceSelectPromise === null) {\r\n // we only want to build the device list once, more than that is a waste\r\n this._audioSourceSelectPromise = this._audioSourceSelectController.buildDeviceList();\r\n }\r\n\r\n this._audioSourceSelectPromise.then(() => {\r\n sourcesPlaceholder.hide();\r\n sourcesError.hide();\r\n sourcesContent.show();\r\n\r\n this._audioSourceSelectController.show();\r\n })\r\n .catch(() => {\r\n // no devices could be setup successfully\r\n sourcesPlaceholder.hide();\r\n sourcesError.show();\r\n sourcesContent.hide();\r\n });\r\n\r\n }\r\n\r\n _showSoundError(returnSection) {\r\n\r\n // remove current event handler from the retry button since it may need to return to a different section\r\n this.removeEvent('click', '.btn-error-retry');\r\n\r\n // add handler to return to the proper section\r\n this.addEvent('click',\r\n '.btn-error-retry',\r\n (returnSection === Sections.Recorder) ? '_onRecorderRetryClick' : '_onSourceSelectClick');\r\n\r\n // re-delegate events so that change takes place\r\n this.delegateEvents();\r\n\r\n this._toggleSection(Sections.Error);\r\n\r\n }\r\n\r\n _onPassClick(e) {\r\n e.preventDefault();\r\n\r\n if ($(e.currentTarget).hasClass('disabled')) return;\r\n\r\n this.markPassed();\r\n }\r\n\r\n _onFailClick(e) {\r\n e.preventDefault();\r\n\r\n tds.Audio.stopAll();\r\n\r\n Recorder.getSources(sources => {\r\n\r\n if (sources.length > 1) {\r\n // more than one recorder source so show source select button\r\n this.$el.find('.btn-source-select').show();\r\n } else {\r\n // there are no other devices to try, no point in showing the device selection screen\r\n this.$el.find('.btn-source-select').hide();\r\n }\r\n\r\n this._toggleSection(Sections.RecorderError);\r\n });\r\n\r\n this.markFailed();\r\n this._showSoundError(Sections.Recorder);\r\n }\r\n\r\n _onRecorderRetryClick(e) {\r\n e.preventDefault();\r\n this._showRecorderCheck();\r\n }\r\n \r\n _onSourceSelectClick(e) {\r\n e.preventDefault();\r\n this._showSourcesCheck();\r\n }\r\n\r\n _onNoSuitableSourceClick(e) {\r\n e.preventDefault();\r\n\r\n this._audioSourceSelectController.hide();\r\n this._showSoundError(Sections.Sources);\r\n }\r\n\r\n _onSourceSelectedClick(e) {\r\n e.preventDefault();\r\n\r\n if (this.$el.find('.btn-source-selected').hasClass('disabled')) return;\r\n\r\n this._audioSourceSelectController.hide();\r\n\r\n this._showRecorderCheck();\r\n }\r\n\r\n dispose() {\r\n\r\n super.dispose();\r\n\r\n this._recorderPermissionPromise = null;\r\n this._audioSourceSelect = null;\r\n this._audioSourceSelectPromise = null;\r\n this._audioSourceSelectController = null;\r\n this._audioRecorder = null;\r\n this._recorderSupported = null;\r\n\r\n }\r\n\r\n }\r\n\r\n AvRecorderCheck.register('AvRecorderCheck');\r\n\r\n})(tds.Stepper);","/*\r\n * Card for video check\r\n */\r\n\r\n(function (Stepper) {\r\n\r\n const TEMPLATE = `\r\n
      \r\n

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

      \r\n
      \r\n
      \r\n Works!\r\n Doesn't Work\r\n
      \r\n
      \r\n \r\n
      \r\n `;\r\n const ERROR = `\r\n
      \r\n

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

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

      \r\n
      \r\n
      \r\n Try Again\r\n
      \r\n
      \r\n \r\n
      \r\n `;\r\n\r\n class AvVideoCheck extends Stepper.Cards.AvCheckBase {\r\n\r\n constructor() {\r\n\r\n super({\r\n id: 'video',\r\n template: `${TEMPLATE}${ERROR}`\r\n });\r\n \r\n this.addEvent('click', '.btn-pass', '_onPassClick');\r\n this.addEvent('click', '.btn-fail', '_onFailClick');\r\n this.addEvent('click', '.btn-retry', '_onRetryClick');\r\n\r\n }\r\n\r\n render() {\r\n\r\n const accProps = tds.getAccProps();\r\n const noSound = accProps.hasVideoOnlyPlayback();\r\n\r\n super.render({\r\n noSound\r\n });\r\n\r\n const videoElement = this.$el.find('#videoPlayer').get(0);\r\n const videoFactory = window.mediaManager.getFactoryForContent('video', videoElement, { accommodations: accProps });\r\n\r\n const videoPromise = videoFactory.instanciate();\r\n // TODO: apply timeout to video?\r\n\r\n // if video has already been check then enable pass button\r\n if (tds.Student.Storage.getAvCheck(this._id)) {\r\n this._enableBtnPass();\r\n } else {\r\n videoPromise.then((medium) => {\r\n medium.onidle.subscribe(() => { this._enableBtnPass(); });\r\n }).catch(function(error) {\r\n console.log('video is busted:', error);\r\n });\r\n }\r\n\r\n }\r\n\r\n validate() {\r\n return super.validate('AvCheck.Video.Required', { message: 'Please check your video before continuing.' });\r\n }\r\n\r\n _enableBtnPass() {\r\n const $btnPass = this.$el.find('.btn-pass');\r\n\r\n $btnPass.attr('aria-disabled', 'false');\r\n $btnPass.removeClass('disabled');\r\n }\r\n\r\n _toggleVideoCheck(show) {\r\n this.$el.find('.checkVideo').toggle(show);\r\n this.$el.find('.checkVideoError').toggle(!show);\r\n }\r\n\r\n _onPassClick(e) {\r\n e.preventDefault();\r\n\r\n if ($(e.currentTarget).hasClass('disabled')) return;\r\n\r\n this.markPassed();\r\n }\r\n\r\n _onFailClick(e) {\r\n e.preventDefault();\r\n\r\n tds.Audio.stopAll();\r\n\r\n this.markFailed();\r\n this._toggleVideoCheck(false);\r\n }\r\n\r\n _onRetryClick(e) {\r\n e.preventDefault();\r\n this._toggleVideoCheck(true);\r\n }\r\n\r\n }\r\n\r\n AvVideoCheck.register('AvVideoCheck');\r\n\r\n})(tds.Stepper);","/*\r\n * Card for TTS check\r\n */\r\n\r\n(function (Stepper) {\r\n\r\n const TEMPLATE = `\r\n
      \r\n\r\n
      \r\n
      \r\n

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

      \r\n
      \r\n
      \r\n Yes\r\n No\r\n \\${required ? '' : 'Skip'} \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n

      \r\n
      \r\n

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

      \r\n
      \r\n
      \r\n \r\n \\${required ? '' : ''}\r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n

      \r\n
      \r\n

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

      \r\n
      \r\n \\${required ? '' : ''}\r\n
      \r\n
      \r\n \r\n
      \r\n\r\n
      `;\r\n\r\n const messages = {\r\n '#sectionTTSCheckHeader': {\r\n 'en': 'Sections.TopHeader.CheckSoundEnglish',\r\n 'es': 'Sections.TopHeader.CheckSoundSpanish',\r\n 'prefix': 'Sections.TopHeader.CheckSound'\r\n },\r\n '.instructions-top': {\r\n 'en': 'Sections.TopInstructions.CheckSoundEnglish',\r\n 'es': 'Sections.TopInstructions.CheckSoundSpanish',\r\n 'prefix': 'Sections.TopInstructions.CheckSound'\r\n },\r\n '#checkSoundButtons .actions h3': {\r\n 'en': 'Sections.BottomHeader.CheckSoundEnglish',\r\n 'es': 'Sections.BottomHeader.CheckSoundSpanish',\r\n 'prefix': 'Sections.BottomHeader.CheckSound'\r\n },\r\n '.instructions-bottom': {\r\n 'en': 'Sections.BottomInstructions.CheckSoundEnglish',\r\n 'es': 'Sections.BottomInstructions.CheckSoundSpanish',\r\n 'prefix': 'Sections.BottomInstructions.CheckSound'\r\n },\r\n '.btn-sound-yes': {\r\n 'prefix': 'TTSCheck.Label.HeardYes'\r\n },\r\n '.btn-sound-no': {\r\n 'prefix': 'TTSCheck.Label.HeardNo'\r\n },\r\n '.btn-skip': {\r\n 'en': 'TTSCheck.Label.SkipEnglish',\r\n 'es': 'TTSCheck.Label.SkipSpanish',\r\n 'prefix': 'TTSCheck.Label.Skip'\r\n },\r\n '#checkErrorDiv > h2': {\r\n 'prefix': 'TTSCheck.Label.AudioProblem',\r\n },\r\n '#checkErrorDiv .instructions > p': {\r\n 'prefix': 'TTSCheck.Label.TellAdminMessage'\r\n },\r\n '#checkErrorDiv .instructions > div': {\r\n 'en': 'TTSCheck.Label.NoEnglishVoicePack',\r\n 'es': 'TTSCheck.Label.NoSpanishVoicePack',\r\n 'prefix': 'TTSCheck.Label.NoVoicePack'\r\n },\r\n '#checkErrorDiv .actions > h3': {\r\n 'prefix': 'Sections.BottomHeader.CheckErrorDiv'\r\n },\r\n '.btn-error-try-again': {\r\n 'prefix': 'TTSCheck.Label.TryAgain'\r\n },\r\n '.btn-continue-error': {\r\n 'prefix': 'TTSCheck.Label.Continue'\r\n },\r\n '#ttsNotAvailable > h2': {\r\n 'prefix': 'TTSCheck.Label.NoAudio'\r\n },\r\n '#ttsNotAvailable .instructions > p': {\r\n 'prefix': 'TTSCheck.Label.NoAudioAdminMessage'\r\n },\r\n '#ttsNotAvailable .actions > h3': {\r\n 'prefix': 'Sections.BottomHeader.TTSNotAvailable'\r\n },\r\n '.btn-continue-error': {\r\n 'prefix': 'TTSCheck.Label.Continue'\r\n }\r\n };\r\n\r\n const DEFAULT_VOLUME = 10;\r\n const DEFAULT_PITCH = 10;\r\n const DEFAULT_RATE = 10;\r\n\r\n /**\r\n * Retrieve the current TTS settings for each language\r\n * \r\n * @returns {Object} of objects keyed by language code with current volume, pitch, rate...\r\n */\r\n function getTTSSettings() {\r\n\r\n const settings = {};\r\n\r\n const accProps = tds.getAccommodationProperties();\r\n const langs = accProps.getLanguages(true) || [];\r\n langs.forEach(lang => {\r\n lang = tds.language.getXmlFromITS(lang);\r\n settings[lang] = {\r\n voice: tts.util.getVoice(lang),\r\n volume: tts.util.getVolume(lang),\r\n pitch: tts.util.getPitch(lang),\r\n rate: tts.util.getRate(lang)\r\n };\r\n });\r\n\r\n return settings;\r\n }\r\n\r\n class AvTTSCheck extends Stepper.Cards.AvCheckBase {\r\n\r\n constructor(config = {}) {\r\n\r\n super({\r\n id: 'tts',\r\n template: `${TEMPLATE}`\r\n });\r\n\r\n // Get config\r\n this._cfg = Object.assign({}, this._defaultSettings, this._getSettings(), config);\r\n\r\n this._DOM = {};\r\n this._ttsCheck = null;\r\n\r\n // Build a list of languages we need to check that we have working voice packs for\r\n this._curIndexCheckLanguage = 0;\r\n this._checkLanguages = [];\r\n\r\n const accProps = tds.getAccommodationProperties();\r\n const languageDisablerOn = accProps.getTTSLanguages().length === 0;\r\n\r\n for (const language of tts.util.getLanguages(true)) {\r\n\r\n let permitLanguage = true;\r\n\r\n // We do this because we're only using the TTS language disabler for the old style of language configuration\r\n // which applied to English/Spanish only and, for legacy reasons, we didn't do a language check if\r\n // both the Item and Passage disabler were on for a language.\r\n // Note: This might no longer be correct because we can speak in thing outside of the item/passage, but\r\n // we also allow for configuration through the 'TTS Language' accs if we don't like this.\r\n if (languageDisablerOn) {\r\n if (language === 'en-us') {\r\n permitLanguage = !(accProps.hasTTSDisablePassages('ENU') && accProps.hasTTSDisableItems('ENU'));\r\n } else if (language === 'es-mx') {\r\n permitLanguage = !(accProps.hasTTSDisablePassages('ESN') && accProps.hasTTSDisableItems('ESN'));\r\n }\r\n }\r\n\r\n if (permitLanguage) {\r\n this._checkLanguages.push({ language: language, checked: false });\r\n }\r\n }\r\n\r\n this._connectEvents();\r\n\r\n this._initialSettings = {};\r\n }\r\n\r\n // Constant default settings\r\n get _defaultSettings() {\r\n return {\r\n showButtons: true,\r\n\r\n // Slider configuration\r\n lengthInPixels: 200,\r\n\r\n showPitch: true,\r\n maxPitch: 20,\r\n minPitch: 1,\r\n\r\n showVolume: true,\r\n maxVolume: 10,\r\n minVolume: 0,\r\n\r\n showRate: true,\r\n maxRate: 20,\r\n minRate: 1,\r\n\r\n showAdjustments: true,\r\n required: false, // Allow skipping this check\r\n\r\n ttsTestMessage: 'This text is being read aloud.', // the spoken text\r\n\r\n language: 'en-US',\r\n\r\n showVoicePacks: 'select', // select, show or hide\r\n voicePacks: [],\r\n defaultVoice: null // Index or name\r\n };\r\n }\r\n\r\n // Dynamic settings\r\n _getSettings() {\r\n\r\n const accProps = tds.getAccommodationProperties();\r\n\r\n let required = false;\r\n if (window.LoginShell) {\r\n required = LoginShell.requireTTSCheck();\r\n }\r\n\r\n const config = {\r\n voicePacks: tts.api.getVoices(),\r\n showVoicePacks: accProps.showVoicePackControl() ? 'select' : 'show',\r\n showVolume: accProps.showVolumeControl() && tts.api.supportsVolumeControl(),\r\n showPitch: accProps.showPitchControl() && tts.api.supportsPitchControl(),\r\n showRate: accProps.showRateControl() && tts.api.supportsRateControl(),\r\n required: required\r\n };\r\n\r\n return config;\r\n }\r\n\r\n get required() {\r\n return this._cfg.required;\r\n }\r\n\r\n get showButtons() {\r\n return this._cfg.showButtons;\r\n }\r\n\r\n async beforeRender() {\r\n await tts.api.init();\r\n }\r\n\r\n async render() {\r\n\r\n const templateData = {\r\n required: this.required\r\n };\r\n\r\n super.render(templateData);\r\n\r\n this._init();\r\n\r\n this._reset();\r\n }\r\n\r\n validate() {\r\n return super.validate('AvCheck.TTS.Required', { message: 'Please check text-to-speech before continuing.' });\r\n }\r\n\r\n getData() {\r\n return { initialSettings: this._initialSettings, currentSettings: getTTSSettings() };\r\n }\r\n\r\n _connectEvents() {\r\n\r\n this.addEvent('click', '.btn-sound-yes', '_soundOK');\r\n this.addEvent('click', '.btn-sound-no', '_noSound');\r\n this.addEvent('click', '.btn-skip', '_soundOK');\r\n this.addEvent('click', '.btn-error-try-again', '_tryAgain');\r\n this.addEvent('click', '.btn-continue-error', '_continue');\r\n\r\n // TTS check has not already been performed, listen for stop\r\n if (!tds.Student.Storage.getAvCheck(this._id)) {\r\n this._ttsCompletedDelegate = () => {\r\n this._enablePassButton();\r\n };\r\n tts.events.on('finish', this._ttsCompletedDelegate);\r\n }\r\n }\r\n\r\n //Load up the sections and build dom references\r\n _init() {\r\n\r\n this._initialSettings = getTTSSettings();\r\n\r\n // These are used as references to add/remove the class \"hidden\" from sections of the template.\r\n this._DOM = {\r\n Header: this.$el.find('#TTSTest').get(0),\r\n Buttons: this.$el.find('#TTSTestButtons').get(0),\r\n NONE: this.$el.find('#ttsNotAvailable').get(0),\r\n\r\n // For when the language is enabled, but not supported on this platform\r\n ERROR: this.$el.find('#checkErrorDiv').get(0),\r\n\r\n // Checkbox for reset defaults\r\n DEFAULTS: this.$el.find('#TTS_Set_Defaults')\r\n };\r\n\r\n // TTS has already been checked, enable button\r\n if (tds.Student.Storage.getAvCheck(this._id)) {\r\n this._enablePassButton();\r\n }\r\n }\r\n\r\n // Reset each language back to our default volume/pitch/rate\r\n reset() {\r\n this._checkLanguages.forEach(checkLanguage => {\r\n const lang = tds.language.getXmlFromITS(checkLanguage.language);\r\n tts.util.setVolume(DEFAULT_VOLUME, lang);\r\n tts.util.setPitch(DEFAULT_PITCH, lang);\r\n tts.util.setRate(DEFAULT_RATE, lang);\r\n });\r\n }\r\n\r\n _reset() {\r\n this.reset();\r\n this._render();\r\n }\r\n\r\n // Display all the various components of the UI based on settings, browser config etc\r\n _render() {\r\n\r\n this._hideAll();\r\n\r\n if (!this._renderErrors()) {\r\n this._renderSections();\r\n this._show(this._DOM.DEFAULTS);\r\n }\r\n }\r\n\r\n // Check if there are errors, if so return that we found some and hide all\r\n // other parts of the UI.\r\n _renderErrors() {\r\n\r\n const status = tts.api.getStatus();\r\n if (status === TTS.Status.NotSupported) {\r\n this._hideAll();\r\n this._show(this._DOM.NONE);\r\n return true;\r\n }\r\n\r\n const checkLang = this._checkLanguages[this._curIndexCheckLanguage];\r\n let lang = checkLang ? checkLang.language : null;\r\n if (!lang || !tts.util.hasVoicePack(lang)) {\r\n this._hideAll();\r\n this._show(this._DOM.ERROR);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n //note a hide all probably occurred before this\r\n _renderSections() {\r\n\r\n if (this.showButtons) {\r\n this._disablePassButton();\r\n this._show(this._DOM['Header']);\r\n this._show(this._DOM['Buttons']);\r\n }\r\n\r\n this._showTTSCheck();\r\n }\r\n\r\n _disablePassButton() {\r\n const $btnPass = this.$el.find('.btn-sound-yes');\r\n\r\n // disable this for screen reader\r\n $btnPass.attr('aria-disabled', 'true')\r\n .addClass('disabled');\r\n }\r\n\r\n _enablePassButton() {\r\n const $btnPass = this.$el.find('.btn-sound-yes');\r\n\r\n // enable this for screen reader\r\n $btnPass.attr('aria-disabled', 'false')\r\n .removeClass('disabled');\r\n }\r\n\r\n /**\r\n * This should be what is called when the TTS Section of the code base calls the load operation.\r\n */\r\n _show(els) {\r\n\r\n if (!els) {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(els)) {\r\n els = [els];\r\n }\r\n for (let key in els) {\r\n if (els[key] && typeof els[key] != 'function') {\r\n $(els[key]).removeClass('hidden');\r\n }\r\n }\r\n }\r\n\r\n // Hide all the components of TTS\r\n _hide(els) {\r\n\r\n if (!els) {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(els)) {\r\n els = [els];\r\n }\r\n for (let key in els) {\r\n if (els[key] && typeof els[key] != 'function') {\r\n $(els[key]).addClass('hidden');\r\n }\r\n }\r\n }\r\n\r\n _hideAll() {\r\n\r\n this._hideTTSCheck();\r\n\r\n for (let key in this._DOM) {\r\n $(this._DOM[key]).addClass('hidden');\r\n }\r\n }\r\n\r\n _error() {\r\n this._hideAll();\r\n this._show(this._DOM.ERROR);\r\n }\r\n\r\n /**\r\n * Do a better job with many langs, but this is a lot of accommodation code to tweak..\r\n * TODO: clean up \"sections\"\r\n */\r\n _nextLang() {\r\n\r\n if (this._curIndexCheckLanguage < (this._checkLanguages.length - 1)) {\r\n ++this._curIndexCheckLanguage;\r\n this._checkLanguages[this._curIndexCheckLanguage];\r\n this._render();\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n\r\n // Function for when user clicks that they can hear TTS\r\n _soundOK(e) {\r\n\r\n if ($(e.currentTarget).hasClass('disabled')) {\r\n return;\r\n }\r\n\r\n tts.api.stop();\r\n this._continue();\r\n }\r\n\r\n _continue() {\r\n const checkLang = this._checkLanguages[this._curIndexCheckLanguage];\r\n if (checkLang) {\r\n checkLang.checked = true;\r\n }\r\n this.clearError();\r\n // no more langs to check and all are good, mark as passed\r\n if (!this._nextLang() && this._checkLanguages.every(checkLang => checkLang.checked)) {\r\n this.markPassed();\r\n }\r\n }\r\n\r\n // Function when user clicks that they can not hear TTS\r\n _noSound() {\r\n console.log(\"No sound playing\");\r\n this._checkLanguages[this._curIndexCheckLanguage].checked = false;\r\n this.markFailed();\r\n this._error();\r\n }\r\n\r\n _tryAgain() { // Try and make the language visible\r\n this.markFailed();\r\n this._reset();\r\n }\r\n\r\n _showTTSCheck() {\r\n\r\n const config = this._cfg;\r\n\r\n config.language = this._checkLanguages[this._curIndexCheckLanguage].language;\r\n const lang = tts.util.getLanguageCode(config.language); // Strip culture\r\n config.ttsTestMessage = 'This text is being read aloud.'; // Default message\r\n if (lang === 'en') {\r\n config.ttsTestMessage = Messages.getAlt('TTSCheck.Label.HearMessageEnglish', config.ttsTestMessage);\r\n } else if (lang === 'es') {\r\n config.ttsTestMessage = Messages.getAlt('TTSCheck.Label.HearMessageSpanish', 'El texto en español se está leyendo en voz alta.');\r\n } else {\r\n config.ttsTestMessage = Messages.getAlt(`TTSCheck.Label.HearMessage${lang}`, config.ttsTestMessage);\r\n }\r\n\r\n // Strip HTML... this is because apparently we've configured these messages in the DB with HTML???\r\n config.ttsTestMessage = $(`${config.ttsTestMessage}`).text();\r\n\r\n this._ttsCheck = new window.tts.Check(config);\r\n\r\n this._ttsCheck.on('change', (parms) => {\r\n const language = parms.language;\r\n const value = parms.value;\r\n switch (parms.property) {\r\n case 'Volume':\r\n tts.util.setVolume(value, language);\r\n break;\r\n case 'Pitch':\r\n tts.util.setPitch(value, language);\r\n break;\r\n case 'Rate':\r\n tts.util.setRate(value, language);\r\n break;\r\n case 'voicePack':\r\n tts.util.setVoice(value);\r\n break;\r\n }\r\n });\r\n\r\n const elTTSCheck = this.$el.find('#TTSCheck').get(0);\r\n this._ttsCheck.render(elTTSCheck);\r\n\r\n tts.Check.applyMessages(this.el, messages, config.language);\r\n\r\n const elTTSCard = this.$el.find('#TTSCard').get(0);\r\n tds.messages.manager.processLanguage(elTTSCard); // Populate with proper message text\r\n }\r\n\r\n _hideTTSCheck() {\r\n\r\n if (this._ttsCheck == null) {\r\n return;\r\n }\r\n\r\n this._ttsCheck.destroy();\r\n this._ttsCheck = null;\r\n }\r\n\r\n dispose() {\r\n\r\n tts.events.removeListener('finish', this._ttsCompletedDelegate);\r\n\r\n super.dispose();\r\n\r\n this._cfg = null;\r\n this._DOM = null;\r\n }\r\n }\r\n\r\n AvTTSCheck.register('AvTTSCheck');\r\n\r\n})(tds.Stepper);\r\n","(function (Stepper) {\r\n\r\n const template = `\r\n
      \r\n

      Diagnostic Screen

      \r\n
      This page allows you to check the current bandwidth of your network. Select a test from the drop-down list and enter the maximum number of students likely to test at one time, then click [Run Network Diagnostics Tests].
      \r\n \r\n
      \r\n
        \r\n
      • \r\n \r\n \\${osLabel}\r\n
      • \r\n\r\n
      • \r\n \r\n \\${browserLabel}\r\n
      • \r\n\r\n
      • \r\n \r\n \\${isSecureBrowser}\r\n
      • \r\n
      \r\n
      \r\n
      \r\n\r\n

      Network Diagnostics

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

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

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

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

      \r\n
      \r\n\r\n \r\n \r\n \r\n \r\n \r\n
      Testing Connection Speed
      \r\n\r\n
        \r\n
      • \r\n Download Results \r\n \r\n \t \r\n
      • \r\n \t\t Upload Results \r\n \r\n \r\n
      • \r\n \t Bandwidth Summary \r\n \r\n
      • \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n`;\r\n\r\n const selectors = {\r\n selectTestEl: 'select#availableTests',\r\n studentCountEl: 'input#numStudentsTesting',\r\n downloadEl: 'span.downloadResults',\r\n uploadEl: 'span.uploadResults',\r\n bandwidthEl: 'span.bandwidthSummary',\r\n launchBtnEl: 'button.btn-speedtest'\r\n };\r\n\r\n const defaultDisclaimer = ' (Please note: The throughput estimates include the encryption/decryption overhead for data transfer. Throughput estimates change as the network conditions change and can vary from run to run.)';\r\n\r\n class CardNetwork extends Stepper.Card {\r\n constructor({ rendererOptions = {} } = {}) {\r\n\r\n super({\r\n template: `${template}`\r\n });\r\n\r\n this._userInput = null;\r\n\r\n this.addEvent('click', selectors.launchBtnEl, '_onClick');\r\n this.addEvent('keydown', selectors.launchBtnEl, '_onKeydown'); \r\n }\r\n\r\n // check if card init with client was successfull\r\n get isCardRenderComplete() {\r\n return typeof TDS.Config === 'object'\r\n && typeof TDS.Config.clientDiagnosticSettings === 'object'; \r\n }\r\n\r\n // check if network test is in progress\r\n get isSpeedTestInProgress() {\r\n return this.launchBtn.length > 0 ? this.launchBtn[0].disabled : false;\r\n }\r\n\r\n // HTML button el to launch network tests\r\n get launchBtn() {\r\n return this.$el.find(selectors.launchBtnEl);\r\n }\r\n\r\n //#region Stepper.Card hooks\r\n\r\n render(data) {\r\n\r\n super.render(Object.assign({}, data, {\r\n osLabel: TDS.BrowserInfo.osLabel,\r\n browserLabel: TDS.BrowserInfo.label,\r\n isSecureBrowser: TDS.BrowserInfo.isSecure\r\n }));\r\n\r\n // configure client\r\n this._configureClient();\r\n }\r\n\r\n async afterRender() {\r\n this._enableLaunchBtn();\r\n }\r\n\r\n validate() {\r\n return !this.isSpeedTestInProgress;\r\n }\r\n\r\n //#endregion\r\n\r\n _configureClient() {\r\n const clientId = DiagnosticShell.clientId || 'cambium';\r\n\r\n // test info settings\r\n const clientTestInfo = TDS.Config.clientDiagnosticSettings;\r\n\r\n if (!clientTestInfo) {\r\n console.error(`couldn't find test settings data for ${clientId}`);\r\n //todo: this.setError\r\n return false;\r\n }\r\n\r\n // populate the subject selector drop down\r\n const atsEl = this.$el.find(selectors.selectTestEl);\r\n clientTestInfo.testinfo.forEach(function (subjectInfo) { \r\n atsEl.append(``);\r\n });\r\n\r\n // If client has only one test then auto select the test and hide the control \r\n if (clientTestInfo.testinfo.length === 1) {\r\n atsEl.val(clientTestInfo.testinfo[0].subject);\r\n this.$el.find('span.control-testsubject').hide();\r\n }\r\n\r\n // check if shell got global accommodations\r\n if (!TDS.Config.accs_global) {\r\n // for debugging..nothing to do with bandwidth testing\r\n console.error(`couldn't find global accommodations for ${clientId}`);\r\n }\r\n }\r\n\r\n _onKeydown(ke) {\r\n const keyCode = ke.which || ke.keyCode;\r\n\r\n // start speed test for enter and space\r\n if (keyCode === 13 || keyCode === 32) {\r\n ke.preventDefault();\r\n ke.stopPropagation();\r\n\r\n this._startSpeedTest();\r\n }\r\n }\r\n\r\n _onClick(me) {\r\n me.preventDefault();\r\n me.stopPropagation();\r\n\r\n this._startSpeedTest();\r\n }\r\n\r\n _startSpeedTest() {\r\n if (!this.isCardRenderComplete) {\r\n return false;\r\n }\r\n\r\n let errorSummary = '';\r\n\r\n // clear error summary\r\n this.clearError();\r\n\r\n // clear any previous results\r\n this._clearResults();\r\n\r\n // No selected Test available\r\n const selectedTest = this.$el.find(selectors.selectTestEl).val();\r\n if (!selectedTest) { \r\n // TODO: define custom error template\r\n errorSummary = Messages.getAlt('Diagnostics.Label.PleaseSelectTest', 'Please select a test.');\r\n this.setError(errorSummary); \r\n return false;\r\n }\r\n\r\n // Not a valid number of students\r\n let numStudents = this.$el.find(selectors.studentCountEl).val();\r\n numStudents = numStudents ? parseInt(numStudents) : 0;\r\n if (isNaN(numStudents) || numStudents <= 0) {\r\n errorSummary = Messages.getAlt('Diagnostics.Label.PleaseEnterTotalNumberOfStudentsTakingTest', 'Please enter number of students you want to test');\r\n this.setError(errorSummary);\r\n return false;\r\n }\r\n\r\n // find selected test subject settings\r\n const testSubjectInfo = TDS.Config.clientDiagnosticSettings.testinfo.find(function (si) {\r\n return si.subject === selectedTest;\r\n });\r\n\r\n if (!testSubjectInfo) {\r\n errorSummary = Messages.getAlt('Diagnostics.Label.MissingTestSettingsForSubject', `cannot find client test settings for ${selectedTest}`);\r\n this.setError(errorSummary);\r\n return false;\r\n }\r\n\r\n // userInput object will provide diagnostic data to determine required capacity for selected test.\r\n // such as capcity thresholds.\r\n this._userInput = {\r\n 'selectedTest': selectedTest,\r\n 'numStudentsToTest': numStudents,\r\n 'testInfo': testSubjectInfo\r\n };\r\n\r\n // add progress indicator\r\n this._showProgressBar();\r\n\r\n // disable launch\r\n this._disableLaunchBtn();\r\n\r\n // begin speed test \r\n const speedTest = new Util.networkDiagnostics.BandWidthTester(); \r\n const ntResolver = speedTest.start();\r\n ntResolver.then((results) => {\r\n this._displayResults(results.downloadResults, results.uploadResults);\r\n this._hideProgressBar();\r\n this._enableLaunchBtn(); \r\n });\r\n\r\n }\r\n\r\n _displayResults(downloadResults, uploadResults) { \r\n const resultsEl = this.$el.find('ul.results');\r\n \r\n // Download Results \r\n if (downloadResults && downloadResults.lineSpeed > 0) {\r\n resultsEl.find(selectors.downloadEl).html(downloadResults.lineSpeed + ' Mbps download.');\r\n }\r\n else {\r\n this.setError(Messages.getAlt('Diagnostics.Label.DownloadTestFailed', `Error running throughput tests`));\r\n this._enableLaunchBtn();\r\n return false;\r\n }\r\n\r\n // Upload Results \r\n if (uploadResults && uploadResults.lineSpeed > 0) {\r\n resultsEl.find(selectors.uploadEl).html(uploadResults.lineSpeed + ' Mbps upload.');\r\n }\r\n else {\r\n this.setError(Messages.getAlt('Diagnostics.Label.UploadTestFailed', `Error running throughput tests`)); \r\n this._enableLaunchBtn();\r\n return false; \r\n }\r\n\r\n // Bandwidth Summary\r\n // if line speed is less than one then the ProbabilityWithinCapacity does not converge and goes into an indefinite loop. \r\n const disclaimer = Messages.getAlt('Diagnostics.Label.Disclaimer', defaultDisclaimer);\r\n if (this._userInput !== null && downloadResults.lineSpeed > 1) {\r\n let message = '';\r\n let messageClass = '';\r\n\r\n // capacity parameters\r\n const userInput = this._userInput;\r\n const itemSize = userInput.testInfo !== null ? userInput.testInfo.itemsize : 80; // KB\r\n const responseTime = userInput.testInfo !== null ? userInput.testInfo.responsetime : 30; // sec\r\n const lineSpeed = downloadResults.lineSpeed * 125; // Mbps * (1000/8) to KBps\r\n\r\n // compute risk for given parameters \r\n const capacityCalculator = new Util.networkDiagnostics.CapacityCalculator();\r\n const probablityOfSuccess = capacityCalculator.probabilityWithinCapacity(lineSpeed, itemSize, userInput.numStudentsToTest, responseTime);\r\n const recommendedCount = capacityCalculator.getRecommendedStudentCount();\r\n const risk = capacityCalculator.getRisk();\r\n switch (risk) {\r\n case 'Unknown':\r\n message = Messages.get('Diagnostics.Label.RiskUnknown', [recommendedCount]); // message get requires params to be array\r\n break;\r\n case 'NearCertain':\r\n message = Messages.get('Diagnostics.Label.RiskNearCertain', [recommendedCount]);\r\n messageClass = \"speedBad\";\r\n break;\r\n case 'High':\r\n message = Messages.get('Diagnostics.Label.RiskHigh', [recommendedCount]);\r\n messageClass = \"speedBad\";\r\n break;\r\n case 'Moderate':\r\n message = Messages.get('Diagnostics.Label.RiskModerate', [recommendedCount]);\r\n messageClass = \"speedOK\";\r\n break;\r\n case 'VeryLow':\r\n message = Messages.get('Diagnostics.Label.RiskVeryLow', [recommendedCount]);\r\n messageClass = \"speedGreat\";\r\n break;\r\n }\r\n\r\n const bsEl = resultsEl.find(selectors.bandwidthEl);\r\n bsEl.html(message + disclaimer);\r\n bsEl.addClass(messageClass);\r\n }\r\n\r\n resultsEl.show();\r\n }\r\n\r\n _clearResults() {\r\n const resultsEl = this.$el.find('ul.results');\r\n\r\n //hide results pane\r\n resultsEl.hide();\r\n\r\n // reset class\r\n resultsEl.find(selectors.bandwidthEl).attr('class', 'bandwidthSummary');\r\n }\r\n\r\n _showProgressBar() {\r\n tds.Dialog.showProgress();\r\n }\r\n\r\n _hideProgressBar() {\r\n tds.Dialog.hideProgress();\r\n }\r\n\r\n _enableLaunchBtn() {\r\n if (this.launchBtn.length > 0) {\r\n this.launchBtn.prop('disabled', false);\r\n }\r\n }\r\n\r\n _disableLaunchBtn() {\r\n if (this.launchBtn.length > 0) {\r\n this.launchBtn.prop('disabled', true);\r\n }\r\n }\r\n\r\n }\r\n CardNetwork.register('CardNetwork');\r\n\r\n\r\n})(tds.Stepper);","((Stepper) => {\r\n\r\n\r\n const template = `\r\n
      \r\n
        \r\n
      • \r\n \r\n \\${osLabel}\r\n
      • \r\n\r\n
      • \r\n \r\n \\${browserLabel}\r\n
      • \r\n\r\n
      • \r\n \r\n \\${isSecureBrowser}\r\n
      • \r\n
      \r\n
      \r\n`;\r\n\r\n class BrowserInfoCard extends Stepper.Card {\r\n\r\n constructor() {\r\n super({\r\n template: `${template}`\r\n });\r\n }\r\n\r\n render(data) {\r\n\r\n super.render(Object.assign({}, data, {\r\n osLabel: TDS.BrowserInfo.osLabel,\r\n browserLabel: TDS.BrowserInfo.label,\r\n isSecureBrowser: TDS.BrowserInfo.isSecure\r\n }));\r\n }\r\n }\r\n\r\n BrowserInfoCard.register('BrowserInfoCard');\r\n\r\n})(tds.Stepper);","((Stepper) => {\r\n\r\n const template = `\r\n
      \r\n

      Bandwidth Diagnostic

      \r\n\r\n
      \r\n There are variety of tests that can be conducted to determine if you have the adequate network bandwidth available. \r\n Please choose the appropriate test below for your unique situation and follow the steps.\r\n
      \r\n\r\n
      \\${instructionTemplate}
      \r\n\r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n`;\r\n\r\n const instructionsBody = `\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n`;\r\n\r\n const bandwidthResultBody = `\r\n
      \r\n \r\n Download Speed: \r\n \r\n \r\n \r\n Upload Speed: \r\n \r\n \r\n \r\n Estimated Capacity: \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n `;\r\n\r\n const webcamControl = `\r\n
      \r\n

      Will your webcam be enabled?

      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n `;\r\n\r\n const testSubjectControl = `\r\n
      \r\n \r\n \r\n
      \r\n `;\r\n\r\n const studentCountControl = `\r\n
      \r\n \r\n \r\n
      \r\n `;\r\n\r\n const selectors = {\r\n userType: 'input[name=\"userType\"]',\r\n selectedUserType: 'input[name=\"userType\"]:checked',\r\n launchBtnEl: 'button.btn-speedtest',\r\n selectTestEl: 'select#availableTests',\r\n studentCountEl: 'input#studentCount',\r\n webcamEl: 'input[name=\"isWebcamOn\"]',\r\n isWebcamOn: 'input[name=\"isWebcamOn\"]:checked',\r\n downloadEl: 'span#downloadSpeed',\r\n uploadEl: 'span#uploadSpeed',\r\n estimatedCapacity: 'span#estimatedCapacity',\r\n bandwidthEl: 'span#bandwidthSummary',\r\n resultsContainerEl: 'div.results-container'\r\n };\r\n\r\n const userTypes = {\r\n remoteStudent: 'remoteStudent',\r\n remoteProctor: 'remoteProctor',\r\n schoolDistrictAdmin: 'schoolDistrictAdmin'\r\n };\r\n\r\n const riskTypes = Util.networkDiagnostics.riskTypes;\r\n\r\n\r\n const defaultDisclaimer = ' (Please note: The throughput estimates include the encryption/decryption overhead for data transfer. Throughput estimates change as the network conditions change and can vary from run to run.)'; \r\n\r\n const messageTemplates = {\r\n insufficientBandwidth: {\r\n name: 'Diagnostics.Label.InsufficientBandwidth',\r\n default: `Given the current network conditions, you do not have enough available bandwidth. Try running the test again or closing any video streaming applications that may be running on your network right now.`\r\n },\r\n meetsBandwidth: {\r\n name: 'Diagnostics.Label.MeetsBandwidth',\r\n default: `Given the current network conditions, your available bandwidth meets or exceeds the necessary requirements.`\r\n }\r\n };\r\n\r\n function getAlt(name, defaultMessage) {\r\n return Messages.getAlt(name, defaultMessage);\r\n }\r\n \r\n\r\n class BandwidthInfoCard extends Stepper.Card {\r\n\r\n constructor() {\r\n super({\r\n template: `${template}`\r\n });\r\n\r\n // bandwidth test\r\n this._bandwidthTester = new Util.networkDiagnostics.BandWidthTester(); \r\n\r\n // actions\r\n this.addEvent('click', selectors.userType, '_renderUserControls');\r\n this.addEvent('click', selectors.launchBtnEl, '_onClick');\r\n this.addEvent('keydown', selectors.launchBtnEl, '_onKeydown'); \r\n }\r\n\r\n validate() { \r\n return !this.isSpeedTestInProgress;\r\n }\r\n\r\n // check if network test is in progress\r\n get isSpeedTestInProgress() {\r\n const launchBtn = this.$el.find(selectors.launchBtnEl);\r\n return launchBtn.length > 0 ? launchBtn[0].disabled : false;\r\n }\r\n\r\n get selectedUserType() {\r\n const userType = this.$el.find(selectors.selectedUserType).val();\r\n if (!userType || !userTypes[userType]) {\r\n console.log(`Missing or invalid usertype: ${userType}.`)\r\n return null;\r\n }\r\n\r\n return userType;\r\n }\r\n\r\n render(data) {\r\n super.render(Object.assign({}, data, {\r\n instructionTemplate: instructionsBody\r\n }));\r\n\r\n this._enableLaunchBtn();\r\n }\r\n\r\n // Load view by user type [remoteStudent, remoteProctor, schoolDistrictAdmin]\r\n _renderUserControls(evt) {\r\n\r\n // clear error summary\r\n this.clearError();\r\n\r\n // clear any previous results\r\n this._clearResults();\r\n\r\n if (!this.selectedUserType) { \r\n //console.log(`DEBUG: check supported usertypes.`);\r\n return;\r\n }\r\n\r\n switch (this.selectedUserType) {\r\n case userTypes.remoteStudent:\r\n this._renderStudentOnlyCheck();\r\n break;\r\n case userTypes.remoteProctor:\r\n this._renderRemoteProctorCheck();\r\n break;\r\n case userTypes.schoolDistrictAdmin:\r\n this._renderSchoolDistrictAdminCheck();\r\n break;\r\n } \r\n }\r\n\r\n // Load view for student\r\n _renderStudentOnlyCheck() {\r\n this.$el\r\n .find('div.instructionControl')\r\n .html(webcamControl);\r\n }\r\n\r\n // Load view for remote proctor\r\n _renderRemoteProctorCheck() {\r\n this.$el\r\n .find('div.instructionControl')\r\n .html(` ${webcamControl}\r\n ${studentCountControl}\r\n `);\r\n }\r\n\r\n // Load view for school or district admin\r\n _renderSchoolDistrictAdminCheck() {\r\n const clientId = DiagnosticShell.clientId || 'cambium';\r\n\r\n // check if shell got global accommodations\r\n if (!TDS.Config.accs_global) {\r\n // for debugging..nothing to do with bandwidth testing\r\n console.log(`couldn't find global accommodations for ${clientId}`);\r\n }\r\n\r\n // test info settings\r\n const clientTestInfo = TDS.Config.clientDiagnosticSettings;\r\n if (!clientTestInfo) {\r\n console.error(`couldn't find test settings data for ${clientId}`); \r\n //this.setError();\r\n return false;\r\n }\r\n\r\n // populate the subject selector drop down\r\n const tscEl = $(testSubjectControl);\r\n const atsEl = tscEl.find(selectors.selectTestEl);\r\n clientTestInfo.testinfo.forEach(function (subjectInfo) {\r\n atsEl.append(``);\r\n });\r\n \r\n // If client has only one test then auto select the test and hide the control \r\n if (clientTestInfo.testinfo.length === 1) {\r\n atsEl.val(clientTestInfo.testinfo[0].subject);\r\n tscEl.hide();\r\n }\r\n\r\n this.$el\r\n .find('div.instructionControl')\r\n .html('')\r\n .append(tscEl)\r\n .append(studentCountControl);\r\n }\r\n\r\n // key listener to trigger bandwidth test\r\n _onKeydown(ke) {\r\n const keyCode = ke.which || ke.keyCode;\r\n\r\n // start speed test for enter & space\r\n if (keyCode === 13 || keyCode === 32) {\r\n ke.preventDefault();\r\n ke.stopPropagation();\r\n\r\n this._start();\r\n }\r\n }\r\n\r\n // mouse listener to trigger bandwidth test\r\n _onClick(me) {\r\n me.preventDefault();\r\n me.stopPropagation();\r\n\r\n this._start();\r\n }\r\n\r\n _start() {\r\n if (this.isSpeedTestInProgress) {\r\n return;\r\n }\r\n\r\n // validate user input\r\n const userType = this.selectedUserType;\r\n if (!userType) {\r\n this.setError(Messages.getAlt('Diagnostics.Label.PleaseSelectUser', 'Tell us if you are a student, proctor, or school/district admin.'));\r\n return;\r\n }\r\n\r\n let userInput = {\r\n testInfo: null,\r\n isWebcamOn: false,\r\n numStudents: 0\r\n }; \r\n\r\n // user data\r\n\r\n // testinfo\r\n if (userType === userTypes.schoolDistrictAdmin) {\r\n const selectedTest = this.$el.find(selectors.selectTestEl).val();\r\n if (!selectedTest) {\r\n this.setError(Messages.getAlt('Diagnostics.Label.PleaseSelectTest', 'select a test subject.'));\r\n return;\r\n }\r\n\r\n // find selected test subject settings\r\n const testSubjectInfo = TDS.Config.clientDiagnosticSettings.testinfo.find(function (si) {\r\n return si.subject === selectedTest;\r\n });\r\n\r\n if (!testSubjectInfo) {\r\n this.setError(Messages.getAlt('Diagnostics.Label.MissingTestSettingsForSubject', `We cannot find client test settings for ${selectedTest}.`));\r\n return;\r\n }\r\n userInput.testInfo = testSubjectInfo;\r\n }\r\n\r\n // webcam\r\n const isWebcamOn = this.$el.find(selectors.isWebcamOn).val();\r\n if (this.$el.find(selectors.webcamEl).length && typeof isWebcamOn === 'undefined') {\r\n this.setError(Messages.getAlt('Diagnostics.Label.IsWebcamUsedForTakingTest', 'Check if you are going to use webcam during the test.'));\r\n return;\r\n }\r\n userInput.isWebcamOn = isWebcamOn ? isWebcamOn === 'yes' : false; \r\n\r\n // number of students\r\n userInput.numStudents = this.selectedUserType === userTypes.remoteStudent ? 1: Number(this.$el.find(selectors.studentCountEl).val());\r\n if (isNaN(userInput.numStudents) || userInput.numStudents === 0) {\r\n this.setError(Messages.getAlt('Diagnostics.Label.PleaseEnterTotalNumberOfStudentsTakingTest', 'enter number of students you want to test.'));\r\n return;\r\n } \r\n\r\n // clear error summary\r\n this.clearError();\r\n\r\n // clear any previous results\r\n this._clearResults();\r\n\r\n // add progress indicator\r\n this._showProgressBar();\r\n\r\n // disable launch\r\n this._disableLaunchBtn();\r\n\r\n // begin speed test \r\n this._bandwidthTester.start().then((results) => {\r\n this._showResults(results, userInput);\r\n this._hideProgressBar();\r\n this._enableLaunchBtn();\r\n });\r\n\r\n }\r\n\r\n _showResults(results, userInput) {\r\n const resultsEl = $(bandwidthResultBody);\r\n\r\n // part 1: network download and upload results\r\n\r\n // Download Results \r\n const downloadResults = results.downloadResults;\r\n if (downloadResults && downloadResults.lineSpeed > 0) {\r\n resultsEl.find(selectors.downloadEl).html(downloadResults.lineSpeed + ' Mbps');\r\n }\r\n else {\r\n this.setError(Messages.getAlt('Diagnostics.Label.DownloadTestFailed', `Error running throughput tests`));\r\n return;\r\n }\r\n\r\n // Upload Results \r\n const uploadResults = results.uploadResults;\r\n if (uploadResults && uploadResults.lineSpeed > 0) {\r\n resultsEl.find(selectors.uploadEl).html(uploadResults.lineSpeed + ' Mbps');\r\n }\r\n else {\r\n this.setError(Messages.getAlt('Diagnostics.Label.UploadTestFailed', `Error running throughput tests`));\r\n return;\r\n }\r\n\r\n // part 2: Probability of env to accommodate tests. \r\n const actualDownloadSpeed = downloadResults.lineSpeed * 1000; // Mbps to Kbps\r\n const actualUploadSpeed = uploadResults.lineSpeed * 1000; \r\n let riskType = riskTypes.unknown;\r\n let recommendedCount = 0;\r\n\r\n const userType = this.selectedUserType;\r\n // For remote student: download and upload requirements change depending on webcam is on or off\r\n // For remote proctor: download and upload requirements are same in both webcam on and off.\r\n if (userType === userTypes.remoteStudent || userType === userTypes.remoteProctor) { \r\n let recommendedDownloadSpeed = 150; // this is per student\r\n let recommendedUploadSpeed = 20;\r\n if (userInput.isWebcamOn || userType === userTypes.remoteProctor) {\r\n recommendedDownloadSpeed = recommendedUploadSpeed = 20 * (userInput.numStudents - 1) + 1800;\r\n } else {\r\n recommendedDownloadSpeed = 150;\r\n recommendedUploadSpeed = 20;\r\n }\r\n\r\n // more like yes/no no real probability involved.\r\n if (actualDownloadSpeed > recommendedDownloadSpeed && actualUploadSpeed > recommendedUploadSpeed) {\r\n riskType = riskTypes.veryLow;\r\n } else {\r\n riskType = riskTypes.high;\r\n }\r\n } else if (userType === userTypes.schoolDistrictAdmin) { \r\n // if line speed is less than one then the ProbabilityWithinCapacity does not converge and goes into an indefinite loop. \r\n if (downloadResults.lineSpeed > 1) {\r\n \r\n // capacity parameters \r\n const itemSize = userInput.testInfo ? userInput.testInfo.itemsize : 80; // KB\r\n const responseTime = userInput.testInfo ? userInput.testInfo.responsetime : 30; // sec\r\n const lineSpeed = downloadResults.lineSpeed * 125; // Mbps * (1000/8) to KBps\r\n\r\n // compute risk for given parameters \r\n const capacityCalculator = new Util.networkDiagnostics.CapacityCalculator();\r\n capacityCalculator.probabilityWithinCapacity(lineSpeed, itemSize, userInput.numStudents, responseTime);\r\n riskType = capacityCalculator.getRisk();\r\n\r\n // estimated capacity..We get a recommended count only if risk type is high or near certain\r\n if (riskType === riskTypes.high || riskType === riskTypes.nearCertain) {\r\n recommendedCount = capacityCalculator.getRecommendedStudentCount();\r\n resultsEl.find(selectors.estimatedCapacity).html(recommendedCount);\r\n resultsEl.find(selectors.estimatedCapacity).parent().show();\r\n }\r\n }\r\n } else {\r\n return;\r\n }\r\n\r\n // summary\r\n let message = '';\r\n let messageClass = '';\r\n\r\n switch (riskType) {\r\n case riskTypes.unknown:\r\n message = getAlt('Diagnostics.Label.RiskUnknown'); // message get requires params to be array\r\n break;\r\n case riskTypes.nearCertain:\r\n if (userType === userTypes.schoolDistrictAdmin) {\r\n message = Messages.get('Diagnostics.Label.RiskNearCertain', [recommendedCount]);\r\n } else {\r\n message = getAlt(messageTemplates.insufficientBandwidth.name, messageTemplates.insufficientBandwidth.default)\r\n } \r\n messageClass = \"speedBad\";\r\n break;\r\n case riskTypes.high:\r\n if (userType === userTypes.schoolDistrictAdmin) {\r\n message = Messages.get('Diagnostics.Label.RiskHigh', [recommendedCount]);\r\n } else {\r\n message = getAlt(messageTemplates.insufficientBandwidth.name, messageTemplates.insufficientBandwidth.default)\r\n } \r\n messageClass = \"speedBad\";\r\n break;\r\n case riskTypes.moderate:\r\n message = getAlt('Diagnostics.Label.RiskModerate');\r\n messageClass = \"speedOK\";\r\n break;\r\n case riskTypes.veryLow:\r\n if (userType === userTypes.schoolDistrictAdmin) {\r\n message = Messages.get('Diagnostics.Label.RiskVeryLow', [recommendedCount]);\r\n } else {\r\n message = getAlt(messageTemplates.meetsBandwidth.name, messageTemplates.meetsBandwidth.default)\r\n } \r\n messageClass = \"speedGreat\";\r\n break;\r\n }\r\n\r\n // band summary\r\n const disclaimer = Messages.getAlt('Diagnostics.Label.Disclaimer', defaultDisclaimer);\r\n resultsEl.find(selectors.bandwidthEl)\r\n .addClass(messageClass)\r\n .html(message + disclaimer);\r\n\r\n // add results to DOM\r\n this.$el.find(selectors.resultsContainerEl).append(resultsEl);\r\n }\r\n _clearResults() {\r\n this.$el.find(selectors.resultsContainerEl).html('');\r\n }\r\n\r\n // show spinner blocking any user action\r\n _showProgressBar() {\r\n tds.Dialog.showProgress();\r\n }\r\n\r\n _hideProgressBar() {\r\n tds.Dialog.hideProgress();\r\n }\r\n\r\n // enable start test button\r\n _enableLaunchBtn() {\r\n const launchBtn = this.$el.find(selectors.launchBtnEl);\r\n if (launchBtn.length > 0) {\r\n launchBtn.prop('disabled', false);\r\n }\r\n }\r\n\r\n // disable start test button\r\n _disableLaunchBtn() {\r\n const launchBtn = this.$el.find(selectors.launchBtnEl);\r\n if (launchBtn.length > 0) {\r\n launchBtn.prop('disabled', true);\r\n }\r\n }\r\n }\r\n\r\n BandwidthInfoCard.register('BandwidthInfoCard');\r\n\r\n})(tds.Stepper);","((Stepper, Rtc) => {\r\n\r\n const TEMPLATE = `\r\n
      \r\n

      Network Check

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

      \r\n This diagnostic test will perform a variety of checks on this web browser, the device, and the networking capabilities that are enabled to ensure remote administration features within the Test Delivery System work correctly. Please make sure you are running this diagnostic test from the browser and device you will be using during the test administration and any VPN connections are disabled.\r\n

      \r\n
      \r\n\r\n
      \r\n
      \r\n \r\n \r\n \r\n \r\n Select the [Run Connectivity Check] button to test this device for all the features to support a remote administration. This may take 2 to 3 minutes.\r\n \r\n
      \r\n
      \r\n \r\n
      \r\n

      Next Step:

      \r\n

      \r\n All of the connectivity checks have passed, and your device should be ready for remote administration. Please select the [Everything Passed] button below to proceed.\r\n

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

      Next Step:

      \r\n

      \r\n The connectivity check has found errors. Please select the [Get Detailed Report] button below to get diagnostic information you can share with your system administrator or the Cambium Assessment help desk.\r\n

      \r\n \r\n Get Detailed Report \r\n \r\n
      \r\n
      `;\r\n\r\n const REPORT_TEMPLATE = `\r\n
      \r\n

      Network Check

      \r\n\r\n
      There were some problems detected.
      \r\n\r\n
      \r\n \r\n
        \r\n \r\n

        Next Step:

        \r\n\r\n

        \r\n This device has a few issues which would prevent remote administration features from working properly. Above, you will find a summary of some of the problems found. You may be able to resolve some of the issues listed above on your own. \r\n

          \r\n
        • If you are a student and need help, please contact your teacher.
        • \r\n
        • \r\n If you are a teacher and you or one of your students need help, please send this information to your school's IT staff. \r\n If this cannot be solved by the school's IT staff, please reach out to the Cambium Assessment help desk with all of the information on this screen.\r\n
        • \r\n
        \r\n

        \r\n\r\n
        \r\n \r\n
        \r\n
        \r\n \r\n
        \r\n
        \r\n Try Again \r\n\t\t
        \r\n
        \r\n
        \r\n`;\r\n\r\n const SECTIONS = {\r\n CheckRtcConnectivity: 'checkRtcConnectivity',\r\n RtcConnectivityReport: 'checkRtcConnectivityReport'\r\n };\r\n\r\n\r\n // Summary for each category\r\n const messageStore = {\r\n 'WEBRTC_NOT_SUPPORTED': {\r\n key: 'rtcconnectivity.webrtc.notsupported',\r\n default: 'Your web browser does not support WebRTC or your administrator has disabled it. This is required for proctors and students to connect to each other in the Test Delivery System. Please enable WebRTC and run this test again.'\r\n },\r\n 'SIGNALING_SERVICE_NOTREACHABLE': {\r\n key: 'rtcconnectivity.signaling.service.notreachable',\r\n default: 'Your device is not able to reach one of the servers responsible for assisting proctor and student machines in connecting with each other. Please make sure that your proxy server and firewall have all web traffic to/from *.cambiumast.com on the allowlist and then try this test again.'\r\n },\r\n 'STUN_NOTREACHABLE': {\r\n key: 'rtcconnectivity.stun.notreachable',\r\n default: 'Your device is not able to reach one of the servers responsible for discovering your IP address, which is used when connecting proctors and students to each other. Please make sure that your proxy server and firewall have port range 49152-65535 as well as all web traffic to/from *.cambiumast.com on the allowlist and then try this test again.'\r\n },\r\n 'TURN_NOTREACHABLE': {\r\n key: 'rtcconnectivity.turn.notreachable',\r\n default: 'Your device is not able to reach one of the servers responsible for acting as a relay proxy when proctors and students cannot connect directly to one another. Please make sure that your proxy server and firewall have port range 49152-65535 as well as all web traffic to/from *.cambiumast.com on the allowlist and then try this test again.'\r\n },\r\n 'WEBRTC_DATACHANNEL_NOTSUPPORTED': {\r\n key: 'rtcconnectivity.webrtc.datachannel.notsupported',\r\n default: 'Your web browser has no or limited support for WebRTC data. This is required for proctors and students to connect to each other and text chat within the Test Delivery System. Please enable WebRTC data and run this test again.'\r\n },\r\n 'WEBRTC_MEDIA_NOTSUPPORTED': {\r\n key: 'rtcconnectivity.webrtc.media.notsupported',\r\n default: 'Your web browser does not support WebRTC media. This is required for proctors and students to connect to each other and engage in video chats with each other within the Test Delivery System. Please enable WebRTC media and run this test again.'\r\n }\r\n };\r\n \r\n //\r\n class RtcConnectivityCheck extends Stepper.Card {\r\n\r\n constructor() {\r\n\r\n super({\r\n id: 'rtcConnectivity',\r\n template: `${TEMPLATE}\r\n ${REPORT_TEMPLATE}\r\n `\r\n });\r\n\r\n // attach listeners\r\n this.addEvent('click', '.btn-startTests', '_startTest');\r\n this.addEvent('click', '.btn-pass', '_onPassClick');\r\n this.addEvent('click', '.btn-testReport', '_onFailClick');\r\n this.addEvent('click', '.btn-retry', '_onRetryClick');\r\n \r\n this._state = null;\r\n this._inProgress = false;\r\n }\r\n\r\n get didWePassEveryTest() {\r\n // check if tests were run or not\r\n if (!this._state) {\r\n return false;\r\n }\r\n\r\n // check the aggregate test outcome.Test outcome is filled in complete.result which can be {'pass'|'warn'|'fail'|'skip'}.\r\n const connectivity = this._state[\"connectivity\"]; \r\n if(!connectivity){\r\n return false;\r\n }\r\n\r\n const status = connectivity.complete ? connectivity.complete.result : null;\r\n if (status === null || status === 'fail') {\r\n return false;\r\n }\r\n\r\n return true; \r\n }\r\n\r\n validate() {\r\n // test is in progress\r\n if (this._inProgress) {\r\n return false;\r\n }\r\n\r\n // check if we have result in storage\r\n const checkState = tds.Student.Storage.getRtcConnectivityCheck();\r\n if (typeof checkState === 'undefined') {\r\n return false;\r\n }\r\n\r\n // did we pass tests\r\n return this.didWePassEveryTest; \r\n }\r\n\r\n async render() {\r\n super.render();\r\n\r\n this._initRtcConnectivityCheck();\r\n }\r\n\r\n _initRtcConnectivityCheck() {\r\n // a new test\r\n this._markDone(false);\r\n\r\n // show view\r\n this._toggleSection(SECTIONS.CheckRtcConnectivity);\r\n\r\n // reset test variables\r\n this._state = null;\r\n this._inProgress = false;\r\n\r\n // hide next steps\r\n this.$el.find('div.checkPassed, div.checkFailed').hide();\r\n }\r\n\r\n\r\n async _startTest() {\r\n // check if test is in progress\r\n if (this._inProgress) {\r\n console.log('tests in progress');\r\n return false;\r\n }\r\n\r\n // hide the next steps\r\n this.$el.find('div.checkPassed, div.checkFailed').hide();\r\n\r\n // prepare test\r\n const state = this._state = new Rtc.diag.RtcConnectionTestState();\r\n //const oppInfo = tds.Student.Storage.getOppInfo(); oppInfo.rtctoken;\r\n\r\n // Signaling server\r\n const url = tds.Config.clientDiagnosticSettings.signalingUrl; //'https://signaling-uat.cambiumast.com/hubs/session';\r\n const jwtFromServer = tds.Config.clientDiagnosticSettings.rtctoken;\r\n const identity = Rtc.Identity.fromToken(jwtFromServer); \r\n const tests = new tds.rtc.diag.RtcConnectionTestSuite(state, {\r\n signaling: { url: url, identity: identity },\r\n peer: { /* peer settings will come from signaling service */ }\r\n });\r\n\r\n // disable navigation\r\n this._inProgress = true; \r\n\r\n // put the spinner\r\n tds.Dialog.showProgress();\r\n\r\n // start \r\n await tests.start();\r\n\r\n // remove the spinner\r\n tds.Dialog.hideProgress();\r\n\r\n // enable navigation\r\n this._inProgress = false; \r\n\r\n // Update the next steps\r\n if (this.didWePassEveryTest) {\r\n this.$el.find('div.checkPassed').show();\r\n } else {\r\n this.$el.find('div.checkFailed').show();\r\n }\r\n\r\n } \r\n\r\n _toggleSection(section) {\r\n // hide all sections\r\n this.$el.find(Object.values(SECTIONS).map(s => `.${s}`).join(',')).hide();\r\n\r\n // show the section\r\n this.$el.find(`div.${section}`).show();\r\n }\r\n\r\n _markDone(value) {\r\n this.toggleCheckmark(value);\r\n\r\n // save state in storage\r\n tds.Student.Storage.setRtcConnectivityCheck(value);\r\n }\r\n\r\n async _onPassClick(e) {\r\n this._markDone(true); \r\n }\r\n\r\n async _onFailClick(e) {\r\n this._markDone(false);\r\n this._toggleSection(SECTIONS.RtcConnectivityReport);\r\n await this._generateReport();\r\n }\r\n\r\n async _onRetryClick(e) {\r\n this._initRtcConnectivityCheck();\r\n }\r\n\r\n async _generateReport() {\r\n \r\n this._renderHumanReadableSummary();\r\n\r\n // commit the log to textarea\r\n // stringfy state\r\n this.$el.find('textarea.reportLog').val(JSON.stringify(this._state, undefined, 4));\r\n }\r\n\r\n _renderHumanReadableSummary() { \r\n const $summaryEl = $('');\r\n const categories = Object.entries(this._state);\r\n\r\n for (const [key, category] of categories) {\r\n const categoryTestResults = category.complete;\r\n\r\n if (categoryTestResults && (categoryTestResults.result === null || categoryTestResults.result === 'fail')) {\r\n switch (key) {\r\n case 'browser':\r\n $summaryEl.append(`
      • ${messageStore.WEBRTC_NOT_SUPPORTED.default}
      • `);\r\n break;\r\n case 'signaling':\r\n $summaryEl.append(`
      • ${messageStore.SIGNALING_SERVICE_NOTREACHABLE.default}
      • `);\r\n break;\r\n case 'candidates':\r\n $summaryEl.append(`
      • ${messageStore.STUN_NOTREACHABLE.default}
      • `);\r\n $summaryEl.append(`
      • ${messageStore.TURN_NOTREACHABLE.default}
      • `);\r\n $summaryEl.append(`
      • ${messageStore.WEBRTC_NOT_SUPPORTED.default}
      • `);\r\n break;\r\n case 'connection':\r\n $summaryEl.append(`
      • ${messageStore.WEBRTC_NOT_SUPPORTED.default}
      • `);\r\n break;\r\n case 'channel':\r\n $summaryEl.append(`
      • ${messageStore.WEBRTC_DATACHANNEL_NOTSUPPORTED.default}
      • `);\r\n break;\r\n case 'stream':\r\n $summaryEl.append(`
      • ${messageStore.WEBRTC_MEDIA_NOTSUPPORTED.default}
      • `);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.$el.find('ul.summaryContainer').append($summaryEl.find('li'));\r\n }\r\n\r\n async dispose() {\r\n super.dispose();\r\n\r\n this._state = null;\r\n this._inProgress = false;\r\n }\r\n }\r\n\r\n RtcConnectivityCheck.register('RtcConnectivityCheck');\r\n\r\n})(tds.Stepper, tds.rtc);","(function (Stepper) {\r\n\r\n // required hardware defualts\r\n const defaults = {\r\n \"audio\": false,\r\n \"camera\": false,\r\n \"recorder\": false,\r\n \"video\": false,\r\n \"tts\": false\r\n }; \r\n\r\n class NetworkCheck extends Stepper.Step {\r\n constructor() {\r\n\r\n super({\r\n id: 'NetworkCheck',\r\n title: 'Network Diagnostics'\r\n });\r\n\r\n this._loadCards();\r\n\r\n this._loadControls();\r\n }\r\n\r\n\r\n _loadCards() {\r\n const clientDiagnosticSettings = tds.Config.clientDiagnosticSettings; \r\n if (clientDiagnosticSettings.version && clientDiagnosticSettings.version == 2) {\r\n // enhanced\r\n this.addCard('browserInfo', new Stepper.Cards.BrowserInfoCard());\r\n this.addCard('network', new Stepper.Cards.BandwidthInfoCard());\r\n\r\n } else {\r\n // legacy\r\n this.addCard('network', new Stepper.Cards.CardNetwork());\r\n }\r\n }\r\n\r\n get requireAVCheck() {\r\n // check for accommodations with explict av hardware requirements\r\n const accProps = tds.getAccommodationProperties(); \r\n if (accProps && (accProps.hasSoundPlayCheck() || accProps.hasRecorderCheck() || accProps.hasVideoPlayCheck())) {\r\n return true;\r\n } \r\n\r\n // check for config overrides\r\n const requireHWChecks = this.requiredHW;\r\n return requireHWChecks.audio || requireHWChecks.video || requireHWChecks.recorder || requireHWChecks.camera;\r\n }\r\n\r\n get requiredHW() {\r\n const clientDiagnosticSettings = tds.Config.clientDiagnosticSettings;\r\n const requireHWChecks = Object.assign({}, defaults, clientDiagnosticSettings.hardwarechecks);\r\n return requireHWChecks;\r\n }\r\n\r\n get requireTTSCheck() { \r\n const accProps = tds.getAccommodationProperties();\r\n if (!accProps) {\r\n return false;\r\n }\r\n\r\n // check if we are entering or scoring responses?\r\n if (tds.isDataEntry) {\r\n return false;\r\n }\r\n\r\n // check accommodations have TTS\r\n // TODO: check if there is a matching TTS voice for the current language\r\n if (accProps.hasTTS()) {\r\n return true;\r\n }\r\n\r\n // check remote media is enabled\r\n const remoteRules = tds.Student.Remote.getRules();\r\n if (remoteRules.media) {\r\n return true;\r\n }\r\n\r\n // check overrides in diagnostic app config\r\n const requireHWChecks = this.requiredHW;\r\n if (requireHWChecks.camera || requireHWChecks.tts) {\r\n return true;\r\n }\r\n\r\n return false;\r\n\r\n }\r\n\r\n get requireRemoteConnectivityCheck() {\r\n // check remote media is enabled\r\n const remoteRules = tds.Student.Remote.getRules();\r\n if (remoteRules.media) {\r\n return true;\r\n }\r\n\r\n const requireHWChecks = this.requiredHW;\r\n if (requireHWChecks.camera) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _loadControls() {\r\n \r\n\r\n // return url\r\n this.addControl(new Stepper.Button({\r\n text: 'Return to Login Screen',\r\n i18n: 'Diagnostics.Label.ReturnToLogin',\r\n handler: DiagnosticShell.returnToLogin,\r\n className: 'air-btn'\r\n }), {\r\n validate: true\r\n });\r\n\r\n if (this.requireAVCheck) {\r\n this.addControl(new Stepper.Button({\r\n text: 'Audio and Video Checks',\r\n i18n: 'Diagnostics.Label.AVChecks',\r\n transition: 'avcheck', \r\n className: 'air-btn'\r\n }), {\r\n validate: true\r\n });\r\n }\r\n\r\n if (this.requireTTSCheck) {\r\n this.addControl(new Stepper.Button({\r\n text: 'Text-To-Speech Check',\r\n i18n: 'Diagnostics.Label.TTSCheck',\r\n transition: 'ttscheck',\r\n className: 'air-btn'\r\n }), {\r\n validate: true\r\n });\r\n }\r\n\r\n if (this.requireRemoteConnectivityCheck) {\r\n this.addControl(new Stepper.Button({\r\n text: 'Remote Connectivity Check',\r\n i18n: 'Diagnostics.Label.RtcConnectivityCheck',\r\n transition: 'rtcconnectivitycheck',\r\n className: 'air-btn'\r\n }), {\r\n validate: true\r\n });\r\n }\r\n\r\n }\r\n\r\n }\r\n NetworkCheck.register('NetworkCheck');\r\n\r\n})(tds.Stepper);","(function (Stepper) {\r\n\r\n class TTSCheck extends Stepper.Step {\r\n constructor() {\r\n\r\n super({\r\n id: 'TTSCheck',\r\n title: 'Text to speech'\r\n });\r\n\r\n this.addCard('tts', new Stepper.Cards.AvTTSCheck());\r\n\r\n this.addControl(new Stepper.Button({\r\n text: 'Return to Login Screen',\r\n i18n: 'Diagnostics.Label.ReturnToLogin', \r\n handler: DiagnosticShell.returnToLogin, \r\n className: 'air-btn'\r\n }));\r\n\r\n this.addControl(new Stepper.Button({\r\n text: 'Back',\r\n i18n: 'Diagnostics.Label.Back',\r\n transition: 'networkcheck',\r\n handler: () => { },\r\n handlerContext: this,\r\n className: 'air-btn'\r\n }));\r\n }\r\n }\r\n TTSCheck.register('TTSCheck');\r\n\r\n})(tds.Stepper);\r\n","(function (Stepper) {\r\n\r\n const hwCheckdefaults = {\r\n \"audio\": false,\r\n \"camera\": false,\r\n \"recorder\": false,\r\n \"video\": false,\r\n \"tts\": false\r\n }; \r\n\r\n class AvCheck extends Stepper.Step {\r\n constructor() {\r\n\r\n super({\r\n id: 'AvCheck',\r\n title: 'Audio/Video Checks',\r\n titleKey: 'Steps.AvCheck.Title',\r\n subtitle: 'Your test uses multi-media features. Please perform the following checks before continuing.',\r\n subtitleKey: 'Steps.AvCheck.Subtitle' \r\n });\r\n\r\n this._loadCards();\r\n\r\n this.addControl(new Stepper.Button({\r\n text: 'Return to Login Screen',\r\n i18n: 'Diagnostics.Label.ReturnToLogin',\r\n handler: DiagnosticShell.returnToLogin, \r\n className: 'air-btn'\r\n }));\r\n\r\n this.addControl(new Stepper.Button({\r\n text: 'Back',\r\n i18n: 'Diagnostics.Label.Back',\r\n transition: 'networkcheck',\r\n className: 'air-btn'\r\n }));\r\n }\r\n\r\n\r\n _loadCards() {\r\n\r\n const accProps = tds.getAccommodationProperties();\r\n\r\n const clientDiagnosticSettings = tds.Config.clientDiagnosticSettings;\r\n const requireHWChecks = Object.assign({}, hwCheckdefaults, clientDiagnosticSettings.hardwarechecks);\r\n\r\n // requires camera \r\n if (requireHWChecks.camera) {\r\n // configure camera check preference, required or preferred\r\n let rendererOptions = {\r\n required: false\r\n };\r\n\r\n if (typeof requireHWChecks.camera === 'object' && typeof requireHWChecks.camera.required === 'boolean') {\r\n rendererOptions.required = requireHWChecks.camera.required;\r\n }\r\n\r\n this.addCard('camera', new Stepper.Cards.AvCameraCheck({ rendererOptions }));\r\n }\r\n\r\n // requires audio\r\n if (accProps.hasSoundPlayCheck() || requireHWChecks.audio) {\r\n this.addCard('sound', new Stepper.Cards.AvSoundCheck());\r\n }\r\n\r\n // require recorder aka microphone check\r\n if (accProps.hasRecorderCheck() || requireHWChecks.recorder || requireHWChecks.camera) {\r\n /** cases are listed in the order of their precedence\r\n * case 1: accommodation requires recorder check required.\r\n * case 2: client has configured for recorder check required.\r\n * case 3: client is configured for remote session. Apply camera check configuration.\r\n * case 4: client is configured for remote session but doesn't specify a check preference (camera is optional by default).\r\n * \r\n * */\r\n let rendererOptions = {\r\n required: true\r\n };\r\n \r\n if (accProps.hasRecorderCheck()) { \r\n rendererOptions.required = true;\r\n } else if (requireHWChecks.recorder) {\r\n rendererOptions.required = true;\r\n } else if (typeof requireHWChecks.camera === 'object' && typeof requireHWChecks.camera.required === 'boolean') { \r\n rendererOptions.required = requireHWChecks.camera.required; \r\n } else { \r\n rendererOptions.required = false; \r\n }\r\n\r\n this.addCard('recorder', new Stepper.Cards.AvRecorderCheck({ rendererOptions }));\r\n }\r\n\r\n // require video\r\n if (accProps.hasVideoPlayCheck() || requireHWChecks.video) {\r\n this.addCard('video', new Stepper.Cards.AvVideoCheck());\r\n } \r\n }\r\n\r\n beforeEnter() {\r\n // initialize media manager\r\n mediaManager.initialize();\r\n }\r\n }\r\n\r\n AvCheck.register('AvCheck');\r\n\r\n})(tds.Stepper);","((Stepper) => {\r\n\r\n class RtcConnectivityCheck extends Stepper.Step {\r\n\r\n constructor() {\r\n super({\r\n id: 'RtcConnectivityCheck',\r\n title: 'Remote Administration Connectivity Checks ',\r\n titleKey: 'Steps.RtcConnectivityCheck.Title',\r\n subtitle: 'Please perform the check below to test your connection for remote administration.',\r\n subtitleKey: 'Steps.RtcConnectivityCheck.Subtitle'\r\n });\r\n\r\n this._loadCards();\r\n\r\n this._loadControls();\r\n }\r\n\r\n getId() {\r\n return 'RtcConnectivityCheck';\r\n }\r\n\r\n _loadCards() {\r\n this.addCard('rtcConnectivity', new Stepper.Cards.RtcConnectivityCheck());\r\n }\r\n\r\n _loadControls() {\r\n this.addControl(new Stepper.Button({\r\n text: 'Return to Login Screen',\r\n i18n: 'Diagnostics.Label.ReturnToLogin',\r\n handler: DiagnosticShell.returnToLogin,\r\n className: 'air-btn'\r\n }));\r\n\r\n this.addControl(new Stepper.Button({\r\n text: 'Back',\r\n i18n: 'Steps.RtcConnectivityCheck.Back',\r\n transition: 'networkcheck',\r\n className: 'air-btn'\r\n }));\r\n }\r\n\r\n }\r\n\r\n RtcConnectivityCheck.register('RtcConnectivityCheck');\r\n\r\n\r\n})(tds.Stepper);","let DiagnosticShell = {\r\n Events: new Util.EventManager(),\r\n clientId: 'cambium',\r\n defaultBodyCSS: null,\r\n api: new XMLHttpRequest(), // xhr api\r\n proxy: null, // ProxyLoginInfo object (to be appended to LoginInfo object)\r\n stepperComponents: null // object holding the Stepper and its state machine\r\n};\r\n\r\nDiagnosticShell.start = async function () {\r\n // figure out what section to start on\r\n let startSection = 'NetworkCheck';\r\n\r\n const $container = $('.tds-stepper-container'); \r\n \r\n // check if custom section was requested\r\n const querystring = Util.QueryString.parse();\r\n if (querystring.section) {\r\n startSection = querystring.section;\r\n }\r\n\r\n // set client name\r\n if (querystring.c) {\r\n DiagnosticShell.clientId = querystring.c.toLowerCase();\r\n }\r\n\r\n // initialize settings for messages manager\r\n tds.messages.manager.messageContexts = ['DiagnosticShell'];\r\n\r\n // load config; accommodations, and client settings\r\n await this.loadConfig();\r\n\r\n // TODO: this needs to be moved to a more global namespace\r\n this.stepperComponents = tds.Stepper.create({\r\n stepper: {\r\n el: $container,\r\n controlBar: new tds.Stepper.LoginControlBar()\r\n },\r\n stateMachine: {\r\n init: startSection,\r\n transitions: DiagnosticShell.getTransitions()\r\n },\r\n steps: tds.Stepper.Steps\r\n });\r\n\r\n // Give TTS a chance to init (so voice packs are present on the TTS check card)\r\n await tts.api.init();\r\n};\r\n\r\n//#region Config Loaders\r\n\r\nDiagnosticShell.loadConfig = async function () {\r\n \r\n // load client specific global accommodations\r\n await this.loadGlobalAccommodations(DiagnosticShell.clientId);\r\n\r\n // load client diagnostic settings such as return url, and thresholds for test subjects\r\n await this.loadClientSettings(DiagnosticShell.clientId);\r\n\r\n};\r\n\r\n// get client settings\r\nDiagnosticShell.loadClientSettings = async function (clientId) { \r\n const url = `${TDS.baseUrl}Pages/API/Diagnostics.axd/GetClientSettings?c=${clientId}`;\r\n const json = await this._fetchConfig(url);\r\n\r\n if (!json) {\r\n const msg = tds.messages.getAlt(\"Diagnostic.Message.InvalidClientId\", `Failed to load settings for client: ${clientId}.`);\r\n tds.Dialog.showAlert(msg);\r\n throw msg; \r\n }\r\n\r\n let settings = null;\r\n if (Array.isArray(json)) {\r\n settings = json.find((cs) => {\r\n return cs.client === clientId;\r\n });\r\n } else if (json instanceof Object) {\r\n settings = json;\r\n }\r\n\r\n // Write to TDS.Config\r\n TDS.Config.clientDiagnosticSettings = settings; \r\n};\r\n\r\n// get global accommodations for client\r\nDiagnosticShell.loadGlobalAccommodations = async function (clientId) {\r\n const url = TDS.baseUrl + 'Pages/API/Diagnostics.axd/GetAccommodations';\r\n const json = await this._fetchConfig(url);\r\n\r\n if (!json) {\r\n const msg = tds.messages.getAlt(\"Diagnostic.Message.MissingClientAccommodations\", `Failed to load accommodations..`);\r\n tds.Dialog.showAlert(msg);\r\n throw msg;\r\n }\r\n\r\n // TODO: remove find once we switch to new accs config in StudentDiagnosticConfigs\r\n // global.json is our legacy format. It is a collection of all clients.\r\n let accsJson = null;\r\n if (Array.isArray(json)) {\r\n const accs = json.find((c) => {\r\n return c.client === clientId;\r\n });\r\n\r\n if (accs) {\r\n accsJson = accs.accs_global;\r\n }\r\n } else if (json instanceof Object) {\r\n accsJson = json;\r\n }\r\n\r\n // Write to TDS.Config\r\n if (accsJson) {\r\n TDS.Config.accs_global = accsJson;\r\n\r\n TDS.globalAccommodations = new Accommodations('global');\r\n TDS.globalAccommodations.importJson(accsJson);\r\n TDS.globalAccommodations.selectDefaults();\r\n\r\n } else {\r\n TDS.globalAccommodations = Accommodations.create(); \r\n console.error(`Failed to load global accommodations for ${clientId}`);\r\n } \r\n};\r\n\r\nDiagnosticShell._fetchConfig = async function (url) {\r\n const xhr = this.api;\r\n return await new Util.Promise((resolve, reject) => {\r\n xhr.open(\"GET\", url, true);\r\n xhr.onload = function (e) { \r\n const json = JSON.parse(xhr.response);\r\n resolve(json);\r\n };\r\n xhr.onerror = function () {\r\n resolve(null);\r\n };\r\n xhr.send();\r\n\r\n });\r\n};\r\n\r\n//#endregion\r\n\r\nDiagnosticShell.getTransitions = function () {\r\n\r\n return [\r\n { name: 'networkcheck', from: '*', to: 'NetworkCheck' },\r\n { name: 'ttscheck', from: 'NetworkCheck', to: 'TTSCheck' },\r\n { name: 'avcheck', from: 'NetworkCheck', to: 'AvCheck' },\r\n { name: 'rtcconnectivitycheck', from: 'NetworkCheck', to: 'RtcConnectivityCheck' }\r\n ];\r\n};\r\n\r\nDiagnosticShell.returnToLogin = function () {\r\n const settings = TDS.Config.clientDiagnosticSettings;\r\n let returnUrl = \"https://mobile.tds.cambiumast.com/launchpad/\";\r\n if (settings && settings.returnurl) {\r\n returnUrl = settings.returnurl;\r\n }\r\n\r\n if (returnUrl) {\r\n window.location = returnUrl;\r\n }\r\n};\r\n\r\n$(function () {\r\n // kick off dignostic\r\n DiagnosticShell.start();\r\n});"],"sourceRoot":".."}