{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/directive/Popout.ts","webpack:///./src/globals.ts","webpack:///./src/css/nga.all.min.css?d9a3","webpack:///./src/directive/bottomNav.html","webpack:///./src/directive/bottomNavLeft.html","webpack:///./src/directive/bottomNavRight.html","webpack:///./src/directive/ClickToDial.html","webpack:///./src/directive/DatePicker.html","webpack:///./src/directive/FormGroupInput.html","webpack:///./src/directive/Hint.html","webpack:///./src/directive/panel.html","webpack:///./src/directive/Sortable.html","webpack:///./src/directive/StudentSearch.html","webpack:///./src/directive/StudentSelect.html","webpack:///./src/directive/DateDuration.html","webpack:///./src/directive/PrintReportModal.html","webpack:///./src/directive/PrintReportButton.html","webpack:///./src/directive/ContractFieldSignature.html","webpack:///./src/directive/ContractFieldInitial.html","webpack:///./src/directive/ContractField.html","webpack:///./src/directive/SignaturePad.html","webpack:///./src/directive/VirtualClassType.html","webpack:///./src/modules/HubProxyModule.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/model/StudentSearchDto.ts","webpack:///./src/model/VirtualClassMode.ts","webpack:///./src/model/RoleName.ts","webpack:///./src/public/ContractElectronicConsent.html","webpack:///./src/public/Payment.html","webpack:///./src/public/Receipt.html","webpack:///./src/public/StudentPortalVirtualJoin.html","webpack:///./src/public/StudentPortalClassroomScheduler.html","webpack:///./src/public/VirtualClassroomFormComponent.html","webpack:///./src/public/StudentPortalClassroomStatusComponent.html","webpack:///./src/public/Contract.html","webpack:///./src/public/Exam.html","webpack:///./src/public/ExamReview.html","webpack:///./src/public/ExamReset.html","webpack:///./src/public/StudentPortal.html","webpack:///./src/public/VirtualClassroom.html","webpack:///./src/public/VirtualClassroomDisconnected.html","webpack:///./src/public/GiftCertificate.html","webpack:///./src/model/StudentExamStatus.ts","webpack:///./src/model/StudentContractFieldUpdateDto.ts","webpack:///./src/public/ContractController.ts","webpack:///./src/model/StudentPortalPaymentMethod.ts","webpack:///./src/public/Logger.ts","webpack:///./src/public/ExamController.ts","webpack:///./src/public/ExamReviewController.ts","webpack:///./src/model/StudentPortalSessionDto.ts","webpack:///./src/model/StudentPortalPaymentRequestDto.ts","webpack:///./src/model/StudentPortalRequestDto.ts","webpack:///./src/model/TransactionPublicDto.ts","webpack:///./src/public/PaymentControllerModal.ts","webpack:///./src/model/MessageSender.ts","webpack:///./src/public/ReceiptControllerModal.ts","webpack:///./src/public/StudentPortalClassroomScheduler.ts","webpack:///./src/public/StudentPortalVirtualJoin.ts","webpack:///./src/public/StudentPortalController.ts","webpack:///./src/model/VirtualClassParticipantVideoPlayback.ts","webpack:///./src/model/FormQuestionType.ts","webpack:///./src/public/VirtualClassroom.ts","webpack:///./src/public/VirtualClassroomFormComponent.ts","webpack:///./src/model/GiftCertificatePublicDto.ts","webpack:///./src/public/GiftCertificateController.ts","webpack:///./src/public/StudentPortalClassroomStatusComponent.ts","webpack:///./src/public/VirtualClassroomDisconnected.ts","webpack:///./src/public/index.ts","webpack:///./src/public.ts","webpack:///./src/css/nga.all.min.css","webpack:///./src/directive/Debug.html","webpack:///./src/directive/BootstrapFormValidation.ts","webpack:///./src/directive/ClickToDial.ts","webpack:///./src/directive/Modal.ts","webpack:///./src/modules/ApiModule.ts","webpack:///./src/modules/DebounceModule.ts","webpack:///./src/modules/SpinnerModule.ts","webpack:///./src/modules/LoggerModule.ts","webpack:///./src/model/VirtualClassType.ts","webpack:///./src/model/VirtualClassParticipantMessageDto.ts","webpack:///./src/model/StudentExamMessageDto.ts","webpack:///./src/directive/Age.ts","webpack:///./src/directive/BottomNav.ts","webpack:///./src/directive/Chart.ts","webpack:///./src/directive/CurrencyFilter.ts","webpack:///./src/directive/DatePicker.ts","webpack:///./src/directive/DateValidation.ts","webpack:///./src/directive/Debug.ts","webpack:///./src/directive/DurationFilter.ts","webpack:///./src/directive/EmailDirective.ts","webpack:///./src/directive/Filename.ts","webpack:///./src/directive/FormGroupInput.ts","webpack:///./src/directive/Highlight.ts","webpack:///./src/directive/Hint.ts","webpack:///./src/directive/NgEnter.ts","webpack:///./src/directive/Panel.ts","webpack:///./src/directive/Sortable.ts","webpack:///./src/directive/StringToCurrency.ts","webpack:///./src/directive/StringToDate.ts","webpack:///./src/directive/StringToTime.ts","webpack:///./src/directive/StudentSearch.ts","webpack:///./src/directive/StudentSelect.ts","webpack:///./src/directive/TelDirective.ts","webpack:///./src/directive/TelFilter.ts","webpack:///./src/directive/DateDurationDirective.ts","webpack:///./src/model/PrintJobResultDto.ts","webpack:///./src/directive/PrintReportDirective.ts","webpack:///./src/directive/BindHtmlCompile.ts","webpack:///./src/directive/ContractField.ts","webpack:///./src/directive/ToUpper.ts","webpack:///./src/directive/AutoCase.ts","webpack:///./src/directive/JanusSubscribe.ts","webpack:///./src/directive/vumeter-processor.js","webpack:///./src/directive/VUMeter.ts","webpack:///./src/directive/NgMuted.ts","webpack:///./src/directive/TrustedUrlFilter.ts","webpack:///./src/directive/NgSrcObject.ts","webpack:///./src/directive/SignaturePad.ts","webpack:///./src/directive/NgAutoFocus.ts","webpack:///./src/directive/VirtualClassType.ts","webpack:///./src/directive/NgSinkId.ts","webpack:///./src/directive/NgVolume.ts","webpack:///./src/directive/index.ts","webpack:///./src/modules/ExamHub.ts","webpack:///./src/modules/VirtualClassHub.ts","webpack:///./src/modules/HubModule.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","p","jsonpArray","window","oldJsonpFunction","slice","popWindow","href","id","w","open","screen","width","moveTo","resizeTo","availWidth","availHeight","directive","popoutDirective","link","scope","element","attrs","event","preventDefault","Number","thousandsSeparator","this","toString","replace","Array","merge","entity","keySelectorFunc","index","map","indexOf","assign","remove","String","replaceAll","strReplace","strWith","esc","reg","RegExp","Window","maximize","console","debug","height","enterFullScreen","e","document","documentElement","options","navigationUI","requestFullscreen","webkitRequestFullscreen","error","exitFullScreen","exitFullscreen","onFullScreenChange","callback","fullScreenChanged","doc","fullscreenElement","fullscreen","addEventListener","resizeHandler","style","setProperty","innerHeight","locals","$q","$rootScope","$timeout","$window","$spinner","hubName","logging","HubProxy","autoReconnect","stateChangeObservers","url","location","hostname","apiBase","connection","$","hubConnection","useDefaultPath","stateChanged","change","$applyAsync","context","status","stop","proxy","createHubProxy","on","eventName","callbackIdentity","wrappedCallback","params","defer","promise","then","off","invoke","methodName","allArgs","arguments","q","when","start","resolve","onStateChanged","x","onError","onConnected","newState","state","onReconnected","reconnected","onReconnecting","reconnecting","onDisconnected","disconnected","onConnectionSlow","connectionSlow","show","hide","forEach","observer","service","HubProxyFactory","webpackContext","req","webpackContextResolve","Error","code","keys","webpackContextKeys","text","classId","includeArchived","VirtualClassMode","RoleName","Admin","CertificateAdmin","ClassroomAdmin","ClassroomInstructor","Developer","ExamAdmin","ExamProctor","FeedbackAdmin","InCarInstructor","Office","StudentRelease","UserAdmin","Refunds","StudentExamStatus","studentUlid","userValue","dataValue","userHostAddress","userAgent","$http","$location","$api","toaster","$uibModal","$state","$stateParams","refresh","update","catch","model","completed","loadPdf","html","fields","field","consented","template","backdrop","accepted","post","ulid","defaultErrorHandler","fieldChanged","dto","StudentContractFieldUpdateDto","action","reload","alert","submit","documentGuid","responseType","file","URL","createObjectURL","pdfFrame","src","downloadBtn","download","print","contentWindow","$onInit","uiCanExit","transition","uiOnParamsChanged","newValues","$transition$","search","StudentPortalPaymentMethod","hub","logMethod","send","severity","message","optionalParams","args","isConnected","JSON","stringify","log","info","warn","$examHub","$debounce","$scope","messages","pluginHandles","messageSend","msg","StudentExamMessageDto","messageSubmit","fullScreenChange","$apply","fullScreen","updateFullscreen","init","join","studentId","Completed","Started","next","go","question","selectAnswer","answer","answers","selected","isValid","some","submitAnswer","skip","updateRtc","media","sessionId","roomId","handleId","privateId","rtc","updateRtcInfo","janusInit","dependencies","useDefaultDependencies","janusConnect","janusConnected","logger","janus","server","endpoints","success","cameraStream","janusAttach","screenStream","cause","screenShared","cameraShared","destroy","destroyed","janusShareScreen","screenStop","screenSharePrompt","navigator","mediaDevices","getDisplayMedia","getSupportedConstraints","video","frameRate","audio","janusScreenShareSuccess","janusScreenShareError","finally","janusScreenShareFinally","stream","track","getTracks","filter","kind","label","getConstraints","valid","getSettings","cap","reset","getVideoTracks","onended","screenStopped","janusDetach","cameraStop","cameraStreamValid","cameraStopped","reason","janusShareCamera","userMediaError","getUserMedia","videoCamera","srcObject","getAudioTracks","videoTrack","onmute","mediaType","detach","handle","attach","plugin","pluginHandle","getPlugin","getId","register","consentDialog","webrtcState","onmessage","jsep","undefined","getSessionId","createOffer","trickle","handleRemoteJsep","onlocalstream","onremotestream","oncleanup","Logger","consoleLog","onStatusChanged","onReset","bindAllMessage","onMessageUpdated","chatContainer","scrollTop","scrollHeight","target","dispatchEvent","Event","browser","token","password","ipAddress","identityMode","identityValue","loginCode","loginCodeAccepted","method","amount","ccNumber","ccExpMonth","ccExpYear","ccCode","ccAddress","ccZip","signature","giftCertificateNumber","customerIp","customerUserAgent","session","student","timeCreated","Date","txnDate","txnDateOnly","transactionType","authAmount","balance","receiptNum","cardName","cardNum","desc","resultAccepted","resultTransId","resultAuthCode","resultErrorCode","lastError","sequence","MessageSender","$uibModalInstance","setPaymentMethod","StudentPortalPaymentRequestDto","balanceDue","discountPayInFullAvailable","balancePayInFull","Check","discountCashAvailable","balancePayInFullCash","form","$invalid","transactionResult","close","TransactionPublicDto","cancel","dismiss","mailingAddress","transactionId","transactions","records","schedule","isCompleted","isScheduledOther","scrollTarget","locationSelected","f","Set","refreshSchedule","studentType","locations","promises","locationId","now","cls","classStart","classNumberStr","classNumber","all","scrollIntoView","behavior","scheduleChange","class","$localStorage","classes","row","contractSigned","virtualClassroomStudent","virtualClassroomJoinClass","login","formController","refreshStudents","logout","students","demoMode","studentSelected","studentIdSelected","orderBy","head","payment","controller","controllerAs","bindToController","receipt","openVirtualClassroom","size","openScheduler","studentLoginSession","StudentPortalSessionDto","studentPortalDebugMode","studentPortalDemoMode","demo","studentPortalStudentIdSelected","currentTimestamp","readyState","FormQuestionType","VirtualClassroom","$interval","$sessionStorage","$virtualClassHub","$logger","participants","devices","cameraSelfHide","cameraPauseCount","slowLinkCount","handleError","goHome","checkMediaTracks","enabled","demoSession","getDemoSession","demoStudent","getDemoStudent","originalUserAgent","userAgentCheck","userAgentResult","virtualClassAllowed","virtualClassType","VirtualClassType","Myers","autoJoin","number","classSelected","videoPlayer","muted","photoRequiredRefresh","debugMode","handRaisedToggle","raised","handRaisedUpdating","angular","participantSelf","handRaised","webRTCAdapter","browserDetails","shareCamera","janusPublish","opaqueId","virtual","sessionToken","virtualClass","pin","fullName","bitrate","mediaState","type","cameraMediaStateTimer","slowLink","uplink","slowLinkIncrement","source","slowLinkToast","pop","title","body","timeout","clear","getGridClass","videoEnabled","screenEnabled","currentForm","videoPlayerVisible","y","Math","sqrt","z","ceil","updateBitrate","studentBitrate","camera","request","photoCapture","photo","videoElement","canvas","videoWidth","videoHeight","getContext","drawImage","toDataURL","photoRequired","photos","photoSubmit","photoUpload","attendanceSignatureSubmit","sig","attendanceSignatureRequired","certificateRequestSubmit","certRequest","focusHandler","windowFocus","fullScreenHandler","fullScreenSupported","muteToggle","muteUpdating","videoPlayerSyncState","syncPlayback","player","videoPlayback","encodeURI","load","paused","ended","currentTime","play","pause","diff","abs","removeAttribute","videoPlayerOnCanPlay","$event","videoPlayerOnTimeUpdate","videoUpdatePlaybackStatus","videoPlayerOnProgress","VirtualClassParticipantVideoPlayback","VirtualClassParticipantMessageDto","messagesMarkRead","read","sender","Instructor","messageRead","pageHideHandler","leave","logHandler","connectionToast","bindAllParticipant","soundMessageReceive","delivered","messageDelivered","chatVisible","onClassUpdated","vc","classInProgress","oldVc","AttendanceSignature","AttendanceAndCertificate","certificateRequest","onParticipantSelfUpdated","arg","leaving","reasonRemoved","reasonDisconnected","onParticipantSelfRemoved","isFullScreen","removeEventListener","saveReason","virtualClassroomDisconnectedReason","studentPortalAutoJoin","videoDeviceId","audioDeviceId","audioOutputDeviceId","oldStream","constraints","deviceId","ideal","sampleSize","channelCount","cameraPauseTimer","VirtualClassroomController","badCameraStrings","str","toLowerCase","enumerateDevices","loadForm","formGet","bindForm","formModel","questions","WordBank","wordIndex","split","val","trim","word","$setPristine","$watch","newValue","wordBankWordReused","responseWordBank","allWordsUsed","reused","formSubmit","component","bindings","certificateNumberFormatted","certificateDate","purchaserName","purchaserPhone","purchaserEmail","recipientName","recipientPhone","recipientEmail","messageFrom","messageTo","messageNote","giftCertificateType","giftCertificateTemplate","purchasePrice","faceValue","paid","templates","giftCertificateTypes","GiftCertificatePublicDto","preview","formChanged","previewDebounce","blobUrl","notify","$onChanges","changesObj","StudentPortalClassroomStatusComponent","$stateProvider","abstract","VirtualClassroomDisconnected","dynamic","$inject","VirtualClassroomFormComponent","config","useDateParser","ApiModule","DebounceModule","HubProxyModule","SpinnerModule","LoggerModule","uiSelectConfig","theme","moment","updateLocale","week","dow","doy","uibDatepickerConfig","showWeeks","$urlRouterProvider","$locationProvider","html5Mode","otherwise","$httpProvider","defaults","withCredentials","$sceDelegateProvider","resourceUrlWhitelist","run","$trace","enable","setTimeout","___CSS_LOADER_EXPORT___","bootstrapFormValidation","restrict","require","names","formValidation","validNames","getNames","input","$name","modelName","$viewChangeListeners","$touched","$submitted","removeClass","addClass","$modelValue","every","inputName","$valid","clickToDial","$userStorage","$dataHub","dial","destination","Value","Type","asteriskCallOriginate","dialModal","extension","cell","dialog","createElement","innerHTML","appendChild","$modal","find","modal","keyboard","removeChild","myExtension","myCellPhone","stopPropagation","transclude","visible","onShown","onHide","postLink","jQuery","$parent","modalHeader","modalBody","modalFooter","exceptionMessage","statusText","xhrStatus","ApiService","factory","debounce","func","wait","immediate","deferred","later","callNow","spinner","caption","incrementCounter","SpinnerService","count","consoleMethod","concat","Function","LoggerService","participantId","timestamp","from","userId","readTime","readByUser","deliveredTime","examId","initials","age","dob","ofAge","duration","intervalToDuration","end","years","months","days","underage","addMonths","addYears","toISOString","bottomNav","bottomNavLeft","bottomNavRight","Chart","global","tooltips","elements","line","borderWidth","rectangle","colors","chart","chartColors","convertColor","color","getColor","rgbStringToRgb","match","hexToRgb","hex","bigint","parseInt","substr","getRandomColor","getRandomInt","alpha","backgroundColor","rgba","pointBackgroundColor","pointHoverBackgroundColor","borderColor","pointBorderColor","pointHoverBorderColor","min","max","floor","random","chartConfig","attr","myChart","getColors","dataLength","notEnoughColors","datasets","labels","item","colorIndex","ctx","$on","resize","currencyFilter","$filter","ngCurrencyFilter","symbol","fractionSize","datePicker","$config","placeholder","ngModel","ngDisabled","ngRequired","getFieldModelName","parseDate","toDate","dateValidation","$parse","ctrl","isRequired","required","ngMin","$validators","minVal","parsedMinVal","ngMax","maxVal","parsedMaxVal","$parsers","viewValue","formattedValue","format","$viewValue","$setViewValue","$render","userInfo","developer","roles","debug2","formatDuration","unit","h","asHours","minutes","durationHms","seconds","videoDuration","parseTimeSpan","ts","asMilliseconds","email","addr","urlToFilename","formGroupInput","maxlength","ctrls","disabled","highlightWords","words","pattern","hint","startsWith","ngEnter","which","$eval","panel","panelHeading","panelBody","panelTable","panelListGroup","panelFooter","panelTitle","enableFeedback","$transclude","isSlotFilled","click","f1","sortableField","f2","isArray","sortableVar","reverse","caret","unshift","sortable","sortableController","stringToCurrency","formatForDisplay","parseFloat","$formatters","round","stringToDate","validFormats","stringToTime","fmt","parse","StudentSearchDto","studentSearch","response","onSelect","$student","selectedStudent","studentSelect","tel","numberArray","dateDuration","dangerDays","warningDays","guid","showDialog","autoPrint","autoPreview","onPrinted","printOptions","$print","printers","printCount","resetSelectedPrinter","printerPurgeJobs","selectedPrinter","printerChanged","useDefaultPrinter","printerName","defaultPrinter","useBackupPrinter","backupPrinter","changePrinter","reprint","printing","printJobSubmit","PrintJobResultDto","printLocal","printPdf","done","previewing","client","bindAllPrinter","printerSubscribe","printerNameBackup","printReportDirective","icon","dropup","btnSize","buttonController","$compile","bindHtmlCompile","compileScope","bindHtmlScope","contents","sign","showSignatureDialog","copyFieldForSig","fieldForSig","$field","initial","signatureLength","signatureOnEnd","signaturePad","onEnd","minWidth","maxWidth","resizeCanvas","ratio","devicePixelRatio","offsetWidth","offsetHeight","scale","accept","contractFieldDirective","contract","toUpper","$overrideModelOptions","updateOn","toUpperCase","re","autoCase","fixCase","janusSubscribeDirective","instance","publisherId","stats","statsEnabled","bitrateTimer","debugValue","substream","visibleInViewport","streamRef","janusInstance","subscribe","janusSubscribe","janusOpaqueId","janusRoomId","janusPin","janusStatsEnabled","janusStats","changeSubstream","reconfigure","janusAudio","janusVideo","janusDebug","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","time","ir","toFixed","vis","threshold","observe","logError","disconnect","remoteFeed","listen","createAnswer","audioSend","videoSend","janusSlowLink","isNewStream","br","getBitrate","detached","connect","contextLoaded","mic","createMediaStreamSource","node","AudioWorkletNode","port","volume","AudioContext","blob","Blob","audioWorklet","addModule","VuMeter","ngMuted","trustedUrl","$sce","trustAsResourceUrl","ngSrcObject","$evalAsync","clone","cloneCanvas","oldCanvas","newCanvas","description","ngAutoFocus","focus","select","ngSinkId","setSinkId","ngVolume","mediaElement","onvolumechange","Age","AutoCase","BindHtmlCompile","BootstrapFormValidation","BottomNav","ClickToDial","ContractField","CurrencyFilter","DateDurationDirective","DatePicker","Debug","DurationFilter","EmailDirective","Filename","FormGroupInput","Highlight","Hint","JanusSubscribe","Modal","NgAutoFocus","NgEnter","NgMuted","NgSinkId","NgSrcObject","NgVolume","Panel","Popout","PrintReportDirective","SignaturePad","Sortable","StringToCurrency","StringToDate","StringToTime","StudentSearch","StudentSelect","TelDirective","TelFilter","ToUpper","TrustedUrlFilter","VUMeter","onMessageRemoved","bindMessageUpdated","arrayFunc","bindMessageRemoved","bag","certificateRequestDto","formDto","classDto","messageId","photoDto","participant","onClassRemoved","onParticipantRemoved","onParticipantUpdated","bindClassUpdated","bindParticipantSelfUpdated","bindParticipantUpdated","bindClassRemoved","bindParticipantRemoved","bindParticipantSelfRemoved","bindAllClass","bindAllParticipantSelf","ExamHub","VirtualClassHub","ExamHubService","VirtualClassHubService"],"mappings":"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","file":"public.d2f51894a0bd231a29d4.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([574,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import * as angular from 'angular';\r\n\r\nfunction popoutDirective() {\r\n return {\r\n link(scope, element, attrs) {\r\n element.bind('click', event => {\r\n popWindow(attrs.href, attrs.id);\r\n event.preventDefault();\r\n });\r\n }\r\n };\r\n}\r\n\r\nexport function popWindow(href: string, id: string) {\r\n let w = window.open(href, id,\r\n 'width=995, height=600, toolbar=no, location=no, directories=no, status=no, menubar=no, copyhistory=no');\r\n if (screen.width < 1200) {\r\n w.moveTo(0, 0);\r\n w.resizeTo(screen.availWidth, screen.availHeight);\r\n }\r\n return w;\r\n}\r\n\r\nexport default angular.module('directives.popout', [])\r\n .directive('popout', popoutDirective)\r\n .name;\r\n","import {debounce} from \"lodash\";\r\n\r\ndeclare global {\r\n interface Number {\r\n thousandsSeparator(): string;\r\n }\r\n\r\n interface Array {\r\n merge(entity: T, keySelectorFunc: (value: T) => any): T;\r\n\r\n replace(entity: T, keySelectorFunc: (value: T) => any): void;\r\n\r\n remove(entity: T, keySelectorFunc: (value: T) => any): void;\r\n }\r\n\r\n interface String {\r\n replaceAll(strReplace: string, strWith: string): string;\r\n }\r\n\r\n interface HTMLElement {\r\n webkitRequestFullscreen(options?: FullscreenOptions): Promise;\r\n }\r\n\r\n interface MediaDevices {\r\n getDisplayMedia(constraints: MediaStreamConstraints): Promise;\r\n }\r\n\r\n interface Navigator {\r\n getDisplayMedia(constraints: MediaStreamConstraints): Promise;\r\n }\r\n\r\n interface HTMLMediaElement {\r\n captureStream(): MediaStream;\r\n }\r\n\r\n interface Window {\r\n maximize(): void;\r\n\r\n enterFullScreen(): void;\r\n\r\n exitFullScreen(): void;\r\n\r\n onFullScreenChange(callback: (isFullScreen: boolean) => void): void;\r\n }\r\n\r\n}\r\nNumber.prototype.thousandsSeparator = function (): string {\r\n return Number(this).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n};\r\n\r\nArray.prototype.merge = function (entity: T, keySelectorFunc: (value: T) => any): T {\r\n const index = this.map(keySelectorFunc).indexOf(keySelectorFunc(entity));\r\n if (index >= 0) {\r\n return Object.assign(this[index], entity);\r\n } else {\r\n this.push(entity);\r\n return entity;\r\n }\r\n};\r\n\r\nArray.prototype.replace = function (entity: T, keySelectorFunc: (value: T) => any): void {\r\n const index = this.map(keySelectorFunc).indexOf(keySelectorFunc(entity));\r\n if (index >= 0)\r\n this[index] = entity;\r\n else\r\n this.push(entity);\r\n};\r\n\r\nArray.prototype.remove = function (entity: T, keySelectorFunc: (value: T) => any): void {\r\n const index = this.map(keySelectorFunc).indexOf(keySelectorFunc(entity));\r\n if (index >= 0)\r\n this.splice(index, 1);\r\n};\r\n\r\nString.prototype.replaceAll = function (strReplace, strWith) {\r\n // See http://stackoverflow.com/a/3561711/556609\r\n var esc = strReplace.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n var reg = new RegExp(esc, 'ig');\r\n return this.replace(reg, strWith);\r\n};\r\n\r\nWindow.prototype.maximize = function () {\r\n if (window.moveTo)\r\n window.moveTo(0, 0);\r\n if (window.resizeTo) {\r\n console.debug('resizeTo', screen.width, screen.height);\r\n window.resizeTo(screen.width, screen.height);\r\n }\r\n}\r\n\r\nWindow.prototype.enterFullScreen = function () {\r\n\r\n try {\r\n var e = window.document.documentElement;\r\n let options: FullscreenOptions = {navigationUI: \"hide\"};\r\n if (e.requestFullscreen)\r\n e.requestFullscreen(options);\r\n else {\r\n if (e.webkitRequestFullscreen) {\r\n e.webkitRequestFullscreen(options);\r\n }\r\n }\r\n }catch(e) {\r\n console.error('error while trying to fullScreen', e);\r\n }\r\n}\r\n\r\nWindow.prototype.exitFullScreen = function () {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document[\"mozCancelFullScreen\"]) { /* Firefox */\r\n document[\"mozCancelFullScreen\"]();\r\n } else if (document[\"webkitExitFullscreen\"]) { /* Chrome, Safari and Opera */\r\n document[\"webkitExitFullscreen\"]();\r\n } else if (document[\"msExitFullscreen\"]) { /* IE/Edge */\r\n document[\"msExitFullscreen\"]();\r\n }\r\n}\r\n\r\nWindow.prototype.onFullScreenChange = function (callback: (isFullScreen: boolean) => void) {\r\n let fullScreenChanged = (e: Event) => {\r\n let doc = window.document;\r\n let element = doc.fullscreenElement || doc[\"webkitFullscreenElement\"] || doc.fullscreen;\r\n callback(!!element);\r\n };\r\n\r\n window.addEventListener('fullscreenchange', fullScreenChanged);\r\n window.addEventListener('webkitfullscreenchange', fullScreenChanged);\r\n}\r\n\r\nlet resizeHandler = debounce(() => {\r\n document.documentElement.style.setProperty('--innerHeight', `${window.innerHeight}px`);\r\n}, 400);\r\n\r\nwindow.addEventListener('resize', resizeHandler);\r\nresizeHandler();\r\n\r\nexport {}\r\n","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../node_modules/css-loader/dist/cjs.js!./nga.all.min.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

Call My Extension

Call My Cell

\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

{{title}}

\";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" {{selectedStudent.fullName}} \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" {{diff=(value|amDifference:null:'days'); \\\"\\\"}} {{value | date:'MM/dd/yyyy'}}
    ({{value | amUtc | amLocal | amTimeAgo}})
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

    {{$ctrl.caption || 'Print Options'}}

    Select a printer if you are at a Myers location; otherwise, click Print Using Browser
    {{ $ctrl.selectedPrinter.name || $ctrl.$localStorage.printerName }}
    Change Printer
    Use Default Printer: {{$ctrl.defaultPrinter}}
    Use Backup Printer: {{$ctrl.backupPrinter}}
    {{unknown=1;\\\"\\\"}}
    {{unknown=0;\\\"\\\"}} OK
    {{unknown=0;\\\"\\\"}} Missing/Removed
    • Use Another Printer
    {{unknown=0;\\\"\\\"}} Error
    • Turn the printer off and on again
    • Trying clearing the print queue:
      Clear Print Queue
    {{unknown=0;\\\"\\\"}} Offline
    • Turn printer off and on again
    • It may take up to 3 minutes for the printer to connect
    {{unknown=0;\\\"\\\"}} Out of Paper
    • Add paper
    • Printer may require you to press a button to continue
    • It may take 1-2 minutes for this screen to update
    • Otherwise, turn the printer off and on again
    {{unknown=0;\\\"\\\"}} Paper Jam
    • Clear paper jam
    • Printer may require you to press a button to continue
    • It may take 1-2 minutes for this screen to update
    • Otherwise, turn the printer off and on again
    {{unknown=0;\\\"\\\"}} Toner Low
    • Replace toner if print quality is poor
    {{$ctrl.selectedPrinter.queueStatus}}
    Cancel
    Preview
    Print Using Browser
    Done
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

    {{$ctrl.field.field.caption}}

    Please type your full name: Please sign using your mouse or finger:
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

    {{$ctrl.field.field.caption}}

    Please type your initials: Please sign your initials using your mouse or finger:
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Sign Here
    \\\"Signature\\\"
    Initial Here
    \\\"Initials\\\"
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Clear
    Sign above
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;","import * as angular from 'angular';\r\nimport 'signalr';\r\nimport {SpinnerService} from './SpinnerModule';\r\nimport {IQService, IRootScopeService, ITimeoutService, IWindowService} from \"angular\";\r\n\r\nexport type StateChangeCallback = (change: SignalR.StateChanged) => void;\r\n\r\nexport class HubProxyFactory {\r\n constructor(private $q: IQService,\r\n private $rootScope: IRootScopeService,\r\n private $timeout: ITimeoutService,\r\n private $window: IWindowService,\r\n private $spinner: SpinnerService) {\r\n }\r\n\r\n create(hubName: string, logging: boolean) {\r\n return new HubProxy(this.$q, this.$rootScope, this.$timeout, this.$window, this.$spinner, hubName, logging);\r\n }\r\n}\r\n\r\nexport class HubProxy {\r\n connection: SignalR.Hub.Connection;\r\n private proxy: SignalR.Hub.Proxy;\r\n private autoReconnect = true;\r\n private stateChangeObservers: StateChangeCallback[] = [];\r\n\r\n constructor(private $q: IQService,\r\n private $rootScope: IRootScopeService,\r\n private $timeout: ITimeoutService,\r\n private $window: IWindowService,\r\n private $spinner: SpinnerService,\r\n private hubName: string,\r\n logging: boolean) {\r\n var url = $window.location.hostname === 'localhost' ? 'http://localhost:8081/signalr' :\r\n $window.apiBase.replace('/api/', '') + '/signalr';\r\n this.connection = $.hubConnection(url, {\r\n logging: logging,\r\n useDefaultPath: false\r\n });\r\n this.connection.stateChanged((change: SignalR.StateChanged) => {\r\n this.$rootScope.$applyAsync(() => {\r\n this.stateChanged(change);\r\n });\r\n });\r\n\r\n this.connection.error((error: SignalR.ConnectionError) => {\r\n console.error(`hubProxy ${hubName}`, error);\r\n if (error.context && error.context.status === 401) {\r\n this.autoReconnect = false;\r\n this.connection.stop();\r\n }\r\n });\r\n this.proxy = this.connection.createHubProxy(hubName);\r\n\r\n }\r\n\r\n /**\r\n * Returns a $q that should be .resolve()'d when the subscription should be removed\r\n * @param eventName\r\n * @param callback\r\n */\r\n on(eventName: string, callback: (...msg: any[]) => void): angular.IDeferred {\r\n // use the callback as the identity, instead of the wrapped function\r\n let callbackIdentity = callback;\r\n let wrappedCallback = (...params: any[]) => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback.apply(this.proxy, params);\r\n }\r\n });\r\n };\r\n let defer = this.$q.defer();\r\n defer.promise.then(() => {\r\n console.debug('resolved', eventName, callback);\r\n // @ts-ignore TypeDef is , third param is valid\r\n this.proxy.off(eventName, wrappedCallback, callbackIdentity)\r\n });\r\n\r\n // @ts-ignore TypeDef is wrong, third param is valid\r\n this.proxy.on(eventName, wrappedCallback, callbackIdentity);\r\n return defer;\r\n };\r\n\r\n /**\r\n * not sure the identity is preserved. test this carefully before use\r\n * @param eventName\r\n * @param callback\r\n */\r\n off(eventName: string, callback: (...msg: any[]) => void) {\r\n this.proxy.off(eventName,\r\n (...params) => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback.apply(this.proxy, params);\r\n }\r\n });\r\n });\r\n };\r\n\r\n invoke(methodName: string, ...args: any[]) {\r\n var allArgs = arguments;\r\n var q = this.$q.when(this.proxy.invoke.apply(this.proxy, allArgs));\r\n return q;\r\n };\r\n\r\n start(): ng.IPromise {\r\n // initiate start via a defer \r\n // may be called inside a constructor which is already inside a $digest loop\r\n var q = this.$q.defer();\r\n this.$rootScope.$applyAsync(() => q.resolve(this.connection.start()));\r\n return q.promise;\r\n };\r\n\r\n stop() {\r\n console.debug('HubProxyModule.stop()')\r\n this.autoReconnect = false;\r\n this.connection.stop();\r\n }\r\n\r\n onStateChanged(callback: StateChangeCallback): angular.IDeferred {\r\n this.stateChangeObservers.push(callback);\r\n let defer = this.$q.defer();\r\n defer.promise.then(() => {\r\n this.stateChangeObservers.remove(callback, x => x);\r\n })\r\n return defer;\r\n };\r\n\r\n onError(callback: (error: SignalR.ConnectionError) => any) {\r\n this.connection.error((error: SignalR.ConnectionError) => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback(error);\r\n }\r\n });\r\n });\r\n };\r\n\r\n onConnected(callback: () => void) {\r\n return this.onStateChanged(x => {\r\n if (x.newState == SignalR.ConnectionState.Connected)\r\n callback();\r\n });\r\n };\r\n\r\n get isConnected() {\r\n return this.connection.state == SignalR.ConnectionState.Connected;\r\n }\r\n\r\n onReconnected(callback: () => void) {\r\n this.connection.reconnected(() => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n });\r\n };\r\n\r\n onReconnecting(callback: () => void) {\r\n this.connection.reconnecting(() => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n });\r\n };\r\n\r\n onDisconnected(callback: () => void) {\r\n this.connection.disconnected(() => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n });\r\n };\r\n\r\n onConnectionSlow(callback: () => void) {\r\n this.connection.connectionSlow(() => {\r\n this.$rootScope.$applyAsync(() => {\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n });\r\n };\r\n\r\n private stateChanged(change: SignalR.StateChanged) {\r\n console.debug(`hubProxy ${this.hubName} stateChanged`, change);\r\n switch (change.newState) {\r\n\r\n case SignalR.ConnectionState.Connecting:\r\n this.$spinner.show('Connecting', false);\r\n break;\r\n case SignalR.ConnectionState.Connected:\r\n this.autoReconnect = true;\r\n this.$spinner.hide();\r\n break;\r\n case SignalR.ConnectionState.Reconnecting:\r\n this.$spinner.show('Reconnecting', false);\r\n break;\r\n case SignalR.ConnectionState.Disconnected:\r\n if (this.autoReconnect) {\r\n this.$spinner.show('Disconnected', false);\r\n this.$timeout(() => this.connection.start(), 5000);\r\n } else {\r\n this.$spinner.hide();\r\n }\r\n break;\r\n }\r\n\r\n this.stateChangeObservers.forEach(observer => {\r\n try {\r\n observer(change);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default angular.module('services.hubproxy', [])\r\n .service('hubProxyFactory', HubProxyFactory)\r\n .name;\r\n","var map = {\n\t\"./af\": 90,\n\t\"./af.js\": 90,\n\t\"./ar\": 91,\n\t\"./ar-dz\": 92,\n\t\"./ar-dz.js\": 92,\n\t\"./ar-kw\": 93,\n\t\"./ar-kw.js\": 93,\n\t\"./ar-ly\": 94,\n\t\"./ar-ly.js\": 94,\n\t\"./ar-ma\": 95,\n\t\"./ar-ma.js\": 95,\n\t\"./ar-sa\": 96,\n\t\"./ar-sa.js\": 96,\n\t\"./ar-tn\": 97,\n\t\"./ar-tn.js\": 97,\n\t\"./ar.js\": 91,\n\t\"./az\": 98,\n\t\"./az.js\": 98,\n\t\"./be\": 99,\n\t\"./be.js\": 99,\n\t\"./bg\": 100,\n\t\"./bg.js\": 100,\n\t\"./bm\": 101,\n\t\"./bm.js\": 101,\n\t\"./bn\": 102,\n\t\"./bn-bd\": 103,\n\t\"./bn-bd.js\": 103,\n\t\"./bn.js\": 102,\n\t\"./bo\": 104,\n\t\"./bo.js\": 104,\n\t\"./br\": 105,\n\t\"./br.js\": 105,\n\t\"./bs\": 106,\n\t\"./bs.js\": 106,\n\t\"./ca\": 107,\n\t\"./ca.js\": 107,\n\t\"./cs\": 108,\n\t\"./cs.js\": 108,\n\t\"./cv\": 109,\n\t\"./cv.js\": 109,\n\t\"./cy\": 110,\n\t\"./cy.js\": 110,\n\t\"./da\": 111,\n\t\"./da.js\": 111,\n\t\"./de\": 112,\n\t\"./de-at\": 113,\n\t\"./de-at.js\": 113,\n\t\"./de-ch\": 114,\n\t\"./de-ch.js\": 114,\n\t\"./de.js\": 112,\n\t\"./dv\": 115,\n\t\"./dv.js\": 115,\n\t\"./el\": 116,\n\t\"./el.js\": 116,\n\t\"./en-au\": 117,\n\t\"./en-au.js\": 117,\n\t\"./en-ca\": 118,\n\t\"./en-ca.js\": 118,\n\t\"./en-gb\": 119,\n\t\"./en-gb.js\": 119,\n\t\"./en-ie\": 120,\n\t\"./en-ie.js\": 120,\n\t\"./en-il\": 121,\n\t\"./en-il.js\": 121,\n\t\"./en-in\": 122,\n\t\"./en-in.js\": 122,\n\t\"./en-nz\": 123,\n\t\"./en-nz.js\": 123,\n\t\"./en-sg\": 124,\n\t\"./en-sg.js\": 124,\n\t\"./eo\": 125,\n\t\"./eo.js\": 125,\n\t\"./es\": 126,\n\t\"./es-do\": 127,\n\t\"./es-do.js\": 127,\n\t\"./es-mx\": 128,\n\t\"./es-mx.js\": 128,\n\t\"./es-us\": 129,\n\t\"./es-us.js\": 129,\n\t\"./es.js\": 126,\n\t\"./et\": 130,\n\t\"./et.js\": 130,\n\t\"./eu\": 131,\n\t\"./eu.js\": 131,\n\t\"./fa\": 132,\n\t\"./fa.js\": 132,\n\t\"./fi\": 133,\n\t\"./fi.js\": 133,\n\t\"./fil\": 134,\n\t\"./fil.js\": 134,\n\t\"./fo\": 135,\n\t\"./fo.js\": 135,\n\t\"./fr\": 136,\n\t\"./fr-ca\": 137,\n\t\"./fr-ca.js\": 137,\n\t\"./fr-ch\": 138,\n\t\"./fr-ch.js\": 138,\n\t\"./fr.js\": 136,\n\t\"./fy\": 139,\n\t\"./fy.js\": 139,\n\t\"./ga\": 140,\n\t\"./ga.js\": 140,\n\t\"./gd\": 141,\n\t\"./gd.js\": 141,\n\t\"./gl\": 142,\n\t\"./gl.js\": 142,\n\t\"./gom-deva\": 143,\n\t\"./gom-deva.js\": 143,\n\t\"./gom-latn\": 144,\n\t\"./gom-latn.js\": 144,\n\t\"./gu\": 145,\n\t\"./gu.js\": 145,\n\t\"./he\": 146,\n\t\"./he.js\": 146,\n\t\"./hi\": 147,\n\t\"./hi.js\": 147,\n\t\"./hr\": 148,\n\t\"./hr.js\": 148,\n\t\"./hu\": 149,\n\t\"./hu.js\": 149,\n\t\"./hy-am\": 150,\n\t\"./hy-am.js\": 150,\n\t\"./id\": 151,\n\t\"./id.js\": 151,\n\t\"./is\": 152,\n\t\"./is.js\": 152,\n\t\"./it\": 153,\n\t\"./it-ch\": 154,\n\t\"./it-ch.js\": 154,\n\t\"./it.js\": 153,\n\t\"./ja\": 155,\n\t\"./ja.js\": 155,\n\t\"./jv\": 156,\n\t\"./jv.js\": 156,\n\t\"./ka\": 157,\n\t\"./ka.js\": 157,\n\t\"./kk\": 158,\n\t\"./kk.js\": 158,\n\t\"./km\": 159,\n\t\"./km.js\": 159,\n\t\"./kn\": 160,\n\t\"./kn.js\": 160,\n\t\"./ko\": 161,\n\t\"./ko.js\": 161,\n\t\"./ku\": 162,\n\t\"./ku.js\": 162,\n\t\"./ky\": 163,\n\t\"./ky.js\": 163,\n\t\"./lb\": 164,\n\t\"./lb.js\": 164,\n\t\"./lo\": 165,\n\t\"./lo.js\": 165,\n\t\"./lt\": 166,\n\t\"./lt.js\": 166,\n\t\"./lv\": 167,\n\t\"./lv.js\": 167,\n\t\"./me\": 168,\n\t\"./me.js\": 168,\n\t\"./mi\": 169,\n\t\"./mi.js\": 169,\n\t\"./mk\": 170,\n\t\"./mk.js\": 170,\n\t\"./ml\": 171,\n\t\"./ml.js\": 171,\n\t\"./mn\": 172,\n\t\"./mn.js\": 172,\n\t\"./mr\": 173,\n\t\"./mr.js\": 173,\n\t\"./ms\": 174,\n\t\"./ms-my\": 175,\n\t\"./ms-my.js\": 175,\n\t\"./ms.js\": 174,\n\t\"./mt\": 176,\n\t\"./mt.js\": 176,\n\t\"./my\": 177,\n\t\"./my.js\": 177,\n\t\"./nb\": 178,\n\t\"./nb.js\": 178,\n\t\"./ne\": 179,\n\t\"./ne.js\": 179,\n\t\"./nl\": 180,\n\t\"./nl-be\": 181,\n\t\"./nl-be.js\": 181,\n\t\"./nl.js\": 180,\n\t\"./nn\": 182,\n\t\"./nn.js\": 182,\n\t\"./oc-lnc\": 183,\n\t\"./oc-lnc.js\": 183,\n\t\"./pa-in\": 184,\n\t\"./pa-in.js\": 184,\n\t\"./pl\": 185,\n\t\"./pl.js\": 185,\n\t\"./pt\": 186,\n\t\"./pt-br\": 187,\n\t\"./pt-br.js\": 187,\n\t\"./pt.js\": 186,\n\t\"./ro\": 188,\n\t\"./ro.js\": 188,\n\t\"./ru\": 189,\n\t\"./ru.js\": 189,\n\t\"./sd\": 190,\n\t\"./sd.js\": 190,\n\t\"./se\": 191,\n\t\"./se.js\": 191,\n\t\"./si\": 192,\n\t\"./si.js\": 192,\n\t\"./sk\": 193,\n\t\"./sk.js\": 193,\n\t\"./sl\": 194,\n\t\"./sl.js\": 194,\n\t\"./sq\": 195,\n\t\"./sq.js\": 195,\n\t\"./sr\": 196,\n\t\"./sr-cyrl\": 197,\n\t\"./sr-cyrl.js\": 197,\n\t\"./sr.js\": 196,\n\t\"./ss\": 198,\n\t\"./ss.js\": 198,\n\t\"./sv\": 199,\n\t\"./sv.js\": 199,\n\t\"./sw\": 200,\n\t\"./sw.js\": 200,\n\t\"./ta\": 201,\n\t\"./ta.js\": 201,\n\t\"./te\": 202,\n\t\"./te.js\": 202,\n\t\"./tet\": 203,\n\t\"./tet.js\": 203,\n\t\"./tg\": 204,\n\t\"./tg.js\": 204,\n\t\"./th\": 205,\n\t\"./th.js\": 205,\n\t\"./tk\": 206,\n\t\"./tk.js\": 206,\n\t\"./tl-ph\": 207,\n\t\"./tl-ph.js\": 207,\n\t\"./tlh\": 208,\n\t\"./tlh.js\": 208,\n\t\"./tr\": 209,\n\t\"./tr.js\": 209,\n\t\"./tzl\": 210,\n\t\"./tzl.js\": 210,\n\t\"./tzm\": 211,\n\t\"./tzm-latn\": 212,\n\t\"./tzm-latn.js\": 212,\n\t\"./tzm.js\": 211,\n\t\"./ug-cn\": 213,\n\t\"./ug-cn.js\": 213,\n\t\"./uk\": 214,\n\t\"./uk.js\": 214,\n\t\"./ur\": 215,\n\t\"./ur.js\": 215,\n\t\"./uz\": 216,\n\t\"./uz-latn\": 217,\n\t\"./uz-latn.js\": 217,\n\t\"./uz.js\": 216,\n\t\"./vi\": 218,\n\t\"./vi.js\": 218,\n\t\"./x-pseudo\": 219,\n\t\"./x-pseudo.js\": 219,\n\t\"./yo\": 220,\n\t\"./yo.js\": 220,\n\t\"./zh-cn\": 221,\n\t\"./zh-cn.js\": 221,\n\t\"./zh-hk\": 222,\n\t\"./zh-hk.js\": 222,\n\t\"./zh-mo\": 223,\n\t\"./zh-mo.js\": 223,\n\t\"./zh-tw\": 224,\n\t\"./zh-tw.js\": 224\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 318;","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Models.StudentSearchDto\r\nexport class StudentSearchDto {\r\n public text: string = null;\r\n public classId: number = null;\r\n public includeArchived: boolean = false;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Enum.VirtualClassMode\r\nexport enum VirtualClassMode {\r\n \r\n None = 0,\r\n AttendanceAndCertificate = 1,\r\n Form = 2,\r\n FinalExamCourseEvalAttendanceCertificate = 3,\r\n AttendanceSignature = 4\r\n}\r\n","// Generated by Typewriter / Const.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\nexport namespace RoleName {\r\n export const Admin = 'Admin';\r\n export const CertificateAdmin = 'CertificateAdmin';\r\n export const ClassroomAdmin = 'ClassroomAdmin';\r\n export const ClassroomInstructor = 'ClassroomInstructor';\r\n export const Developer = 'Developer';\r\n export const ExamAdmin = 'ExamAdmin';\r\n export const ExamProctor = 'ExamProctor';\r\n export const FeedbackAdmin = 'FeedbackAdmin';\r\n export const InCarInstructor = 'InCarInstructor';\r\n export const Office = 'Office';\r\n export const StudentRelease = 'StudentRelease';\r\n export const UserAdmin = 'UserAdmin';\r\n export const Refunds = 'Refunds';\r\n \r\n}","// Module\nvar code = \"

    Electronic Signature Consent

    By continuing, I agree that my signature and initials will be the electronic representation of my signature and initials for all purposes when I use them on documents, including legally binding contracts - just the same as a pen-and-paper signature or initial.

    Please contact the office for a paper contract.
    Return to Student Portal
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Cancel
    Make A Payment
    {{$ctrl.balance.balancePayInFull|currency}} if full payment is received before {{$ctrl.balance.payInFullDueDate|date}}.
    The minimum payment amount is {{$ctrl.balance.minimumPayment|currency}}.
    You cannot pay more than your balance due.
     
    Please sign in the box below using your mouse or finger:
    Please sign above
    Please correct the errors above.
    {{$ctrl.balance.balancePayInFull|currency}} if full payment is received before {{$ctrl.balance.payInFullDueDate|date}}.
    Gift Certificate numbers start with 9 and are 16 digits long
     
    Please sign in the box below using your mouse or finger:
    Please sign above
    Please correct the errors above.
    1. Make checks payable to Myers Driving School
    2. Include the student name and ID on the check:
    3. If your check is postmarked before {{$ctrl.balance.payInFullDueDate|date}}, the balance due is {{$ctrl.balance.balancePayInFullCash|currency}}.
    4. If your check is postmarked on or after {{$ctrl.balance.payInFullDueDate|date}}, the balance due is {{$ctrl.balance.balanceCash|currency}}.
    5. Your balance due is {{$ctrl.balance.balanceCash|currency}}
    6. Mail check to:
      Myers Driving School
      {{$ctrl.mailingAddress.address}}
      {{$ctrl.mailingAddress.city}}, {{$ctrl.mailingAddress.state}} {{$ctrl.mailingAddress.zip}}
    Cancel
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Close
    Transaction History
    Receipt #{{$ctrl.transaction.id}} for student {{$ctrl.student.fullName}}
    Date/Time
    Amount
    Payment Method
    {{$ctrl.transaction.transactionType.name}} {{$ctrl.transaction.cardName}} {{$ctrl.transaction.cardNum}}
    Transaction ID
    Authorization Code

    Transaction History

    Receipt # Txn Date Description Amount New Balance
    View
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Close
    Virtual Classroom Schedule
    Class #
    From {{row.start | date:'shortTime'}} until {{row.end | date:'shortTime'}}
    {{row.message}}
    Join Class #{{row.number}}
    Open Zoom and enter Meeting ID
    There are no virtual classes available today
    Refresh Schedule
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Close
    Edit Schedule
    1\\\"> {{$ctrl.student.studentType.fullName}}:
    • There are classes total
    • Classes can be taken in any order and at any location
    • Up to classes can be taken per day
    Instructions:
    • Select one or more locations
    • Select from available classes to complete your class schedule
    Select Locations
     
    There are no upcoming classes scheduled. Please contact the office if you have any questions.
    • {{cls.date.shortTime}} Class #{{cls.classNumber}} 1\\\">@ {{cls.locationName}} Class #{{cls.classNumber}} has been completed Scheduled Class #{{cls.classNumber}} is scheduled on {{cls.schedule.date.mediumDow}} @ {{cls.schedule.location.name}}
      {{cls.status ? \\\"Remove From Schedule\\\" : \\\"Add To Schedule\\\"}}
    All times are Eastern
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    {{$index + 1}}. {{q.text}}
    True
    False
    Please choose True or False
    Yes
    No
    Please choose Yes or No
    Please choose an answer
    {{$index + 1}}.
    Warning: Some words were used more than once.
    \\\"\\\"
    Correct!
    Incorrect - try again.
    Incorrect :(
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    0\\\"> Remaining Classes
    Class # is for {{record.classDateTime.dayOfWeekNameAbbr}} {{record.classDateTime.mediumDate}} at {{record.classDateTime.shortTime}} at our location
    0\\\"> Completed Classes
    Class # was completed on {{record.classDateTime.dayOfWeekNameAbbr}} {{record.classDateTime.mediumDate}} at {{record.classDateTime.shortTime}} at our location
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Myers Driving School - Student Contract
    Unable to load electronic contract.
     
     
    Submit Contract
    Return to Student Portal
    Download
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    {{ ready = vm.screenShared && vm.cameraShared && vm.fullScreen; \\\"\\\"}}

    Online Testing

    The State of Ohio requires that all students are monitored during testing. Please follow these instructions:

    You appear to be using a mobile device ({{vm.browser.platform.vendor}} {{vm.browser.platform.model}}). Screen and camera sharing is not supported by these devices. Please use a Windows or Mac OS computer instead.
    1. Close all other programs and browser tabs on your computer.
    2. Share your screen using the button below. You must share your entire screen.
    3. Share your camera using the button below.
    4. Enter full screen using the button below.
    5. Do not close the window until you are complete.
    6. Do not switch to another tab or program.
    7. Keep your screen shared and stay in full screen for the duration of the test.
    8. You must remain visible on camera for the duration of the test.
    Sharing will stop automatically when the test is complete.

    Please wait for instructor...

    Question #{{vm.model.number}}

    {{vm.model.questionText}}

    \\\"{{vm.model.questionText}}\\\"/
    Chat
    {{message.message}}
    Select 'Entire Screen'
    Then click 'Allow'
    Click the image of your screen
    Then click 'Share'
    Click 'Allow'
    Select 'Share Your Display' then click 'All Displays' then click 'OK'
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

    Test Review

    Congratulations! You passed with a score of {{vm.model.score}}%.

    Unfortunately, you didn't pass this time.

    Your overall score was {{vm.model.score}}%.

    Please contact the office to discuss re-testing.

    You answered questions correctly and missed questions.
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"

    Connection Reset

    Someone (hopefully you) connected to this test from another browser/computer. You can close this window.

    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \"
    Myers Driving School - Student Portal
    Logged in as
    Student Login
    You can login to the Student Portal multiple ways:
    • Use your student ID & password
    • Get a one-time code texted to your mobile phone
    • Get a one-time code sent to your email address
    If you log in using your phone or email, the phone number or email address must be linked to your student record.
    Check your welcome email for your student ID & password
    • A one-time code was sent to your email address.
    • Please check your email for the code. If you don't see it, check your spam folder.
    • If you still aren't receiving the code, try using your phone number.
    • Codes are valid for one-time use only.
    • A one-time code was sent to your phone number via text message.
    • If you don't receive the code, please make sure you entered the correct number.
    • If you still aren't receiving the code, try using your email address.
    • Codes are valid for one-time use only.
    No Student Records Linked
    • There are no no student records linked to your login, .
    • Please Log Out and try logging in with the information you provided when you signed up.
    • You can also contact the office for further assistance. Click Refresh to load any changes after speaking with the office.
    1\\\">
    Select Student

    1\\\">
    Select Student:
    Refresh List
    1}\\\">
    You were disconnected from the virtual classroom:
    {{$ctrl.$localStorage.virtualClassroomDisconnectedReason}}
    Acknowledge
    Student Information
    Type: {{$ctrl.studentSelected.studentType.fullName}}
    ID: {{$ctrl.studentSelected.id}}
    Name: {{$ctrl.studentSelected.firstName}} {{$ctrl.studentSelected.middleName}} {{$ctrl.studentSelected.lastName}}
    Contract Status
    Review Contract
    {{$ctrl.studentSelected.contractSigned ? 'Signed' : 'Not Signed. Contract must be signed prior to taking classes.'}}
    Review Contract
    Payment Status
    0\\\"> Make Payment
    View Transaction History
    Balance: {{$ctrl.studentSelected.balance | currency}}
    0\\\"> Make Payment
    View Txn History
    Classroom Status
    Edit My Schedule
    Join Virtual Classroom
    Completed {{$ctrl.studentSelected.classroomCompleteDate.fullDate}} In Progress Scheduled to start {{$ctrl.studentSelected.startingClass.date.mediumDow}} Not Scheduled
    1 && !$ctrl.studentSelected.classroomComplete \\\" class=\\\"text-warning\\\"> Classes must be completed by
    Edit My Schedule
    Join Virtual Classroom
    Classroom Exam
    Passed on {{$ctrl.studentSelected.testDate.fullDate}} N/A
    In-Car Lessons
    Completed on {{$ctrl.studentSelected.btwCompleteDate.fullDate}} In Progress Not Started
    Assigned Instructor:
    Certificate of Completion
    Certificate # issued N/A
     
     
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" Myers Driving School - Virtual Classroom - Class #{{$ctrl.classSelected.number}}

    Device Or Browser Not Supported

    This device or browser is not supported for Virtual Classroom

    Please use a supported device:
    • Windows desktop/laptop, or
    • Mac desktop/laptop, or
    • Chromebook, or
    • iPad or other tablet
    And a supported browser:
    • Google Chrome, or
    • Mozilla Firefox
    • Safari
    This device was detected as: {{$ctrl.userAgentResult.deviceBrand}} {{$ctrl.userAgentResult.deviceModel}} {{$ctrl.userAgentResult.deviceType}} UAID:{{$ctrl.userAgentResult.id}}

    Camera/Microphone Not Available

    Please check that your system and browser supports camera and microphone sharing. You could also try using a different browser.

    Camera/Microphone Not Available

    \\\"{{$ctrl.userMediaError.message}}\\\"
    • Please check that your system and browser supports camera and microphone sharing.
    • Reboot your computer.
    • Try using a different browser.

    Camera/Microphone Not Available

    \\\"{{$ctrl.userMediaError.message}}\\\"
    • Another program is blocking access to your camera/microphone.
    • Close all other programs, including programs like YouCam or XSplit.
    • Reboot your computer.
    • Try using a different browser.

    Invalid Camera Type

    \\\"{{$ctrl.userMediaError.message}}\\\"
    • Please select your 'real' camera from the drop down list.
    • You may not use software such as YouCam, XSplit, etc.

    Camera/Microphone Access Denied

    1. Click the lock icon at the left end of the address bar
    2. Change both Camera and Microphone to Allow
    3. Reload when prompted
    1. Click the lock icon at the left end of the address bar
    2. Remove the block for both Use the Microphone and Use the Camera
    3. Click Retry below
    Another program could also be blocking camera access. Please close all other programs (YouCam, XSplit, etc) and try again, or try rebooting your computer.
    macOS:
    1. At the top of your screen, click the Safari menu, then click Settings for This Website
    2. Change both Camera and Microphone to Allow
    3. Click Retry below
    iOS:
    1. At the top of your screen, tap the "AA" button at the left end of the Smart Search field, then tap Website Settings
    2. Change both Camera and Microphone to Allow
    3. Tap Done to close the Settings
    4. Tap Retry below
    Check your browser settings and ensure you Allow access to your camera and microphone.
    Check Camera & Microphone

    Ensure you can see yourself in the camera. Change your settings if necessary.

    Test Speakers
    Next
    Virtual Classroom Rules
    • Using a cell phone or other mobile device, playing video games or watching TV is prohibited during class.
    • You must be sitting up, taking notes, and participating in class.
    • You may not lay down or be in a car.
    • Camera must remain ON.
    • Virtual Classroom must remain full screen. If you accidentally exit full screen, you must enable it again to remain in the class.
    • Your entire face must be visible in the camera. If you cannot clearly see yourself in the video preview, move to better lighting. Hoodies may not cover your head.
    • Your camera and microphone may be monitored at any time by Myers staff while you are in the virtual classroom.
    • Virtual class, including your camera and microphone, may be recorded for training and auditing purposes.
    • If you need to leave your device for ANY reason (restroom, etc) you must click the Leave Class button.
    • If you are disconnected or absent from the virtual classroom for more than 5 minutes for any reason, you will be required to retake the class the next time it is offered.
    Students who violate the rules are subject to removal from the virtual classroom. Students who repeatedly violate the rules may lose access to the virtual classroom system.
    I Understand The Rules
    I understand the rules - Join Class #{{$ctrl.joinHint.number}}
    Select A Class
    Refresh Schedule
    Start Time End Time Class Number
    {{cls.start | date:'shortTime'}} {{cls.end | date:'shortTime'}} #{{cls.number}}
    There are no virtual classes available today.
    Photos
    Picture time! To comply with record-keeping requirements, we must have a photo of you and your ID. Please follow the instructions below.

    {{row = ($ctrl.photos | first); \\\"\\\"}}
    Title
    Description
    Attendance - Signature

    Attendance Signature Received!

    You may now leave the class.

    If you want to take another class today, please click Leave Class and join the next class.

    Please sign below to certify you have been in attendance for the entire class.

    Warning: Any person giving false information, including using another individual's social security number, birth certificate, or other material or document information to obtain a remedial course certificate, or who lends or borrows any of these documents and displays or represents these documents issued to another person as their own, or who gives or receives a remedial certificate without fulfilling the requirements of OAC 4501-21 is subject to criminal penalties which may include a fine and/or imprisonment.
    Verify Information
    Please review and verify your information - it will be printed on your certificate exactly as entered here.

    Student Information

    Mailing Address

    Signature

    By signing, I agree that all information is correct and that I have completed all requirements and am eligible to receive a certificate of completion.
    {{diff = ($ctrl.classSelected.start | amDifference); \\\"\\\"}}

    You are now connected to the virtual classroom.

    0\\\">Class starting in {{$ctrl.classSelected.start | amTimeAgo}}...

    Class starting soon...

    This is the demo classroom.

    It's not a real class; you won't receive any credit for being here.
    Cam: {{$ctrl.cameraStats[row.id] | json}}
    Scr: {{$ctrl.screenStats[row.id] | json}}
    Chat
    {{message.message}}
    {{message.timestamp | date:'shortTime'}}
    {{$ctrl.cameraSelfHide ? 'Show' : 'Hide'}} Selfie
    {{$ctrl.chatVisible ? 'Close Chat' : 'Open Chat'}}
    Leave Class
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" Myers Driving School - Virtual Classroom
    You were disconnected from the virtual classroom:
    {{$ctrl.$stateParams.message || 'You were disconnected from the virtual classroom (unknown error)'}}
    Acknowledge
    Close this window to continue
    \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" Myers Driving School - Purchase Gift Certificate
    Purchasing a Myers Gift Certificate
    • Fill out Purchaser and Recipient information
    • Customize your certificate by choosing from one of our templates, and modifying the \\\"To\\\" and \\\"From\\\" messages if desired. Add a personal message.
    • Check out the preview and ensure everything is correct
    • Fill in your credit card details and click the \\\"Pay\\\" button
    Purchaser
    Please enter your information. A copy of the certificate and receipt will also be emailed to you.
    Recipient
    Please enter the recipient's information. We will not contact the recipient in any way.
    Select Certificate & Customize
    Please select a gift certificate type
    Please select a template
    You could write something like \\\"Mom and Dad\\\" here.
    You may optionally include a personal message on the gift certificate.
    Preview
    Payment
    \\r\\n                                
    Please sign above
    Please correct the errors above.
    Receipt

    Myers Driving School, Ltd.

    Order Information

    Gift Certificate #{{$ctrl.model.certificateNumberFormatted}}
    {{$ctrl.model.giftCertificateType.description}}
    Purchase price: {{$ctrl.model.purchasePrice|currency}}

    Payment Information

    0'\\\" class=\\\"dl-horizontal\\\">
    Date/Time
    Transaction ID
    Authorization Code
    Payment Method
    {{row.cardName}} {{row.cardNum}}
    Download Certificate
    \";\n// Exports\nmodule.exports = code;","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Enum.StudentExamStatus\r\nexport enum StudentExamStatus {\r\n \r\n Waiting = 0,\r\n Started = 1,\r\n Stopped = 2,\r\n Completed = 3\r\n}\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Models.StudentContractFieldUpdateDto\r\nexport class StudentContractFieldUpdateDto {\r\n public id: number = 0;\r\n public studentUlid: string = null;\r\n public userValue: string = null;\r\n public dataValue: string = null;\r\n public userHostAddress: string = null;\r\n public userAgent: string = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import {Ng1Controller, Transition, TargetState, StateService} from \"@uirouter/angularjs\";\r\nimport {IHttpService, ILocationService, ITimeoutService} from \"angular\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {StudentContractFieldDto} from \"../model/StudentContractFieldDto\";\r\nimport {StudentContractFieldUpdateDto} from \"../model/StudentContractFieldUpdateDto\";\r\nimport {StudentContractFieldUpdateResultDto} from \"../model/StudentContractFieldUpdateResultDto\";\r\nimport {StudentContractPublicDto} from \"../model/StudentContractPublicDto\";\r\n\r\nexport default class ContractController implements Ng1Controller {\r\n private model: StudentContractPublicDto;\r\n private pdfFrame: JQuery;\r\n private downloadBtn: JQuery;\r\n private error: boolean;\r\n\r\n $onInit(): void {\r\n this.refresh();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $http: IHttpService,\r\n private $location: ILocationService,\r\n private $api: ApiService,\r\n private toaster: any,\r\n private $uibModal: any,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n\r\n }\r\n\r\n refresh = () => {\r\n this.$api.get(`public/student/${this.$stateParams.studentUlid}/contract/`)\r\n .then(r => this.update(r.data))\r\n .catch(e => {\r\n this.error = true;\r\n });\r\n };\r\n\r\n update = (result: StudentContractPublicDto) => {\r\n this.model = result;\r\n if (result.completed) {\r\n this.$timeout(this.loadPdf, 0);\r\n return;\r\n }\r\n\r\n var html = result.html;\r\n result.fields.forEach((field, index) => {\r\n var key = '[' + field.field.name + ']';\r\n html = html.replaceAll(key, ``);\r\n });\r\n result.html = html;\r\n\r\n\r\n if (this.model.consented) return;\r\n\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./ContractElectronicConsent.html'),\r\n backdrop: 'static'\r\n }).result.then(accepted => {\r\n if (!accepted) {\r\n this.model = null;\r\n return;\r\n }\r\n\r\n this.$api.post(`public/student/${this.model.ulid}/contract/${this.model.id}/consent`, null)\r\n .then(this.refresh)\r\n .catch(this.$api.defaultErrorHandler);\r\n });\r\n };\r\n\r\n fieldChanged = (field: StudentContractFieldDto) => {\r\n console.debug('fieldChanged', field);\r\n var dto = new StudentContractFieldUpdateDto();\r\n dto.id = field.id;\r\n dto.studentUlid = this.model.ulid;\r\n dto.userValue = field.userValue;\r\n dto.dataValue = field.dataValue;\r\n\r\n this.$api.post(`public/student/${this.model.ulid}/contract/${this.model.id}/field`, dto)\r\n .then(r => {\r\n if (r.data.action == \"Reload\")\r\n window.location.reload();\r\n if (r.data.error)\r\n alert(r.data.error);\r\n this.refresh();\r\n })\r\n .catch(this.$api.defaultErrorHandler);\r\n };\r\n\r\n submit = () => {\r\n this.$api.post(`public/student/${this.model.ulid}/contract/${this.model.id}/submit`, null)\r\n .then(this.refresh)\r\n .catch(this.$api.defaultErrorHandler);\r\n };\r\n\r\n loadPdf = () => {\r\n if (!this.model.documentGuid) {\r\n this.error = true;\r\n return;\r\n }\r\n let url = `${this.$api.apiBase}public/student/${this.model.ulid}/contract/${this.model.documentGuid}`;\r\n this.$http.get(url, {responseType: 'blob'})\r\n .then(r => {\r\n const file = window.URL.createObjectURL(r.data);\r\n this.pdfFrame[0].src = file;\r\n this.downloadBtn[0].href = file;\r\n this.downloadBtn[0].download = \"Contract.pdf\";\r\n });\r\n };\r\n\r\n print = () => {\r\n this.pdfFrame[0].contentWindow.print();\r\n };\r\n\r\n get debugMode() {\r\n return this.$location.search().debug;\r\n }\r\n}\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Enum.StudentPortalPaymentMethod\r\nexport enum StudentPortalPaymentMethod {\r\n \r\n Unknown = 0,\r\n CreditCard = 1,\r\n Check = 2,\r\n GiftCertificate = 3\r\n}\r\n","import {HubProxy} from \"../modules/HubProxyModule\";\r\n\r\nexport class Logger {\r\n constructor(private hub: HubProxy, private logMethod: ((severity: string, messages: string[]) => void)) {\r\n console.debug(\"[Logger] Initialized\")\r\n }\r\n\r\n private send = (severity: ((message?: any, ...optionalParams: any[]) => void),\r\n message?: any,\r\n optionalParams?: any[]) => {\r\n // log to console\r\n let args: any[] = [];\r\n args.push('[Logger]');\r\n args.push(message);\r\n if (optionalParams && optionalParams.length)\r\n args.push(optionalParams);\r\n severity.apply(window.console, args);\r\n\r\n try {\r\n // log to hub, if connected\r\n if (!this.hub.isConnected)\r\n return;\r\n\r\n let msgs: string[] = [];\r\n if (typeof (message) == 'string')\r\n msgs.push(message);\r\n else\r\n msgs.push(JSON.stringify(message));\r\n if (optionalParams)\r\n optionalParams.forEach(p => {\r\n if (typeof (p) == 'string')\r\n msgs.push(p);\r\n else\r\n msgs.push(JSON.stringify(p));\r\n });\r\n this.logMethod.apply(this.hub, [severity.name, msgs]);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n log = (message?: any, ...optionalParams: any[]) => {\r\n this.send.apply(this, [window.console.log, message, optionalParams]);\r\n };\r\n\r\n info(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.info, message, optionalParams);\r\n };\r\n\r\n debug(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.debug, message, optionalParams);\r\n };\r\n\r\n warn(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.warn, message, optionalParams);\r\n };\r\n\r\n error(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.error, message, optionalParams);\r\n };\r\n\r\n}\r\n","import {Ng1Controller, StateService, TargetState, Transition} from \"@uirouter/angularjs\";\r\nimport {Janus} from 'janus-gateway';\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {IScope, ITimeoutService} from \"angular\";\r\nimport {ExamHubService} from \"../modules/HubModule\";\r\nimport {RtcInfo} from \"../model/RtcInfo\";\r\nimport {StudentExamStatusDto} from \"../model/StudentExamStatusDto\";\r\nimport {StudentExamStatus} from \"../model/StudentExamStatus\";\r\nimport {StudentExamQuestionPublicDto} from \"../model/StudentExamQuestionPublicDto\";\r\nimport {StudentExamQuestionAnswerPublicDto} from \"../model/StudentExamQuestionAnswerPublicDto\";\r\nimport {StudentExamMessageDto} from \"../model/StudentExamMessageDto\";\r\nimport {DebounceFactory} from \"../modules/DebounceModule\";\r\nimport {Logger} from \"./Logger\";\r\nimport * as Bowser from \"bowser\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\n\r\nexport default class ExamController implements Ng1Controller {\r\n private model: StudentExamQuestionPublicDto;\r\n private janus: any;\r\n private screenShared: boolean;\r\n private fullScreen: boolean;\r\n private janusConnected: boolean;\r\n private cameraShared: boolean;\r\n private status: StudentExamStatusDto;\r\n private videoCamera: JQuery;\r\n private messages: StudentExamMessageDto[] = [];\r\n private chatContainer: JQuery;\r\n private logger: Logger;\r\n private browser: any;\r\n private screenSharePrompt: boolean;\r\n private error: any;\r\n private endpoints: string[];\r\n private screenStream: MediaStream;\r\n private userMediaError: any;\r\n private cameraStream: MediaStream;\r\n private cameraStreamValid: boolean;\r\n private pluginHandles: any = {};\r\n\r\n $onInit(): void {\r\n this.init();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n // stop sharing and exit fullscreen before leaving page\r\n this.janus.destroy();\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document[\"mozCancelFullScreen\"]) { /* Firefox */\r\n document[\"mozCancelFullScreen\"]();\r\n } else if (document[\"webkitExitFullscreen\"]) { /* Chrome, Safari and Opera */\r\n document[\"webkitExitFullscreen\"]();\r\n } else if (document[\"msExitFullscreen\"]) { /* IE/Edge */\r\n document[\"msExitFullscreen\"]();\r\n }\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(\r\n private $examHub: ExamHubService,\r\n private $spinner: SpinnerService,\r\n private toaster: any,\r\n private $timeout: ITimeoutService,\r\n private $debounce: DebounceFactory,\r\n private $api: ApiService,\r\n private $scope: IScope,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n\r\n this.logger = new Logger(this.$examHub, this.$examHub.consoleLog);\r\n\r\n this.$examHub.onConnected(this.init);\r\n this.$examHub.onStatusChanged(status => {\r\n this.status = status;\r\n this.refresh();\r\n });\r\n\r\n this.$examHub.onReset(() => this.$state.go('^.reset'));\r\n this.$examHub.bindAllMessage(() => this.messages);\r\n\r\n this.$examHub.onMessageUpdated(() => {\r\n let e = this.chatContainer[0];\r\n if (!e) return;\r\n this.$timeout(() => e.scrollTop = e.scrollHeight, 100);\r\n });\r\n\r\n this.$api.get('janus/endpoint')\r\n .then(r => {\r\n this.endpoints = r.data;\r\n this.janusInit();\r\n });\r\n\r\n\r\n window.addEventListener('fullscreenchange', this.fullScreenChange);\r\n window.addEventListener('webkitfullscreenchange', this.fullScreenChange);\r\n\r\n // some people have a hard time with left click and right click.\r\n // not you, though, since you're reading this.\r\n document.addEventListener('contextmenu', event => {\r\n event.preventDefault();\r\n event.target.dispatchEvent(new Event('click'));\r\n });\r\n\r\n this.browser = Bowser.parse(window.navigator.userAgent);\r\n }\r\n\r\n messageSend = (msg) => {\r\n let dto = new StudentExamMessageDto();\r\n dto.message = msg;\r\n this.$examHub.messageSubmit(dto)\r\n .catch(this.$examHub.defaultErrorHandler);\r\n };\r\n\r\n fullScreenChange = (e: Event) => {\r\n let doc = window.document;\r\n let element = doc.fullscreenElement || doc[\"webkitFullscreenElement\"] || doc.fullscreen;\r\n this.$scope.$apply(() => {\r\n this.fullScreen = !!element;\r\n this.$examHub.updateFullscreen(this.fullScreen);\r\n });\r\n };\r\n\r\n get studentId() {\r\n return this.$stateParams.studentUlid;\r\n }\r\n\r\n init = () => {\r\n if (!this.$examHub.isConnected) return;\r\n this.$examHub.join(this.studentId)\r\n .then(status => {\r\n this.status = status;\r\n this.refresh();\r\n })\r\n .catch(e => {\r\n this.error = e;\r\n })\r\n };\r\n\r\n refresh = () => {\r\n if (!this.$examHub.isConnected) return;\r\n if (this.status.status == StudentExamStatus.Completed) {\r\n this.$state.go('^.review');\r\n return;\r\n }\r\n if (this.status.status != StudentExamStatus.Started) {\r\n this.model = null;\r\n return;\r\n }\r\n this.$examHub.next()\r\n .then(this.update)\r\n .catch(this.$examHub.defaultErrorHandler);\r\n };\r\n\r\n update = (question: StudentExamQuestionPublicDto) => {\r\n if (question == null)\r\n this.$state.go('^.review');\r\n this.model = question;\r\n };\r\n\r\n selectAnswer = (answer: StudentExamQuestionAnswerPublicDto) => {\r\n this.model.answers.forEach(x => x.selected = false);\r\n answer.selected = true;\r\n };\r\n\r\n isValid = () => this.model.answers.some(x => x.selected);\r\n\r\n submit = () => {\r\n this.$examHub.submitAnswer(this.model)\r\n .then(this.update)\r\n .catch(this.refresh);\r\n };\r\n\r\n skip = () => {\r\n this.$examHub.skip(this.model)\r\n .then(this.update)\r\n .catch(this.refresh);\r\n };\r\n\r\n updateRtc = (media, sessionId, roomId, handleId, privateId) => {\r\n let rtc: RtcInfo = {\r\n media: media,\r\n sessionId: sessionId,\r\n roomId: roomId,\r\n handleId: handleId,\r\n privateId: privateId\r\n };\r\n this.$examHub.updateRtcInfo(rtc)\r\n .catch(this.$examHub.defaultErrorHandler);\r\n };\r\n\r\n next = () => this.refresh();\r\n\r\n enterFullScreen = () => {\r\n var e = window.document.documentElement;\r\n let options: FullscreenOptions = {navigationUI: \"hide\"};\r\n if (e.requestFullscreen)\r\n e.requestFullscreen(options);\r\n else {\r\n if (e.webkitRequestFullscreen) {\r\n e.webkitRequestFullscreen(options);\r\n }\r\n }\r\n };\r\n\r\n janusInit = () => {\r\n Janus.init({\r\n debug: false,\r\n dependencies: Janus.useDefaultDependencies(),\r\n callback: () => {\r\n // this.logger.log('janus initialized');\r\n this.janusConnect();\r\n }\r\n });\r\n };\r\n\r\n janusConnect = () => {\r\n this.janusConnected = false;\r\n this.logger.log('janus connecting');\r\n this.$spinner.show('Connecting');\r\n this.janus = new Janus({\r\n server: this.endpoints,\r\n success: () => {\r\n this.$scope.$apply(() => {\r\n this.janusConnected = true;\r\n this.logger.log('janus connected');\r\n this.$spinner.hide();\r\n });\r\n this.$timeout(() => {\r\n if (this.cameraStream)\r\n this.janusAttach('camera', this.cameraStream);\r\n if (this.screenStream)\r\n this.janusAttach('screen', this.screenStream);\r\n }, 1000);\r\n },\r\n error: (cause) => {\r\n this.screenShared = false;\r\n this.cameraShared = false;\r\n this.$spinner.hide();\r\n this.logger.error(cause);\r\n this.janus.destroy();\r\n this.$spinner.show('Reconnecting');\r\n this.$timeout(() => {\r\n this.$spinner.hide();\r\n this.janusConnect();\r\n }, 5000);\r\n },\r\n destroyed: () => {\r\n // unused\r\n }\r\n }\r\n );\r\n };\r\n\r\n janusShareScreen = () => {\r\n this.screenStop();\r\n\r\n this.screenSharePrompt = true;\r\n this.logger.log('navigator.mediaDevices.getDisplayMedia', navigator.mediaDevices.getDisplayMedia != null);\r\n this.logger.log('navigator.getDisplayMedia', navigator.getDisplayMedia != null);\r\n this.logger.debug('supported constraints', navigator.mediaDevices.getSupportedConstraints());\r\n\r\n if (navigator.mediaDevices.getDisplayMedia)\r\n navigator.mediaDevices.getDisplayMedia({video: {frameRate: 3}, audio: true})\r\n .then(this.janusScreenShareSuccess)\r\n .catch(this.janusScreenShareError)\r\n .finally(this.janusScreenShareFinally);\r\n else if (navigator.getDisplayMedia)\r\n navigator.getDisplayMedia({video: {frameRate: 3}, audio: true})\r\n .then(this.janusScreenShareSuccess)\r\n .catch(this.janusScreenShareError)\r\n .finally(this.janusScreenShareFinally);\r\n else {\r\n this.toaster.error(\"Your browser does not support screen sharing. Please try a different browser.\");\r\n this.screenSharePrompt = false;\r\n return;\r\n }\r\n };\r\n\r\n janusScreenShareSuccess = (stream: MediaStream) => {\r\n this.screenStream = stream;\r\n let track = stream.getTracks().filter(t => t.kind == \"video\")[0];\r\n if (!track) {\r\n this.logger.error('no video track??')\r\n return;\r\n }\r\n this.logger.debug(\"screen track label\", track.label);\r\n this.logger.debug(\"actual screen resolution\", window.screen.width, window.screen.height);\r\n if (track.getConstraints)\r\n this.logger.debug('track constraints', track.getConstraints());\r\n // test if the track is at least as big as our screen - if so, the correct display was probably shared.\r\n // track resolution could be larger if multiple monitors were shared\r\n var valid = null;\r\n if (track.getSettings) {\r\n let cap = track.getSettings();\r\n this.logger.debug('track settings', cap);\r\n if (cap.width > 0 && cap.height > 0)\r\n valid = (cap.width >= window.screen.width && cap.height >= window.screen.height);\r\n }\r\n\r\n // chrome labels screen shares as:\r\n // screen:x:0\r\n // window:x:0\r\n // web-contents-media-stream:x:x\r\n // reject window and tab shares\r\n if (track.label && (track.label.indexOf('window:') == 0 || track.label.indexOf('web-contents') == 0)) {\r\n valid = false;\r\n }\r\n\r\n if (valid == null) {\r\n this.logger.error(\"Error - couldn't determine track resolution. Cannot validate if the correct screen was shared\");\r\n }\r\n\r\n if (valid === false) {\r\n this.toaster.error(\"You must share the entire screen. Please try again and select \\\"Entire Screen\\\". If you have multiple screens, please the screen showing this window.\");\r\n this.$scope.$apply(() => {\r\n this.$spinner.reset();\r\n });\r\n stream.getTracks().forEach(track => {\r\n track.stop();\r\n });\r\n return;\r\n }\r\n\r\n let videoTrack = stream.getVideoTracks()[0];\r\n videoTrack.onended = () => this.screenStopped('Screen share disconnected by student');\r\n\r\n this.logger.debug('attaching screen to janus');\r\n this.janusAttach(\"screen\", stream);\r\n };\r\n\r\n janusScreenShareError = (e: MediaStreamError) => {\r\n this.logger.error(e);\r\n this.$timeout(() => {\r\n var msg;\r\n switch (e.name) {\r\n case \"SourceUnavailableError\":\r\n msg = \"Error Sharing Screen - please restart your browser or computer.\"\r\n }\r\n this.toaster.error(msg || e.message || e.name || \"Error sharing screen\");\r\n });\r\n }\r\n\r\n janusScreenShareFinally = () => this.$timeout(() => this.screenSharePrompt = false);\r\n\r\n screenStop = () => {\r\n if (!this.screenStream) return;\r\n try {\r\n this.screenStream.getTracks().forEach(t => t.stop());\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n this.screenStream = null;\r\n this.screenShared = false;\r\n this.janusDetach('screen');\r\n }\r\n\r\n cameraStop = () => {\r\n if (!this.cameraStream) return;\r\n try {\r\n this.cameraStream.getTracks().forEach(t => t.stop());\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n this.cameraStreamValid = false;\r\n this.cameraStream = null;\r\n this.cameraShared = false;\r\n this.janusDetach('camera');\r\n }\r\n\r\n cameraStopped = (reason: string) => {\r\n this.cameraStop();\r\n this.logger.error(reason);\r\n }\r\n\r\n screenStopped = (reason: string) => {\r\n this.screenStop();\r\n this.logger.error(reason);\r\n }\r\n\r\n janusShareCamera = () => {\r\n\r\n this.cameraStop();\r\n this.userMediaError = null;\r\n navigator.mediaDevices.getUserMedia({video: {frameRate: 10}, audio: true})\r\n .then(stream => {\r\n this.$timeout(() => {\r\n this.cameraStream = stream;\r\n if (this.videoCamera && this.videoCamera[0])\r\n this.videoCamera[0].srcObject = stream;\r\n else\r\n this.logger.error('videoCamera element not available');\r\n this.cameraStreamValid = stream.getVideoTracks().length > 0 && stream.getAudioTracks().length > 0;\r\n if (!this.cameraStreamValid) return;\r\n let videoTrack = stream.getVideoTracks()[0];\r\n videoTrack.onended = () => this.cameraStopped('Camera disconnected by student');\r\n videoTrack.onmute = () => this.cameraStopped('Camera paused by student');\r\n let audioTrack = stream.getAudioTracks()[0];\r\n audioTrack.onended = () => this.cameraStopped('Microphone disconnected by student');\r\n });\r\n\r\n this.janusAttach('camera', stream);\r\n })\r\n .catch(e => {\r\n this.logger.error(e, e.name, e.message);\r\n this.$timeout(() => {\r\n this.toaster.error(e.message);\r\n this.userMediaError = e;\r\n });\r\n });\r\n };\r\n\r\n janusDetach = (mediaType) => {\r\n // detach old handle if present\r\n if (this.pluginHandles[mediaType]) {\r\n try {\r\n this.pluginHandles[mediaType].detach();\r\n } catch (e) {\r\n console.error('error detaching old plugin handle', e);\r\n }\r\n }\r\n\r\n this.updateRtc(mediaType, null, null, null, null);\r\n }\r\n\r\n janusAttach = (mediaType, stream) => {\r\n this.janusDetach(mediaType);\r\n\r\n var handle;\r\n this.janus.attach(\r\n {\r\n plugin: \"janus.plugin.videoroom\",\r\n success: (pluginHandle) => {\r\n this.pluginHandles[mediaType] = pluginHandle;\r\n handle = pluginHandle;\r\n this.logger.log(`[${mediaType}] Plugin attached! (${handle.getPlugin()}, id=${handle.getId()})`);\r\n\r\n var register = {\r\n \"request\": \"join\",\r\n \"room\": 1,\r\n \"ptype\": \"publisher\",\r\n \"$display\": mediaType\r\n };\r\n handle.send({\"message\": register});\r\n\r\n },\r\n error: (error) => {\r\n this.logger.error(\"[${mediaType}] Error attaching plugin: \", error);\r\n },\r\n consentDialog: (on) => {\r\n //this.logger.debug(`[${mediaType}] Consent dialog should be ${on ? \"on\" : \"off\"} now`);\r\n if (on) {\r\n this.$spinner.show('Waiting for authorization');\r\n } else {\r\n this.$spinner.hide();\r\n this.$spinner.show('Preparing stream');\r\n }\r\n },\r\n webrtcState: (on) => {\r\n this.logger.log(`[${mediaType}] WebRTC PeerConnection is ${on ? \"up\" : \"down\"} now`);\r\n this.$scope.$apply(() => {\r\n if (mediaType == \"screen\")\r\n this.screenShared = on;\r\n if (mediaType == \"camera\")\r\n this.cameraShared = on;\r\n if (on) {\r\n this.$spinner.reset();\r\n } else {\r\n this.$spinner.show('Stream Reconnecting');\r\n }\r\n });\r\n\r\n },\r\n onmessage: (msg, jsep) => {\r\n // this.logger.debug(`[${mediaType}] onmessage`, msg);\r\n var event = msg[\"videoroom\"];\r\n if (event != undefined && event === \"joined\") {\r\n let sessionId = this.janus.getSessionId();\r\n let handleId = msg[\"id\"];\r\n let privateId = msg[\"private_id\"];\r\n let roomId = msg[\"room\"];\r\n this.logger.log(`[${mediaType}] Successfully joined sessionId:${sessionId} roomId:${roomId} handleId:${handleId} privateId:${privateId}`);\r\n this.updateRtc(mediaType, sessionId, roomId, handleId, privateId);\r\n // this.logger.debug(\"Negotiating WebRTC stream for our screen\");\r\n\r\n if (stream)\r\n handle.createOffer({\r\n //media: mediaType,\r\n stream: stream,\r\n trickle: true,\r\n\r\n success: (jsep) => {\r\n // this.logger.debug(\"Got publisher SDP!\");\r\n // this.logger.debug(jsep);\r\n var publish = {\"request\": \"configure\", \"audio\": true, \"video\": true};\r\n handle.send({\"message\": publish, \"jsep\": jsep});\r\n },\r\n error: (error) => {\r\n this.logger.error(\"WebRTC error:\", error);\r\n this.$spinner.hide();\r\n this.toaster.error(error);\r\n }\r\n });\r\n\r\n }\r\n if (jsep !== undefined && jsep !== null) {\r\n // this.logger.debug(\"Handling SDP as well...\");\r\n // this.logger.debug(jsep);\r\n handle.handleRemoteJsep({jsep: jsep});\r\n }\r\n },\r\n onlocalstream: (stream) => {\r\n // this.logger.debug(\" ::: Got a local stream :::\");\r\n },\r\n onremotestream: (stream) => {\r\n this.logger.debug(\" ::: Got a remote stream :::\");\r\n this.logger.debug(stream);\r\n // The publisher stream is sendonly, we don't expect anything here\r\n },\r\n oncleanup: () => {\r\n this.logger.log(\" ::: Got a cleanup notification :::\");\r\n }\r\n });\r\n };\r\n\r\n}\r\n\r\n","import {Ng1Controller, Transition, TargetState} from \"@uirouter/angularjs\";\r\nimport {StudentExamStatusDto} from \"../model/StudentExamStatusDto\";\r\nimport {ExamHubService} from \"../modules/HubModule\";\r\n\r\nexport default class ExamReviewController implements Ng1Controller {\r\n private model: StudentExamStatusDto;\r\n\r\n $onInit(): void {\r\n this.refresh();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n this.refresh();\r\n }\r\n\r\n constructor(\r\n private $examHub: ExamHubService,\r\n private $stateParams: any) {\r\n\r\n this.$examHub.onConnected(this.refresh);\r\n }\r\n\r\n refresh = () => {\r\n if (!this.$examHub.isConnected) return;\r\n this.$examHub.join(this.$stateParams.studentUlid)\r\n .then(this.update)\r\n .catch(this.$examHub.defaultErrorHandler);\r\n };\r\n\r\n update = (model: StudentExamStatusDto) => {\r\n this.model = model;\r\n };\r\n\r\n}\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Models.StudentPortalSessionDto\r\nexport class StudentPortalSessionDto {\r\n public token: string = null;\r\n public studentId: number = null;\r\n public password: string = null;\r\n public ipAddress: string = null;\r\n public identityMode: string = null;\r\n public identityValue: string = null;\r\n public loginCode: string = null;\r\n public loginCodeAccepted: boolean = false;\r\n public error: string = null;\r\n public valid: boolean = false;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\nimport { StudentPortalPaymentMethod } from './StudentPortalPaymentMethod';\r\nimport { StudentPortalRequestDto } from './StudentPortalRequestDto';\r\n\r\n// Myers.StudentManagementSystem.Data.Models.StudentPortalPaymentRequestDto\r\nexport class StudentPortalPaymentRequestDto extends StudentPortalRequestDto {\r\n public method: StudentPortalPaymentMethod = null;\r\n public amount: number = 0;\r\n public ccNumber: string = null;\r\n public ccExpMonth: string = null;\r\n public ccExpYear: string = null;\r\n public ccCode: string = null;\r\n public ccAddress: string = null;\r\n public ccZip: string = null;\r\n public signature: string = null;\r\n public giftCertificateNumber: string = null;\r\n public customerIp: string = null;\r\n public customerUserAgent: string = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\nimport { StudentPortalSessionDto } from './StudentPortalSessionDto';\r\nimport { StudentPortalStudentDto } from './StudentPortalStudentDto';\r\n\r\n// Myers.StudentManagementSystem.Data.Models.StudentPortalRequestDto\r\nexport class StudentPortalRequestDto {\r\n public session: StudentPortalSessionDto = null;\r\n public student: StudentPortalStudentDto = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\nimport { TransactionTypePublicDto } from './TransactionTypePublicDto';\r\n\r\n// Myers.StudentManagementSystem.Data.Models.TransactionPublicDto\r\nexport class TransactionPublicDto {\r\n public id: number = 0;\r\n public timeCreated: Date = new Date(0);\r\n public txnDate: Date = new Date(0);\r\n public txnDateOnly: Date = new Date(0);\r\n public transactionType: TransactionTypePublicDto = null;\r\n public amount: number = 0;\r\n public authAmount: number = 0;\r\n public balance: number = 0;\r\n public receiptNum: string = null;\r\n public cardName: string = null;\r\n public cardNum: string = null;\r\n public desc: string = null;\r\n public resultAccepted: boolean = false;\r\n public resultTransId: string = null;\r\n public resultAuthCode: string = null;\r\n public resultErrorCode: number = 0;\r\n public lastError: string = null;\r\n public sequence: number = 0;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import {Ng1Controller, StateService, TargetState, Transition} from \"@uirouter/angularjs\";\r\nimport {ITimeoutService} from \"angular\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {StudentPortalPaymentRequestDto} from \"../model/StudentPortalPaymentRequestDto\";\r\nimport {StudentBalanceStatusDto} from \"../model/StudentBalanceStatusDto\";\r\nimport {TransactionPublicDto} from \"../model/TransactionPublicDto\";\r\nimport {StudentPortalPaymentMethod} from \"../model/StudentPortalPaymentMethod\";\r\nimport {LocationWithAddressDto} from \"../model/LocationWithAddressDto\";\r\n\r\nexport default class PaymentControllerModal implements Ng1Controller {\r\n\r\n private model: StudentPortalPaymentRequestDto;\r\n private balance: StudentBalanceStatusDto;\r\n private transactionResult: TransactionPublicDto;\r\n private mailingAddress: LocationWithAddressDto;\r\n\r\n $onInit(): void {\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private toaster: any,\r\n private $spinner: SpinnerService,\r\n private $api: ApiService,\r\n private $state: StateService,\r\n private $uibModalInstance: any,\r\n private session: StudentPortalSessionDto,\r\n private student: StudentPortalStudentDto) {\r\n\r\n this.$api.post('studentPortal/balance', {\r\n session: this.session,\r\n student: this.student\r\n })\r\n .then(result => {\r\n this.balance = result.data;\r\n });\r\n\r\n\r\n this.$api.get('studentPortal/mailingAddress')\r\n .then(result => {\r\n this.mailingAddress = result.data;\r\n });\r\n\r\n }\r\n\r\n setPaymentMethod = (method: StudentPortalPaymentMethod) => {\r\n this.model = new StudentPortalPaymentRequestDto();\r\n this.model.amount = this.balance.balanceDue;\r\n this.model.method = method;\r\n\r\n if (this.balance.discountPayInFullAvailable)\r\n this.model.amount = this.balance.balancePayInFull;\r\n\r\n if (method == StudentPortalPaymentMethod.Check && this.balance.discountCashAvailable) {\r\n this.model.amount = this.balance.balancePayInFullCash;\r\n }\r\n }\r\n\r\n submit = (form) => {\r\n if (form.$invalid) return;\r\n this.$spinner.show('Processing');\r\n this.model.session = this.session;\r\n this.model.student = this.student;\r\n this.$api.post('studentPortal/payment', this.model)\r\n .then(r => {\r\n this.transactionResult = r.data;\r\n if (this.transactionResult.resultAccepted)\r\n this.$uibModalInstance.close(this.transactionResult);\r\n })\r\n .catch(e => {\r\n this.transactionResult = new TransactionPublicDto();\r\n if (e.data && e.data.message)\r\n this.transactionResult.lastError = e.data.message;\r\n else\r\n this.transactionResult.lastError = e.data;\r\n })\r\n .finally(() => this.$spinner.hide());\r\n };\r\n\r\n cancel = () => {\r\n this.$uibModalInstance.dismiss('Cancelled');\r\n }\r\n}\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Enum.MessageSender\r\nexport enum MessageSender {\r\n \r\n Unknown = 0,\r\n Student = 1,\r\n Instructor = 2\r\n}\r\n","import {Ng1Controller, Transition, TargetState, StateService} from \"@uirouter/angularjs\";\r\nimport {ITimeoutService} from \"angular\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {TransactionPublicDto} from \"../model/TransactionPublicDto\";\r\n\r\nexport default class ReceiptControllerModal implements Ng1Controller {\r\n\r\n private transactions: TransactionPublicDto[];\r\n\r\n $onInit(): void {\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private toaster: any,\r\n private $spinner: SpinnerService,\r\n private $api: ApiService,\r\n private $state: StateService,\r\n private $uibModalInstance: any,\r\n private session: StudentPortalSessionDto,\r\n private student: StudentPortalStudentDto,\r\n private transactionId: number) {\r\n\r\n this.$api.post('studentPortal/transactions', {\r\n session: this.session,\r\n student: this.student\r\n })\r\n .then(result => {\r\n this.transactions = result.data;\r\n });\r\n\r\n }\r\n\r\n get transaction() {\r\n if (!this.transactions) return;\r\n return this.transactions.filter(x => x.id == this.transactionId)[0];\r\n }\r\n\r\n close = () => {\r\n this.$uibModalInstance.close();\r\n }\r\n}\r\n","import {Ng1Controller, Transition, TargetState, StateService} from \"@uirouter/angularjs\";\r\nimport {IAngularEvent, IQService, ITimeoutService} from \"angular\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {StudentClassroomStatusDto} from \"../model/StudentClassroomStatusDto\";\r\nimport {LocationDto} from \"../model/LocationDto\";\r\nimport {ClassPublicDto} from \"../model/ClassPublicDto\";\r\nimport {StudentPortalResponseDto} from \"../model/StudentPortalResponseDto\";\r\n\r\nexport default class StudentPortalClassroomScheduler implements Ng1Controller {\r\n private records: StudentClassroomStatusDto[] = [];\r\n private locations: LocationDto[];\r\n private locationSelected: number[];\r\n private schedule: ClassPublicDto[] = [];\r\n\r\n private filter = {isCompleted: false, isScheduledOther: false}\r\n\r\n $onInit(): void {\r\n this.refresh(null);\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $q: IQService,\r\n private toaster: any,\r\n private $spinner: SpinnerService,\r\n private $api: ApiService,\r\n private $state: StateService,\r\n private $uibModalInstance: any,\r\n private session: StudentPortalSessionDto,\r\n private student: StudentPortalStudentDto) {\r\n\r\n }\r\n\r\n refresh = (scrollTarget: Element) => {\r\n let dto = {\r\n session: this.session,\r\n student: this.student\r\n };\r\n this.$api.post(`studentPortal/class/status`, dto)\r\n .then(r => {\r\n this.records = r.data;\r\n if (!this.locationSelected || !this.locationSelected.length) {\r\n if (this.records) {\r\n let f = this.records\r\n .filter(i => i.location)\r\n .map(i => i.location.id);\r\n this.locationSelected = [...new Set(f)];\r\n }\r\n }\r\n this.refreshSchedule(scrollTarget);\r\n })\r\n\r\n this.$api.get(`public/studentType/${this.student.studentType.id}/locations`)\r\n .then(r => this.locations = r.data);\r\n\r\n }\r\n\r\n refreshSchedule = (scrollTarget: Element) => {\r\n this.$spinner.show('Refreshing Schedule');\r\n let result: ClassPublicDto[] = [];\r\n let promises = this.locationSelected.map(locationId => {\r\n return this.$api.get(`public/studentType/${this.student.studentType.id}/location/${locationId}/schedule`)\r\n .then(r => {\r\n let now = new Date();\r\n let data = r.data.filter(cls => cls.classStart > now);\r\n\r\n data.forEach(cls => {\r\n cls[\"isScheduled\"] = false;\r\n cls[\"isScheduledOther\"] = false;\r\n cls[\"isCompleted\"] = false;\r\n\r\n var x = this.records.filter(i => i.classId == cls.id)[0];\r\n if (x) {\r\n cls[\"isScheduled\"] = true;\r\n cls[\"isCompleted\"] = x.completed;\r\n cls[\"status\"] = x.completed ? 'Completed' : 'Scheduled';\r\n cls[\"schedule\"] = x;\r\n return;\r\n }\r\n x = this.records.filter(i => i.classId && i.classNumberStr == cls.classNumber)[0];\r\n if (x) {\r\n cls[\"isScheduledOther\"] = true;\r\n cls[\"isCompleted\"] = x.completed;\r\n cls[\"status\"] = x.completed ? 'Completed' : 'ScheduledOther';\r\n cls[\"schedule\"] = x;\r\n return;\r\n }\r\n })\r\n\r\n result.push(...data);\r\n })\r\n });\r\n this.$q.all(promises).then(() => {\r\n this.schedule = result;\r\n })\r\n .finally(() => {\r\n this.$spinner.hide();\r\n this.$timeout(() => {\r\n if (scrollTarget)\r\n scrollTarget.scrollIntoView({behavior: \"smooth\"});\r\n })\r\n });\r\n }\r\n\r\n scheduleChange = (cls: ClassPublicDto, method: string, scrollTarget: JQuery) => {\r\n this.$spinner.show('Updating Schedule');\r\n let dto = {\r\n session: this.session,\r\n student: this.student,\r\n class: cls\r\n };\r\n this.$api.post(`studentPortal/class/schedule/${method}`, dto)\r\n .then(r => {\r\n if (r.data.error) this.toaster.error(r.data.error);\r\n if (r.data.message) this.toaster.success(r.data.message);\r\n return this.refresh(scrollTarget[0]);\r\n })\r\n .catch(this.$api.defaultErrorHandler)\r\n .finally(() => this.$spinner.hide());\r\n }\r\n\r\n close = () => {\r\n this.$uibModalInstance.close();\r\n }\r\n}\r\n","import {Ng1Controller, Transition, TargetState, StateService} from \"@uirouter/angularjs\";\r\nimport {IQService, ITimeoutService} from \"angular\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {StudentPortalClassInfoDto} from \"../model/StudentPortalClassInfoDto\";\r\nimport {popWindow} from \"../directive/Popout\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport StorageService = ngStorage.StorageService;\r\n\r\nexport default class StudentPortalVirtualJoin implements Ng1Controller {\r\n private classes: StudentPortalClassInfoDto[] = [];\r\n\r\n $onInit(): void {\r\n this.refresh();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $q: IQService,\r\n private toaster: any,\r\n private $spinner: SpinnerService,\r\n private $api: ApiService,\r\n private $localStorage: StorageService,\r\n private $state: StateService,\r\n private $uibModalInstance: any,\r\n private session: StudentPortalSessionDto,\r\n private student: StudentPortalStudentDto) {\r\n }\r\n\r\n refresh = () => {\r\n this.$spinner.show('Loading Schedule');\r\n let dto = {\r\n session: this.session,\r\n student: this.student\r\n };\r\n var promise = this.$api.post(`studentPortal/class/schedule/virtual`, dto);\r\n promise\r\n .then(r => {\r\n this.classes = r.data;\r\n })\r\n .catch(e => {\r\n this.close();\r\n })\r\n .finally(() => this.$spinner.hide());\r\n return promise;\r\n }\r\n\r\n\r\n join = (row: StudentPortalClassInfoDto) => {\r\n if (!this.student.contractSigned) {\r\n alert('Please sign & submit contract before joining virtual classroom');\r\n return;\r\n }\r\n this.$localStorage.virtualClassroomStudent = this.student;\r\n this.$localStorage.virtualClassroomJoinClass = row;\r\n let href = this.$state.href('public.virtualClassroom')\r\n popWindow(href, 'virtualClassroom');\r\n this.close();\r\n }\r\n\r\n close = () => {\r\n this.$uibModalInstance.close();\r\n }\r\n}\r\n","import {Ng1Controller, Transition, TargetState, StateService} from \"@uirouter/angularjs\";\r\nimport {IFormController, IHttpService, ILocationService, ITimeoutService} from \"angular\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport PaymentControllerModal from \"./PaymentControllerModal\";\r\nimport {chain} from \"lodash\";\r\nimport {TransactionPublicDto} from \"../model/TransactionPublicDto\";\r\nimport ReceiptControllerModal from \"./ReceiptControllerModal\";\r\nimport StudentPortalClassroomScheduler from \"./StudentPortalClassroomScheduler\";\r\nimport StudentPortalVirtualJoin from \"./StudentPortalVirtualJoin\";\r\n\r\nexport default class StudentPortalController implements Ng1Controller {\r\n private students: StudentPortalStudentDto[];\r\n\r\n\r\n $onInit(): void {\r\n this.refresh();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $location: ILocationService,\r\n private $http: IHttpService,\r\n private $api: ApiService,\r\n private $localStorage: ngStorage.StorageService,\r\n private $spinner: SpinnerService,\r\n private toaster: any,\r\n private $uibModal: any,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n\r\n\r\n }\r\n\r\n get session() {\r\n if (!this.$localStorage.studentLoginSession) {\r\n this.$localStorage.studentLoginSession = new StudentPortalSessionDto();\r\n }\r\n return this.$localStorage.studentLoginSession;\r\n }\r\n\r\n get debugMode() {\r\n return this.$localStorage.studentPortalDebugMode || this.$location.search().debug;\r\n }\r\n\r\n get demoMode() {\r\n return this.$localStorage.studentPortalDemoMode || this.$location.search().demo;\r\n }\r\n\r\n set session(value) {\r\n this.$localStorage.studentLoginSession = value;\r\n }\r\n\r\n login = (formController: IFormController) => {\r\n if (formController && formController.$invalid) return;\r\n this.$spinner.show();\r\n this.$api.post('studentPortal/login', this.session)\r\n .then(r => {\r\n this.session = r.data;\r\n this.refreshStudents();\r\n })\r\n .catch(e => {\r\n console.error(e);\r\n this.session = null;\r\n })\r\n .finally(() => this.$spinner.hide())\r\n };\r\n\r\n logout = () => {\r\n this.$api.post('studentPortal/logout', this.session);\r\n this.session = null;\r\n this.students = null;\r\n };\r\n\r\n refresh = () => {\r\n if (!this.session.valid && !this.demoMode) return;\r\n this.$spinner.show();\r\n let url = `studentPortal/session`;\r\n if (this.demoMode)\r\n url = url + '?demo=true'\r\n this.$api.post(url, this.session)\r\n .then(r => {\r\n this.session = r.data;\r\n this.refreshStudents();\r\n })\r\n .catch(() => {\r\n this.session = null;\r\n })\r\n .finally(() => this.$spinner.hide());\r\n\r\n };\r\n\r\n refreshStudents = () => {\r\n if (!this.session.valid) return;\r\n this.$spinner.show();\r\n this.$api.post(`studentPortal/students`, this.session)\r\n .then(r => {\r\n this.students = r.data;\r\n if (!this.studentSelected) {\r\n this.studentIdSelected = chain(this.students).orderBy(['id'], ['desc']).head().value().id;\r\n }\r\n })\r\n .finally(() => this.$spinner.hide());\r\n };\r\n\r\n payment = () => {\r\n let student = this.studentSelected;\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./Payment.html'),\r\n controller: PaymentControllerModal,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n resolve: {\r\n session: () => this.session,\r\n student: () => student\r\n }\r\n }).result.then((result: TransactionPublicDto) => {\r\n this.refreshStudents();\r\n this.receipt(student, result.id)\r\n })\r\n .catch(reason => {\r\n console.info('payment modal dismissed', reason);\r\n });\r\n }\r\n\r\n receipt = (student: StudentPortalStudentDto, id: number) => {\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./Receipt.html'),\r\n controller: ReceiptControllerModal,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n resolve: {\r\n session: () => this.session,\r\n student: () => student,\r\n transactionId: () => id\r\n }\r\n });\r\n }\r\n\r\n\r\n openVirtualClassroom = () => {\r\n if (!this.studentSelected.contractSigned) {\r\n alert('Please sign & submit contract before joining virtual classroom');\r\n return;\r\n }\r\n\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./StudentPortalVirtualJoin.html'),\r\n controller: StudentPortalVirtualJoin,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n size: 'lg',\r\n resolve: {\r\n session: () => this.session,\r\n student: () => this.studentSelected,\r\n }\r\n }).result\r\n .catch(e => {\r\n })\r\n .finally(() => this.refresh());\r\n }\r\n\r\n openScheduler = () => {\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./StudentPortalClassroomScheduler.html'),\r\n controller: StudentPortalClassroomScheduler,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n size: 'lg',\r\n resolve: {\r\n session: () => this.session,\r\n student: () => this.studentSelected,\r\n }\r\n }).result\r\n .catch(e => {\r\n })\r\n .finally(() => this.refresh());\r\n }\r\n\r\n get studentIdSelected() {\r\n return this.$localStorage.studentPortalStudentIdSelected;\r\n }\r\n\r\n set studentIdSelected(value: number) {\r\n this.$localStorage.studentPortalStudentIdSelected = value;\r\n }\r\n\r\n get studentSelected() {\r\n if (!this.students) return null;\r\n return this.students.filter(i => i.id == this.studentIdSelected)[0];\r\n }\r\n}\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Entity.VirtualClassParticipantVideoPlayback\r\nexport class VirtualClassParticipantVideoPlayback {\r\n public url: string = null;\r\n public currentTimestamp: number = null;\r\n public status: string = null;\r\n public readyState: number = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Enum.FormQuestionType\r\nexport enum FormQuestionType {\r\n \r\n ShortAnswer = 0,\r\n LongAnswer = 1,\r\n TrueFalse = 2,\r\n YesNo = 3,\r\n SingleChoice = 4,\r\n MultipleChoice = 5,\r\n WordBank = 6,\r\n Signature = 7,\r\n Date = 8,\r\n PhoneNumber = 9\r\n}\r\n","import * as angular from 'angular';\r\nimport {IHttpService, IIntervalService, ILocationService, IScope, ITimeoutService, IWindowService} from 'angular';\r\nimport {Ng1Controller, StateService, TargetState, Transition} from \"@uirouter/angularjs\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {StudentPortalClassInfoDto} from \"../model/StudentPortalClassInfoDto\";\r\nimport {Janus} from 'janus-gateway';\r\nimport {VirtualClassHubService} from \"../modules/HubModule\";\r\nimport {VirtualClassDto} from \"../model/VirtualClassDto\";\r\nimport {VirtualClassParticipantPublicDto} from \"../model/VirtualClassParticipantPublicDto\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {StudentPhotoUploadDto} from \"../model/StudentPhotoUploadDto\";\r\nimport {VirtualClassMode} from \"../model/VirtualClassMode\";\r\nimport {StudentPortalCertificateRequestDto} from \"../model/StudentPortalCertificateRequestDto\";\r\nimport {VirtualClassParticipantDto} from \"../model/VirtualClassParticipantDto\";\r\nimport {UserAgentDto} from \"../model/UserAgentDto\";\r\nimport {LoggerService} from \"../modules/LoggerModule\";\r\nimport {VirtualClassVideoPlayback} from \"../model/VirtualClassVideoPlayback\";\r\nimport {VirtualClassParticipantVideoPlayback} from \"../model/VirtualClassParticipantVideoPlayback\";\r\nimport {throttle} from \"lodash\";\r\nimport {VirtualClassParticipantMessageDto} from \"../model/VirtualClassParticipantMessageDto\";\r\nimport {MessageSender} from \"../model/MessageSender\";\r\nimport {VirtualClassType} from \"../model/VirtualClassType\";\r\n\r\nexport default class VirtualClassroomController implements Ng1Controller {\r\n private static badCameraStrings = ['YouCam', 'XSplit', 'OBS Virtual', 'Mock video'];\r\n private classes: StudentPortalClassInfoDto[];\r\n private endpoints: string[];\r\n private janusConnected: boolean;\r\n private janus: Janus;\r\n private videoPlayer: JQuery;\r\n private pluginHandles: any = {};\r\n private participants: VirtualClassParticipantPublicDto[] = [];\r\n private virtualClass: VirtualClassDto;\r\n private participantSelf: VirtualClassParticipantDto;\r\n private browser: string;\r\n private devices: MediaDeviceInfo[] = [];\r\n private cameraStream: MediaStream;\r\n private userMediaError: any;\r\n private cameraStreamValid: boolean;\r\n private classSelected: StudentPortalClassInfoDto;\r\n private cameraSelfHide: boolean = true;\r\n private fullscreen: boolean;\r\n private photos: StudentPhotoUploadDto[]\r\n private canvas: JQuery;\r\n private certRequest: StudentPortalCertificateRequestDto;\r\n private attendanceSignatureRequired: boolean;\r\n private userAgentResult: UserAgentDto;\r\n private videoPlayback: VirtualClassVideoPlayback;\r\n private messages: VirtualClassParticipantMessageDto[] = [];\r\n private chatVisible: boolean;\r\n private chatContainer: JQuery;\r\n private soundMessageReceive: JQuery;\r\n private handRaisedUpdating: boolean;\r\n private muteUpdating: boolean;\r\n private leaving: boolean;\r\n private cameraPauseCount = 0;\r\n private slowLinkCount = 0;\r\n private slowLinkToast: any;\r\n private connectionToast: any;\r\n private cameraPauseTimer: angular.IPromise;\r\n private cameraMediaStateTimer: angular.IPromise;\r\n\r\n $onInit(): void {\r\n this.refresh();\r\n this.$virtualClassHub.start();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n try {\r\n this.cameraStream.getTracks().forEach(track => {\r\n track.onmute = null;\r\n track.onended = null;\r\n track.stop();\r\n });\r\n } catch {\r\n }\r\n this.$window.removeEventListener('focus', this.focusHandler);\r\n this.$window.removeEventListener('blur', this.focusHandler);\r\n this.$window.removeEventListener('pagehide', this.pageHideHandler);\r\n\r\n try {\r\n this.$virtualClassHub.stop();\r\n } catch {\r\n }\r\n\r\n try {\r\n if (this.janus) this.janus.destroy();\r\n } catch {\r\n }\r\n return true;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $interval: IIntervalService,\r\n private $http: IHttpService,\r\n private $location: ILocationService,\r\n private $window: IWindowService,\r\n private $api: ApiService,\r\n private $localStorage: ngStorage.StorageService,\r\n private $sessionStorage: ngStorage.StorageService,\r\n private $spinner: SpinnerService,\r\n private $virtualClassHub: VirtualClassHubService,\r\n private $logger: LoggerService,\r\n private toaster: any,\r\n private $uibModal: any,\r\n private $scope: IScope,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n\r\n this.$logger.logHandler = (severity, messages) => {\r\n if (!this.$virtualClassHub.isConnected) return;\r\n this.$virtualClassHub.log(severity, messages);\r\n };\r\n\r\n this.$api.get('janus/endpoint')\r\n .then(r => {\r\n this.endpoints = r.data;\r\n this.janusInit();\r\n });\r\n\r\n this.$virtualClassHub.onDisconnected(() => {\r\n console.error('$virtualClassHub disconnected');\r\n this.virtualClass = null;\r\n this.toaster.clear(this.connectionToast);\r\n this.connectionToast = this.toaster.pop({\r\n type: 'error',\r\n title: 'Connection Interrupted',\r\n body: 'Attempting to reconnect...',\r\n timeout: 0\r\n });\r\n });\r\n this.$virtualClassHub.onReconnecting(() => {\r\n console.error('$virtualClassHub reconnecting');\r\n this.virtualClass = null;\r\n this.toaster.clear(this.connectionToast);\r\n this.connectionToast = this.toaster.pop({\r\n type: 'error',\r\n title: 'Connection Interrupted',\r\n body: 'Attempting to reconnect...',\r\n timeout: 0\r\n });\r\n });\r\n this.$virtualClassHub.onReconnected(() => {\r\n console.info('$virtualClassHub reconnected');\r\n this.toaster.clear(this.connectionToast);\r\n this.connectionToast = this.toaster.success('Reconnected');\r\n });\r\n this.$virtualClassHub.onConnectionSlow(() => {\r\n this.$logger.error('$virtualClassHub slow connection');\r\n this.toaster.clear(this.connectionToast);\r\n this.connectionToast = this.toaster.pop({\r\n type: 'error',\r\n title: 'Really Slow Connection',\r\n body: 'Please check your internet connection. You may experience problems or disconnections.',\r\n timeout: 0\r\n });\r\n });\r\n\r\n this.$virtualClassHub.onConnected(() => {\r\n this.toaster.clear(this.connectionToast);\r\n this.refresh();\r\n });\r\n this.$virtualClassHub.bindAllParticipant(() => this.participants);\r\n\r\n this.$virtualClassHub.bindAllMessage(() => this.messages);\r\n this.$virtualClassHub.onMessageUpdated(msg => {\r\n if (!msg.read)\r\n try {\r\n this.soundMessageReceive[0].play();\r\n } catch {\r\n }\r\n })\r\n this.$virtualClassHub.onMessageUpdated(msg => {\r\n if (!msg.delivered && msg.sender == MessageSender.Instructor) {\r\n this.$virtualClassHub.messageDelivered(msg.id);\r\n this.chatVisible = true;\r\n }\r\n $timeout(() => {\r\n if (!this.chatContainer) return;\r\n let e = this.chatContainer[0];\r\n if (!e) return;\r\n e.scrollTop = e.scrollHeight;\r\n });\r\n });\r\n\r\n this.$virtualClassHub.onClassUpdated(vc => {\r\n if (!vc.classInProgress) {\r\n this.goHome('Virtual Class has ended', true);\r\n return;\r\n }\r\n let oldVc = this.virtualClass\r\n this.virtualClass = vc;\r\n if (!oldVc || oldVc.roomId != vc.roomId) {\r\n this.participants = [];\r\n this.janusConnect();\r\n }\r\n\r\n if (vc.mode == VirtualClassMode.AttendanceSignature ||\r\n vc.mode == VirtualClassMode.AttendanceAndCertificate) {\r\n this.$virtualClassHub.attendanceSignatureRequired()\r\n .then(r => this.attendanceSignatureRequired = r);\r\n } else {\r\n this.attendanceSignatureRequired = null;\r\n }\r\n\r\n\r\n if (vc.mode == VirtualClassMode.AttendanceAndCertificate) {\r\n if (!this.certRequest)\r\n this.$virtualClassHub.certificateRequest()\r\n .then(r => this.certRequest = r);\r\n } else {\r\n this.certRequest = null;\r\n }\r\n\r\n this.updateBitrate();\r\n\r\n this.videoPlayback = vc.videoPlayback;\r\n this.videoPlayerSyncState(true);\r\n\r\n });\r\n this.$virtualClassHub.onParticipantSelfUpdated(arg => {\r\n if (!this.leaving) {\r\n if (arg.reasonRemoved) {\r\n this.goHome('Removed: ' + arg.reasonRemoved, true);\r\n return;\r\n } else if (arg.reasonDisconnected) {\r\n this.goHome(arg.reasonDisconnected, true);\r\n return;\r\n }\r\n }\r\n this.participantSelf = arg;\r\n this.updateBitrate();\r\n });\r\n this.$virtualClassHub.onParticipantSelfRemoved(arg => {\r\n if (arg.reasonRemoved)\r\n this.goHome('Removed: ' + arg.reasonRemoved, true);\r\n else\r\n this.goHome(arg.reasonDisconnected, true);\r\n });\r\n\r\n window.maximize();\r\n window.onFullScreenChange(isFullScreen => {\r\n this.$timeout(() => {\r\n this.fullscreen = isFullScreen;\r\n this.fullScreenHandler(isFullScreen);\r\n });\r\n });\r\n\r\n $window.addEventListener('focus', this.focusHandler);\r\n $window.addEventListener('blur', this.focusHandler);\r\n $window.addEventListener('pagehide', this.pageHideHandler);\r\n // $window.addEventListener('visibilitychange', this.pageHideHandler);\r\n\r\n $interval(this.checkMediaTracks, 5000);\r\n }\r\n\r\n goHome(reason: string, saveReason: boolean) {\r\n if (saveReason)\r\n this.$localStorage.virtualClassroomDisconnectedReason = reason;\r\n this.$logger.log('goHome', reason);\r\n this.$spinner.show('Leaving');\r\n this.leaving = true;\r\n this.$virtualClassHub.leave(reason)\r\n .finally(() => {\r\n try {\r\n window.close();\r\n } catch {\r\n }\r\n this.$state.go('public.virtualClassroomDisconnected', {message: reason}, {reload: true});\r\n this.$spinner.hide();\r\n });\r\n }\r\n\r\n handleError = (error) => {\r\n if (!error) return;\r\n try {\r\n let msg = error.message || error.toString();\r\n if (msg.indexOf('Connection started reconnecting') >= 0 ||\r\n msg.indexOf('Operation was cancelled') >= 0) {\r\n console.error('Ignored', error);\r\n return;\r\n }\r\n\r\n if (msg.indexOf('Too late to join') >= 0) {\r\n this.goHome(msg, true);\r\n return;\r\n }\r\n\r\n if (msg.indexOf('Participant not found') >= 0 ||\r\n msg.indexOf('Session expired') >= 0 ||\r\n msg.indexOf('not valid for this session') >= 0) {\r\n this.goHome(msg, false);\r\n return;\r\n }\r\n console.debug('unhandled error', error);\r\n this.toaster.error(msg);\r\n } catch (e) {\r\n console.error(e);\r\n this.toaster.error(error);\r\n }\r\n }\r\n\r\n\r\n get session(): StudentPortalSessionDto {\r\n if (!this.$localStorage.studentLoginSession) {\r\n this.goHome('Invalid Session', false);\r\n }\r\n return this.$localStorage.studentLoginSession;\r\n }\r\n\r\n set session(value) {\r\n this.$localStorage.studentLoginSession = value;\r\n }\r\n\r\n get student(): StudentPortalStudentDto {\r\n if (!this.$localStorage.virtualClassroomStudent) {\r\n this.goHome('Invalid Session', false);\r\n }\r\n return this.$localStorage.virtualClassroomStudent;\r\n }\r\n\r\n set student(value: StudentPortalStudentDto) {\r\n this.$localStorage.virtualClassroomStudent = value;\r\n }\r\n\r\n get debugMode() {\r\n return this.$localStorage.studentPortalDebugMode || this.$location.search().debug;\r\n }\r\n\r\n get demoMode() {\r\n return this.$localStorage.studentPortalDemoMode || this.$location.search().demo;\r\n }\r\n\r\n get autoJoin() {\r\n return this.$localStorage.studentPortalAutoJoin || this.$location.search().autoJoin;\r\n }\r\n\r\n get videoDeviceId() {\r\n return this.$localStorage.videoDeviceId || null;\r\n }\r\n\r\n set videoDeviceId(value) {\r\n this.$localStorage.videoDeviceId = value;\r\n }\r\n\r\n get audioDeviceId() {\r\n return this.$localStorage.audioDeviceId || null;\r\n }\r\n\r\n set audioDeviceId(value) {\r\n this.$localStorage.audioDeviceId = value;\r\n }\r\n\r\n get audioOutputDeviceId() {\r\n return this.$localStorage.audioOutputDeviceId || 'default';\r\n }\r\n\r\n set audioOutputDeviceId(value) {\r\n this.$localStorage.audioOutputDeviceId = value;\r\n }\r\n\r\n getUserMedia() {\r\n try {\r\n let oldStream = this.cameraStream;\r\n this.cameraStream = null;\r\n this.shareCamera();\r\n if (oldStream)\r\n oldStream.getTracks().forEach(track => {\r\n track.onmute = null;\r\n track.onended = null;\r\n track.stop();\r\n });\r\n } catch (e) {\r\n this.$logger.error(e);\r\n }\r\n\r\n this.cameraStreamValid = false;\r\n this.userMediaError = null;\r\n\r\n let width = 640;\r\n let height = 480;\r\n let frameRate = 30;\r\n if (this.cameraPauseCount >= 1) {\r\n width = 320;\r\n height = 240;\r\n }\r\n if (this.cameraPauseCount >= 2) {\r\n frameRate = 15;\r\n }\r\n if (this.cameraPauseCount >= 3) {\r\n frameRate = 10;\r\n }\r\n if (this.cameraPauseCount >= 4) {\r\n frameRate = 5;\r\n }\r\n let constraints: MediaStreamConstraints = {\r\n video: {\r\n deviceId: this.videoDeviceId,\r\n height: {ideal: height},\r\n width: {ideal: width},\r\n frameRate: {ideal: frameRate}\r\n },\r\n audio: {\r\n deviceId: this.audioDeviceId,\r\n sampleSize: 16,\r\n channelCount: 1\r\n }\r\n };\r\n this.$logger.debug('getUserMedia', constraints);\r\n navigator.mediaDevices.getUserMedia(constraints)\r\n .then(stream => {\r\n\r\n if (this.cameraPauseTimer) {\r\n this.$timeout.cancel(this.cameraPauseTimer);\r\n this.cameraPauseTimer = null;\r\n }\r\n\r\n this.$timeout(() => {\r\n this.cameraStream = stream;\r\n this.cameraStreamValid = stream.getVideoTracks().length > 0 && stream.getAudioTracks().length > 0;\r\n if (!this.cameraStreamValid) return;\r\n let videoTrack = stream.getVideoTracks()[0];\r\n let label = videoTrack.label;\r\n this.$logger.debug(`getUserMedia received track label: ${label} with settings`, videoTrack.getSettings());\r\n\r\n // validate camera is not one of the 'bad cameras' e.g. software cams\r\n if (!this.debugMode && label) {\r\n for (var str of VirtualClassroomController.badCameraStrings) {\r\n let index = label.toLowerCase().indexOf(str.toLowerCase())\r\n if (index >= 0) {\r\n this.cameraStreamValid = false;\r\n this.cameraStream = null;\r\n this.userMediaError = {\r\n name: 'InvalidCameraType',\r\n message: `Cannot use ${str}`\r\n };\r\n return;\r\n }\r\n }\r\n }\r\n videoTrack.onended = () => {\r\n this.$logger.log('videoTrack.onended');\r\n this.goHome('Camera Disconnected', true);\r\n };\r\n videoTrack.onmute = e => {\r\n // camera pause could be user initiated or by browser\r\n // if it's the browser, it might be a resource constraint.\r\n // retry with lower quality settings\r\n this.cameraPauseCount++;\r\n this.$logger.log(`cameraPauseCount now ${this.cameraPauseCount}. enabled is ${videoTrack.enabled}`);\r\n this.$timeout(() => {\r\n this.getUserMedia();\r\n });\r\n\r\n // kick student if camera doesn't come back within 15s\r\n this.cameraPauseTimer = this.$timeout(() => {\r\n this.goHome('Camera Error', true);\r\n }, 15000);\r\n };\r\n let audioTrack = stream.getAudioTracks()[0];\r\n audioTrack.onended = () => this.goHome('Microphone Disconnected', true);\r\n\r\n if (this.virtualClass) {\r\n this.shareCamera();\r\n }\r\n });\r\n })\r\n .catch(e => {\r\n this.$timeout(() => {\r\n this.videoDeviceId = null;\r\n this.audioDeviceId = null;\r\n this.userMediaError = e;\r\n this.$logger.error(e, e.name, e.message);\r\n if (this.cameraPauseCount > 0 && this.virtualClass) {\r\n this.goHome('Camera Paused', true);\r\n }\r\n });\r\n })\r\n // always enumerate devices; it will fail if permissions is denied\r\n .finally(() => {\r\n navigator.mediaDevices.enumerateDevices().then(devices => {\r\n this.$timeout(() => {\r\n this.devices = devices;\r\n this.$logger.debug('enumerateDevices', devices);\r\n });\r\n }).catch(e => this.$logger.error('enumerateDevices error', e));\r\n });\r\n }\r\n\r\n checkMediaTracks = () => {\r\n if (this.cameraStream) {\r\n this.cameraStream.getTracks().forEach(track => {\r\n if (!track.enabled) {\r\n this.$logger.log(`track ${track.id} ${track.label} was disabled.. enabling`);\r\n track.enabled = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n refresh = () => {\r\n if (!this.$virtualClassHub.isConnected) return;\r\n\r\n if (this.demoMode) {\r\n if (!this.$sessionStorage.demoSession) {\r\n this.$virtualClassHub.getDemoSession()\r\n .then(r => {\r\n this.session = r;\r\n this.$sessionStorage.demoSession = true;\r\n this.refresh();\r\n })\r\n return;\r\n }\r\n if (!this.$sessionStorage.demoStudent) {\r\n this.$virtualClassHub.getDemoStudent(this.session)\r\n .then(r => {\r\n this.student = r;\r\n this.$sessionStorage.demoStudent = true;\r\n this.refresh();\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (!this.session.valid) return;\r\n\r\n // \"request desktop website\" will change the user-agent to something that looks like a desktop\r\n // cache the first user agent string and use that for parsing\r\n // because we're trying to ban mobile devices\r\n if (!this.$localStorage.originalUserAgent)\r\n this.$localStorage.originalUserAgent = navigator.userAgent;\r\n this.$virtualClassHub.userAgentCheck(this.$localStorage.originalUserAgent)\r\n .then(r => {\r\n this.userAgentResult = r;\r\n if (r.virtualClassAllowed && !this.cameraStreamValid)\r\n this.getUserMedia();\r\n });\r\n\r\n this.$spinner.show('Refreshing Schedule');\r\n this.$virtualClassHub.schedule(this.session, this.student)\r\n .then(r => {\r\n this.classes = r.filter(i => i.virtualClassType == VirtualClassType.Myers);\r\n\r\n if (this.autoJoin) {\r\n this.$timeout(() => {\r\n if (this.classes.length)\r\n this.join(this.classes.filter(i => i.number == \"DEMO\")[0]);\r\n }, 5000);\r\n }\r\n })\r\n .catch(this.handleError)\r\n .finally(() => this.$spinner.hide());\r\n\r\n if (this.classSelected)\r\n this.join(this.classSelected);\r\n };\r\n\r\n join = (cls: StudentPortalClassInfoDto) => {\r\n if (this.videoPlayer) {\r\n // hack for mobile safari to enable auto-play of videos:\r\n // unmute on a user gesture (the join button)\r\n this.videoPlayer[0].muted = false;\r\n }\r\n\r\n this.$localStorage.virtualClassroomJoinClass = null;\r\n this.classSelected = cls;\r\n this.$spinner.show('Joining Class');\r\n this.$virtualClassHub.join(this.session, this.student, cls)\r\n .then(() => {\r\n this.photoRequiredRefresh();\r\n })\r\n .catch(this.handleError)\r\n .finally(() => this.$spinner.hide());\r\n\r\n // full screen request must be inside a user-gesture handler\r\n if (!this.debugMode && !this.demoMode) {\r\n try {\r\n window.enterFullScreen();\r\n } catch (e) {\r\n this.$logger.error(e);\r\n }\r\n }\r\n };\r\n\r\n handRaisedToggle = (raised) => {\r\n this.handRaisedUpdating = true;\r\n let dto = angular.copy(this.participantSelf);\r\n dto.handRaised = raised;\r\n this.$virtualClassHub.update(dto)\r\n .catch(this.handleError)\r\n .finally(() => {\r\n this.$timeout(() => this.handRaisedUpdating = false, 5000);\r\n });\r\n };\r\n\r\n janusInit = () => {\r\n Janus.init({\r\n debug: false,\r\n dependencies: Janus.useDefaultDependencies(),\r\n callback: () => {\r\n this.$logger.log('janus initialized');\r\n this.browser = Janus.webRTCAdapter.browserDetails.browser;\r\n }\r\n });\r\n };\r\n\r\n\r\n janusConnect = () => {\r\n try {\r\n if (this.janus) this.janus.destroy();\r\n } catch (e) {\r\n this.$logger.error('error destroying old janus', e);\r\n }\r\n this.janusConnected = false;\r\n this.$logger.debug('janus connecting');\r\n this.$spinner.show('Connecting');\r\n this.janus = new Janus({\r\n server: this.endpoints,\r\n success: () => {\r\n this.$logger.debug('janus connected');\r\n this.$spinner.hide();\r\n this.$scope.$apply(() => {\r\n this.janusConnected = true;\r\n });\r\n this.shareCamera();\r\n },\r\n error: (cause) => {\r\n this.$logger.error('janus connection error', cause);\r\n this.$spinner.hide();\r\n this.janus.destroy();\r\n this.$spinner.show('Reconnecting');\r\n this.$timeout(() => {\r\n this.$spinner.hide();\r\n this.janusConnect();\r\n }, 5000);\r\n },\r\n destroyed: () => {\r\n this.$logger.debug('janus destroyed');\r\n this.$scope.$apply(() => {\r\n this.janusConnected = false;\r\n });\r\n }\r\n }\r\n );\r\n };\r\n\r\n shareCamera = () => {\r\n this.janusPublish(\"camera\", this.cameraStream);\r\n };\r\n\r\n janusPublish = (mediaType, stream: MediaStream) => {\r\n var handle;\r\n if (this[mediaType] && this[mediaType].handle) {\r\n try {\r\n this[mediaType].handle.detach();\r\n this[mediaType].handle = null;\r\n } catch (e) {\r\n this.$logger.error('error detaching old handle', e);\r\n }\r\n }\r\n this[mediaType] = {};\r\n if (!stream) return;\r\n this.janus.attach(\r\n {\r\n plugin: \"janus.plugin.videoroom\",\r\n opaqueId: JSON.stringify({\r\n virtual: true,\r\n sessionToken: this.session.token,\r\n studentId: this.student.id,\r\n media: mediaType\r\n }),\r\n studentId: this.student.id,\r\n success: (pluginHandle) => {\r\n this[mediaType].handle = pluginHandle;\r\n // for debugging\r\n window['vcJanusHandle'] = pluginHandle;\r\n window['vcStream'] = stream;\r\n\r\n handle = pluginHandle;\r\n this.$logger.log(\"Plugin attached! (\" + handle.getPlugin() + \", handleId=\" + handle.getId() + \")\");\r\n\r\n var register = {\r\n \"request\": \"join\",\r\n \"room\": this.virtualClass.roomId,\r\n \"pin\": this.virtualClass.pin,\r\n \"ptype\": \"publisher\",\r\n \"display\": this.student.fullName\r\n };\r\n handle.send({\"message\": register});\r\n\r\n },\r\n error: (error) => {\r\n this.$logger.error(\" -- Error attaching plugin...\", error);\r\n },\r\n webrtcState: (on) => {\r\n this.$logger.log(`${mediaType} WebRTC PeerConnection is ${on ? \"up\" : \"down\"}`);\r\n this.$scope.$apply(() => {\r\n if (on) {\r\n this.$spinner.reset();\r\n } else {\r\n this.$spinner.show('Stream Reconnecting');\r\n }\r\n });\r\n\r\n },\r\n onmessage: (msg, jsep) => {\r\n //this.$logger.debug(\" ::: Got a message (publisher) :::\", msg);\r\n var event = msg[\"videoroom\"];\r\n switch (event) {\r\n case \"joined\":\r\n let sessionId = this.janus.getSessionId();\r\n let handleId = msg[\"id\"];\r\n let privateId = msg[\"private_id\"];\r\n let roomId = msg[\"room\"];\r\n this.$logger.debug(`Successfully joined sessionId:${sessionId} roomId:${roomId} handleId:${handleId} privateId:${privateId}`);\r\n\r\n handle.createOffer(\r\n {\r\n stream: stream,\r\n trickle: true,\r\n\r\n success: (jsep) => {\r\n // this.$logger.debug(\"Got publisher SDP!\");\r\n // this.$logger.debug(jsep);\r\n var publish = {\r\n \"request\": \"configure\",\r\n \"audio\": true,\r\n \"video\": true,\r\n // default bitrate to 256k; it can be updated later.\r\n bitrate: 256000\r\n };\r\n handle.send({\"message\": publish, \"jsep\": jsep});\r\n },\r\n error: (error) => {\r\n this.$logger.error(\"WebRTC error:\", error);\r\n this.$scope.$apply(() => {\r\n this.$spinner.hide();\r\n this.toaster.error(error.message);\r\n })\r\n }\r\n });\r\n\r\n break;\r\n case \"event\":\r\n if (msg[\"error\"]) {\r\n this.$logger.error(msg[\"error\"]);\r\n }\r\n break;\r\n }\r\n\r\n if (jsep !== undefined && jsep !== null) {\r\n // this.$logger.debug(\"Handling SDP as well...\");\r\n // this.$logger.debug(jsep);\r\n handle.handleRemoteJsep({jsep: jsep});\r\n }\r\n },\r\n mediaState: (type, on) => {\r\n this.$logger.debug(`${mediaType} mediaState ${type} ${on}`);\r\n this.$scope.$apply(() => {\r\n this[mediaType][type] = on;\r\n });\r\n\r\n // if the camera video stream stops, schedule a timeout to re-share the camera in 10s.\r\n // under some circumstances, the camera tracks can stop sending data without triggering\r\n // `mute` or `ended` events\r\n // simulate in console by running `vcStream.getTracks().forEach(t=>t.stop())`\r\n if (mediaType == 'camera' && type == 'video' && on == false && !this.cameraMediaStateTimer) {\r\n this.cameraMediaStateTimer = this.$timeout(() => this.getUserMedia(), 10000);\r\n } else if (mediaType == 'camera' && type == 'video' && on == true && this.cameraMediaStateTimer) {\r\n // cancel the timer if the stream came back\r\n this.$timeout.cancel(this.cameraMediaStateTimer);\r\n this.cameraMediaStateTimer = null;\r\n }\r\n },\r\n slowLink: (uplink) => {\r\n this.$logger.debug(`${mediaType} slowLink`);\r\n this.slowLinkIncrement('publisher');\r\n },\r\n oncleanup: () => {\r\n this.$logger.log(`${mediaType} cleanup`);\r\n },\r\n });\r\n };\r\n\r\n // will be called every time janus detects missing packets, indicating a slow or bad connection\r\n // show a toast while the number is above a minimum;\r\n // hide toast when it drops to zero again.\r\n slowLinkIncrement = (source: string) => {\r\n this.slowLinkCount++;\r\n // console.debug(`slowLinkIncrement ${arg} now ${this.slowLinkCount}`);\r\n if (this.slowLinkCount > 15 && !this.slowLinkToast) {\r\n this.$scope.$apply(() => {\r\n this.$logger.log('showing Slow Connection banner');\r\n this.slowLinkToast = this.toaster.pop({\r\n type: 'warning',\r\n title: 'Slow Connection',\r\n body: 'Check your WiFi signal, move closer to router, or plug in a network cable if possible.',\r\n timeout: 0,\r\n });\r\n });\r\n }\r\n\r\n this.$timeout(() => {\r\n if (this.slowLinkCount == 0) return;\r\n this.slowLinkCount--;\r\n if (this.slowLinkCount == 0 && this.slowLinkToast) {\r\n this.$logger.log('hiding Slow Connection banner');\r\n this.toaster.clear(this.slowLinkToast);\r\n this.slowLinkToast = null;\r\n }\r\n }, 30000);\r\n }\r\n\r\n getGridClass = () => {\r\n var x = this.participants.filter(x => x.videoEnabled || x.screenEnabled).length;\r\n if (this.virtualClass && this.virtualClass.currentForm) x++;\r\n if (this.videoPlayerVisible) x++;\r\n switch (x) {\r\n case 0:\r\n case 1:\r\n return 'grid-1x1';\r\n case 2:\r\n return 'grid-2x1';\r\n default:\r\n var y = Math.sqrt(x);\r\n var z = Math.ceil(y);\r\n return `grid-${z}x${z}`;\r\n }\r\n }\r\n\r\n updateBitrate = () => {\r\n if (!this[\"camera\"] || !this[\"camera\"].handle) return;\r\n let bitrate = this.virtualClass.studentBitrate;\r\n if (this.participantSelf.camera.bitrate == bitrate) return;\r\n this.$logger.log(`set bitrate to ${bitrate} (was ${this.participantSelf.camera.bitrate})`);\r\n this[\"camera\"].handle.send({\r\n \"message\": {\r\n request: \"configure\",\r\n \"bitrate\": bitrate\r\n }\r\n });\r\n }\r\n\r\n photoCapture = (photo, videoElement: JQuery) => {\r\n let video = videoElement[0];\r\n let canvas = this.canvas[0];\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n let ctx = canvas.getContext('2d');\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n photo.photo = canvas.toDataURL();\r\n }\r\n\r\n photoRequiredRefresh = () => {\r\n if (this.demoMode) return;\r\n this.$spinner.show();\r\n this.$virtualClassHub.photoRequired()\r\n .then(r => this.photos = r)\r\n .catch(this.handleError)\r\n .finally(() => this.$spinner.hide());\r\n }\r\n\r\n photoSubmit = (photo: StudentPhotoUploadDto) => {\r\n this.$spinner.show('Uploading')\r\n this.$virtualClassHub.photoUpload(photo)\r\n .then(() => this.photoRequiredRefresh())\r\n .catch(this.handleError)\r\n .finally(() => this.$spinner.hide());\r\n }\r\n\r\n attendanceSignatureSubmit = (sig: string) => {\r\n this.$spinner.show();\r\n this.$virtualClassHub.attendanceSignatureSubmit(sig)\r\n .then(() => this.attendanceSignatureRequired = false)\r\n .catch(this.handleError)\r\n .finally(() => this.$spinner.hide());\r\n }\r\n\r\n certificateRequestSubmit = () => {\r\n this.$spinner.show();\r\n this.$virtualClassHub.certificateRequestSubmit(this.certRequest)\r\n .then(() => this.certRequest = null)\r\n .catch(this.handleError)\r\n .finally(() => this.$spinner.hide());\r\n }\r\n\r\n focusHandler = (e) => {\r\n if (!this.participantSelf) return;\r\n // use type assertion to ensure a sparse update\r\n let dto = {};\r\n dto.windowFocus = e.type === \"focus\";\r\n this.$virtualClassHub.update(dto)\r\n .catch(this.handleError);\r\n };\r\n\r\n fullScreenHandler = (fullScreen: boolean) => {\r\n if (!this.participantSelf) return;\r\n // use type assertion to ensure a sparse update\r\n let dto = {};\r\n if (fullScreen)\r\n dto.fullScreenSupported = true;\r\n dto.fullScreen = fullScreen;\r\n this.$virtualClassHub.update(dto)\r\n .catch(this.handleError);\r\n }\r\n\r\n muteToggle = () => {\r\n this.muteUpdating = true;\r\n this.$virtualClassHub.muteToggle()\r\n .catch(this.handleError)\r\n .finally(() => this.$timeout(() => this.muteUpdating = false, 5000));\r\n }\r\n\r\n get videoPlayerVisible() {\r\n if (!this.videoPlayback || !this.videoPlayback.url) return false;\r\n if (this.videoPlayback.mode != \"play\" && this.videoPlayback.mode != \"pause\") return false;\r\n return true;\r\n }\r\n\r\n videoPlayerSyncState = (syncPlayback: boolean) => {\r\n // console.debug('videoPlayerSyncState', this.videoPlayer);\r\n if (!this.videoPlayer || !this.videoPlayer[0]) return;\r\n let player = this.videoPlayer[0];\r\n let video = this.videoPlayback;\r\n if (!video || !video.url) {\r\n // don't mutate properties if not needed\r\n // otherwise `timeupdate` will be triggered and cause an infinite loop of updates\r\n if (player.src || !player.muted) {\r\n player.removeAttribute('src');\r\n player.muted = true;\r\n player.pause();\r\n player.currentTime = 0;\r\n player.load();\r\n }\r\n return;\r\n }\r\n\r\n var src = encodeURI(video.url);\r\n if (src != player.src) {\r\n this.$logger.debug('updateVideoPlaybackState set video src', player.src, src);\r\n player.src = src;\r\n player.load();\r\n }\r\n switch (video.mode) {\r\n case \"play\":\r\n if (player.paused || player.ended) {\r\n this.$logger.debug('updateVideoPlaybackState.play');\r\n player.currentTime = video.currentTimestamp;\r\n player.muted = false;\r\n player.play().catch(e => {\r\n this.$logger.error('error playing video', e)\r\n this.toaster.error('Error playing video!');\r\n });\r\n }\r\n break;\r\n case \"pause\":\r\n case \"stop\":\r\n if (!player.paused && !player.ended) {\r\n this.$logger.debug('updateVideoPlaybackState.pause');\r\n player.muted = true;\r\n player.pause();\r\n player.currentTime = video.currentTimestamp;\r\n }\r\n }\r\n if (syncPlayback) {\r\n let diff = Math.abs(video.currentTimestamp - player.currentTime);\r\n if (diff > 10) {\r\n this.$logger.debug('updateVideoPlaybackState sync time', player.currentTime, video.currentTimestamp, diff);\r\n player.currentTime = video.currentTimestamp;\r\n }\r\n }\r\n }\r\n\r\n\r\n videoPlayerOnCanPlay = ($event: JQueryEventObject) => {\r\n this.videoPlayerSyncState(false);\r\n }\r\n videoPlayerOnTimeUpdate = ($event: JQueryEventObject) => {\r\n this.videoPlayerSyncState(false);\r\n this.videoUpdatePlaybackStatus()\r\n }\r\n videoPlayerOnProgress = ($event: JQueryEventObject) => {\r\n this.videoUpdatePlaybackStatus()\r\n }\r\n\r\n videoUpdatePlaybackStatus = throttle(() => {\r\n if (!this.participantSelf) return;\r\n // use type assertion to ensure a sparse update\r\n let dto = {};\r\n dto.videoPlayback = new VirtualClassParticipantVideoPlayback();\r\n let player = this.videoPlayer[0];\r\n if (player) {\r\n dto.videoPlayback.currentTimestamp = player.currentTime;\r\n dto.videoPlayback.url = player.src;\r\n dto.videoPlayback.status = player.ended ? 'Ended' :\r\n player.paused ? 'Paused' :\r\n 'Playing';\r\n dto.videoPlayback.readyState = player.readyState;\r\n }\r\n this.$virtualClassHub.update(dto)\r\n .catch(this.handleError);\r\n }, 5000);\r\n\r\n messageSend = (msg) => {\r\n let dto = new VirtualClassParticipantMessageDto();\r\n dto.message = msg;\r\n this.$virtualClassHub.messageSubmit(dto)\r\n .catch(this.handleError);\r\n };\r\n\r\n messagesMarkRead = () => {\r\n this.messages.filter(x => !x.read && x.sender == MessageSender.Instructor).forEach(msg => {\r\n this.$virtualClassHub.messageRead(msg.id)\r\n .catch(this.handleError);\r\n });\r\n }\r\n\r\n pageHideHandler = () => {\r\n this.$virtualClassHub.leave('Browser Window Closed')\r\n .then(() => this.$virtualClassHub.stop());\r\n }\r\n\r\n get joinHint() {\r\n let x = this.$localStorage.virtualClassroomJoinClass;\r\n if (!x || !x.id) return null;\r\n if (!this.classes || !this.classes.length) return null;\r\n return this.classes.filter(i => i.id == x.id)[0];\r\n }\r\n}\r\n","import * as angular from \"angular\";\r\nimport {IFormController, IHttpService, ILocationService, IScope, ITimeoutService, IWindowService} from \"angular\";\r\nimport {HookResult, Ng1Controller, StateService, Transition} from \"@uirouter/angularjs\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {VirtualClassHubService} from \"../modules/HubModule\";\r\nimport {VirtualClassDto} from \"../model/VirtualClassDto\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {FormDto} from \"../model/FormDto\";\r\nimport {FormQuestionType} from \"../model/FormQuestionType\";\r\nimport {FormQuestionDto} from \"../model/FormQuestionDto\";\r\nimport {LoggerService} from \"../modules/LoggerModule\";\r\n\r\nclass VirtualClassroomFormController implements Ng1Controller {\r\n private virtualClass: VirtualClassDto;\r\n private formModel: FormDto;\r\n private formController: IFormController\r\n\r\n $onInit(): void {\r\n }\r\n\r\n uiCanExit(transition: Transition): HookResult {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $http: IHttpService,\r\n private $location: ILocationService,\r\n private $window: IWindowService,\r\n private $api: ApiService,\r\n private $localStorage: ngStorage.StorageService,\r\n private $spinner: SpinnerService,\r\n private $virtualClassHub: VirtualClassHubService,\r\n private $logger: LoggerService,\r\n private toaster: any,\r\n private $scope: IScope,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n $scope.$watch(() => this.virtualClass, newValue => {\r\n if (!newValue) {\r\n this.formModel = null;\r\n return;\r\n }\r\n\r\n this.loadForm();\r\n })\r\n }\r\n\r\n get session(): StudentPortalSessionDto {\r\n return this.$localStorage.studentLoginSession;\r\n }\r\n\r\n get student(): StudentPortalStudentDto {\r\n return this.$localStorage.virtualClassroomStudent;\r\n }\r\n\r\n loadForm = () => {\r\n this.$virtualClassHub.formGet()\r\n .then(this.bindForm)\r\n .catch(this.$virtualClassHub.defaultErrorHandler);\r\n }\r\n\r\n bindForm = (form: FormDto) => {\r\n console.debug('bindForm', form);\r\n this.$logger.debug('bindForm', form?.name || '(null)');\r\n this.formModel = form;\r\n if(!form) return;\r\n\r\n this.formModel.questions.filter(x => x.type == FormQuestionType.WordBank).forEach(q => {\r\n var wordIndex = 0;\r\n q['textParts'] = q.text.split(/(\\[\\])/).map(x => {\r\n let val = x.trim();\r\n return {\r\n word: val == '[]',\r\n wordIndex: val == '[]' ? wordIndex++ : null,\r\n text: x\r\n }\r\n });\r\n })\r\n\r\n this.formController.$setPristine();\r\n }\r\n\r\n wordBankWordReused(question: FormQuestionDto) {\r\n if (!question.responseWordBank) return;\r\n var allWordsUsed = [];\r\n this.formModel.questions.forEach(q => {\r\n if (q.responseWordBank)\r\n q.responseWordBank.filter(x => x).forEach(x => allWordsUsed.push(x));\r\n });\r\n var reused = false;\r\n question.responseWordBank.forEach(word => {\r\n if (allWordsUsed.filter(x => x == word).length > 1) reused = true;\r\n });\r\n return reused;\r\n }\r\n\r\n submit() {\r\n this.$logger.debug('submit', this.formModel);\r\n if (this.formController.$invalid) return;\r\n\r\n this.$virtualClassHub.formSubmit(this.formModel)\r\n .then(this.bindForm)\r\n .catch(this.$virtualClassHub.defaultErrorHandler);\r\n }\r\n}\r\n\r\nexport default angular.module('app.public.virtualClassroomFormComponent', [])\r\n .component('virtualClassroomForm', {\r\n template: require('./VirtualClassroomFormComponent.html'),\r\n controller: VirtualClassroomFormController,\r\n controllerAs: '$ctrl',\r\n bindings: {\r\n virtualClass: '='\r\n }\r\n })\r\n .component('wordBank', {}).name;\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\nimport { GiftCertificateTypePublicDto } from './GiftCertificateTypePublicDto';\r\nimport { GiftCertificateTemplatePublicDto } from './GiftCertificateTemplatePublicDto';\r\nimport { TransactionPublicDto } from './TransactionPublicDto';\r\n\r\n// Myers.StudentManagementSystem.Data.Models.GiftCertificatePublicDto\r\nexport class GiftCertificatePublicDto {\r\n public token: string = null;\r\n public certificateNumberFormatted: string = null;\r\n public certificateDate: Date = new Date(0);\r\n public purchaserName: string = null;\r\n public purchaserPhone: string = null;\r\n public purchaserEmail: string = null;\r\n public recipientName: string = null;\r\n public recipientPhone: string = null;\r\n public recipientEmail: string = null;\r\n public messageFrom: string = null;\r\n public messageTo: string = null;\r\n public messageNote: string = null;\r\n public giftCertificateType: GiftCertificateTypePublicDto = null;\r\n public giftCertificateTemplate: GiftCertificateTemplatePublicDto = null;\r\n public purchasePrice: number = 0;\r\n public balanceDue: number = 0;\r\n public faceValue: number = 0;\r\n public paid: boolean = false;\r\n public ccNumber: string = null;\r\n public ccExpMonth: string = null;\r\n public ccExpYear: string = null;\r\n public ccCode: string = null;\r\n public ccAddress: string = null;\r\n public ccZip: string = null;\r\n public lastError: string = null;\r\n public transactions: TransactionPublicDto[] = [];\r\n public customerIp: string = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import {Ng1Controller, Transition, TargetState, StateService} from \"@uirouter/angularjs\";\r\nimport {GiftCertificateTypePublicDto} from \"../model/GiftCertificateTypePublicDto\";\r\nimport {GiftCertificatePublicDto} from \"../model/GiftCertificatePublicDto\";\r\nimport {DebounceFactory} from \"../modules/DebounceModule\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {IFormController, ITimeoutService} from \"angular\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {GiftCertificateTemplatePublicDto} from \"../model/GiftCertificateTemplatePublicDto\";\r\n\r\nexport default class GiftCertificateController implements Ng1Controller {\r\n private giftCertificateTypes: GiftCertificateTypePublicDto[];\r\n private model: GiftCertificatePublicDto;\r\n private error: any;\r\n private blobUrl: string;\r\n private templates: GiftCertificateTemplatePublicDto[];\r\n\r\n $onInit(): void {\r\n this.refresh();\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(\r\n private $api: ApiService,\r\n private $debounce: DebounceFactory,\r\n private $spinner: SpinnerService,\r\n private $timeout: ITimeoutService,\r\n private toaster: any,\r\n private $uibModal: any,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n this.refresh();\r\n }\r\n\r\n refresh = () => {\r\n\r\n this.$api.get('giftCertificate/templates')\r\n .then(r => {\r\n this.templates = r.data;\r\n })\r\n\r\n this.$api.get('giftCertificate/types')\r\n .then(r => {\r\n this.giftCertificateTypes = r.data;\r\n if (!this.model) this.model = new GiftCertificatePublicDto();\r\n if (!this.model.giftCertificateType)\r\n this.model.giftCertificateType = this.giftCertificateTypes[0];\r\n });\r\n\r\n if (this.$stateParams.token) {\r\n this.$api.get('giftCertificate/' + this.$stateParams.token)\r\n .then(r => {\r\n this.model = r.data;\r\n this.preview();\r\n });\r\n }\r\n }\r\n\r\n formChanged = () => {\r\n this.previewDebounce();\r\n }\r\n\r\n\r\n preview = () => {\r\n if(!this.model.giftCertificateTemplate) return;\r\n this.$api.post('giftCertificate/preview', this.model, {responseType: 'blob'})\r\n .then(result => {\r\n // #view=fit causes mobile safari not to render the pdf\r\n this.blobUrl = window.URL.createObjectURL(result.data);\r\n })\r\n }\r\n\r\n previewDebounce = this.$debounce(this.preview, 2000, false);\r\n\r\n submit = (form: IFormController) => {\r\n if (form.$invalid) return;\r\n\r\n this.$spinner.show();\r\n this.$api.post('giftCertificate', this.model)\r\n .then(result => {\r\n this.model = result.data;\r\n this.$state.go('.', {token: this.model.token}, {notify: false});\r\n this.error = null;\r\n this.preview();\r\n })\r\n .catch(e => {\r\n this.error = e\r\n })\r\n .finally(() => this.$spinner.hide())\r\n }\r\n\r\n}\r\n","import * as angular from \"angular\";\r\nimport {IHttpService, ILocationService, IScope, ITimeoutService, IWindowService} from \"angular\";\r\nimport {HookResult, Ng1Controller, StateService, Transition} from \"@uirouter/angularjs\";\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\nimport {StudentPortalSessionDto} from \"../model/StudentPortalSessionDto\";\r\nimport {StudentPortalStudentDto} from \"../model/StudentPortalStudentDto\";\r\nimport {LoggerService} from \"../modules/LoggerModule\";\r\nimport {StudentClassroomStatusDto} from \"../model/StudentClassroomStatusDto\";\r\n\r\nclass StudentPortalClassroomStatusComponent implements Ng1Controller {\r\n\r\n private student: StudentPortalStudentDto;\r\n private records: StudentClassroomStatusDto[];\r\n\r\n $onInit(): void {\r\n }\r\n\r\n uiCanExit(transition: Transition): HookResult {\r\n return undefined;\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n $onChanges(changesObj): void {\r\n this.refresh();\r\n }\r\n\r\n constructor(private $timeout: ITimeoutService,\r\n private $http: IHttpService,\r\n private $location: ILocationService,\r\n private $window: IWindowService,\r\n private $api: ApiService,\r\n private $localStorage: ngStorage.StorageService,\r\n private $scope: IScope,\r\n private $uibModal: any,\r\n private $state: StateService,\r\n private $stateParams: any) {\r\n\r\n }\r\n\r\n get session(): StudentPortalSessionDto {\r\n return this.$localStorage.studentLoginSession;\r\n }\r\n\r\n refresh = () => {\r\n let dto = {\r\n session: this.session,\r\n student: this.student\r\n };\r\n this.$api.post(`studentPortal/class/status`, dto)\r\n .then(r=> {\r\n this.records = r.data;\r\n })\r\n }\r\n\r\n\r\n}\r\n\r\nexport default angular.module('app.public.studentPortalClassroomStatusComponent', [])\r\n .component('classroomStatus', {\r\n template: require('./StudentPortalClassroomStatusComponent.html'),\r\n controller: StudentPortalClassroomStatusComponent,\r\n controllerAs: '$ctrl',\r\n bindings: {\r\n student: '<'\r\n }\r\n })\r\n .name;\r\n","import {Ng1Controller, StateService, TargetState, Transition} from \"@uirouter/angularjs\";\r\n\r\nexport default class VirtualClassroomDisconnectedController implements Ng1Controller {\r\n\r\n $onInit(): void {\r\n }\r\n\r\n uiCanExit(transition: Transition): boolean | TargetState | void | Promise {\r\n }\r\n\r\n uiOnParamsChanged(newValues: any, $transition$: Transition): void {\r\n }\r\n\r\n constructor(private $stateParams: any) {\r\n\r\n }\r\n\r\n\r\n}\r\n","import * as angular from 'angular';\r\nimport {StateProvider} from '@uirouter/angularjs';\r\nimport ContractController from \"./ContractController\";\r\nimport ExamController from \"./ExamController\";\r\nimport ExamReviewController from \"./ExamReviewController\";\r\nimport StudentPortalController from \"./StudentPortalController\";\r\nimport VirtualClassroomController from \"./VirtualClassroom\";\r\nimport VirtualClassroomFormComponent from \"./VirtualClassroomFormComponent\";\r\nimport GiftCertificateController from \"./GiftCertificateController\";\r\nimport StudentPortalClassroomStatusComponent from \"./StudentPortalClassroomStatusComponent\";\r\nimport VirtualClassroomDisconnectedController from \"./VirtualClassroomDisconnected\";\r\n\r\nclass Routes {\r\n static $inject = ['$stateProvider'];\r\n\r\n constructor($stateProvider: StateProvider) {\r\n $stateProvider\r\n .state('public', {\r\n abstract: true,\r\n url: '/public'\r\n })\r\n .state('public.student', {\r\n abstract: true,\r\n url: '/student/:studentUlid'\r\n })\r\n .state('public.student.contract', {\r\n url: '/contract',\r\n template: require('./Contract.html'),\r\n controller: ContractController,\r\n controllerAs: 'vm',\r\n data: {title: 'Contract'}\r\n })\r\n\r\n .state('public.student.exam', {\r\n abstract: true,\r\n url: '/exam',\r\n })\r\n .state('public.student.exam.run', {\r\n url: '',\r\n template: require('./Exam.html'),\r\n controller: ExamController,\r\n controllerAs: 'vm',\r\n data: {title: 'Online Exam'}\r\n })\r\n .state('public.student.exam.review', {\r\n url: '/review',\r\n template: require('./ExamReview.html'),\r\n controller: ExamReviewController,\r\n controllerAs: 'vm',\r\n data: {title: 'Online Exam Review'}\r\n })\r\n .state('public.student.exam.reset', {\r\n url: '/reset',\r\n template: require('./ExamReset.html'),\r\n // controller: ExamResetController,\r\n // controllerAs: 'vm',\r\n data: {title: 'Online Exam Reset'}\r\n })\r\n\r\n .state('public.studentPortal', {\r\n url: '/studentPortal?message',\r\n template: require('./StudentPortal.html'),\r\n controller: StudentPortalController,\r\n controllerAs: '$ctrl',\r\n data: {title: 'Student Portal'}\r\n })\r\n .state('public.virtualClassroom', {\r\n url: '/virtualClassroom',\r\n template: require('./VirtualClassroom.html'),\r\n controller: VirtualClassroomController,\r\n controllerAs: '$ctrl',\r\n data: {title: 'Virtual Classroom'},\r\n\r\n })\r\n .state('public.virtualClassroomDisconnected', {\r\n url: '/virtualClassroomDisconnected?message',\r\n template: require('./VirtualClassroomDisconnected.html'),\r\n controller: VirtualClassroomDisconnectedController,\r\n controllerAs: '$ctrl',\r\n data: {title: 'Virtual Classroom'},\r\n\r\n })\r\n\r\n .state('public.giftCertificate', {\r\n url: '/giftCertificate?token',\r\n params: {\r\n token: {\r\n dynamic: true\r\n }\r\n },\r\n template: require('./GiftCertificate.html'),\r\n controller: GiftCertificateController,\r\n controllerAs: '$ctrl',\r\n data: {title: 'Purchase Gift Certificate'}\r\n })\r\n\r\n\r\n }\r\n}\r\n\r\nexport default angular.module('app.public', [\r\n VirtualClassroomFormComponent,\r\n StudentPortalClassroomStatusComponent,\r\n])\r\n .config(Routes)\r\n .name;\r\n","import './globals';\r\n\r\n/* global css imports */\r\nimport 'angular/angular-csp.css';\r\nimport 'bootstrap/dist/js/bootstrap.js';\r\nimport 'ui-select/dist/select.css';\r\nimport '@fortawesome/fontawesome-pro/css/all.css';\r\nimport './css/nga.all.min.css';\r\nimport 'angularjs-toaster/toaster.css';\r\nimport 'text-security/dist/text-security.css';\r\nimport 'chosen-js/chosen.css';\r\n\r\nimport './css/site.less';\r\n\r\n/* angular modules */\r\nimport * as angular from 'angular';\r\nimport * as ngAnimate from 'angular-animate';\r\nimport * as ngSanitize from 'angular-sanitize';\r\nimport {ISCEDelegateProvider} from \"angular\";\r\n\r\n/* 3p modules */\r\nimport 'ngStorage';\r\nimport {ngStorage} from 'ngStorage';\r\nimport 'angular-filter';\r\nimport 'angular-moment';\r\nimport 'ui-select';\r\nimport 'angular-ui-bootstrap';\r\nimport uirouter, {StateProvider, StateService, Trace} from '@uirouter/angularjs';\r\nimport 'angular-credit-cards';\r\nimport 'angularjs-toaster';\r\nimport 'ng-file-upload';\r\nimport 'chosen-js/chosen.jquery';\r\nimport 'angular-chosen-localytics';\r\n\r\n/* our modules */\r\nimport DirectivesModule from './directive';\r\nimport ApiModule from './modules/ApiModule';\r\nimport DebounceModule from './modules/DebounceModule';\r\nimport HubProxyModule from './modules/HubProxyModule';\r\nimport SpinnerModule from './modules/SpinnerModule';\r\nimport ExamHubModule from \"./modules/HubModule\";\r\nimport LoggerModule from './modules/LoggerModule'\r\n\r\nimport PublicModule from './public/index';\r\n\r\n\r\nimport routing from './routing';\r\n\r\nimport 'json.date-extensions';\r\n// @ts-ignore\r\nJSON.useDateParser();\r\n\r\nlet app = angular.module('app',\r\n [\r\n /* angular modules */\r\n ngSanitize, ngAnimate,\r\n\r\n /* 3p modules */\r\n 'ngStorage',\r\n 'angular.filter',\r\n 'angularMoment',\r\n 'ui.select',\r\n 'ui.bootstrap',\r\n 'credit-cards',\r\n 'toaster',\r\n 'ngFileUpload',\r\n uirouter,\r\n 'localytics.directives',\r\n require('angular-input-masks/us'),\r\n\r\n /* our modules */\r\n ApiModule,\r\n DebounceModule,\r\n HubProxyModule,\r\n SpinnerModule,\r\n ExamHubModule,\r\n DirectivesModule,\r\n LoggerModule,\r\n PublicModule,\r\n ])\r\n .config(uiSelectConfig => {\r\n uiSelectConfig.theme = 'bootstrap';\r\n })\r\n .config((moment) => {\r\n moment.updateLocale('en', {\r\n week: {\r\n dow: 0,\r\n doy: 0\r\n }\r\n });\r\n })\r\n .config((uibDatepickerConfig) => {\r\n uibDatepickerConfig.showWeeks = false;\r\n })\r\n .config(($urlRouterProvider,\r\n $locationProvider: ng.ILocationProvider,\r\n $stateProvider: StateProvider) => {\r\n\r\n $locationProvider.html5Mode(true);\r\n $urlRouterProvider.otherwise('/public/studentPortal');\r\n\r\n })\r\n .config(($httpProvider: ng.IHttpProvider) => {\r\n $httpProvider.defaults.withCredentials = true;\r\n })\r\n .config(($sceDelegateProvider: ISCEDelegateProvider) => {\r\n $sceDelegateProvider.resourceUrlWhitelist([\r\n 'self',\r\n window['apiBase'] + '**'\r\n ])\r\n })\r\n .run((\r\n $rootScope: ng.IRootScopeService,\r\n $localStorage: ngStorage.StorageService,\r\n $sessionStorage: ngStorage.StorageService,\r\n $state: StateService,\r\n $trace: Trace) => {\r\n $rootScope['$state'] = $state;\r\n\r\n if (window['environment'] === 'development') {\r\n $trace.enable('TRANSITION');\r\n $rootScope['digestCount'] = 0;\r\n $rootScope.$watch(() => {\r\n setTimeout(() => {\r\n $rootScope['digestCount']++;\r\n });\r\n })\r\n }\r\n });\r\n\r\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".nga-default{-webkit-transition:all .8s ease-in-out;-moz-transition:all .8s ease-in-out;-o-transition:all .8s ease-in-out;transition:all .8s ease-in-out}.nga-default.ng-hide-add,.nga-default.ng-hide-remove{display:block!important}.nga-slow{-webkit-transition:all 2s ease-in-out;-moz-transition:all 2s ease-in-out;-o-transition:all 2s ease-in-out;transition:all 2s ease-in-out}.nga-slow.ng-hide-add,.nga-slow.ng-hide-remove{display:block!important}.nga-fast{-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.nga-fast.ng-hide-add,.nga-fast.ng-hide-remove{display:block!important}.nga-collapse-add{overflow:hidden}.nga-collapse-add.ng-enter:not(.ng-enter-active),.nga-collapse-add.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-collapse-remove{overflow:hidden}.nga-collapse-remove.ng-hide-add.ng-hide-add-active,.nga-collapse-remove.ng-leave.ng-leave-active{max-height:0;padding-top:0;padding-bottom:0}.nga-collapse-move{overflow:hidden}.nga-collapse-move.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-collapse-all{overflow:hidden}.nga-collapse-all.ng-enter:not(.ng-enter-active),.nga-collapse-all.ng-hide-add.ng-hide-add-active,.nga-collapse-all.ng-hide-remove:not(.ng-hide-remove-active),.nga-collapse-all.ng-leave.ng-leave-active,.nga-collapse-all.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-collapse{overflow:hidden}.nga-collapse.ng-enter:not(.ng-enter-active),.nga-collapse.ng-hide-add.ng-hide-add-active,.nga-collapse.ng-hide-remove:not(.ng-hide-remove-active),.nga-collapse.ng-leave.ng-leave-active,.nga-collapse.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-fade-add.ng-enter,.nga-fade-add.ng-hide-remove{opacity:0}.nga-fade-add.ng-enter.ng-enter-active,.nga-fade-add.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-fade-remove.ng-hide-add.ng-hide-add-active,.nga-fade-remove.ng-leave.ng-leave-active{opacity:0}.nga-fade-remove.ng-hide-add,.nga-fade-remove.ng-leave{opacity:1}.nga-fade-move.ng-move{opacity:0}.nga-fade-move.ng-move.ng-move-active{opacity:1}.nga-fade-all.ng-enter,.nga-fade-all.ng-hide-remove{opacity:0}.nga-fade-all.ng-enter.ng-enter-active,.nga-fade-all.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-fade-all.ng-hide-add.ng-hide-add-active,.nga-fade-all.ng-leave.ng-leave-active{opacity:0}.nga-fade-all.ng-hide-add,.nga-fade-all.ng-leave{opacity:1}.nga-fade-all.ng-move{opacity:0}.nga-fade-all.ng-move.ng-move-active{opacity:1}.nga-fade.ng-enter,.nga-fade.ng-hide-remove{opacity:0}.nga-fade.ng-enter.ng-enter-active,.nga-fade.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-fade.ng-hide-add.ng-hide-add-active,.nga-fade.ng-leave.ng-leave-active{opacity:0}.nga-fade.ng-hide-add,.nga-fade.ng-leave{opacity:1}.nga-fade.ng-move{opacity:0}.nga-fade.ng-move.ng-move-active{opacity:1}.nga-rotate-down-add{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-add.ng-enter,.nga-rotate-down-add.ng-hide-remove{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-add.ng-enter.ng-enter-active,.nga-rotate-down-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-down-remove{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-down-remove.ng-leave.ng-leave-active{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-move,.nga-rotate-down-remove.ng-hide-add,.nga-rotate-down-remove.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-move.ng-move{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-all,.nga-rotate-down-move.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-all.ng-enter,.nga-rotate-down-all.ng-hide-remove{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-all.ng-enter.ng-enter-active,.nga-rotate-down-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-all.ng-hide-add.ng-hide-add-active,.nga-rotate-down-all.ng-leave.ng-leave-active{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-all.ng-hide-add,.nga-rotate-down-all.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-all.ng-move{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down,.nga-rotate-down-all.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-enter,.nga-rotate-down.ng-hide-remove{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down.ng-enter.ng-enter-active,.nga-rotate-down.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-hide-add.ng-hide-add-active,.nga-rotate-down.ng-leave.ng-leave-active{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down.ng-hide-add,.nga-rotate-down.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-move{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-enter,.nga-rotate-down.ng-hide-remove{opacity:0}.nga-rotate-down.ng-enter.ng-enter-active,.nga-rotate-down.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-down.ng-hide-add.ng-hide-add-active,.nga-rotate-down.ng-leave.ng-leave-active{opacity:0}.nga-rotate-down.ng-hide-add,.nga-rotate-down.ng-leave{opacity:1}.nga-rotate-down.ng-move{opacity:0}.nga-rotate-down.ng-move.ng-move-active{opacity:1}.nga-rotate-left-add{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-add.ng-enter,.nga-rotate-left-add.ng-hide-remove{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-add.ng-enter.ng-enter-active,.nga-rotate-left-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-left-remove{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-left-remove.ng-leave.ng-leave-active{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-move,.nga-rotate-left-remove.ng-hide-add,.nga-rotate-left-remove.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-move.ng-move{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-all,.nga-rotate-left-move.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-all.ng-enter,.nga-rotate-left-all.ng-hide-remove{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-all.ng-enter.ng-enter-active,.nga-rotate-left-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-all.ng-hide-add.ng-hide-add-active,.nga-rotate-left-all.ng-leave.ng-leave-active{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-all.ng-hide-add,.nga-rotate-left-all.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-all.ng-move{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left,.nga-rotate-left-all.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-enter,.nga-rotate-left.ng-hide-remove{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left.ng-enter.ng-enter-active,.nga-rotate-left.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-hide-add.ng-hide-add-active,.nga-rotate-left.ng-leave.ng-leave-active{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left.ng-hide-add,.nga-rotate-left.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-move{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-enter,.nga-rotate-left.ng-hide-remove{opacity:0}.nga-rotate-left.ng-enter.ng-enter-active,.nga-rotate-left.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-left.ng-hide-add.ng-hide-add-active,.nga-rotate-left.ng-leave.ng-leave-active{opacity:0}.nga-rotate-left.ng-hide-add,.nga-rotate-left.ng-leave{opacity:1}.nga-rotate-left.ng-move{opacity:0}.nga-rotate-left.ng-move.ng-move-active{opacity:1}.nga-rotate-right-add{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-add.ng-enter,.nga-rotate-right-add.ng-hide-remove{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-add.ng-enter.ng-enter-active,.nga-rotate-right-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-right-remove{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-right-remove.ng-leave.ng-leave-active{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-move,.nga-rotate-right-remove.ng-hide-add,.nga-rotate-right-remove.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-move.ng-move{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-all,.nga-rotate-right-move.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-all.ng-enter,.nga-rotate-right-all.ng-hide-remove{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-all.ng-enter.ng-enter-active,.nga-rotate-right-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-all.ng-hide-add.ng-hide-add-active,.nga-rotate-right-all.ng-leave.ng-leave-active{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-all.ng-hide-add,.nga-rotate-right-all.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-all.ng-move{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right,.nga-rotate-right-all.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-enter,.nga-rotate-right.ng-hide-remove{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right.ng-enter.ng-enter-active,.nga-rotate-right.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-hide-add.ng-hide-add-active,.nga-rotate-right.ng-leave.ng-leave-active{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right.ng-hide-add,.nga-rotate-right.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-move{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-enter,.nga-rotate-right.ng-hide-remove{opacity:0}.nga-rotate-right.ng-enter.ng-enter-active,.nga-rotate-right.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-right.ng-hide-add.ng-hide-add-active,.nga-rotate-right.ng-leave.ng-leave-active{opacity:0}.nga-rotate-right.ng-hide-add,.nga-rotate-right.ng-leave{opacity:1}.nga-rotate-right.ng-move{opacity:0}.nga-rotate-right.ng-move.ng-move-active{opacity:1}.nga-rotate-up-add{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-add.ng-enter,.nga-rotate-up-add.ng-hide-remove{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-add.ng-enter.ng-enter-active,.nga-rotate-up-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-up-remove{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-up-remove.ng-leave.ng-leave-active{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-move,.nga-rotate-up-remove.ng-hide-add,.nga-rotate-up-remove.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-move.ng-move{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-all,.nga-rotate-up-move.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-all.ng-enter,.nga-rotate-up-all.ng-hide-remove{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-all.ng-enter.ng-enter-active,.nga-rotate-up-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-all.ng-hide-add.ng-hide-add-active,.nga-rotate-up-all.ng-leave.ng-leave-active{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-all.ng-hide-add,.nga-rotate-up-all.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-all.ng-move{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up,.nga-rotate-up-all.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-enter,.nga-rotate-up.ng-hide-remove{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up.ng-enter.ng-enter-active,.nga-rotate-up.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-hide-add.ng-hide-add-active,.nga-rotate-up.ng-leave.ng-leave-active{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up.ng-hide-add,.nga-rotate-up.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-move{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-enter,.nga-rotate-up.ng-hide-remove{opacity:0}.nga-rotate-up.ng-enter.ng-enter-active,.nga-rotate-up.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-up.ng-hide-add.ng-hide-add-active,.nga-rotate-up.ng-leave.ng-leave-active{opacity:0}.nga-rotate-up.ng-hide-add,.nga-rotate-up.ng-leave{opacity:1}.nga-rotate-up.ng-move{opacity:0}.nga-rotate-up.ng-move.ng-move-active{opacity:1}.nga-slide-down-add{position:relative;overflow:hidden}.nga-slide-down-add.ng-enter,.nga-slide-down-add.ng-hide-remove{top:50px}.nga-slide-down-add.ng-enter.ng-enter-active,.nga-slide-down-add.ng-hide-remove.ng-hide-remove-active{top:0}.nga-slide-down-remove{position:relative;overflow:hidden}.nga-slide-down-remove.ng-hide-add.ng-hide-add-active,.nga-slide-down-remove.ng-leave.ng-leave-active{top:50px}.nga-slide-down-remove.ng-hide-add,.nga-slide-down-remove.ng-leave{top:0}.nga-slide-down-move{position:relative;overflow:hidden}.nga-slide-down-move.ng-move{top:50px}.nga-slide-down-move.ng-move.ng-move-active{top:0}.nga-slide-down-all{position:relative;overflow:hidden}.nga-slide-down-all.ng-enter,.nga-slide-down-all.ng-hide-remove{top:50px}.nga-slide-down-all.ng-enter.ng-enter-active,.nga-slide-down-all.ng-hide-remove.ng-hide-remove-active{top:0}.nga-slide-down-all.ng-hide-add.ng-hide-add-active,.nga-slide-down-all.ng-leave.ng-leave-active{top:50px}.nga-slide-down-all.ng-hide-add,.nga-slide-down-all.ng-leave{top:0}.nga-slide-down-all.ng-move{top:50px}.nga-slide-down-all.ng-move.ng-move-active{top:0}.nga-slide-down{position:relative;overflow:hidden;overflow:hidden}.nga-slide-down.ng-enter,.nga-slide-down.ng-hide-remove{top:50px}.nga-slide-down.ng-enter.ng-enter-active,.nga-slide-down.ng-hide-remove.ng-hide-remove-active{top:0}.nga-slide-down.ng-hide-add.ng-hide-add-active,.nga-slide-down.ng-leave.ng-leave-active{top:50px}.nga-slide-down.ng-hide-add,.nga-slide-down.ng-leave{top:0}.nga-slide-down.ng-move{top:50px}.nga-slide-down.ng-move.ng-move-active{top:0}.nga-slide-down.ng-enter,.nga-slide-down.ng-hide-remove{opacity:0}.nga-slide-down.ng-enter.ng-enter-active,.nga-slide-down.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-down.ng-hide-add.ng-hide-add-active,.nga-slide-down.ng-leave.ng-leave-active{opacity:0}.nga-slide-down.ng-hide-add,.nga-slide-down.ng-leave{opacity:1}.nga-slide-down.ng-move{opacity:0}.nga-slide-down.ng-move.ng-move-active{opacity:1}.nga-slide-down.ng-enter:not(.ng-enter-active),.nga-slide-down.ng-hide-add.ng-hide-add-active,.nga-slide-down.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-down.ng-leave.ng-leave-active,.nga-slide-down.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-slide-left-add{position:relative;overflow:hidden}.nga-slide-left-add.ng-enter,.nga-slide-left-add.ng-hide-remove{right:100%}.nga-slide-left-add.ng-enter.ng-enter-active,.nga-slide-left-add.ng-hide-remove.ng-hide-remove-active{right:0}.nga-slide-left-remove{position:relative;overflow:hidden}.nga-slide-left-remove.ng-hide-add.ng-hide-add-active,.nga-slide-left-remove.ng-leave.ng-leave-active{right:100%}.nga-slide-left-remove.ng-hide-add,.nga-slide-left-remove.ng-leave{right:0}.nga-slide-left-move{position:relative;overflow:hidden}.nga-slide-left-move.ng-move{right:100%}.nga-slide-left-move.ng-move.ng-move-active{right:0}.nga-slide-left-all{position:relative;overflow:hidden}.nga-slide-left-all.ng-enter,.nga-slide-left-all.ng-hide-remove{right:100%}.nga-slide-left-all.ng-enter.ng-enter-active,.nga-slide-left-all.ng-hide-remove.ng-hide-remove-active{right:0}.nga-slide-left-all.ng-hide-add.ng-hide-add-active,.nga-slide-left-all.ng-leave.ng-leave-active{right:100%}.nga-slide-left-all.ng-hide-add,.nga-slide-left-all.ng-leave{right:0}.nga-slide-left-all.ng-move{right:100%}.nga-slide-left-all.ng-move.ng-move-active{right:0}.nga-slide-left{position:relative;overflow:hidden;overflow:hidden}.nga-slide-left.ng-enter,.nga-slide-left.ng-hide-remove{right:100%}.nga-slide-left.ng-enter.ng-enter-active,.nga-slide-left.ng-hide-remove.ng-hide-remove-active{right:0}.nga-slide-left.ng-hide-add.ng-hide-add-active,.nga-slide-left.ng-leave.ng-leave-active{right:100%}.nga-slide-left.ng-hide-add,.nga-slide-left.ng-leave{right:0}.nga-slide-left.ng-move{right:100%}.nga-slide-left.ng-move.ng-move-active{right:0}.nga-slide-left.ng-enter,.nga-slide-left.ng-hide-remove{opacity:0}.nga-slide-left.ng-enter.ng-enter-active,.nga-slide-left.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-left.ng-hide-add.ng-hide-add-active,.nga-slide-left.ng-leave.ng-leave-active{opacity:0}.nga-slide-left.ng-hide-add,.nga-slide-left.ng-leave{opacity:1}.nga-slide-left.ng-move{opacity:0}.nga-slide-left.ng-move.ng-move-active{opacity:1}.nga-slide-left.ng-enter:not(.ng-enter-active),.nga-slide-left.ng-hide-add.ng-hide-add-active,.nga-slide-left.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-left.ng-leave.ng-leave-active,.nga-slide-left.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-slide-right-add{position:relative;overflow:hidden}.nga-slide-right-add.ng-enter,.nga-slide-right-add.ng-hide-remove{left:100%}.nga-slide-right-add.ng-enter.ng-enter-active,.nga-slide-right-add.ng-hide-remove.ng-hide-remove-active{left:0}.nga-slide-right-remove{position:relative;overflow:hidden}.nga-slide-right-remove.ng-hide-add.ng-hide-add-active,.nga-slide-right-remove.ng-leave.ng-leave-active{left:100%}.nga-slide-right-remove.ng-hide-add,.nga-slide-right-remove.ng-leave{left:0}.nga-slide-right-move{position:relative;overflow:hidden}.nga-slide-right-move.ng-move{left:100%}.nga-slide-right-move.ng-move.ng-move-active{left:0}.nga-slide-right-all{position:relative;overflow:hidden}.nga-slide-right-all.ng-enter,.nga-slide-right-all.ng-hide-remove{left:100%}.nga-slide-right-all.ng-enter.ng-enter-active,.nga-slide-right-all.ng-hide-remove.ng-hide-remove-active{left:0}.nga-slide-right-all.ng-hide-add.ng-hide-add-active,.nga-slide-right-all.ng-leave.ng-leave-active{left:100%}.nga-slide-right-all.ng-hide-add,.nga-slide-right-all.ng-leave{left:0}.nga-slide-right-all.ng-move{left:100%}.nga-slide-right-all.ng-move.ng-move-active{left:0}.nga-slide-right{position:relative;overflow:hidden;overflow:hidden}.nga-slide-right.ng-enter,.nga-slide-right.ng-hide-remove{left:100%}.nga-slide-right.ng-enter.ng-enter-active,.nga-slide-right.ng-hide-remove.ng-hide-remove-active{left:0}.nga-slide-right.ng-hide-add.ng-hide-add-active,.nga-slide-right.ng-leave.ng-leave-active{left:100%}.nga-slide-right.ng-hide-add,.nga-slide-right.ng-leave{left:0}.nga-slide-right.ng-move{left:100%}.nga-slide-right.ng-move.ng-move-active{left:0}.nga-slide-right.ng-enter,.nga-slide-right.ng-hide-remove{opacity:0}.nga-slide-right.ng-enter.ng-enter-active,.nga-slide-right.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-right.ng-hide-add.ng-hide-add-active,.nga-slide-right.ng-leave.ng-leave-active{opacity:0}.nga-slide-right.ng-hide-add,.nga-slide-right.ng-leave{opacity:1}.nga-slide-right.ng-move{opacity:0}.nga-slide-right.ng-move.ng-move-active{opacity:1}.nga-slide-right.ng-enter:not(.ng-enter-active),.nga-slide-right.ng-hide-add.ng-hide-add-active,.nga-slide-right.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-right.ng-leave.ng-leave-active,.nga-slide-right.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-slide-up-add{position:relative;overflow:hidden}.nga-slide-up-add.ng-enter,.nga-slide-up-add.ng-hide-remove{bottom:50px}.nga-slide-up-add.ng-enter.ng-enter-active,.nga-slide-up-add.ng-hide-remove.ng-hide-remove-active{bottom:0}.nga-slide-up-remove{position:relative;overflow:hidden}.nga-slide-up-remove.ng-hide-add.ng-hide-add-active,.nga-slide-up-remove.ng-leave.ng-leave-active{bottom:50px}.nga-slide-up-remove.ng-hide-add,.nga-slide-up-remove.ng-leave{bottom:0}.nga-slide-up-move{position:relative;overflow:hidden}.nga-slide-up-move.ng-move{bottom:50px}.nga-slide-up-move.ng-move.ng-move-active{bottom:0}.nga-slide-up-all{position:relative;overflow:hidden}.nga-slide-up-all.ng-enter,.nga-slide-up-all.ng-hide-remove{bottom:50px}.nga-slide-up-all.ng-enter.ng-enter-active,.nga-slide-up-all.ng-hide-remove.ng-hide-remove-active{bottom:0}.nga-slide-up-all.ng-hide-add.ng-hide-add-active,.nga-slide-up-all.ng-leave.ng-leave-active{bottom:50px}.nga-slide-up-all.ng-hide-add,.nga-slide-up-all.ng-leave{bottom:0}.nga-slide-up-all.ng-move{bottom:50px}.nga-slide-up-all.ng-move.ng-move-active{bottom:0}.nga-slide-up{position:relative;overflow:hidden;overflow:hidden}.nga-slide-up.ng-enter,.nga-slide-up.ng-hide-remove{bottom:50px}.nga-slide-up.ng-enter.ng-enter-active,.nga-slide-up.ng-hide-remove.ng-hide-remove-active{bottom:0}.nga-slide-up.ng-hide-add.ng-hide-add-active,.nga-slide-up.ng-leave.ng-leave-active{bottom:50px}.nga-slide-up.ng-hide-add,.nga-slide-up.ng-leave{bottom:0}.nga-slide-up.ng-move{bottom:50px}.nga-slide-up.ng-move.ng-move-active{bottom:0}.nga-slide-up.ng-enter,.nga-slide-up.ng-hide-remove{opacity:0}.nga-slide-up.ng-enter.ng-enter-active,.nga-slide-up.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-up.ng-hide-add.ng-hide-add-active,.nga-slide-up.ng-leave.ng-leave-active{opacity:0}.nga-slide-up.ng-hide-add,.nga-slide-up.ng-leave{opacity:1}.nga-slide-up.ng-move{opacity:0}.nga-slide-up.ng-move.ng-move-active{opacity:1}.nga-slide-up.ng-enter:not(.ng-enter-active),.nga-slide-up.ng-hide-add.ng-hide-add-active,.nga-slide-up.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-up.ng-leave.ng-leave-active,.nga-slide-up.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-squash-left-add{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-add.ng-enter,.nga-squash-left-add.ng-hide-remove{width:0;right:100%}.nga-squash-left-add.ng-enter:not(.ng-enter-active),.nga-squash-left-add.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-left-add.ng-enter.ng-enter-active,.nga-squash-left-add.ng-hide-remove.ng-hide-remove-active{width:100%;right:0}.nga-squash-left-remove{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-remove.ng-hide-add,.nga-squash-left-remove.ng-leave{width:100%;right:0}.nga-squash-left-remove.ng-hide-add.ng-hide-add-active,.nga-squash-left-remove.ng-leave.ng-leave-active{width:0;right:100%;padding-left:0;padding-right:0}.nga-squash-left-move{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-move.ng-move{width:0;right:100%}.nga-squash-left-move.ng-move.ng-move-active{width:100%;right:0}.nga-squash-left-all{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-all.ng-enter,.nga-squash-left-all.ng-hide-remove{width:0;right:100%}.nga-squash-left-all.ng-enter:not(.ng-enter-active),.nga-squash-left-all.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-left-all.ng-enter.ng-enter-active,.nga-squash-left-all.ng-hide-add,.nga-squash-left-all.ng-hide-remove.ng-hide-remove-active,.nga-squash-left-all.ng-leave{width:100%;right:0}.nga-squash-left-all.ng-hide-add.ng-hide-add-active,.nga-squash-left-all.ng-leave.ng-leave-active{width:0;right:100%;padding-left:0;padding-right:0}.nga-squash-left-all.ng-move{width:0;right:100%}.nga-squash-left-all.ng-move.ng-move-active{width:100%;right:0}.nga-squash-left{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left.ng-enter,.nga-squash-left.ng-hide-remove{width:0;right:100%}.nga-squash-left.ng-enter:not(.ng-enter-active),.nga-squash-left.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-left.ng-enter.ng-enter-active,.nga-squash-left.ng-hide-add,.nga-squash-left.ng-hide-remove.ng-hide-remove-active,.nga-squash-left.ng-leave{width:100%;right:0}.nga-squash-left.ng-hide-add.ng-hide-add-active,.nga-squash-left.ng-leave.ng-leave-active{width:0;right:100%;padding-left:0;padding-right:0}.nga-squash-left.ng-move{width:0;right:100%}.nga-squash-left.ng-move.ng-move-active{width:100%;right:0}.nga-squash-right-add{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-add.ng-enter,.nga-squash-right-add.ng-hide-remove{width:0;left:100%}.nga-squash-right-add.ng-enter:not(.ng-enter-active),.nga-squash-right-add.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-right-add.ng-enter.ng-enter-active,.nga-squash-right-add.ng-hide-remove.ng-hide-remove-active{width:100%;left:0}.nga-squash-right-remove{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-remove.ng-hide-add,.nga-squash-right-remove.ng-leave{width:100%;left:0}.nga-squash-right-remove.ng-hide-add.ng-hide-add-active,.nga-squash-right-remove.ng-leave.ng-leave-active{width:0;left:100%;padding-left:0;padding-right:0}.nga-squash-right-move{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-move.ng-move{width:0;left:100%}.nga-squash-right-move.ng-move.ng-move-active{width:100%;left:0}.nga-squash-right-all{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-all.ng-enter,.nga-squash-right-all.ng-hide-remove{width:0;left:100%}.nga-squash-right-all.ng-enter:not(.ng-enter-active),.nga-squash-right-all.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-right-all.ng-enter.ng-enter-active,.nga-squash-right-all.ng-hide-add,.nga-squash-right-all.ng-hide-remove.ng-hide-remove-active,.nga-squash-right-all.ng-leave{width:100%;left:0}.nga-squash-right-all.ng-hide-add.ng-hide-add-active,.nga-squash-right-all.ng-leave.ng-leave-active{width:0;left:100%;padding-left:0;padding-right:0}.nga-squash-right-all.ng-move{width:0;left:100%}.nga-squash-right-all.ng-move.ng-move-active{width:100%;left:0}.nga-squash-right{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right.ng-enter,.nga-squash-right.ng-hide-remove{width:0;left:100%}.nga-squash-right.ng-enter:not(.ng-enter-active),.nga-squash-right.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-right.ng-enter.ng-enter-active,.nga-squash-right.ng-hide-add,.nga-squash-right.ng-hide-remove.ng-hide-remove-active,.nga-squash-right.ng-leave{width:100%;left:0}.nga-squash-right.ng-hide-add.ng-hide-add-active,.nga-squash-right.ng-leave.ng-leave-active{width:0;left:100%;padding-left:0;padding-right:0}.nga-squash-right.ng-move{width:0;left:100%}.nga-squash-right.ng-move.ng-move-active{width:100%;left:0}.nga-squash-vertical-add{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-add.ng-enter,.nga-squash-vertical-add.ng-hide-remove{top:100%}.nga-squash-vertical-add.ng-enter:not(.ng-enter-active),.nga-squash-vertical-add.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-add.ng-enter.ng-enter-active,.nga-squash-vertical-add.ng-hide-remove.ng-hide-remove-active{top:0}.nga-squash-vertical-remove{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-remove.ng-hide-add,.nga-squash-vertical-remove.ng-leave{top:0}.nga-squash-vertical-remove.ng-hide-add.ng-hide-add-active,.nga-squash-vertical-remove.ng-leave.ng-leave-active{top:100%;max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-move{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-move.ng-move{top:100%}.nga-squash-vertical-move.ng-move.ng-move-active{top:0}.nga-squash-vertical-all{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-all.ng-enter,.nga-squash-vertical-all.ng-hide-remove{top:100%}.nga-squash-vertical-all.ng-enter:not(.ng-enter-active),.nga-squash-vertical-all.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-all.ng-enter.ng-enter-active,.nga-squash-vertical-all.ng-hide-add,.nga-squash-vertical-all.ng-hide-remove.ng-hide-remove-active,.nga-squash-vertical-all.ng-leave{top:0}.nga-squash-vertical-all.ng-hide-add.ng-hide-add-active,.nga-squash-vertical-all.ng-leave.ng-leave-active{top:100%;max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-all.ng-move{top:100%}.nga-squash-vertical-all.ng-move.ng-move-active{top:0}.nga-squash-vertical{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical.ng-enter,.nga-squash-vertical.ng-hide-remove{top:100%}.nga-squash-vertical.ng-enter:not(.ng-enter-active),.nga-squash-vertical.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical.ng-enter.ng-enter-active,.nga-squash-vertical.ng-hide-add,.nga-squash-vertical.ng-hide-remove.ng-hide-remove-active,.nga-squash-vertical.ng-leave{top:0}.nga-squash-vertical.ng-hide-add.ng-hide-add-active,.nga-squash-vertical.ng-leave.ng-leave-active{top:100%;max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical.ng-move{top:100%}.nga-squash-vertical.ng-move.ng-move-active{top:0}.nga-squash-vertical.ng-enter,.nga-squash-vertical.ng-hide-remove{opacity:0}.nga-squash-vertical.ng-enter.ng-enter-active,.nga-squash-vertical.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-squash-vertical.ng-hide-add.ng-hide-add-active,.nga-squash-vertical.ng-leave.ng-leave-active{opacity:0}.nga-squash-vertical.ng-hide-add,.nga-squash-vertical.ng-leave{opacity:1}.nga-squash-vertical.ng-move{opacity:0}.nga-squash-vertical.ng-move.ng-move-active{opacity:1}.nga-stagger-add.ng-enter-stagger,.nga-stagger-leave.ng-leave-stagger,.nga-stagger-move.ng-move-stagger,.nga-stagger.ng-enter-stagger,.nga-stagger.ng-leave-stagger,.nga-stagger.ng-move-stagger{-webkit-transition-delay:100ms;-moz-transition-delay:100ms;-o-transition-delay:100ms;transition-delay:100ms;-webkit-transition-duration:0;-moz-transition-duration:0;-o-transition-duration:0;transition-duration:0}.nga-stagger-fast.ng-enter-stagger,.nga-stagger-fast.ng-leave-stagger,.nga-stagger-fast.ng-move-stagger{-webkit-transition-delay:20ms;-moz-transition-delay:20ms;-o-transition-delay:20ms;transition-delay:20ms;-webkit-transition-duration:0;-moz-transition-duration:0;-o-transition-duration:0;transition-duration:0}.nga-stagger-slow.ng-enter-stagger,.nga-stagger-slow.ng-leave-stagger,.nga-stagger-slow.ng-move-stagger{-webkit-transition-delay:200ms;-moz-transition-delay:200ms;-o-transition-delay:200ms;transition-delay:200ms;-webkit-transition-duration:0;-moz-transition-duration:0;-o-transition-duration:0;transition-duration:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/css/nga.all.min.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\".nga-default{-webkit-transition:all .8s ease-in-out;-moz-transition:all .8s ease-in-out;-o-transition:all .8s ease-in-out;transition:all .8s ease-in-out}.nga-default.ng-hide-add,.nga-default.ng-hide-remove{display:block!important}.nga-slow{-webkit-transition:all 2s ease-in-out;-moz-transition:all 2s ease-in-out;-o-transition:all 2s ease-in-out;transition:all 2s ease-in-out}.nga-slow.ng-hide-add,.nga-slow.ng-hide-remove{display:block!important}.nga-fast{-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.nga-fast.ng-hide-add,.nga-fast.ng-hide-remove{display:block!important}.nga-collapse-add{overflow:hidden}.nga-collapse-add.ng-enter:not(.ng-enter-active),.nga-collapse-add.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-collapse-remove{overflow:hidden}.nga-collapse-remove.ng-hide-add.ng-hide-add-active,.nga-collapse-remove.ng-leave.ng-leave-active{max-height:0;padding-top:0;padding-bottom:0}.nga-collapse-move{overflow:hidden}.nga-collapse-move.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-collapse-all{overflow:hidden}.nga-collapse-all.ng-enter:not(.ng-enter-active),.nga-collapse-all.ng-hide-add.ng-hide-add-active,.nga-collapse-all.ng-hide-remove:not(.ng-hide-remove-active),.nga-collapse-all.ng-leave.ng-leave-active,.nga-collapse-all.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-collapse{overflow:hidden}.nga-collapse.ng-enter:not(.ng-enter-active),.nga-collapse.ng-hide-add.ng-hide-add-active,.nga-collapse.ng-hide-remove:not(.ng-hide-remove-active),.nga-collapse.ng-leave.ng-leave-active,.nga-collapse.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-fade-add.ng-enter,.nga-fade-add.ng-hide-remove{opacity:0}.nga-fade-add.ng-enter.ng-enter-active,.nga-fade-add.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-fade-remove.ng-hide-add.ng-hide-add-active,.nga-fade-remove.ng-leave.ng-leave-active{opacity:0}.nga-fade-remove.ng-hide-add,.nga-fade-remove.ng-leave{opacity:1}.nga-fade-move.ng-move{opacity:0}.nga-fade-move.ng-move.ng-move-active{opacity:1}.nga-fade-all.ng-enter,.nga-fade-all.ng-hide-remove{opacity:0}.nga-fade-all.ng-enter.ng-enter-active,.nga-fade-all.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-fade-all.ng-hide-add.ng-hide-add-active,.nga-fade-all.ng-leave.ng-leave-active{opacity:0}.nga-fade-all.ng-hide-add,.nga-fade-all.ng-leave{opacity:1}.nga-fade-all.ng-move{opacity:0}.nga-fade-all.ng-move.ng-move-active{opacity:1}.nga-fade.ng-enter,.nga-fade.ng-hide-remove{opacity:0}.nga-fade.ng-enter.ng-enter-active,.nga-fade.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-fade.ng-hide-add.ng-hide-add-active,.nga-fade.ng-leave.ng-leave-active{opacity:0}.nga-fade.ng-hide-add,.nga-fade.ng-leave{opacity:1}.nga-fade.ng-move{opacity:0}.nga-fade.ng-move.ng-move-active{opacity:1}.nga-rotate-down-add{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-add.ng-enter,.nga-rotate-down-add.ng-hide-remove{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-add.ng-enter.ng-enter-active,.nga-rotate-down-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-down-remove{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-down-remove.ng-leave.ng-leave-active{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-move,.nga-rotate-down-remove.ng-hide-add,.nga-rotate-down-remove.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-move.ng-move{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-all,.nga-rotate-down-move.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-all.ng-enter,.nga-rotate-down-all.ng-hide-remove{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-all.ng-enter.ng-enter-active,.nga-rotate-down-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-all.ng-hide-add.ng-hide-add-active,.nga-rotate-down-all.ng-leave.ng-leave-active{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down-all.ng-hide-add,.nga-rotate-down-all.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down-all.ng-move{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down,.nga-rotate-down-all.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-enter,.nga-rotate-down.ng-hide-remove{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down.ng-enter.ng-enter-active,.nga-rotate-down.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-hide-add.ng-hide-add-active,.nga-rotate-down.ng-leave.ng-leave-active{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down.ng-hide-add,.nga-rotate-down.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-move{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);-o-transform:rotateX(-90deg);transform:rotateX(-90deg)}.nga-rotate-down.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-down.ng-enter,.nga-rotate-down.ng-hide-remove{opacity:0}.nga-rotate-down.ng-enter.ng-enter-active,.nga-rotate-down.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-down.ng-hide-add.ng-hide-add-active,.nga-rotate-down.ng-leave.ng-leave-active{opacity:0}.nga-rotate-down.ng-hide-add,.nga-rotate-down.ng-leave{opacity:1}.nga-rotate-down.ng-move{opacity:0}.nga-rotate-down.ng-move.ng-move-active{opacity:1}.nga-rotate-left-add{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-add.ng-enter,.nga-rotate-left-add.ng-hide-remove{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-add.ng-enter.ng-enter-active,.nga-rotate-left-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-left-remove{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-left-remove.ng-leave.ng-leave-active{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-move,.nga-rotate-left-remove.ng-hide-add,.nga-rotate-left-remove.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-move.ng-move{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-all,.nga-rotate-left-move.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-all.ng-enter,.nga-rotate-left-all.ng-hide-remove{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-all.ng-enter.ng-enter-active,.nga-rotate-left-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-all.ng-hide-add.ng-hide-add-active,.nga-rotate-left-all.ng-leave.ng-leave-active{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left-all.ng-hide-add,.nga-rotate-left-all.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left-all.ng-move{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left,.nga-rotate-left-all.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-enter,.nga-rotate-left.ng-hide-remove{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left.ng-enter.ng-enter-active,.nga-rotate-left.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-hide-add.ng-hide-add-active,.nga-rotate-left.ng-leave.ng-leave-active{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left.ng-hide-add,.nga-rotate-left.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-move{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);-o-transform:rotateY(90deg);transform:rotateY(90deg)}.nga-rotate-left.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-left.ng-enter,.nga-rotate-left.ng-hide-remove{opacity:0}.nga-rotate-left.ng-enter.ng-enter-active,.nga-rotate-left.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-left.ng-hide-add.ng-hide-add-active,.nga-rotate-left.ng-leave.ng-leave-active{opacity:0}.nga-rotate-left.ng-hide-add,.nga-rotate-left.ng-leave{opacity:1}.nga-rotate-left.ng-move{opacity:0}.nga-rotate-left.ng-move.ng-move-active{opacity:1}.nga-rotate-right-add{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-add.ng-enter,.nga-rotate-right-add.ng-hide-remove{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-add.ng-enter.ng-enter-active,.nga-rotate-right-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-right-remove{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-right-remove.ng-leave.ng-leave-active{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-move,.nga-rotate-right-remove.ng-hide-add,.nga-rotate-right-remove.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-move.ng-move{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-all,.nga-rotate-right-move.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-all.ng-enter,.nga-rotate-right-all.ng-hide-remove{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-all.ng-enter.ng-enter-active,.nga-rotate-right-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-all.ng-hide-add.ng-hide-add-active,.nga-rotate-right-all.ng-leave.ng-leave-active{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right-all.ng-hide-add,.nga-rotate-right-all.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right-all.ng-move{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right,.nga-rotate-right-all.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-enter,.nga-rotate-right.ng-hide-remove{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right.ng-enter.ng-enter-active,.nga-rotate-right.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-hide-add.ng-hide-add-active,.nga-rotate-right.ng-leave.ng-leave-active{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right.ng-hide-add,.nga-rotate-right.ng-leave{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-move{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);-o-transform:rotateY(-90deg);transform:rotateY(-90deg)}.nga-rotate-right.ng-move.ng-move-active{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);-o-transform:rotateY(0deg);transform:rotateY(0deg)}.nga-rotate-right.ng-enter,.nga-rotate-right.ng-hide-remove{opacity:0}.nga-rotate-right.ng-enter.ng-enter-active,.nga-rotate-right.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-right.ng-hide-add.ng-hide-add-active,.nga-rotate-right.ng-leave.ng-leave-active{opacity:0}.nga-rotate-right.ng-hide-add,.nga-rotate-right.ng-leave{opacity:1}.nga-rotate-right.ng-move{opacity:0}.nga-rotate-right.ng-move.ng-move-active{opacity:1}.nga-rotate-up-add{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-add.ng-enter,.nga-rotate-up-add.ng-hide-remove{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-add.ng-enter.ng-enter-active,.nga-rotate-up-add.ng-hide-remove.ng-hide-remove-active,.nga-rotate-up-remove{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-remove.ng-hide-add.ng-hide-add-active,.nga-rotate-up-remove.ng-leave.ng-leave-active{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-move,.nga-rotate-up-remove.ng-hide-add,.nga-rotate-up-remove.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-move.ng-move{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-all,.nga-rotate-up-move.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-all.ng-enter,.nga-rotate-up-all.ng-hide-remove{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-all.ng-enter.ng-enter-active,.nga-rotate-up-all.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-all.ng-hide-add.ng-hide-add-active,.nga-rotate-up-all.ng-leave.ng-leave-active{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up-all.ng-hide-add,.nga-rotate-up-all.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up-all.ng-move{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up,.nga-rotate-up-all.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-enter,.nga-rotate-up.ng-hide-remove{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up.ng-enter.ng-enter-active,.nga-rotate-up.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-hide-add.ng-hide-add-active,.nga-rotate-up.ng-leave.ng-leave-active{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up.ng-hide-add,.nga-rotate-up.ng-leave{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-move{-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.nga-rotate-up.ng-move.ng-move-active{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);-o-transform:rotateX(0deg);transform:rotateX(0deg)}.nga-rotate-up.ng-enter,.nga-rotate-up.ng-hide-remove{opacity:0}.nga-rotate-up.ng-enter.ng-enter-active,.nga-rotate-up.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-rotate-up.ng-hide-add.ng-hide-add-active,.nga-rotate-up.ng-leave.ng-leave-active{opacity:0}.nga-rotate-up.ng-hide-add,.nga-rotate-up.ng-leave{opacity:1}.nga-rotate-up.ng-move{opacity:0}.nga-rotate-up.ng-move.ng-move-active{opacity:1}.nga-slide-down-add{position:relative;overflow:hidden}.nga-slide-down-add.ng-enter,.nga-slide-down-add.ng-hide-remove{top:50px}.nga-slide-down-add.ng-enter.ng-enter-active,.nga-slide-down-add.ng-hide-remove.ng-hide-remove-active{top:0}.nga-slide-down-remove{position:relative;overflow:hidden}.nga-slide-down-remove.ng-hide-add.ng-hide-add-active,.nga-slide-down-remove.ng-leave.ng-leave-active{top:50px}.nga-slide-down-remove.ng-hide-add,.nga-slide-down-remove.ng-leave{top:0}.nga-slide-down-move{position:relative;overflow:hidden}.nga-slide-down-move.ng-move{top:50px}.nga-slide-down-move.ng-move.ng-move-active{top:0}.nga-slide-down-all{position:relative;overflow:hidden}.nga-slide-down-all.ng-enter,.nga-slide-down-all.ng-hide-remove{top:50px}.nga-slide-down-all.ng-enter.ng-enter-active,.nga-slide-down-all.ng-hide-remove.ng-hide-remove-active{top:0}.nga-slide-down-all.ng-hide-add.ng-hide-add-active,.nga-slide-down-all.ng-leave.ng-leave-active{top:50px}.nga-slide-down-all.ng-hide-add,.nga-slide-down-all.ng-leave{top:0}.nga-slide-down-all.ng-move{top:50px}.nga-slide-down-all.ng-move.ng-move-active{top:0}.nga-slide-down{position:relative;overflow:hidden;overflow:hidden}.nga-slide-down.ng-enter,.nga-slide-down.ng-hide-remove{top:50px}.nga-slide-down.ng-enter.ng-enter-active,.nga-slide-down.ng-hide-remove.ng-hide-remove-active{top:0}.nga-slide-down.ng-hide-add.ng-hide-add-active,.nga-slide-down.ng-leave.ng-leave-active{top:50px}.nga-slide-down.ng-hide-add,.nga-slide-down.ng-leave{top:0}.nga-slide-down.ng-move{top:50px}.nga-slide-down.ng-move.ng-move-active{top:0}.nga-slide-down.ng-enter,.nga-slide-down.ng-hide-remove{opacity:0}.nga-slide-down.ng-enter.ng-enter-active,.nga-slide-down.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-down.ng-hide-add.ng-hide-add-active,.nga-slide-down.ng-leave.ng-leave-active{opacity:0}.nga-slide-down.ng-hide-add,.nga-slide-down.ng-leave{opacity:1}.nga-slide-down.ng-move{opacity:0}.nga-slide-down.ng-move.ng-move-active{opacity:1}.nga-slide-down.ng-enter:not(.ng-enter-active),.nga-slide-down.ng-hide-add.ng-hide-add-active,.nga-slide-down.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-down.ng-leave.ng-leave-active,.nga-slide-down.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-slide-left-add{position:relative;overflow:hidden}.nga-slide-left-add.ng-enter,.nga-slide-left-add.ng-hide-remove{right:100%}.nga-slide-left-add.ng-enter.ng-enter-active,.nga-slide-left-add.ng-hide-remove.ng-hide-remove-active{right:0}.nga-slide-left-remove{position:relative;overflow:hidden}.nga-slide-left-remove.ng-hide-add.ng-hide-add-active,.nga-slide-left-remove.ng-leave.ng-leave-active{right:100%}.nga-slide-left-remove.ng-hide-add,.nga-slide-left-remove.ng-leave{right:0}.nga-slide-left-move{position:relative;overflow:hidden}.nga-slide-left-move.ng-move{right:100%}.nga-slide-left-move.ng-move.ng-move-active{right:0}.nga-slide-left-all{position:relative;overflow:hidden}.nga-slide-left-all.ng-enter,.nga-slide-left-all.ng-hide-remove{right:100%}.nga-slide-left-all.ng-enter.ng-enter-active,.nga-slide-left-all.ng-hide-remove.ng-hide-remove-active{right:0}.nga-slide-left-all.ng-hide-add.ng-hide-add-active,.nga-slide-left-all.ng-leave.ng-leave-active{right:100%}.nga-slide-left-all.ng-hide-add,.nga-slide-left-all.ng-leave{right:0}.nga-slide-left-all.ng-move{right:100%}.nga-slide-left-all.ng-move.ng-move-active{right:0}.nga-slide-left{position:relative;overflow:hidden;overflow:hidden}.nga-slide-left.ng-enter,.nga-slide-left.ng-hide-remove{right:100%}.nga-slide-left.ng-enter.ng-enter-active,.nga-slide-left.ng-hide-remove.ng-hide-remove-active{right:0}.nga-slide-left.ng-hide-add.ng-hide-add-active,.nga-slide-left.ng-leave.ng-leave-active{right:100%}.nga-slide-left.ng-hide-add,.nga-slide-left.ng-leave{right:0}.nga-slide-left.ng-move{right:100%}.nga-slide-left.ng-move.ng-move-active{right:0}.nga-slide-left.ng-enter,.nga-slide-left.ng-hide-remove{opacity:0}.nga-slide-left.ng-enter.ng-enter-active,.nga-slide-left.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-left.ng-hide-add.ng-hide-add-active,.nga-slide-left.ng-leave.ng-leave-active{opacity:0}.nga-slide-left.ng-hide-add,.nga-slide-left.ng-leave{opacity:1}.nga-slide-left.ng-move{opacity:0}.nga-slide-left.ng-move.ng-move-active{opacity:1}.nga-slide-left.ng-enter:not(.ng-enter-active),.nga-slide-left.ng-hide-add.ng-hide-add-active,.nga-slide-left.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-left.ng-leave.ng-leave-active,.nga-slide-left.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-slide-right-add{position:relative;overflow:hidden}.nga-slide-right-add.ng-enter,.nga-slide-right-add.ng-hide-remove{left:100%}.nga-slide-right-add.ng-enter.ng-enter-active,.nga-slide-right-add.ng-hide-remove.ng-hide-remove-active{left:0}.nga-slide-right-remove{position:relative;overflow:hidden}.nga-slide-right-remove.ng-hide-add.ng-hide-add-active,.nga-slide-right-remove.ng-leave.ng-leave-active{left:100%}.nga-slide-right-remove.ng-hide-add,.nga-slide-right-remove.ng-leave{left:0}.nga-slide-right-move{position:relative;overflow:hidden}.nga-slide-right-move.ng-move{left:100%}.nga-slide-right-move.ng-move.ng-move-active{left:0}.nga-slide-right-all{position:relative;overflow:hidden}.nga-slide-right-all.ng-enter,.nga-slide-right-all.ng-hide-remove{left:100%}.nga-slide-right-all.ng-enter.ng-enter-active,.nga-slide-right-all.ng-hide-remove.ng-hide-remove-active{left:0}.nga-slide-right-all.ng-hide-add.ng-hide-add-active,.nga-slide-right-all.ng-leave.ng-leave-active{left:100%}.nga-slide-right-all.ng-hide-add,.nga-slide-right-all.ng-leave{left:0}.nga-slide-right-all.ng-move{left:100%}.nga-slide-right-all.ng-move.ng-move-active{left:0}.nga-slide-right{position:relative;overflow:hidden;overflow:hidden}.nga-slide-right.ng-enter,.nga-slide-right.ng-hide-remove{left:100%}.nga-slide-right.ng-enter.ng-enter-active,.nga-slide-right.ng-hide-remove.ng-hide-remove-active{left:0}.nga-slide-right.ng-hide-add.ng-hide-add-active,.nga-slide-right.ng-leave.ng-leave-active{left:100%}.nga-slide-right.ng-hide-add,.nga-slide-right.ng-leave{left:0}.nga-slide-right.ng-move{left:100%}.nga-slide-right.ng-move.ng-move-active{left:0}.nga-slide-right.ng-enter,.nga-slide-right.ng-hide-remove{opacity:0}.nga-slide-right.ng-enter.ng-enter-active,.nga-slide-right.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-right.ng-hide-add.ng-hide-add-active,.nga-slide-right.ng-leave.ng-leave-active{opacity:0}.nga-slide-right.ng-hide-add,.nga-slide-right.ng-leave{opacity:1}.nga-slide-right.ng-move{opacity:0}.nga-slide-right.ng-move.ng-move-active{opacity:1}.nga-slide-right.ng-enter:not(.ng-enter-active),.nga-slide-right.ng-hide-add.ng-hide-add-active,.nga-slide-right.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-right.ng-leave.ng-leave-active,.nga-slide-right.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-slide-up-add{position:relative;overflow:hidden}.nga-slide-up-add.ng-enter,.nga-slide-up-add.ng-hide-remove{bottom:50px}.nga-slide-up-add.ng-enter.ng-enter-active,.nga-slide-up-add.ng-hide-remove.ng-hide-remove-active{bottom:0}.nga-slide-up-remove{position:relative;overflow:hidden}.nga-slide-up-remove.ng-hide-add.ng-hide-add-active,.nga-slide-up-remove.ng-leave.ng-leave-active{bottom:50px}.nga-slide-up-remove.ng-hide-add,.nga-slide-up-remove.ng-leave{bottom:0}.nga-slide-up-move{position:relative;overflow:hidden}.nga-slide-up-move.ng-move{bottom:50px}.nga-slide-up-move.ng-move.ng-move-active{bottom:0}.nga-slide-up-all{position:relative;overflow:hidden}.nga-slide-up-all.ng-enter,.nga-slide-up-all.ng-hide-remove{bottom:50px}.nga-slide-up-all.ng-enter.ng-enter-active,.nga-slide-up-all.ng-hide-remove.ng-hide-remove-active{bottom:0}.nga-slide-up-all.ng-hide-add.ng-hide-add-active,.nga-slide-up-all.ng-leave.ng-leave-active{bottom:50px}.nga-slide-up-all.ng-hide-add,.nga-slide-up-all.ng-leave{bottom:0}.nga-slide-up-all.ng-move{bottom:50px}.nga-slide-up-all.ng-move.ng-move-active{bottom:0}.nga-slide-up{position:relative;overflow:hidden;overflow:hidden}.nga-slide-up.ng-enter,.nga-slide-up.ng-hide-remove{bottom:50px}.nga-slide-up.ng-enter.ng-enter-active,.nga-slide-up.ng-hide-remove.ng-hide-remove-active{bottom:0}.nga-slide-up.ng-hide-add.ng-hide-add-active,.nga-slide-up.ng-leave.ng-leave-active{bottom:50px}.nga-slide-up.ng-hide-add,.nga-slide-up.ng-leave{bottom:0}.nga-slide-up.ng-move{bottom:50px}.nga-slide-up.ng-move.ng-move-active{bottom:0}.nga-slide-up.ng-enter,.nga-slide-up.ng-hide-remove{opacity:0}.nga-slide-up.ng-enter.ng-enter-active,.nga-slide-up.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-slide-up.ng-hide-add.ng-hide-add-active,.nga-slide-up.ng-leave.ng-leave-active{opacity:0}.nga-slide-up.ng-hide-add,.nga-slide-up.ng-leave{opacity:1}.nga-slide-up.ng-move{opacity:0}.nga-slide-up.ng-move.ng-move-active{opacity:1}.nga-slide-up.ng-enter:not(.ng-enter-active),.nga-slide-up.ng-hide-add.ng-hide-add-active,.nga-slide-up.ng-hide-remove:not(.ng-hide-remove-active),.nga-slide-up.ng-leave.ng-leave-active,.nga-slide-up.ng-move{max-height:0;padding-top:0;padding-bottom:0}.nga-squash-left-add{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-add.ng-enter,.nga-squash-left-add.ng-hide-remove{width:0;right:100%}.nga-squash-left-add.ng-enter:not(.ng-enter-active),.nga-squash-left-add.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-left-add.ng-enter.ng-enter-active,.nga-squash-left-add.ng-hide-remove.ng-hide-remove-active{width:100%;right:0}.nga-squash-left-remove{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-remove.ng-hide-add,.nga-squash-left-remove.ng-leave{width:100%;right:0}.nga-squash-left-remove.ng-hide-add.ng-hide-add-active,.nga-squash-left-remove.ng-leave.ng-leave-active{width:0;right:100%;padding-left:0;padding-right:0}.nga-squash-left-move{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-move.ng-move{width:0;right:100%}.nga-squash-left-move.ng-move.ng-move-active{width:100%;right:0}.nga-squash-left-all{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left-all.ng-enter,.nga-squash-left-all.ng-hide-remove{width:0;right:100%}.nga-squash-left-all.ng-enter:not(.ng-enter-active),.nga-squash-left-all.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-left-all.ng-enter.ng-enter-active,.nga-squash-left-all.ng-hide-add,.nga-squash-left-all.ng-hide-remove.ng-hide-remove-active,.nga-squash-left-all.ng-leave{width:100%;right:0}.nga-squash-left-all.ng-hide-add.ng-hide-add-active,.nga-squash-left-all.ng-leave.ng-leave-active{width:0;right:100%;padding-left:0;padding-right:0}.nga-squash-left-all.ng-move{width:0;right:100%}.nga-squash-left-all.ng-move.ng-move-active{width:100%;right:0}.nga-squash-left{position:relative;overflow:hidden;white-space:nowrap;left:0}.nga-squash-left.ng-enter,.nga-squash-left.ng-hide-remove{width:0;right:100%}.nga-squash-left.ng-enter:not(.ng-enter-active),.nga-squash-left.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-left.ng-enter.ng-enter-active,.nga-squash-left.ng-hide-add,.nga-squash-left.ng-hide-remove.ng-hide-remove-active,.nga-squash-left.ng-leave{width:100%;right:0}.nga-squash-left.ng-hide-add.ng-hide-add-active,.nga-squash-left.ng-leave.ng-leave-active{width:0;right:100%;padding-left:0;padding-right:0}.nga-squash-left.ng-move{width:0;right:100%}.nga-squash-left.ng-move.ng-move-active{width:100%;right:0}.nga-squash-right-add{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-add.ng-enter,.nga-squash-right-add.ng-hide-remove{width:0;left:100%}.nga-squash-right-add.ng-enter:not(.ng-enter-active),.nga-squash-right-add.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-right-add.ng-enter.ng-enter-active,.nga-squash-right-add.ng-hide-remove.ng-hide-remove-active{width:100%;left:0}.nga-squash-right-remove{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-remove.ng-hide-add,.nga-squash-right-remove.ng-leave{width:100%;left:0}.nga-squash-right-remove.ng-hide-add.ng-hide-add-active,.nga-squash-right-remove.ng-leave.ng-leave-active{width:0;left:100%;padding-left:0;padding-right:0}.nga-squash-right-move{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-move.ng-move{width:0;left:100%}.nga-squash-right-move.ng-move.ng-move-active{width:100%;left:0}.nga-squash-right-all{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right-all.ng-enter,.nga-squash-right-all.ng-hide-remove{width:0;left:100%}.nga-squash-right-all.ng-enter:not(.ng-enter-active),.nga-squash-right-all.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-right-all.ng-enter.ng-enter-active,.nga-squash-right-all.ng-hide-add,.nga-squash-right-all.ng-hide-remove.ng-hide-remove-active,.nga-squash-right-all.ng-leave{width:100%;left:0}.nga-squash-right-all.ng-hide-add.ng-hide-add-active,.nga-squash-right-all.ng-leave.ng-leave-active{width:0;left:100%;padding-left:0;padding-right:0}.nga-squash-right-all.ng-move{width:0;left:100%}.nga-squash-right-all.ng-move.ng-move-active{width:100%;left:0}.nga-squash-right{position:relative;overflow:hidden;white-space:nowrap;right:0}.nga-squash-right.ng-enter,.nga-squash-right.ng-hide-remove{width:0;left:100%}.nga-squash-right.ng-enter:not(.ng-enter-active),.nga-squash-right.ng-hide-remove:not(.ng-hide-remove-active){padding-left:0;padding-right:0}.nga-squash-right.ng-enter.ng-enter-active,.nga-squash-right.ng-hide-add,.nga-squash-right.ng-hide-remove.ng-hide-remove-active,.nga-squash-right.ng-leave{width:100%;left:0}.nga-squash-right.ng-hide-add.ng-hide-add-active,.nga-squash-right.ng-leave.ng-leave-active{width:0;left:100%;padding-left:0;padding-right:0}.nga-squash-right.ng-move{width:0;left:100%}.nga-squash-right.ng-move.ng-move-active{width:100%;left:0}.nga-squash-vertical-add{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-add.ng-enter,.nga-squash-vertical-add.ng-hide-remove{top:100%}.nga-squash-vertical-add.ng-enter:not(.ng-enter-active),.nga-squash-vertical-add.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-add.ng-enter.ng-enter-active,.nga-squash-vertical-add.ng-hide-remove.ng-hide-remove-active{top:0}.nga-squash-vertical-remove{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-remove.ng-hide-add,.nga-squash-vertical-remove.ng-leave{top:0}.nga-squash-vertical-remove.ng-hide-add.ng-hide-add-active,.nga-squash-vertical-remove.ng-leave.ng-leave-active{top:100%;max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-move{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-move.ng-move{top:100%}.nga-squash-vertical-move.ng-move.ng-move-active{top:0}.nga-squash-vertical-all{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical-all.ng-enter,.nga-squash-vertical-all.ng-hide-remove{top:100%}.nga-squash-vertical-all.ng-enter:not(.ng-enter-active),.nga-squash-vertical-all.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-all.ng-enter.ng-enter-active,.nga-squash-vertical-all.ng-hide-add,.nga-squash-vertical-all.ng-hide-remove.ng-hide-remove-active,.nga-squash-vertical-all.ng-leave{top:0}.nga-squash-vertical-all.ng-hide-add.ng-hide-add-active,.nga-squash-vertical-all.ng-leave.ng-leave-active{top:100%;max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical-all.ng-move{top:100%}.nga-squash-vertical-all.ng-move.ng-move-active{top:0}.nga-squash-vertical{position:relative;overflow:hidden;bottom:0}.nga-squash-vertical.ng-enter,.nga-squash-vertical.ng-hide-remove{top:100%}.nga-squash-vertical.ng-enter:not(.ng-enter-active),.nga-squash-vertical.ng-hide-remove:not(.ng-hide-remove-active){max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical.ng-enter.ng-enter-active,.nga-squash-vertical.ng-hide-add,.nga-squash-vertical.ng-hide-remove.ng-hide-remove-active,.nga-squash-vertical.ng-leave{top:0}.nga-squash-vertical.ng-hide-add.ng-hide-add-active,.nga-squash-vertical.ng-leave.ng-leave-active{top:100%;max-height:0;padding-top:0;padding-bottom:0}.nga-squash-vertical.ng-move{top:100%}.nga-squash-vertical.ng-move.ng-move-active{top:0}.nga-squash-vertical.ng-enter,.nga-squash-vertical.ng-hide-remove{opacity:0}.nga-squash-vertical.ng-enter.ng-enter-active,.nga-squash-vertical.ng-hide-remove.ng-hide-remove-active{opacity:1}.nga-squash-vertical.ng-hide-add.ng-hide-add-active,.nga-squash-vertical.ng-leave.ng-leave-active{opacity:0}.nga-squash-vertical.ng-hide-add,.nga-squash-vertical.ng-leave{opacity:1}.nga-squash-vertical.ng-move{opacity:0}.nga-squash-vertical.ng-move.ng-move-active{opacity:1}.nga-stagger-add.ng-enter-stagger,.nga-stagger-leave.ng-leave-stagger,.nga-stagger-move.ng-move-stagger,.nga-stagger.ng-enter-stagger,.nga-stagger.ng-leave-stagger,.nga-stagger.ng-move-stagger{-webkit-transition-delay:100ms;-moz-transition-delay:100ms;-o-transition-delay:100ms;transition-delay:100ms;-webkit-transition-duration:0;-moz-transition-duration:0;-o-transition-duration:0;transition-duration:0}.nga-stagger-fast.ng-enter-stagger,.nga-stagger-fast.ng-leave-stagger,.nga-stagger-fast.ng-move-stagger{-webkit-transition-delay:20ms;-moz-transition-delay:20ms;-o-transition-delay:20ms;transition-delay:20ms;-webkit-transition-duration:0;-moz-transition-duration:0;-o-transition-duration:0;transition-duration:0}.nga-stagger-slow.ng-enter-stagger,.nga-stagger-slow.ng-leave-stagger,.nga-stagger-slow.ng-move-stagger{-webkit-transition-delay:200ms;-moz-transition-delay:200ms;-o-transition-delay:200ms;transition-delay:200ms;-webkit-transition-duration:0;-moz-transition-duration:0;-o-transition-duration:0;transition-duration:0}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Module\nvar code = \"
     = (click to expand)
    \";\n// Exports\nmodule.exports = code;","import * as angular from 'angular';\r\nimport {IAttributes, IDirectiveLinkFn} from \"angular\";\r\n\r\nfunction getNames(form, input: string) {\r\n let validNames: string[] = [];\r\n for (var name of input.split(' ')) {\r\n name = name.trim();\r\n if (!form[name]) {\r\n console.warn(form.$name + '.' + name + ' not found - did you forget the name attribute on the input element?');\r\n } else {\r\n validNames.push(name);\r\n }\r\n }\r\n return validNames;\r\n}\r\n\r\n\r\nfunction bootstrapFormValidation($timeout: ng.ITimeoutService): ng.IDirective {\r\n let validClass = 'has-success';\r\n let blankClass = 'has-warning';\r\n let invalidClass = 'has-error';\r\n return {\r\n restrict: 'A',\r\n require: '^form',\r\n\r\n link: function (scope: ng.IScope, element: JQLite, attrs: IAttributes, form: ng.IFormController): IDirectiveLinkFn {\r\n if (!form) {\r\n console.warn('did not get a ngFormController');\r\n return;\r\n }\r\n\r\n let names = attrs.formValidation;\r\n if (!names) {\r\n console.warn('no name value supplied to form-validation');\r\n return;\r\n }\r\n\r\n // delay execution until form has fully loaded\r\n $timeout(() => {\r\n let validNames = getNames(form, names);\r\n for (var modelName of validNames) {\r\n let modelController: ng.INgModelController = form[modelName];\r\n modelController.$viewChangeListeners.push(() => {\r\n console.debug('viewChangeLister called');\r\n let anyInvalid = validNames.some(name => form[name].$invalid && (form[name].$touched || form.$submitted));\r\n if(anyInvalid){\r\n $(element).removeClass(validClass);\r\n $(element).removeClass(blankClass);\r\n $(element).addClass(invalidClass);\r\n return;\r\n }\r\n\r\n let anyBlank = validNames.some(name => !form[name].$modelValue && form[name].$touched);\r\n if(anyBlank){\r\n $(element).removeClass(invalidClass);\r\n $(element).removeClass(validClass);\r\n $(element).addClass(blankClass);\r\n return;\r\n }\r\n\r\n let allValid = validNames.every(inputName => form[inputName].$valid);\r\n if(allValid){\r\n $(element).removeClass(invalidClass);\r\n $(element).removeClass(blankClass);\r\n $(element).addClass(validClass);\r\n return;\r\n }\r\n\r\n console.debug('wat');\r\n });\r\n }\r\n });\r\n\r\n\r\n },\r\n };\r\n}\r\n\r\nexport default angular.module('directives.bootstrapFormValidation', [])\r\n .directive('formValidation', bootstrapFormValidation)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {IQService, IScope} from \"angular\";\r\nimport {UserStorageService} from \"../modules/UserStorageModule\";\r\nimport {DataHubService} from \"../modules/DataHubModule\";\r\nimport {SpinnerService} from \"../modules/SpinnerModule\";\r\n\r\nfunction clickToDial($q: IQService, $userStorage: UserStorageService, $dataHub: DataHubService, $spinner: SpinnerService) {\r\n function dial(destination: string) {\r\n var q = $q.defer();\r\n q.promise\r\n .then(result => {\r\n if (result == null || result.Value == null) return;\r\n $userStorage[result.Type] = result.Value;\r\n $spinner.show('Dialing');\r\n $dataHub.server.asteriskCallOriginate(result.Value, destination)\r\n .finally(() => $spinner.hide());\r\n });\r\n dialModal(q, $userStorage.myExtension, $userStorage.myCellPhone);\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {clickToDial: '<'},\r\n link(scope, element, attrs) {\r\n element.bind('click', event => {\r\n dial(scope.clickToDial);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n });\r\n }\r\n };\r\n}\r\n\r\n\r\nfunction dialModal(q: angular.IDeferred, extension: string, cell: string) {\r\n var dialog = document.createElement('div');\r\n dialog.innerHTML = require('./ClickToDial.html');\r\n document.body.appendChild(dialog);\r\n\r\n const $modal = $(dialog)\r\n .find('.modal')\r\n .modal({show: true, keyboard: false, backdrop: 'static'});\r\n\r\n $modal.find('#myExtension').val(extension);\r\n $modal.find('#myCellPhone').val(cell);\r\n\r\n $modal.find('button[data-dial-ext]').on('click', () => {\r\n q.resolve({\r\n Type: 'myExtension',\r\n Value: $modal.find('#myExtension').val().toString()\r\n });\r\n });\r\n\r\n $modal.find('button[data-dial-cell]').on('click', () => {\r\n q.resolve({\r\n Type: 'myCellPhone',\r\n Value: $modal.find('#myCellPhone').val().toString()\r\n });\r\n });\r\n\r\n $modal.find('button[data-cancel]').on('click', () => {\r\n q.resolve(null);\r\n });\r\n\r\n $modal.on('hidden.bs.modal', function (e) {\r\n document.body.removeChild(dialog);\r\n });\r\n\r\n q.promise.finally(() => {\r\n $modal.modal('hide');\r\n });\r\n}\r\n\r\nclass DialOption {\r\n public Type: string;\r\n public Value: string;\r\n}\r\n\r\nexport default angular.module('directives.clickToDial', [])\r\n .directive('clickToDial', clickToDial)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction modal() {\r\n return {\r\n template:\r\n '
    ',\r\n restrict: 'E',\r\n transclude: true,\r\n replace: true,\r\n scope: { title: '@', visible: '=', onShown: '&', onHide: '&' },\r\n link: function postLink(scope: any, element, attrs) {\r\n\r\n jQuery(element).modal({\r\n show: false,\r\n keyboard: attrs.keyboard,\r\n backdrop: attrs.backdrop\r\n });\r\n\r\n scope.$watch(function () { return scope.visible; },\r\n function (value) {\r\n\r\n if (value) {\r\n $(element).modal('show');\r\n } else {\r\n $(element).modal('hide');\r\n }\r\n });\r\n\r\n $(element).on('shown.bs.modal',\r\n function () {\r\n scope.$apply(function () {\r\n scope.$parent[attrs.visible] = true;\r\n });\r\n });\r\n\r\n $(element).on('shown.bs.modal',\r\n function () {\r\n scope.$apply(function () {\r\n scope.onShown({});\r\n });\r\n });\r\n\r\n $(element).on('hidden.bs.modal',\r\n function () {\r\n scope.$apply(function () {\r\n scope.$parent[attrs.visible] = false;\r\n });\r\n });\r\n\r\n $(element).on('hidden.bs.modal',\r\n function () {\r\n scope.$apply(function () {\r\n scope.onHide({});\r\n });\r\n });\r\n }\r\n };\r\n};\r\n\r\nfunction modalHeader() {\r\n return {\r\n template:\r\n '

    {{title}}

    ',\r\n replace: true,\r\n restrict: 'E',\r\n scope: { title: '@' }\r\n };\r\n};\r\n\r\nfunction modalBody() {\r\n return {\r\n template: '
    ',\r\n replace: true,\r\n restrict: 'E',\r\n transclude: true\r\n };\r\n};\r\n\r\nfunction modalFooter() {\r\n return {\r\n template: '
    ',\r\n replace: true,\r\n restrict: 'E',\r\n transclude: true\r\n };\r\n};\r\n\r\nexport default angular.module('directives.modal', [])\r\n .directive('modal', modal)\r\n .directive('modalHeader', modalHeader)\r\n .directive('modalBody', modalBody)\r\n .directive('modalFooter', modalFooter)\r\n .name;","import * as angular from 'angular';\r\n\r\nexport class ApiService {\r\n apiBase: string;\r\n constructor(private $http: angular.IHttpService,\r\n private $window: angular.IWindowService,\r\n private toaster: any) {\r\n this.apiBase = $window.location.hostname == 'localhost' ?\r\n 'http://localhost:8081/api/' : $window.apiBase;\r\n }\r\n\r\n get(url: string, config?: angular.IRequestShortcutConfig): angular.IHttpPromise {\r\n return this.$http.get(this.apiBase + url, config)\r\n }\r\n\r\n post(url: string, data: any, config?: angular.IRequestShortcutConfig): angular.IHttpPromise {\r\n return this.$http.post(this.apiBase + url, data, config);\r\n }\r\n\r\n defaultErrorHandler = (reason: any) => {\r\n console.error(reason);\r\n if (!reason) return;\r\n var msg = null;\r\n if (reason.data) {\r\n if (reason.data.message)\r\n msg = reason.data.message;\r\n if (reason.data.exceptionMessage)\r\n msg = msg + reason.data.exceptionMessage;\r\n } else if (reason.statusText && reason.statusText.length > 0) {\r\n msg = reason.statusText;\r\n } else {\r\n msg = `An error occurred: ${reason.status} ${reason.xhrStatus}`;\r\n }\r\n this.toaster.error(msg);\r\n }\r\n}\r\n\r\nexport default angular.module('services.api', [])\r\n .service('$api', ApiService)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\n// https://stackoverflow.com/a/39726751/2358953\r\n\r\nexport type DebounceFactory = (func: Function, wait: number, immediate: boolean) => () => ng.IPromise<{}>;\r\n\r\nexport default angular.module('factory.debounce', [])\r\n .factory('$debounce', ['$timeout', '$q', ($timeout: ng.ITimeoutService, $q: ng.IQService): DebounceFactory => {\r\n // The service is actually this function, which we call with the func\r\n // that should be debounced and how long to wait in between calls\r\n let factory: DebounceFactory = function debounce(func: Function, wait: number, immediate: boolean): () => ng.IPromise<{}> {\r\n var timeout;\r\n // Create a deferred object that will be resolved when we need to\r\n // actually call the func\r\n var deferred = $q.defer();\r\n return function (): ng.IPromise<{}> {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) {\r\n deferred.resolve(func.apply(context, args));\r\n deferred = $q.defer();\r\n }\r\n };\r\n var callNow = immediate && !timeout;\r\n if (timeout) {\r\n $timeout.cancel(timeout);\r\n }\r\n timeout = $timeout(later, wait);\r\n if (callNow) {\r\n deferred.resolve(func.apply(context, args));\r\n deferred = $q.defer();\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n }\r\n return factory;\r\n\r\n }])\r\n .name;","import * as angular from 'angular';\r\n\r\nexport class SpinnerService {\r\n static $inject = ['$window'];\r\n static count = 0;\r\n spinner = $('#spinner');\r\n caption = $('#spinnerCaption');\r\n\r\n show(message: string = null, incrementCounter = true): void {\r\n this.caption.text(message);\r\n this.spinner.show();\r\n if (incrementCounter || SpinnerService.count === 0)\r\n SpinnerService.count++;\r\n }\r\n\r\n hide(): void {\r\n SpinnerService.count--;\r\n if (SpinnerService.count <= 0) {\r\n this.spinner.hide();\r\n SpinnerService.count = 0;\r\n }\r\n }\r\n\r\n reset(): void {\r\n SpinnerService.count = 0;\r\n this.spinner.hide();\r\n }\r\n}\r\n\r\nexport default angular.module('services.spinner', [])\r\n .service('$spinner', SpinnerService)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nexport class LoggerService {\r\n\r\n public logHandler: (severity: string, messages: string[]) => void;\r\n\r\n constructor() {\r\n console.debug(\"[Logger] Initialized\")\r\n }\r\n\r\n private send = (consoleMethod: ((message?: any, ...optionalParams: any[]) => void),\r\n message?: any,\r\n optionalParams?: any[]) => {\r\n // log to console\r\n let args: any[] = [];\r\n args.push('[Logger]');\r\n args.push(message);\r\n if (optionalParams && optionalParams.length)\r\n args = args.concat(optionalParams);\r\n consoleMethod.apply(window.console, args);\r\n \r\n if(!this.logHandler || !(this.logHandler instanceof Function))\r\n return;\r\n\r\n try {\r\n let msgs: string[] = [];\r\n if (typeof (message) == 'string')\r\n msgs.push(message);\r\n else\r\n msgs.push(JSON.stringify(message, null, 2));\r\n if (optionalParams)\r\n optionalParams.forEach(p => {\r\n if (typeof (p) == 'string')\r\n msgs.push(p);\r\n else\r\n msgs.push(JSON.stringify(p, null, 2));\r\n });\r\n this.logHandler(consoleMethod.name, msgs);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n log = (message?: any, ...optionalParams: any[]) => {\r\n this.send.apply(this, [window.console.log, message, optionalParams]);\r\n };\r\n\r\n info(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.info, message, optionalParams);\r\n };\r\n\r\n debug(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.debug, message, optionalParams);\r\n };\r\n\r\n warn(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.warn, message, optionalParams);\r\n };\r\n\r\n error(message?: any, ...optionalParams: any[]) {\r\n this.send(window.console.error, message, optionalParams);\r\n };\r\n}\r\n\r\nexport default angular.module('services.logger', [])\r\n .service('$logger', LoggerService)\r\n .name;\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Enum.VirtualClassType\r\nexport enum VirtualClassType {\r\n \r\n None = 0,\r\n Myers = 1,\r\n Zoom = 2\r\n}\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\nimport { MessageSender } from './MessageSender';\r\nimport { UserDisplayDto } from './UserDisplayDto';\r\n\r\n// Myers.StudentManagementSystem.Data.Models.VirtualClassParticipantMessageDto\r\nexport class VirtualClassParticipantMessageDto {\r\n public id: number = 0;\r\n public participantId: number = 0;\r\n public timestamp: Date = new Date(0);\r\n public from: string = null;\r\n public sender: MessageSender = null;\r\n public userId: number = 0;\r\n public read: boolean = false;\r\n public readTime: Date = null;\r\n public readByUser: UserDisplayDto = null;\r\n public delivered: boolean = false;\r\n public deliveredTime: Date = null;\r\n public message: string = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\nimport { MessageSender } from './MessageSender';\r\n\r\n// Myers.StudentManagementSystem.Data.Models.StudentExamMessageDto\r\nexport class StudentExamMessageDto {\r\n public id: number = 0;\r\n public examId: number = 0;\r\n public timestamp: Date = new Date(0);\r\n public from: string = null;\r\n public initials: string = null;\r\n public sender: MessageSender = null;\r\n public userId: number = 0;\r\n public read: boolean = false;\r\n public message: string = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import * as angular from 'angular';\r\nimport {addMonths, addYears, intervalToDuration} from \"date-fns\";\r\n\r\nfunction age() {\r\n return {\r\n template: '{{years}}y {{months}}m {{days}}d (underage until {{ofAge|date:\"mediumDate\"}})',\r\n restrict: 'E',\r\n scope: {\r\n dob: '<',\r\n ofAge: '=?'\r\n },\r\n controller: function ($scope) {\r\n\r\n $scope.$watch(() => $scope.dob, function (value) {\r\n if (!value) {\r\n $scope.valid = false;\r\n return;\r\n }\r\n\r\n let duration = intervalToDuration({start: $scope.dob, end: new Date()})\r\n $scope.years = duration.years;\r\n $scope.months = duration.months;\r\n $scope.days = duration.days;\r\n $scope.valid = true;\r\n $scope.underage = $scope.years < 15 || $scope.years == 15 && $scope.months < 5;\r\n $scope.ofAge = addMonths(addYears($scope.dob, 15), 5).toISOString();\r\n })\r\n },\r\n };\r\n}\r\n\r\nexport default angular.module('directives.age', [])\r\n .directive('age', age)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction bottomNav() {\r\n return {\r\n template: require('./bottomNav.html'),\r\n restrict: 'E',\r\n transclude: true,\r\n replace: true,\r\n };\r\n};\r\n\r\nfunction bottomNavLeft() {\r\n return {\r\n template: require('./bottomNavLeft.html'),\r\n replace: true,\r\n transclude: true,\r\n restrict: 'E',\r\n };\r\n};\r\n\r\n\r\nfunction bottomNavRight() {\r\n return {\r\n template: require('./bottomNavRight.html'),\r\n replace: true,\r\n transclude: true,\r\n restrict: 'E',\r\n };\r\n};\r\n\r\nexport default angular.module('directives.bottomNav', [])\r\n .directive('bottomNav', bottomNav)\r\n .directive('bottomNavLeft', bottomNavLeft)\r\n .directive('bottomNavRight', bottomNavRight)\r\n .name;\r\n","import * as angular from \"angular\";\r\nimport ChartJs, {Chart} from \"chart.js\";\r\n\r\n// Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\r\nChart.defaults.global.tooltips.mode = 'label';\r\nChart.defaults.global.elements.line.borderWidth = 2;\r\nChart.defaults.global.elements.rectangle.borderWidth = 2;\r\n// Chart.defaults.global.legend.display = false;\r\nChart.defaults.global.colors = [\r\n '#97BBCD', // blue\r\n '#DCDCDC', // light grey\r\n '#F7464A', // red\r\n '#46BFBD', // green\r\n '#FDB45C', // yellow\r\n '#949FB1', // grey\r\n '#4D5360' // dark grey\r\n];\r\n\r\n\r\nfunction chart($rootScope) {\r\n let chartColors;\r\n\r\n function getColors(type, dataLength: number) {\r\n var colors = angular.copy(chartColors || Chart.defaults.global.colors);\r\n var notEnoughColors = colors.length < dataLength;\r\n while (colors.length < dataLength) {\r\n colors.push(getRandomColor());\r\n }\r\n // mutate colors in this case as we don't want\r\n // the colors to change on each refresh\r\n if (notEnoughColors) chartColors = colors;\r\n return colors.map(convertColor);\r\n }\r\n\r\n function convertColor(color) {\r\n // Allows RGB and RGBA colors to be input as a string: e.g.: \"rgb(159,204,0)\", \"rgba(159,204,0, 0.5)\"\r\n if (typeof color === 'string' && color[0] === 'r') return getColor(rgbStringToRgb(color));\r\n // Allows hex colors to be input as a string.\r\n if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));\r\n // Allows colors to be input as an object, bypassing getColor() entirely\r\n if (typeof color === 'object' && color !== null) return color;\r\n return getRandomColor();\r\n }\r\n\r\n function getRandomColor() {\r\n var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\r\n return getColor(color);\r\n }\r\n\r\n function getColor(color) {\r\n var alpha = color[3] || 1;\r\n color = color.slice(0, 3);\r\n return {\r\n backgroundColor: rgba(color, 0.2),\r\n pointBackgroundColor: rgba(color, alpha),\r\n pointHoverBackgroundColor: rgba(color, 0.8),\r\n borderColor: rgba(color, alpha),\r\n pointBorderColor: '#fff',\r\n pointHoverBorderColor: rgba(color, alpha)\r\n };\r\n }\r\n\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n\r\n function rgba(color, alpha) {\r\n return 'rgba(' + color.concat(alpha).join(',') + ')';\r\n }\r\n\r\n// Credit: http://stackoverflow.com/a/11508164/1190235\r\n function hexToRgb(hex) {\r\n var bigint = parseInt(hex, 16),\r\n r = (bigint >> 16) & 255,\r\n g = (bigint >> 8) & 255,\r\n b = bigint & 255;\r\n\r\n return [r, g, b];\r\n }\r\n\r\n function rgbStringToRgb(color) {\r\n var match = color.match(/^rgba?\\(([\\d,.]+)\\)$/);\r\n if (!match) throw new Error('Cannot parse rgb value');\r\n color = match[1].split(',');\r\n return color.map(Number);\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n chartConfig: '=chart'\r\n },\r\n link: function (scope, element, attr) {\r\n let myChart;\r\n\r\n function destroy() {\r\n if (!myChart) return;\r\n myChart.destroy();\r\n console.debug('chart destroyed');\r\n }\r\n\r\n function create(element, config) {\r\n destroy();\r\n if (!element || !config) return;\r\n var ctx = element[0].getContext('2d');\r\n console.debug('chart creating', config);\r\n myChart = new ChartJs.Chart(ctx, angular.copy(config));\r\n console.debug('chart created', myChart);\r\n scope.chartConfig.update = true;\r\n update();\r\n }\r\n\r\n function update() {\r\n if (!myChart) return;\r\n if (!scope.chartConfig || !scope.chartConfig.update || !scope.chartConfig.data) return;\r\n let data = scope.chartConfig.data;\r\n var colors = getColors(scope.chartConfig.type, data.datasets.length);\r\n console.debug('chart updating', data);\r\n myChart.data = {\r\n labels: data.labels,\r\n datasets: data.datasets.map((item, index) => {\r\n return angular.extend(item, colors[item.colorIndex || index], item);\r\n })\r\n };\r\n myChart.update();\r\n console.debug('chart updated', myChart.data);\r\n scope.chartConfig.update = false;\r\n }\r\n\r\n scope.$watch(() => scope.chartConfig, () => {\r\n create(element, scope.chartConfig);\r\n });\r\n\r\n scope.$watch(() => scope.chartConfig ? scope.chartConfig.update : null, update);\r\n\r\n scope.$on('$destroy', function () {\r\n destroy();\r\n });\r\n\r\n scope.$on('$resize', function () {\r\n if (myChart) myChart.resize();\r\n });\r\n }\r\n };\r\n}\r\n\r\nexport default angular.module('directives.chart', [])\r\n .directive('chart', chart)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {IFilterCurrency, IFilterService} from \"angular\";\r\n\r\nfunction currencyFilter($filter: IFilterService) {\r\n console.debug('ding');\r\n var ngCurrencyFilter = $filter('currency');\r\n return function (amount: number, symbol?: string, fractionSize?: number): string {\r\n var result = ngCurrencyFilter(amount, symbol, fractionSize);\r\n if (result == null) return result;\r\n if (result[0] === '-') {\r\n result = '(' + result.substr(1) + ')';\r\n }\r\n return result;\r\n };\r\n}\r\n\r\nexport default angular.module('directives.currency', [])\r\n .filter('currency2', currencyFilter)\r\n .name;\r\n","import * as angular from \"angular\";\r\nimport {ConfigService} from \"../modules/ConfigModule\";\r\n\r\nfunction datePicker($config: ConfigService) {\r\n function getFieldModelName(attrs) {\r\n var objectAndField = attrs.ngModel;\r\n var names = objectAndField.split('.');\r\n return names[names.length - 1];\r\n }\r\n\r\n return {\r\n template: require('./DatePicker.html'),\r\n restrict: 'E',\r\n require: ['ngModel'],\r\n scope: {\r\n title: '@',\r\n placeholder:'@',\r\n ngModel: '=',\r\n ngDisabled: '=',\r\n ngRequired: '='\r\n },\r\n link: (scope, element, attrs) => {\r\n scope.name = getFieldModelName(attrs);\r\n },\r\n };\r\n}\r\n\r\nexport default angular.module('directives.datePicker', [])\r\n .directive('datePicker', datePicker)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport * as moment from \"moment\";\r\n\r\n// apply ng-min and ng-max to non-date input elements\r\n// code based on https://github.com/angular/angular.js/blob/65f800e19ec669ab7d5abbd2f6b82bf60110651a/src/ng/directive/input.js\r\nfunction dateValidation($parse) {\r\n return {\r\n restrict: 'A',\r\n require: '^ngModel',\r\n link: function (scope, element, attr, ctrl: ng.INgModelController) {\r\n\r\n function isRequired() {\r\n return angular.isDefined(attr.required) || (attr.ngRequired && $parse(attr.ngRequired)(scope));\r\n }\r\n\r\n if (angular.isDefined(attr.min) || attr.ngMin) {\r\n ctrl.$validators.min = function (value) {\r\n var minVal = attr.min || $parse(attr.ngMin)(scope);\r\n if(!minVal) return true;\r\n var parsedMinVal = parseDate(minVal);\r\n return (!value && !isRequired()) || (parseDate(value) >= parsedMinVal);\r\n };\r\n }\r\n\r\n if (angular.isDefined(attr.max) || attr.ngMax) {\r\n ctrl.$validators.max = function (value) {\r\n var maxVal = attr.max || $parse(attr.ngMax)(scope);\r\n if(!maxVal) return true;\r\n var parsedMaxVal = parseDate(maxVal);\r\n return (!value && !isRequired()) || (parseDate(value) <= parsedMaxVal);\r\n };\r\n }\r\n\r\n ctrl.$parsers.push(function(viewValue) {\r\n if(!viewValue) return viewValue;\r\n let m = moment(viewValue);\r\n let formattedValue = m.format('MM/DD/YYYY');\r\n if(ctrl.$viewValue !== formattedValue){\r\n ctrl.$setViewValue(formattedValue);\r\n ctrl.$render();\r\n }\r\n return m.toDate();\r\n })\r\n\r\n }\r\n };\r\n}\r\n\r\n\r\nfunction parseDate(input) {\r\n return moment(input).toDate();\r\n}\r\n\r\n\r\nexport default angular.module('directives.inputDate', [])\r\n .directive('dateValidation', dateValidation)\r\n .name;\r\n","import * as angular from \"angular\";\r\nimport {ConfigService} from \"../modules/ConfigModule\";\r\nimport {RoleName} from \"../model/RoleName\";\r\n\r\nfunction debug($config: ConfigService) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n title: '@model',\r\n model: ' {\r\n scope.$watch(() => $config.userInfo, () => {\r\n scope.developer = $config.userInfo && $config.userInfo.roles.indexOf(RoleName.Developer)>=0;\r\n })\r\n },\r\n template: require('./Debug.html')\r\n };\r\n}\r\n\r\nfunction debug2() {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n title: '@model',\r\n model: ' {\r\n scope.developer = true;\r\n },\r\n template: require('./Debug.html')\r\n };\r\n}\r\n\r\nexport default angular.module('directives.debug', [])\r\n .directive('debug', debug)\r\n .directive('debug2', debug2)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport * as moment from 'moment';\r\nimport {Duration} from \"moment\";\r\n\r\nfunction format(d: Duration) {\r\n if (!d.isValid()) return '';\r\n var h = Math.floor(d.asHours());\r\n var m = d.minutes();\r\n return h + \"h\" + (m < 10 ? '0' : '') + m + \"m\";\r\n}\r\n\r\n/*\r\n * format input of milliseconds in hhmm format\r\n */\r\nexport function formatDuration(value, unit) {\r\n return format(moment.duration(value, unit));\r\n}\r\n\r\nexport function durationHms(value, unit) {\r\n let d = moment.duration(Math.abs(value), unit);\r\n if (!d.isValid()) return '';\r\n var h = Math.floor(d.asHours());\r\n var m = d.minutes();\r\n var s = d.seconds();\r\n return (h > 0 ? h + \"h\" : \"\") +\r\n (m < 10 ? '0' : '') + m + \"m\" +\r\n (s < 10 ? '0' : '') + s + \"s\";\r\n}\r\n\r\n\r\n// return duration in h:m:s format\r\nexport function videoDuration(value, unit) {\r\n let d = moment.duration(Math.abs(value), unit || 'seconds');\r\n if (!d.isValid()) return '';\r\n var h = Math.floor(d.asHours());\r\n var m = d.minutes();\r\n var s = d.seconds();\r\n return (h > 0 ? h + \":\" : \"\") +\r\n (h > 0 ? '0' : '') + m + \":\" +\r\n (s < 10 ? '0' : '') + s;\r\n}\r\n\r\n/*\r\n * Parse a TimeSpan and return the value in milliseconds\r\n */\r\nexport function parseTimeSpan(ts) {\r\n return moment.duration(ts).asMilliseconds();\r\n}\r\n\r\nexport default angular.module('directives.duration2', [])\r\n .filter('formatDuration', () => formatDuration)\r\n .filter('durationHms', () => durationHms)\r\n .filter('videoDuration', () => videoDuration)\r\n .filter('timeSpan', () => parseTimeSpan)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction email() {\r\n return {\r\n template: ' {{addr}}',\r\n restrict: 'E',\r\n scope: {addr: '<'},\r\n };\r\n}\r\nexport default angular.module('directives.email', [])\r\n .directive('email', email)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction urlToFilename() {\r\n return function (input) {\r\n if(!input) return;\r\n var x = input.split('/');\r\n x = x[x.length-1].split('?');\r\n return x[0];\r\n };\r\n}\r\n\r\nexport default angular.module('filters.filename', [])\r\n .filter('filename', urlToFilename)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction formGroupInput() {\r\n\r\n function getFieldModelName(attrs) {\r\n var objectAndField = attrs.ngModel;\r\n var names = objectAndField.split('.');\r\n var fieldModelName = names[names.length - 1];\r\n return fieldModelName;\r\n }\r\n\r\n return {\r\n template: require('./FormGroupInput.html'),\r\n restrict: 'E',\r\n require: ['^form', 'ngModel'],\r\n scope: {label: '@', placeholder: '@', ngModel: '=', maxlength: '@', type: '@'},\r\n\r\n link: function (scope, element, attrs, ctrls) {\r\n scope.form = ctrls[0];\r\n scope.name = getFieldModelName(attrs);\r\n var ngModel = ctrls[1];\r\n\r\n if (attrs.required !== undefined) {\r\n scope.required = true;\r\n }\r\n if (attrs.disabled !== undefined) {\r\n scope.disabled = true;\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport default angular.module('directives.formGroupInput', [])\r\n .directive('formGroupInput', formGroupInput)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction highlightWords() {\r\n return function (input, search) {\r\n if (!input || !search) return input;\r\n let words = search.split(' ');\r\n if (!words.length) return input;\r\n\r\n for (var word of words) {\r\n // only search outside existing tags. example: `search` = 'span' - don't match existing span tags.\r\n var pattern = new RegExp(word + '(?![^<]*>)', 'gi');\r\n input = input.replace(pattern, '$&');\r\n }\r\n\r\n return input;\r\n };\r\n}\r\n\r\nexport default angular.module('directives.highlight', [])\r\n .filter('highlightWords', highlightWords)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {UserStorageService} from \"../modules/UserStorageModule\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport StorageService = ngStorage.StorageService;\r\n\r\nfunction hint($sessionStorage: StorageService, $userStorage: UserStorageService) {\r\n return {\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {\r\n id: '@id',\r\n title: '@title',\r\n class: '@class'\r\n },\r\n link: (scope: any, element, attrs) => {\r\n scope.$sessionStorage = $sessionStorage;\r\n scope.$userStorage = $userStorage;\r\n scope.key = `hint_${scope.id}_closed`;\r\n scope.class = scope.class || 'alert-info';\r\n if(!scope.class.startsWith('alert-'))\r\n scope.class = 'alert-' + scope.class;\r\n },\r\n template: require('./Hint.html')\r\n };\r\n}\r\n\r\nexport default angular.module('directives.hint', [])\r\n .directive('hint', hint)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction ngEnter() {\r\n return {\r\n link(scope, element, attrs) {\r\n element.bind('keypress', event => {\r\n if (event.which === 13) {\r\n scope.$apply(() => {\r\n scope.$eval(attrs.ngEnter);\r\n });\r\n\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n };\r\n};\r\n\r\nexport default angular.module('directives.ngEnter', [])\r\n .directive('ngEnter', ngEnter)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction panel() {\r\n return {\r\n template: require('./panel.html'),\r\n restrict: 'E',\r\n transclude: {\r\n panelHeading: '?panelHeading',\r\n panelBody: '?panelBody',\r\n panelTable: '?table',\r\n panelListGroup: '?li',\r\n panelFooter: '?panelFooter'\r\n },\r\n scope: {context: '@', panelTitle: '@', enableFeedback: '@'},\r\n controller: function ($transclude) {\r\n this.isSlotFilled = {\r\n panelHeading: $transclude.isSlotFilled('panelHeading'),\r\n panelBody: $transclude.isSlotFilled('panelBody'),\r\n panelTable: $transclude.isSlotFilled('panelTable'),\r\n panelListGroup: $transclude.isSlotFilled('panelListGroup'),\r\n panelFooter: $transclude.isSlotFilled('panelFooter'),\r\n }\r\n },\r\n controllerAs: '$ctrl'\r\n };\r\n}\r\n\r\nexport default angular.module('directives.panel', [])\r\n .directive('panel', panel)\r\n .name;\r\n","import * as angular from \"angular\";\r\nimport {IScope} from \"angular\";\r\n\r\nclass sortableController {\r\n\r\n constructor(private $scope: any) {\r\n }\r\n\r\n click = (clear: Boolean) => {\r\n console.log('click', clear);\r\n let f1 = this.$scope.sortableField;\r\n let f2 = '-' + this.$scope.sortableField;\r\n\r\n if (!Array.isArray(this.$scope.sortableVar))\r\n this.$scope.sortableVar = [this.$scope.sortableVar];\r\n let index = this.$scope.sortableVar.indexOf(f1);\r\n var reverse = false;\r\n\r\n if (index >= 0)\r\n reverse = true;\r\n else\r\n index = this.$scope.sortableVar.indexOf(f2);\r\n\r\n if (index >= 0)\r\n this.$scope.sortableVar.splice(index, 1);\r\n\r\n if (clear) {\r\n this.$scope.caret = null;\r\n return;\r\n }\r\n\r\n\r\n this.$scope.sortableVar.unshift(reverse ? f2 : f1);\r\n this.$scope.caret = reverse ? 'up' : 'down';\r\n\r\n }\r\n\r\n\r\n}\r\n\r\nfunction sortable() {\r\n return {\r\n template: require('./Sortable.html'),\r\n restrict: 'A',\r\n transclude: true,\r\n scope: {\r\n sortableField: '@',\r\n sortableVar: '=sortable'\r\n },\r\n controller: sortableController,\r\n controllerAs: '$ctrl'\r\n };\r\n}\r\n\r\nexport default angular.module('directives.sortable', [])\r\n .directive('sortable', sortable)\r\n .name;\r\n\r\n","import * as angular from 'angular';\r\nimport CurrencyFilter from \"./CurrencyFilter\";\r\nimport {IFilterService} from \"angular\";\r\n\r\n\r\nfunction stringToCurrency($filter: IFilterService) {\r\n return {\r\n restrict: 'A',\r\n require: '^ngModel',\r\n link: function (scope, element, attrs, ngModel: ng.INgModelController) {\r\n ngModel.$formatters.unshift(function (value) {\r\n console.debug('format', value);\r\n if (!value) return undefined;\r\n return formatForDisplay();\r\n });\r\n\r\n ngModel.$parsers.push(function (value) {\r\n console.debug('parse', value);\r\n if (!value) return null;\r\n let result = parseFloat(value.replace(/[^\\\\.\\d\\-]/g,''));\r\n if (result > -9999999999999999)\r\n return Math.round(result * 100) / 100;\r\n return undefined;\r\n });\r\n\r\n element.on('blur', () => {\r\n ngModel.$viewValue = formatForDisplay();\r\n ngModel.$render();\r\n });\r\n\r\n function formatForDisplay() {\r\n let result = parseFloat(ngModel.$modelValue);\r\n if (result > -9999999999999999)\r\n return $filter('currency')(result);\r\n return undefined;\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport default angular.module('directives.stringToCurrency', [])\r\n .directive('stringToCurrency', stringToCurrency)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction stringToDate() {\r\n return {\r\n restrict: 'A',\r\n require: '^ngModel',\r\n link: function (scope, element, attrs, ngModel: ng.INgModelController) {\r\n ngModel.$formatters.unshift(function (value) {\r\n if (!value) return null;\r\n return new Date(value);\r\n });\r\n\r\n ngModel.$parsers.push(function (value) {\r\n if (!value) return null;\r\n let r = new Date(value);\r\n return r;\r\n });\r\n\r\n }\r\n };\r\n}\r\n\r\nexport default angular.module('directives.stringToDate', [])\r\n .directive('stringToDate', stringToDate)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {format, isValid, parse} from \"date-fns\";\r\n\r\nlet validFormats = ['H', 'HH', 'ha', 'hha', 'Hmm', 'HHmm', 'hmma', 'hhmma', 'hh:mm a', 'hh:mm aa', 'HH:mm', 'HH.mm', 'HH:mm:ss'];\r\nlet modelFormat = 'HH:mm:ss';\r\nlet displayFormat = 'hh:mm a';\r\n\r\nfunction stringToTime() {\r\n return {\r\n restrict: 'A',\r\n require: '^ngModel',\r\n link: function (scope, element, attrs, ngModel: ng.INgModelController) {\r\n ngModel.$formatters.unshift(function (value) {\r\n if (!value) return null;\r\n return formatForDisplay();\r\n });\r\n\r\n ngModel.$parsers.push(function (value) {\r\n if (!value) return null;\r\n var result: Date;\r\n for (const fmt of validFormats) {\r\n result = parse(value, fmt, new Date());\r\n console.debug(value, fmt, result);\r\n if (isValid(result))\r\n break;\r\n }\r\n if (isValid(result))\r\n return format(result, modelFormat);\r\n return undefined;\r\n });\r\n\r\n element.on('blur', () => {\r\n if (!ngModel.$modelValue) return;\r\n ngModel.$viewValue = formatForDisplay();\r\n ngModel.$render();\r\n });\r\n\r\n function formatForDisplay() {\r\n if (!ngModel.$modelValue) return;\r\n for (const fmt of validFormats) {\r\n var result = parse(ngModel.$modelValue, fmt, new Date());\r\n if (isValid(result))\r\n return format(result, displayFormat);\r\n }\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport default angular.module('directives.stringToTime', [])\r\n .directive('stringToTime', stringToTime)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {StudentDisplayDto} from \"../model/StudentDisplayDto\";\r\nimport {DataHubService} from \"../modules/DataHubModule\";\r\nimport {StudentSearchDto} from \"../model/StudentSearchDto\";\r\n\r\nclass studentSearchController {\r\n students: StudentDisplayDto[] = [];\r\n\r\n constructor(private $dataHub: DataHubService, private $scope) {\r\n }\r\n\r\n refresh(search) {\r\n this.students = [];\r\n if (!search) return;\r\n let dto = new StudentSearchDto();\r\n dto.text = search;\r\n dto.classId = this.$scope.classId;\r\n this.$dataHub.studentSearch(dto)\r\n .then((response) => {\r\n this.students = response;\r\n });\r\n };\r\n\r\n onSelect(student) {\r\n this.$scope.onSelect({$student: student});\r\n }\r\n}\r\n\r\n\r\nfunction studentSearch() {\r\n return {\r\n template: require('./StudentSearch.html'),\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {onSelect: '&', placeholder: '@', classId: '='},\r\n controller: studentSearchController,\r\n controllerAs: '$ctrl'\r\n };\r\n};\r\n\r\n\r\nexport default angular.module('directives.studentSearch', [])\r\n .directive('studentSearch', studentSearch)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {StudentDisplayDto} from \"../model/StudentDisplayDto\";\r\nimport {DataHubService} from \"../modules/DataHubModule\";\r\nimport {StudentSearchDto} from \"../model/StudentSearchDto\";\r\nimport {INgModelController, IScope} from \"angular\";\r\n\r\nclass studentSelectController {\r\n students: StudentDisplayDto[] = [];\r\n\r\n constructor(private $dataHub: DataHubService, private $scope) {\r\n }\r\n\r\n refresh(search) {\r\n if (!search) return;\r\n this.students = [];\r\n let dto = new StudentSearchDto();\r\n dto.text = search;\r\n dto.classId = this.$scope.classId;\r\n this.$dataHub.studentSearch(dto)\r\n .then((response) => {\r\n this.students = response;\r\n });\r\n };\r\n\r\n onSelect(item) {\r\n this.$scope.selectedStudent = item;\r\n }\r\n}\r\n\r\n\r\nfunction studentSelect() {\r\n return {\r\n template: require('./StudentSelect.html'),\r\n restrict: 'E',\r\n scope: {placeholder: '@', classId: '=', selectedStudent: '='},\r\n controller: studentSelectController,\r\n controllerAs: '$ctrl',\r\n };\r\n}\r\n\r\n\r\nexport default angular.module('directives.studentSelect', [])\r\n .directive('studentSelect', studentSelect)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction tel() {\r\n return {\r\n template: '',\r\n restrict: 'E',\r\n scope: {number: '<'},\r\n };\r\n}\r\nexport default angular.module('directives.tel', [])\r\n .directive('tel', tel)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction tel() {\r\n return function (input) {\r\n if (!input) return '';\r\n\r\n var value = input.toString().trim().replace(/^\\+/, '');\r\n\r\n if (value.match(/[^0-9]/)) return input;\r\n\r\n var numberArray = value.split(\"\");\r\n if (numberArray.length == 11 && numberArray[0] == '1') numberArray.splice(0, 1);\r\n\r\n switch (numberArray.length) {\r\n case 10:\r\n numberArray.splice(0, 0, '(');\r\n numberArray.splice(3 + 1, 0, ')');\r\n numberArray.splice(3 + 2, 0, ' ');\r\n numberArray.splice(6 + 3, 0, '-');\r\n break;\r\n }\r\n return numberArray.join(\"\");\r\n\r\n };\r\n}\r\n\r\nexport default angular.module('filters.tel', [])\r\n .filter('tel', tel)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction dateDuration() {\r\n\r\n return {\r\n restrict: 'E',\r\n template: require('./DateDuration.html'),\r\n scope: {\r\n value: '<',\r\n dangerDays: '<',\r\n warningDays: '<'\r\n },\r\n link(scope, element, attrs) {\r\n }\r\n };\r\n}\r\n\r\n\r\nexport default angular.module('directives.dateDuration', [])\r\n .directive('dateDuration', dateDuration)\r\n .name;\r\n","// Generated by Typewriter / DataModelGenerator.tst\r\n// https://frhagn.github.io/Typewriter/pages/documentation.html\r\n\r\n\r\n\r\n// Myers.StudentManagementSystem.Data.Models.PrintJobResultDto\r\nexport class PrintJobResultDto {\r\n public guid: string = null;\r\n public message: string = null;\r\n public error: string = null;\r\n}\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import * as angular from 'angular';\r\nimport {ApiService} from \"../modules/ApiModule\";\r\nimport {ngStorage} from \"ngstorage\";\r\nimport StorageService = ngStorage.StorageService;\r\nimport {DataHubService} from \"../modules/DataHubModule\";\r\nimport {PrinterDto} from \"../model/PrinterDto\";\r\nimport {ConfigService} from \"../modules/ConfigModule\";\r\nimport {PrintService} from \"../modules/PrintModule\";\r\nimport {popWindow} from \"./Popout\";\r\nimport {PrintJobResultDto} from \"../model/PrintJobResultDto\";\r\nimport {PrintJobRequestDto} from \"../model/PrintJobRequestDto\";\r\n\r\nclass buttonController {\r\n constructor(private $api: ApiService,\r\n private $localStorage: StorageService,\r\n private $uibModal,\r\n private $scope) {\r\n }\r\n\r\n\r\n print = () => {\r\n this.showDialog(true, false);\r\n };\r\n\r\n showDialog = (autoPrint, preview) => {\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./PrintReportModal.html'),\r\n controller: modalController,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n resolve: {\r\n options: () => this.$scope.$parent.$eval(this.$scope.options),\r\n autoPrint: () => autoPrint,\r\n autoPreview: () => preview,\r\n caption: () => this.$scope.caption,\r\n }\r\n });\r\n\r\n modalInstance.result.then((result) => {\r\n if (this.$scope.onPrinted && typeof this.$scope.onPrinted === \"function\") {\r\n this.$scope.onPrinted();\r\n }\r\n }, function () {\r\n console.debug('Modal dismissed at: ' + new Date());\r\n });\r\n };\r\n\r\n preview = () => {\r\n this.showDialog(false, true);\r\n };\r\n\r\n printOptions = () => {\r\n this.showDialog(false, false);\r\n }\r\n}\r\n\r\nclass modalController {\r\n private printers: PrinterDto[] = [];\r\n private printerName: string;\r\n private result: PrintJobResultDto;\r\n private printing: boolean;\r\n private printCount = 0;\r\n private changePrinter: boolean;\r\n private previewing: boolean;\r\n\r\n constructor(private $uibModalInstance,\r\n private $localStorage: StorageService,\r\n private $config: ConfigService,\r\n private $dataHub: DataHubService,\r\n private $print: PrintService,\r\n private toaster: any,\r\n private options: PrintJobRequestDto,\r\n private autoPrint: boolean,\r\n private autoPreview: boolean,\r\n private caption: string) {\r\n\r\n this.$dataHub.client.bindAllPrinter(() => this.printers);\r\n this.$dataHub.server.printerSubscribe();\r\n\r\n this.printerName = this.$localStorage.printerName || this.$localStorage.printerNameBackup;\r\n\r\n if (this.autoPreview) this.preview();\r\n else if (!this.$localStorage.printerName) this.change();\r\n else if (this.autoPrint) this.reprint();\r\n }\r\n\r\n get selectedPrinter(): PrinterDto {\r\n return this.printers.filter(x => x.fullName == this.printerName)[0];\r\n }\r\n\r\n get selectedPrinterIsDefault() {\r\n return this.printerName === this.$localStorage.printerName;\r\n }\r\n\r\n get selectedPrinterIsBackup() {\r\n return this.printerName === this.$localStorage.printerNameBackup;\r\n }\r\n\r\n get defaultPrinter() {\r\n return this.$localStorage.printerName;\r\n }\r\n\r\n get backupPrinter() {\r\n return this.$localStorage.printerNameBackup;\r\n }\r\n\r\n resetSelectedPrinter = () => {\r\n this.$dataHub.printerPurgeJobs(this.selectedPrinter)\r\n .then(() => {\r\n this.toaster.success('Print Jobs Cleared - please wait a moment for printer status to update, then try printing again');\r\n this.printerChanged();\r\n })\r\n .catch(this.$dataHub.defaultErrorHandler);\r\n }\r\n\r\n useDefaultPrinter = () => {\r\n this.printerName = this.defaultPrinter;\r\n this.printerChanged();\r\n }\r\n\r\n useBackupPrinter = () => {\r\n this.printerName = this.backupPrinter;\r\n this.printerChanged();\r\n }\r\n\r\n printerChanged = () => {\r\n this.result = null;\r\n this.printCount = 0;\r\n }\r\n\r\n change = () => {\r\n this.changePrinter = true;\r\n };\r\n\r\n reprint = () => {\r\n if (!this.printerName) {\r\n this.change();\r\n return;\r\n }\r\n\r\n this.options.printerName = this.printerName;\r\n this.printing = true;\r\n this.$dataHub.server.printJobSubmit(this.options)\r\n .then(r => {\r\n this.result = r;\r\n if (!this.result.error) {\r\n this.printCount++;\r\n }\r\n })\r\n .catch(e => {\r\n this.result = new PrintJobResultDto();\r\n this.result.error = e;\r\n })\r\n .finally(() => this.printing = false);\r\n };\r\n\r\n printLocal = () => {\r\n this.options.printerName = null;\r\n this.printing = true;\r\n this.$dataHub.server.printJobSubmit(this.options)\r\n .then(r => {\r\n this.result = r;\r\n if (!this.result.error) {\r\n this.printCount++;\r\n let url = this.$config.apiBase + 'report/view/' + r.guid;\r\n this.$print.printPdf(url).then(r => {\r\n if (r) this.done();\r\n });\r\n }\r\n })\r\n .catch(e => {\r\n this.result = new PrintJobResultDto();\r\n this.result.error = e;\r\n })\r\n .finally(() => this.printing = false);\r\n };\r\n\r\n preview = () => {\r\n this.options.printerName = null;\r\n this.previewing = true;\r\n this.$dataHub.server.printJobSubmit(this.options)\r\n .then(r => {\r\n this.result = r;\r\n let url = this.$config.apiBase + 'report/view/' + r.guid;\r\n console.log(url);\r\n popWindow(url, null);\r\n })\r\n .catch(e => {\r\n this.result = new PrintJobResultDto();\r\n this.result.error = e;\r\n })\r\n .finally(() => this.previewing = false);\r\n };\r\n\r\n done = () => {\r\n this.$uibModalInstance.close('1');\r\n };\r\n\r\n cancel = () => {\r\n this.$uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n}\r\n\r\n\r\nfunction printReportDirective() {\r\n return {\r\n template: require('./PrintReportButton.html'),\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {\r\n options: '@',\r\n icon: '@',\r\n caption: '@',\r\n dropup: '@',\r\n context: '@',\r\n btnSize: '@',\r\n onPrinted: '&'\r\n },\r\n controller: buttonController,\r\n controllerAs: '$ctrl'\r\n };\r\n};\r\n\r\n\r\nexport default angular.module('directives.printReportDirective', [])\r\n .directive('printReport', printReportDirective)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\n// https://stackoverflow.com/a/31880192/2358953\r\nexport default angular.module('directives.bindHtmlCompile', [])\r\n .directive('bindHtmlCompile', ['$compile', function ($compile) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n scope.$watch(attrs.bindHtmlCompile, function (value) {\r\n // Incase value is a TrustedValueHolderType, sometimes it\r\n // needs to be explicitly called into a string in order to\r\n // get the HTML string.\r\n element.html(value && value.toString());\r\n // If scope is provided use it, otherwise use parent scope\r\n var compileScope = scope;\r\n if (attrs.bindHtmlScope) {\r\n compileScope = scope.$eval(attrs.bindHtmlScope);\r\n }\r\n $compile(element.contents())(compileScope);\r\n });\r\n }\r\n };\r\n }])\r\n .name;\r\n","import * as angular from 'angular';\r\nimport SignaturePad from \"signature_pad\";\r\nimport {IScope, ITimeoutService} from \"angular\";\r\nimport {StudentContractFieldDto} from \"../model/StudentContractFieldDto\";\r\nimport trimCanvas from 'trim-canvas'\r\nimport {StudentContractPublicDto} from \"../model/StudentContractPublicDto\";\r\n\r\nclass contractFieldController {\r\n private field: StudentContractFieldDto;\r\n private fieldForSig: StudentContractFieldDto;\r\n private contract: StudentContractPublicDto;\r\n private fieldChanged: ({$field: StudentContractFieldDto}) => {};\r\n\r\n constructor(private $uibModal) {\r\n }\r\n\r\n sign = () => {\r\n this.showSignatureDialog();\r\n };\r\n\r\n copyFieldForSig() {\r\n this.fieldForSig = angular.copy(this.field);\r\n this.fieldForSig.userValue=null;\r\n this.fieldForSig.dataValue=null;\r\n }\r\n\r\n showSignatureDialog = () => {\r\n this.copyFieldForSig();\r\n\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./ContractFieldSignature.html'),\r\n backdrop: 'static',\r\n controller: signatureController,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n resolve: {\r\n field: () => this.fieldForSig,\r\n }\r\n });\r\n\r\n modalInstance.result.then(() => {\r\n if (this.fieldChanged && typeof this.fieldChanged === \"function\") {\r\n this.fieldChanged({$field: this.fieldForSig});\r\n }\r\n }, function () {\r\n console.debug('Modal dismissed at: ' + new Date());\r\n });\r\n };\r\n\r\n initial = () => {\r\n this.copyFieldForSig();\r\n var modalInstance = this.$uibModal.open({\r\n template: require('./ContractFieldInitial.html'),\r\n backdrop: 'static',\r\n controller: signatureController,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n resolve: {\r\n field: () => this.fieldForSig,\r\n }\r\n });\r\n\r\n modalInstance.result.then(() => {\r\n if (this.fieldChanged && typeof this.fieldChanged === \"function\") {\r\n this.fieldChanged({$field: this.fieldForSig});\r\n }\r\n }, function () {\r\n console.debug('Modal dismissed at: ' + new Date());\r\n });\r\n };\r\n\r\n}\r\n\r\nclass signatureController {\r\n private signaturePad: SignaturePad;\r\n private canvas: HTMLCanvasElement;\r\n private signatureLength: number = 0;\r\n\r\n constructor(private $uibModalInstance,\r\n private $timeout: ITimeoutService,\r\n private $scope: IScope,\r\n private field: StudentContractFieldDto,\r\n ) {\r\n\r\n this.$timeout(() => {\r\n this.signaturePad = new SignaturePad(this.canvas[0], {\r\n onEnd: this.signatureOnEnd,\r\n minWidth: 2,\r\n maxWidth: 4,\r\n });\r\n this.resizeCanvas();\r\n window.addEventListener(\"resize\", this.resizeCanvas.bind(this));\r\n }, 0);\r\n\r\n }\r\n\r\n private resizeCanvas() {\r\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\r\n var canvas = this.canvas[0];\r\n canvas.width = canvas.offsetWidth * ratio;\r\n canvas.height = canvas.offsetHeight * ratio;\r\n canvas.getContext(\"2d\").scale(ratio, ratio);\r\n this.signaturePad.clear(); // otherwise isEmpty() might return incorrect value\r\n this.$scope.$applyAsync(() => {\r\n this.signatureLength = 0;\r\n });\r\n }\r\n\r\n\r\n private cancel() {\r\n this.$uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n private clear() {\r\n this.signaturePad.clear();\r\n this.signatureLength = 0;\r\n }\r\n\r\n private accept() {\r\n trimCanvas(this.canvas[0]);\r\n this.field.dataValue = this.signaturePad.toDataURL();\r\n this.$uibModalInstance.close();\r\n }\r\n\r\n signatureOnEnd = () => {\r\n this.$scope.$apply(() => {\r\n this.signatureLength = this.signaturePad.toDataURL().length;\r\n })\r\n }\r\n}\r\n\r\n\r\nfunction contractFieldDirective() {\r\n return {\r\n template: require('./ContractField.html'),\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {\r\n field: '<',\r\n fieldChanged: '&',\r\n contract: '<'\r\n },\r\n controller: contractFieldController,\r\n controllerAs: '$ctrl',\r\n bindToController: true,\r\n link: (scope, element, attrs) => {\r\n element.addClass('inline-flex');\r\n }\r\n };\r\n};\r\n\r\n\r\nexport default angular.module('directives.contractField', [])\r\n .directive('contractField', contractFieldDirective)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\nfunction toUpper() {\r\n return {\r\n restrict: 'A',\r\n require: '^ngModel',\r\n link: function (scope, element, attr, ctrl: ng.INgModelController) {\r\n ctrl.$overrideModelOptions({updateOn: 'blur'});\r\n ctrl.$parsers.push(function (viewValue) {\r\n if (!viewValue) return viewValue;\r\n let formattedValue = viewValue.toUpperCase();\r\n if (ctrl.$viewValue !== formattedValue) {\r\n ctrl.$setViewValue(formattedValue);\r\n ctrl.$render();\r\n }\r\n return formattedValue;\r\n })\r\n\r\n }\r\n };\r\n}\r\n\r\nexport default angular.module('directives.toUpper', [])\r\n .directive('toUpper', toUpper)\r\n .name;\r\n","import * as angular from 'angular';\r\n\r\n// automatically \"camel case\" a string if it is all upper or lower case\r\nfunction autoCase() {\r\n return {\r\n restrict: 'A',\r\n require: '^ngModel',\r\n link: function (scope, element, attr, ctrl: ng.INgModelController) {\r\n ctrl.$overrideModelOptions({updateOn: 'blur'});\r\n ctrl.$parsers.push(function (viewValue) {\r\n if (!viewValue) return viewValue;\r\n let formattedValue = fixCase(viewValue);\r\n if (ctrl.$viewValue !== formattedValue) {\r\n ctrl.$setViewValue(formattedValue);\r\n ctrl.$render();\r\n }\r\n return formattedValue;\r\n })\r\n\r\n }\r\n };\r\n}\r\n\r\nlet match = /^([A-Z-'\\s\\d]+|[a-z-'\\s\\d]+)$/g;\r\nlet re = /(\\b[a-z](?!\\s))/g;\r\n\r\nfunction fixCase(s){\r\n console.debug(s);\r\n if(!s.match(match)) return s;\r\n return s.toLowerCase().replace(re, function(x){return x.toUpperCase();});\r\n}\r\n\r\nexport default angular.module('directives.autoCase', [])\r\n .directive('autoCase', autoCase)\r\n .name;\r\n","import * as angular from 'angular';\r\nimport {Janus} from 'janus-gateway';\r\nimport {DebounceFactory} from \"../modules/DebounceModule\";\r\nimport {IIntervalService, IScope, ITimeoutService, IWindowService} from \"angular\";\r\nimport {LoggerService} from \"../modules/LoggerModule\";\r\n\r\nfunction janusSubscribeDirective($debounce: DebounceFactory,\r\n $interval: IIntervalService,\r\n $timeout: ITimeoutService,\r\n $window: IWindowService,\r\n $logger: LoggerService) {\r\n return {\r\n link(scope: IScope, element: JQuery, attrs) {\r\n var instance: Janus;\r\n var publisherId: number;\r\n var roomId: number;\r\n var pin: string;\r\n var opaqueId: string;\r\n let handle: any;\r\n let stats: any;\r\n let statsEnabled: boolean;\r\n let bitrateTimer: any;\r\n let audio: boolean;\r\n let video: boolean;\r\n let debugValue: any;\r\n let substream: number = null;\r\n let destroy = false;\r\n let visibleInViewport = false;\r\n let streamRef: MediaStream = null;\r\n let observer: IntersectionObserver;\r\n\r\n scope.$watch(attrs.janusInstance, (newValue) => {\r\n instance = newValue;\r\n });\r\n scope.$watch(() => instance && instance.isConnected(), newValue => {\r\n if (newValue)\r\n subscribe();\r\n });\r\n scope.$watch(attrs.janusSubscribe, (newValue: number) => {\r\n if (statsEnabled && publisherId && newValue)\r\n log(`publisherId changed: old:${publisherId} new:${newValue}`);\r\n publisherId = newValue;\r\n subscribe();\r\n });\r\n scope.$watch(attrs.janusOpaqueId, (newValue) => {\r\n if (angular.isObject(newValue))\r\n opaqueId = JSON.stringify(newValue);\r\n else\r\n opaqueId = newValue;\r\n });\r\n scope.$watch(attrs.janusRoomId, (newValue: number) => {\r\n roomId = newValue;\r\n });\r\n scope.$watch(attrs.janusPin, (newValue: string) => {\r\n pin = newValue;\r\n });\r\n scope.$watch(attrs.janusStatsEnabled, newValue => {\r\n statsEnabled = !!newValue;\r\n })\r\n if (attrs.janusStats)\r\n scope.$watch(attrs.janusStats, (newValue) => {\r\n if (!newValue)\r\n scope.$eval(attrs.janusStats + ' = {}');\r\n else {\r\n stats = newValue;\r\n stats.changeSubstream = (x) => {\r\n substream = x;\r\n reconfigure();\r\n }\r\n }\r\n });\r\n scope.$watch(attrs.janusAudio, newValue => {\r\n let x = !!newValue;\r\n // log(`audio changed from ${audio} to ${x} (${newValue})`);\r\n if (x != audio) {\r\n audio = x;\r\n reconfigure();\r\n }\r\n })\r\n scope.$watch(attrs.janusVideo, newValue => {\r\n let x = !!newValue;\r\n if (x != video) {\r\n video = x;\r\n reconfigure();\r\n }\r\n })\r\n scope.$watch(attrs.janusDebug, newValue => {\r\n debugValue = newValue;\r\n })\r\n\r\n if (IntersectionObserver) {\r\n observer = new IntersectionObserver(entries => {\r\n // assuming the latest entry is always last...\r\n var entry = entries[entries.length - 1];\r\n visibleInViewport = entry.isIntersecting;\r\n if (statsEnabled) {\r\n // console.debug(debugValue, entries);\r\n log(`isIntersecting:${entry.isIntersecting} ${entry.intersectionRatio} ${entry.time}`)\r\n }\r\n if (stats) {\r\n stats.ir = entry.intersectionRatio.toFixed(2);\r\n stats.vis = visibleInViewport;\r\n }\r\n reconfigure();\r\n }, {\r\n threshold: 0\r\n });\r\n observer.observe(element[0]);\r\n }\r\n\r\n scope.$on('$destroy', () => {\r\n log('$destroy');\r\n destroy = true;\r\n try {\r\n handle?.detach();\r\n } catch (e) {\r\n logError(e);\r\n }\r\n try {\r\n if (observer)\r\n observer.disconnect();\r\n } catch (e) {\r\n logError(e);\r\n }\r\n });\r\n\r\n\r\n let log = (message?: any, ...optionalParams: any[]) => {\r\n $logger.debug(`[${debugValue} ${publisherId}] ${message}`, ...optionalParams);\r\n }\r\n let logError = (message?: any, ...optionalParams: any[]) => {\r\n $logger.error(`[${debugValue} ${publisherId}] ${message}`, ...optionalParams);\r\n }\r\n\r\n let reconfigure = () => {\r\n if (!handle) return;\r\n let body = {\r\n \"request\": \"configure\",\r\n \"audio\": audio,\r\n \"video\": video && visibleInViewport,\r\n };\r\n if (stats) {\r\n stats.audio = body.audio;\r\n stats.video = body.video;\r\n }\r\n if (substream > 0 || substream === 0)\r\n body[\"substream\"] = substream;\r\n if (statsEnabled)\r\n log(`reconfigure stream: video:${body.video} audio:${body.audio}`);\r\n\r\n handle.send({\"message\": body});\r\n }\r\n\r\n let subscribe = $debounce(() => {\r\n if (handle) {\r\n try {\r\n log('detaching old handle');\r\n handle.detach();\r\n } catch (e) {\r\n logError(e);\r\n }\r\n }\r\n\r\n if (!instance || !publisherId || destroy) {\r\n return;\r\n }\r\n\r\n log('joining stream');\r\n\r\n var remoteFeed; // captured reference\r\n instance.attach({\r\n plugin: \"janus.plugin.videoroom\",\r\n opaqueId: opaqueId,\r\n success: (pluginHandle) => {\r\n handle = pluginHandle;\r\n remoteFeed = pluginHandle;\r\n // log(\"Subscriber attached! (\" + remoteFeed.getPlugin() + \", id=\" + remoteFeed.getId() + \")\");\r\n var listen = {\r\n \"request\": \"join\",\r\n \"room\": roomId,\r\n \"pin\": pin,\r\n \"ptype\": \"subscriber\",\r\n \"feed\": publisherId,\r\n // safari won't play audio from a