{"version":3,"sources":["webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/helpers/goal-math-helper.ts","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/services/assignment-details-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/services/iframe-message-service.ts","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/services/paginated-instructional-items-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/modals/memory-bank-modal.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/modals/instructional-item-viewer-modal.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives/chrome-menus.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives/close-button.ts","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives/flexible-concept.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives/flexible-region.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives/sequence-study-scrollable-facet.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives/top-navigation-header.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/all-facets-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/assigned-goal-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/correct-confirmation-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/explanation-question-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/fill-in-the-blank-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/instructional-content-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/learn-lti-redirect-controller.ts","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/learn-more-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/lti-wrapper-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/mobile-app-modal.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/onboarding-modal.ts","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/personalization-modal.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/quiz-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/quiz-fib-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/quiz-mcl-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/quiz-region-citd-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/quiz-region-mc-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/quiz-sequence-injection-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/recall-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/sentences-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/study-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/study-region-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/summary-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/typing-guide-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/unschedule-assignment-modal.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/unsupported-quiz-controller.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/wrap-up-helper.ts","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers/wrap-up-modal.ts","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/resources/tips-resource.js.coffee","webpack://Packs.[name]/./lib/assets/javascripts/cerego_sdk/shared_lib.js","webpack://Packs.[name]/./app/assets/sounds/v2/modules/learn-app/correct.mp3","webpack://Packs.[name]/./app/assets/sounds/v2/modules/learn-app/done.mp3","webpack://Packs.[name]/./app/assets/sounds/v2/modules/learn-app/incorrect.mp3","webpack://Packs.[name]/./app/assets/sounds/v2/modules/learn-app/recall.mp3","webpack://Packs.[name]/./node_modules/moment/locale sync ar|de|es|fr|ja","webpack://Packs.[name]/./app/javascript/packs/learn-app.js.coffee","webpack://Packs.[name]/./vendor/assets/javascripts/v2/jquery-ui-touch-punch.js","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime sync nonrecursive \\.js$","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/am.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/bo.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/el.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/grc.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/he.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/ja.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/ru.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/tr.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime/zh.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources sync nonrecursive \\.js$","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/experiment_segments_resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/learn-survey-resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/series-content-resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/series-study-resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/set-content-resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/set-study-resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/resources/study-all-resource.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/chrome-menu-helper.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/directives sync nonrecursive ^\\.\\/.*$","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/animation-manager.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/asset-loader.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/asset-preloader.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/cheating.js.coffee.erb","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/content-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/content-memory-manager.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/context-switcher.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/fuzzy-matcher.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/hotkey-manager.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/ime-support-helper.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/intra-session-scheduler.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/learn-app-message-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/mcl-builder.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/nextup-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/onboarding-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/presentation-manager.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/session-limits.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/session-settings.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/sound-fx-manager.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/summary-helper.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/study-queue.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/resources/course-items-resource.ts","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/study-queue-compressor.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/quiz-replacer.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/quiz-timer.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/typing-guide-helper.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/user-settings.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/window-manager.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/survey-helper.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/learn-app-constants.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/learn-app/controllers/set-summary-controller.js","webpack://Packs.[name]/./app/assets/javascripts/v2/modules/learn-app/controllers sync nonrecursive ^\\.\\/.*$","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/tooltip.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/goal-triangle.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/learner-dashboard-card.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/mini-memory-bank.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/progress-card.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/milestone-service.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/milestones-list.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/milestone.js.coffee","webpack://Packs.[name]/./app/assets/javascripts/v3/modules/common/directives/progress-bar.js.coffee","webpack://Packs.[name]/./app/assets/images/default/big/user.jpg","webpack://Packs.[name]/./app/assets/javascripts/util/round-level-goal.coffee"],"names":["angular","service","$rootScope","$filter","DebugHelper","$scope","$new","register","CONST1","CONST2","CONST3","levelToDaysConversion","levelValue","Math","max","round","exp","Number","estimateRangeLower","ceil","daysToLevelConversion","daysValue","log","isValidLevel","isValidDays","ceregoCommon","$route","$routeParams","$q","V3ModelHelper","V3SetsResource","V3SeriesResource","V3CourseSetsResource","CourseContextService","_","assignIn","assignment","assignmentType","deferred","reset","setDueState","dueState","dueDate","meta","Date","progress","initialize","current","locals","$assignment_type","defer","assignment_id","set_id","setId","series_id","seriesId","id","courseId","getCourseId","get","course_id","include","success","parse","resolve","reject","promise","$window","postMessage","message","target","parent","opener","V3CourseItemsResource","V3SetItemsResource","V3SeriesItemsResource","resources","activeTab","defaultOptions","sort","defaultResourceImage","lastOptions","getPaginatedResults","options","defaults","resource","query","loading","instructional_items","includeMeta","each","data","item","show_path","Packs","iKnowRoutes","v3_learn_course_instructional_item_path","controller","MemoryStorage","setContext","sessionContextId","sessionContextType","type","loadScopeFromModalOptions","user","this","modalOptions","course","module","$on","e","learnButtonLoaded","module_type","SessionSettings","V3InstructionalPresentationsResource","uiState","getCurrentTime","toISOString","setUIState","pdfAnnotation","find","annotations","annotation","attributes","embedItemType","fullInstructionalEmbed","alreadySeen","markAsDone","params","study_time_millis","getStudyDuration","session_guid","studySessionId","item_id","occurred_at","create","endTime","now","startTime","learnApp","directive","restrict","scope","useShortcuts","showNavigation","templateUrl","learn_v2_templates_path","$analytics","$compile","ContextService","UserSettings","UserManager","ChromeMenuHelper","WrapUpHelper","ModalService","LtiService","currentTab","keys","tabs","about","howItWorks","learning","faq","support","showModal","name","eventTrack","setTab","tab","toggleHelp","$event","preventDefault","stopPropagation","$emit","currentMenu","toggleSettings","supportMailSubject","encodeURIComponent","contentType","contextId","supportMailBody","nativeAudio","soundManager","supported","codec","mp3","canPlayMIME","ogg","flashVersion","contextType","currentUser","settings","contentAudio","effectAudio","audioQuestions","spellingQuestions","$watch","$location","$httpParamSerializer","WindowHelper","StudyQueue","PresentationManager","WindowManager","SummaryHelper","ContentMemoryManager","iFrameMessageService","postMessageEndSession","messageType","closeWindow","disableCloseWarning","returnURL","isPreview","location","href","protocol","host","pathParams","inIframe","ltiClientId","setLoadingMessage","homePath","onClose","requestClose","fail","then","uploadStudyData","load","memoryAggregate","enabled","forceSplash","last_study_time","url","summaryPath","signUpPath","concept","facet","studyCorrect","withPartOfSpeech","toggleActive","value","active","image","facets","size","noZoom","allowTooltip","enableZoom","zoom","disableZoom","link","element","attr","addClass","attrs","$index","currentQuiz","currentStep","min","lastStudiedStep","scrollIntoView","progressPercent","currentMode","AssignmentDetailsService","ContentService","stateUI","currentItemCount","isMenuContentOpen","indexOf","items","isError","$parent","updateNavigation","template_type","cloze_nodes","map","anchor","cloze_node","MemoryBankLevelsService","step","numSteps","dirty","ctaCopy","context_type","capitalize","startQuiz","path","quizPath","timeToAchieve","roundedLevelGoal","nextStep","loadingMessage","error","loadContext","loadPaths","memoriesCount","memories_count","scoring_goal","level_slug","slugLevel","$timeout","SoundFXManager","AnimationManager","play","sentence","sound","cancel","removeClass","AssetPreloader","InstructionalContentService","HotKeyManager","Cheating","hintUsed","flaggingContent","submitted","showQuestion","choiceToPresentation","choice","correct","text_html","showInstructionalContentItem","showInstructionalContent","showItem","toggleQuestionShow","getCorrectnessResult","correctChoicesCount","filter","choices","selected","length","correctAnswersCount","selectChoice","fromHotKey","answer_type","c","currentCorrectIndex","findIndex","setHotkeyIndex","toString","submitAnswerHotKey","event","hotkey","key","submitAnswer","submitDisabled","isEmpty","selectedChoices","result","initializeIncorrectScreen","answerQuiz","choices_made","selectedChoice","numCorrect","numSelected","numSelectedAndCorrect","incorrectMessage","buildChoices","concat","pick","fc","dc","shuffle","defineAction","i","actions","registerActionNavigator","correctAnswerIndex","newVal","oldVal","parseInt","hotkeySelection","answer","setAnswer","newAnswer","showInstructionalItem","currentItem","showSeeInstructional","LtiRedirectService","exchangeTokenAndRedirect","orbs","unlockedLevels","showHeader","memoryBankStep","positions","screenWidth","floor","width","itemTypes","association","class","title","description","regions","languages","passages","sequences","patterns","enlargeOrb","selectAll","style","select","height","x","y","transition","duration","cy","cx","r","imageScale","beginElement","classed","getImageUrl","updateCurrentStep","num","$broadcast","updateMemoryBankStep","resetOrbs","idx","orb","d3","minimizeOrb","currentOrb","swapImage","swap","parentNode","classList","contains","text","circle","finishAndReset","$","animate","scrollTop","learnMore","visible","startAnimation","selectedElement","index","calculateSizes","sectionSize","orbSize","circleSize","smallCircle","spacing","imageSize","circleCenter","circleCirc","imagePos","skipToMainContent","focus","setLtiWrapper","includes","window","document","ltiWrapper","isBBC","EmailsResource","MyMailersResource","UsersResource","debouncedSendEmail","debounce","sendMobileLoginInfo","$promise","sentEmail","errorMessage","response","isEmailSaved","model","email","password","passwordInputType","showPassword","currentState","addEmailIfShould","email_address","category","isArray","match","sendMergeAccountEmail","merge","saveLoginDetails","updatePassword","resetUser","trackPageView","sendMobileInfoEmail","toggleShowPassword","pageTrack","password_confirmation","save","skip_password_validation","getIcon","loadUser","hasInfo","on","keyCode","closeModal","unbind","$interval","MemoryBankResource","experimentTypes","CONTROL","SERIES","FADING","INTRINSIC","EXTRINSIC","STAT_INTERVAL_MILLIS","PROGRESS_SPEED","COUNT_SPEED","DOTS_PER_SECTION","titleAmounts","loaded","total","unstarted","fading","conceptCounts","score","titleIndex","assignmentName","realName","experimentType","countStats","stat","statsToCount","getNumFading","previousSessionStats","numFading","getTitleString","getPersonalizationTitleSlug","getTipCardString","part","getTipCardType","getVisualizationCardString","getLargeCardString","getAllFadingOrSeriesCardType","goodForNow","showSmallTipCard","showLargeTipCard","ensureExperimentTypeIsPossible","hasProgress","setConceptCountStats","items_count","studied_items_count","eligible_items_count","setStudyType","studyType","CeregoSharedLib","studyTypes","RECOMMENDED","setNextSessionSize","percentStarted","nextSessionSize","sessionSize","getData","segment","experimentSegment","slug","user_id","group_id","module_id","setModal","random","resourceCall","userAggregate","userSetAggregate","userSeriesAggregate","logError","getDotSetAmount","range","getDotAmount","input","push","stopCountStatsPromise","hotkeys","QuizTimer","PassageHighlightingService","MCLBuilder","ContextSwitcher","QuizNameService","TypingGuideHelper","SurveyHelper","OnboardingService","milestoneService","setLearnURLService","queue_loading","assets_loading","routes","passageService","progressPercentage","shouldShowPreview","shouldStudyHorizontal","forceStudy","studyQuiz","clone","quiz_type","forcedStudy","study_type","rescheduledQuiz","original_quiz_type","nextQuizHotkey","nextQuiz","skipSave","purgeHotkeys","presentations","sequence","cloze_container","quizTimeData","finalize","learning_engine_guid","is_new_memory","quiz_result","quiz_data_attributes","record","stop","reload","returned_to_recall","quiz_return_to_recall","yieldQuiz","showOnboardingScreen","beginQuiz","goBackToRecall","showTabs","showTypingGuideTab","showNotesTab","note_type","showSentencesTab","sentences","showAllFacetsTab","setAllFacetsTab","setSentencesTab","noteTabText","note","note_tab_text","setNotesTab","setLearnTab","setTypingGuideTab","updateTitle","quizzes","snakeCase","quizHeaderText","initialStep","forceStep","endSession","v3_free_trial_path","hasSurvey","finalizeLoad","context","loadMilestones","getInstructionalContent","currentQuizName","sample","edit_v3_create_set_item_path","facetId","embed","oldval","updateProgress","quizProgress","quizSize","totalStudySessionSize","sessionHistory","instructionalContent","loadSurvey","survey","isUndefined","allSettled","loadQueue","responses","inQuiz","state","learnPath","getUrl","version","search","pop","enable","enableHotkeys","keyboardShortcut","preloadSoundEffects","preloadAssets","notify","percent","setStep","autoPause","soundURL","soundURLs","currentSoundIndex","bindTo","add","combo","callback","stopSounds","playSound","oldUrl","newUrl","preview","fromPreview","$document","IME","FuzzyMatcher","CombiningMarksService","backspace","enter","escape","space","ime","language","code","setMap","isEq","sentence_text_html","replace","$0","$1","$2","$3","prefix_words","words","suffix_words","normalizedHTML","html","sanitizedText","trim","normalize","expectedAnswer","splitIntoCombinedLetters","strippedText","stripMarks","offset","text_words","word","slice","hintAvailable","previousValue","letter","last","isAnswerCorrect","correctChars","correctChar","off","onKeyDown","onKeyPress","isIgnored","hint_used","entered_text","join","isSpecialChar","test","popLetter","buffer","clear","which","$apply","answerChar","useHint","pushLetter","onAndroidInput","val","sameCharIndex","diffCharIndex","altKey","shiftKey","isValid","validChars","alt","shift","char","String","fromCharCode","debug","console","bowser","android","msie","isImageMC6","isCorrect","choose","activeElement","dataset","blur","isNOTADisabled","conceptDirection","nota_settings","noneOfTheAboveText","$last","setActive","choiceClasses","classes","top_row_size","transliteration_html","distractors","transliteration_distractors","choiceTextLength","reduce","memo","shrinkText","skip","facetToPresentation","polygon","image_map_node","region_polygon","chooseRegion","scaledOffsets","region_type","chooseOffsets","target_text","region","continue","image_map","numDistractors","sortableOptions","cursor","tolerance","forcePlaceholderSize","placeholder","axis","handle","update","ui","answerIndex","sortable","dropindex","correctAnswer","minIndex","maxIndex","newChoices","without","splice","setSortableAxis","innerWidth","nextSequenceInjectionStep","preselectDistractors","absoluteIndex","absoluteMin","absoluteMax","selection","animating","showTransliteration","customQuestion","anchor_question_html","association_question_html","defaultQuestion","sequence_title","recallPromptCopy","association_label","recallPromptIsLabel","sentenceWithBlanks","toggleSelection","finishRecall","fadeIn","nextSentence","sentenceIndex","prevSentence","autoPlaySound","max_steps","maxStudySteps","studyCompleted","incrementLastStudiedStep","decrementCurrentStep","incrementCurrentStep","studyPromptCopy","hasOverride","pattern","studyPromptIsLabel","coloredFacets","ExperimentSegmentsResource","SessionLimits","MessageService","NextUpService","LearnAppConstants","PartnersResource","sessionReturnURL","sessionFromV3Learn","fromV3Learn","defaultGoalImage","defaultUserImage","hasLoadedAtLeastOnce","lastStudyTime","sessionSizes","nextV3StudyType","v3StudyType","oldMemoryAgg","newEmail","form","ltiClientName","addEmail","newEmailForm","$valid","emails","setStateAfterLoad","autoStartQuiz","skipSessionSelect","replayPreview","setState","paymentRequired","showPayportal","LTI_CLIENT_IDS_FOR_EMAIL","relationships","showMemoryBank","forceSignUp","DEFAULT_SESSION_SIZE","seeNextAt","see_next_at","launchLearnMore","top","computeGoalLevel","levelGoal","setIntegerPercentLevel","float_percent","percentLevel","targetLevel","targetCopy","targetDescription","targetLevelSlug","actualLevel","level","queue","cappedSessionSize","totalItemsCount","finishStudyAll","assignedGoalPath","setSessionSize","setPersonalMessage","progressData","firstTimeStudy","progressDelta","requires_lti_outcome","can_report_lti_outcome","personalMessage","getMessage","eligibleItemsDisplayValue","eligibleItemsCount","cappedItemCount","initNextSet","nextUpQueue","nextModule","nextUp","v2_set_learn_path","v2_series_learn_path","processMemoryAggregate","newMemAgg","initial","studiedItemsCount","final","old_score","upForReview","tickStats","stepsTaken","STATS_MAX_TICKS","STATS_TICK_DELAY_MSEC","checkMemberId","partner_id","partner","partner_settings","member_id_enabled","member_id","user_partner_member_id","forceGetMemberId","createUserMemberId","updateUser","user_partner_member_ids","showError","modal","createElement","el","body","append","calculateDateString","due_at","timeNow","localizedDateString","toolTipOptionalVars","progress_percent","dueDateString","dueDateClass","due_date_string","paymentSuccessCallback","loadPersonalizationModal","segments","modalType","getNextUpQueue","scoring_goal_slug","status","deloitteDemo","loadDeloitteUser","disable","ltiGroupId","myGroup","typing_guide","unschedule","confirmUnschedule","quizzesInWorkingMemory","quiz","quitEarly","beginWrapUp","unpause","pause","numMemories","closeCallback","factory","$resource","method","APIRoutes","v3_my_tips_path","v3_my_tip_path","tip_id","MAX_NEW_ITEMS","MAX_BURDEN","sessionSizeParts","new_item_count","fading_item_count","parts","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","Object","exports","config","localStorageServiceProvider","$routeProvider","hotkeysProvider","setStorageCookie","includeCheatSheet","when","v3_set_learn_path","learn_v3_templates_path","v2_learn_path","v3_lti_redirect_learn_path","common_v3_templates_path","assigned_goal_v2_set_learn_path","assigned_goal_v2_series_learn_path","quiz_v2_learn_path","quiz_v2_set_learn_path","quiz_v2_series_learn_path","forEach","touch","touchHandled","mouseProto","mouse","prototype","_mouseInit","_mouseDestroy","_touchStart","_mouseCapture","originalEvent","changedTouches","_touchMoved","simulateMouseEvent","_touchMove","_touchEnd","self","bind","touchstart","proxy","touchmove","touchend","call","simulatedType","touches","simulatedEvent","createEvent","initMouseEvent","screenX","screenY","clientX","clientY","dispatchEvent","jQuery","hebrew","niqqud","consonants","l1c","l2c","l1n","l2n","hiragana","katakana","hiraganaPrefixableBySokuon","katakanaPrefixableBySokuon","consonant","kana","hiraStandardDigraphVowels","kataStandardDigraphConsonants","kataStandardDigraphVowels","hiraStandardDigraphConsonants","consonantPrefix","vowelSuffix","vowel","hiraAlternateDigraphVowels","kataAlternateDigraphConsonants","kataAlternateDigraphVowels","hiraAlternateDigraphConsonants","v3_my_experiment_segments_path","v3_my_surveys_path","v3_my_survey_path","v2_series_content_path","v2_series_study_index_path","v2_set_content_path","v2_set_study_index_path","v2_study_index_path","modifier","animation","doAnimate","regionReady","unwatcher","loadUrls","imageUrls","soundUrls","returnPromise","uniq","resolved","loadedAssets","totalAssets","onAssetLoad","Image","onload","onerror","src","Audio","preload","logOutput","AssetLoader","effectsDeferred","values","sounds","checkForAssets","object","SetContentResource","SeriesContentResource","CACHE_GENERATION_TIMEOUT_MSEC","sanitizeConcept","distractor","isString","sanitizeItems","d","fetchContent","full_content","loadContent","study_facets","uniqBy","findContentByFacetId","content","findContentByItemId","findContentByGuid","guid","flatten","memoryConstraints","aggregate","my_group_id","cache","cacheKey","memories","switchContext","switchLearnContext","interchangeable_symbols","isWhitespace","A","B","a","toLowerCase","b","sortBy","codepoint","charCodeAt","navigateArray","arr","delta","disabled","owner","del","persistent","imeAM","imeBO","imeEL","imeGRC","imeHE","imeJA","imeRU","imeZH","imeTR","validResults","useRegisters","Array","RTL","usedModifiers","modifiers","mod","lookup","debugIME","some","hasOwnProperty","previous","numMatches","output","lastKey","latinAlphabetLanguages","imeSupportedLanguages","getAllSupportedLanguages","union","weightedMemoryBurden","guids","burden","bestQuiz","forceScheduler","quizzesRemaining","countBy","quizzesSeen","workingMemory","eligibleQuizzes","justSeen","eligibleQuizzesByGuid","groupBy","difference","scores","lastSeenModifier","lastSeenDelta","totalScore","sum","targetScore","cumulativeScore","winningScore","LOWER_ITEMS_COUNT","UPPER_ITEMS_COUNT","unstartedItemsCount","itemsInLevel1","conceptType","optimumType","partitions","take","LibraryResource","localStorageService","TipsResource","screenKey","markAsSeen","tip","tips","showTipTypeIfNotSeen","tipType","camelCaseTipType","camelCase","screen","failure","SetStudyResource","SeriesStudyResource","StudyAllResource","AmplitudeService","sessionStats","numNew","numStudyFacets","uploadInProgress","resetSessionStats","firstPerformedQuiz","setNumStudyFacets","presentation","noSave","logEvent","learn_app_version","markUploadCompleted","retryOnCompletion","presentationsToUpload","item_count","JSON","stringify","api_key","CeregoAPI","isLtiOutcomeRequest","lti_outcome_hash","ltiOutcomeHash","lti_client_id","$watchCollection","set","cappedGuids","MAX_REVIEW_SIZE","itemCount","uuid","forceFacet","forceItem","forceQuiz","signUp","groupId","setIds","castArray","v4","deloitte_demo","fromSetView","eligibleOnly","done","incorrect","recall","shouldPlay","shouldPlayEffectAudio","finished","volume","effectVolume","numStudied","newMemoryCount","fadingMemoryCount","v3_dashboard_path","StudyQueueCompressor","IntraSessionScheduler","QuizReplacer","generateQueueFromStudy","fetchStudy","include_items","anonymous","facetPreviewId","itemPreviewId","setPreviewId","loadStudyData","facet_id","quiz_sequence","quizOrQuizzes","atFront","replacedQuiz","unshift","skippedFacets","alert","newProgress","peek","v3_course_items_path","study_queue","isNotesFirstStudy","IMESupportHelper","allSupportedLanguages","hasText","hasSound","hasImage","hasTransliteration","hasEnoughDistractors","hasEnoughTransliterationDistractors","hasEnoughNodes","split","hasSentence","hasSentenceSound","hasIME","allowedQuizTypes","quiz_settings","upperFirst","demoteQuiz","invalid_quizzes","allowed_quizzes","ranked_replacements","best_replacement","intersection","valid","audio_types","replaceItemStudyType","has","MAX_TIME_MSEC","timers","study","confirmation","recall_time_millis","quiz_time_millis","confirmation_time_millis","isPaused","startedAt","abs","autoPauseInterval","clearAutoPause","shift_key","DEFAULT_SETTINGS","initialized","availableSettings","label","audioOff","getSetting","setting","setVolume","onbeforeunload","$anchorScroll","LearnSurveyResource","currentPage","recordStudentsResponse","studentSurveyForm","$submitted","answers","surveyContent","sections","section","questions","platform","is_dismissed","surveyErrors","copy","finishSurvey","dismiss","MASTERY_LEVEL","MAX_PERCENT_UNTIL_NEXT_LEVEL","__guard__","transform","undefined","paginatedInstructionalItemsService","V3PartnersResource","bbc","headingTabs","paginatedInstructionalContentServiceOptions","instructionalItemsHeader","instructionalItemListtabs","instructionalItemCardPath","setTipCardState","setActiveTab","creator","memberIdSlug","x1","oldModuleProgress","moduleProgress","moduleType","moduleNextStudy","firstTimeCompleted","totalStudyTime","itemsCount","loadGroup","v3_signin_path","transclude","direction","toggle","handleClick","toggleClass","toggled","click","hover","goalReached","getLevelClass","parseFloat","contextProgress","contextLevel","nextStudyTime","StudyItemsService","timeHelper","GoalMathHelper","MySetsResource","toastHelper","FIRST_TIME_UNSTARTED","START_MORE_ITEMS","GOOD_FOR_NOW","FADING_ONLY","PROGRESS_COMPLETED","ONE_DAY_IN_MS","launchGoodForNow","returnUrl","studyItem","showGoMobile","startLearning","continueLearning","toggleSchedule","unSchedule","addToSchedule","removeFromSchedule","confirm_key","showToast","confirmation_key","setNextRecommendedModule","loadStudyItem","title_key","unstartedCount","fadingCount","durationString","secToString","sessionLengthSec","primaryCollection","totalMemoriesCount","estimatedStudyTimeLower","estimatedStudyTimeUpper","moment","asMilliseconds","msecToString","progressVisual","MemoryBankAssetHelper","MODULE_RADIUS","WELCOME","WELCOME_BACK","ENCOURAGING","levels","drop","forMobile","preloadedOrbs","prepareFacet","radius","orb_type","binContinuousLevel","review_interval","prepareModule","defaultModuleOrb","tick","force","startTick","alpha","node","weight","bb","bottom","moveToPosition","updateSVG","totalLevels","totalLevelsExcludeUnstarted","lockedLevelSize","nextLockedLevel","minLevel","svgDimensions","left","right","domain","times","xScale","scale","linear","yScale","keyFn","svg","createOrb","layout","nodes","gravity","charge","friction","chargeDistance","resetAnimation","setTargetPosition","start","background","links","calculateFinalPosition","orbRetention","finalPosition","current_retention","average_current_retention","setSourcePosition","sourceOrb","sourcePosition","px","py","fixed","preserveAspectRatio","loadData","constraints","memoryBankModalOptions","lastConstraints","getLastConstraints","isEqual","preloadConstraints","omit","loadMemoryStorageData","drawData","memoriesLength","showLearnButton","cloneDeep","m","prepareMiniMemoryBank","querySelector","forceAssignmentContext","percent_progress","pastDue","hasLevelGoal","level_goal","days_to_achieve","V3MyMilestonesResource","previousMilestones","currentModule","checkNewBadgeUnlocked","milestones","milestone","milestoneType","component","bindings","controllerAs","$onInit","that","assignmentProgress","assignmentLevel","isNull","setMilestoneNameAndType","setProgress","showProgressBar","percentProgress","completed","firstunlocked","faded","styleType","$ctrl","countProgress","progressCounter","rawLevelGoal","parsedLevelGoal"],"mappings":"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,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAC/E,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,EAAK,SAAK,EAAK,SAAK,EAAK,SAAK,EAAK,SAAK,GAAM,SAAK,EAAK,SAAK,GAAM,SACnE,KAAM,SAAK,KAAM,SAAK,KAAM,SAAK,KAAM,SAAK,MAAO,SAAK,IAAK,SAAK,KAAM,SAAK,MAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SACxE,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAC/E,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SACxE,KAAM,SAAK,KAAM,SAAK,KAAM,SAAK,KAAM,SAAK,MAAO,SAAK,IAAK,SAAK,KAAM,SACxE,EAAK,SAAK,EAAK,SAAK,EAAK,SAAK,EAAK,SAAK,GAAM,SAAK,EAAK,SACxD,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO,SAAK,KAAQ,SAC5F,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,GAAM,SAAK,IAAO,SAAK,EAAK,SAAK,GAAM,SAAK,IAAO,SACpF,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,IAAO,SAAK,KAAQ,SAAK,GAAM,SAAK,IAAO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","file":"js/learn-app-fba74ff5240eb2507b21.chunk.js","sourcesContent":["import * as angular from 'angular';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\nimport { IFilterCore } from 'v2/modules/core/filters';\n\nexport interface IGoalMathHelper extends ng.IScope {\n levelToDaysConversion: (levelValue: number) => number;\n daysToLevelConversion: (daysvalue: number) => number;\n estimateRangeLower: (levelValue: number) => number;\n isValidLevel: (levelValue: number) => boolean;\n isValidDays: (daysValue: number) => boolean;\n}\n\ninterface IFilter extends IFilterCore {\n (name: 'levelRoundDown'): (level: number) => number;\n}\n\nangular.module('cerego.common').service('GoalMathHelper', [\n '$rootScope',\n '$filter',\n 'DebugHelper',\n ($rootScope: ng.IRootScopeService, $filter: IFilter, DebugHelper: IDebugHelper) => {\n const $scope = $rootScope.$new() as IGoalMathHelper;\n DebugHelper.register('GoalMathHelper', $scope);\n\n const MIN_LEVEL = 0;\n const MAX_LEVEL = 4.0;\n const DVALUE = 2; // Commence magical numbers from Iain\n const EVALUE = 1.2;\n const CONST1 = 0.1234;\n const CONST2 = 0.7526;\n const CONST3 = 1.7414;\n\n $scope.levelToDaysConversion = levelValue => {\n return Math.max(Math.round(EVALUE * (Math.exp((Number(levelValue) - CONST1) / CONST2) - CONST3) + DVALUE), 2);\n }; // edge case at very low level values\n\n $scope.estimateRangeLower = levelValue => {\n return Math.ceil(0.8 * ($scope.levelToDaysConversion(levelValue) - 2));\n };\n\n $scope.daysToLevelConversion = daysValue => {\n return Number($filter('levelRoundDown')(CONST1 + CONST2 * Math.log((daysValue - DVALUE) / EVALUE + CONST3)));\n };\n\n $scope.isValidLevel = levelValue => {\n return (\n levelValue >= MIN_LEVEL &&\n levelValue <= MAX_LEVEL &&\n levelValue === Number($filter('levelRoundDown')(levelValue))\n );\n };\n\n $scope.isValidDays = daysValue => {\n return daysValue === Number(daysValue) && $scope.isValidLevel($scope.daysToLevelConversion(daysValue));\n };\n\n return $scope;\n }\n]);\n","ceregoCommon.service('AssignmentDetailsService', ['$filter', '$rootScope', '$route', '$routeParams', '$q', 'DebugHelper', 'V3ModelHelper', 'V3SetsResource', 'V3SeriesResource', 'V3CourseSetsResource', 'CourseContextService', ($filter, $rootScope, $route, $routeParams, $q, DebugHelper, V3ModelHelper, V3SetsResource, V3SeriesResource, V3CourseSetsResource, CourseContextService) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"AssignmentDetailsService\", $scope)\n\n _.assignIn $scope,\n assignment: null\n assignmentType: null\n deferred: null\n\n reset: () ->\n $scope.assignment = null\n $scope.deferred = null\n\n setDueState: () ->\n if $scope.assignment && $scope.assignment.meta?['due-at']\n $scope.assignment.dueState = \"due\"\n $scope.assignment.dueDate = $filter(\"localizeDateWithOutYear\")($scope.assignment.meta['due-at'])\n\n # complete\n if $scope.assignment.meta['memory-aggregate']?['progress'] == 1\n $scope.assignment.dueState = \"done\"\n # past due\n else if new Date() > new Date($scope.assignment.meta['due-at'])\n $scope.assignment.dueState = \"past-due\"\n # due within a week, start soon!\n else if $scope.assignment.meta['memory-aggregate'].progress == 0 && (new Date($scope.assignment.meta['due-at']) - new Date() < 604800000)\n $scope.assignment.dueState = \"due-soon\"\n else if $scope.assignment.meta['memory-aggregate']?['progress'] == 0\n $scope.assignment.dueState = \"start-soon\"\n\n\n initialize: () ->\n $scope.assignmentType = $route.current.locals.$assignment_type || \"set\"\n unless $scope.deferred\n $scope.deferred = $q.defer()\n\n assignment_id = $routeParams.set_id || $routeParams.setId || $routeParams.series_id || $routeParams.seriesId || $routeParams.id\n courseId = CourseContextService.getCourseId()\n if assignment_id\n if $scope.assignmentType == \"series\"\n resource = V3SeriesResource\n else if courseId != -1\n resource = V3CourseSetsResource\n else\n resource = V3SetsResource\n resource.get\n id: assignment_id\n course_id: courseId\n include: \"creator,image,creator.logo-image,creator.image\"\n , (success) ->\n success = V3ModelHelper.parse(success)\n $scope.assignment = success\n $scope.setDueState()\n $scope.deferred.resolve($scope.assignment)\n , $scope.deferred.reject\n else\n $scope.deferred.reject()\n $scope.deferred.promise\n\n\n $scope\n])\n","import * as angular from 'angular';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\n\ninterface IFrameMessage {\n messageType: string;\n context: {};\n data: {};\n}\n\nexport interface IFrameMessageService extends ng.IScope {\n postMessage: (IFrameMessage) => void;\n target: ng.IWindowService;\n}\n\nangular.module('cerego.common').service('iFrameMessageService', [\n '$window',\n '$rootScope',\n 'DebugHelper',\n ($window: ng.IWindowService, $rootScope: ng.IRootScopeService, DebugHelper: IDebugHelper) => {\n const $scope = $rootScope.$new() as IFrameMessageService;\n\n DebugHelper.register('iFrameMessageService', $scope);\n\n $scope.postMessage = message => {\n $scope.target.postMessage(message, '*');\n };\n\n // on non-iframed windows, the parent is equal to the window\n if ($window.parent === $window && $window.opener) {\n $scope.target = $window.opener;\n } else {\n $scope.target = $window.parent;\n }\n\n return $scope;\n }\n]);\n","ceregoCommon.service('paginatedInstructionalItemsService', ['$rootScope', '$routeParams', '$q', 'DebugHelper', '$filter', 'V3CourseItemsResource', 'V3SetItemsResource', 'V3SeriesItemsResource', 'V3ModelHelper', ($rootScope, $routeParams, $q, DebugHelper, $filter, V3CourseItemsResource, V3SetItemsResource, V3SeriesItemsResource, V3ModelHelper) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"paginatedInstructionalItemsService\", $scope)\n\n _.assignIn $scope,\n resources: {}\n activeTab: \"default\"\n defaultOptions:\n sort: \"\"\n 'filter[type][]': [\"InstructionalContent\"]\n 'page[size]': 200\n defaultResourceImage: '<%= image_path(\"v3/assignment_placeholder_60.png\") %>'\n lastOptions: {}\n\n\n getPaginatedResults: (options = {}) ->\n options = _.defaults(options, $scope.defaultOptions)\n options.sort = \"\"\n deferred = $q.defer()\n\n if options['course_id']\n resource = V3CourseItemsResource\n else if options['set_id']\n resource = V3SetItemsResource\n else if options['series_id']\n resource = V3SeriesItemsResource\n\n resource.query options\n , (success) ->\n $scope.loading = false\n\n instructional_items = V3ModelHelper.parse(success, includeMeta: true)\n if options['course_id']\n _.each(instructional_items.data, (item) ->\n item.show_path = Packs.iKnowRoutes.v3_learn_course_instructional_item_path(options['course_id'], item.id)\n )\n\n deferred.resolve(instructional_items)\n deferred.promise\n $scope\n])\n","ceregoCommon.controller(\"memoryBankModal\", ['$scope', 'DebugHelper', 'MemoryStorage', ($scope, DebugHelper, MemoryStorage) ->\n DebugHelper.register(\"memoryBankModal\", $scope)\n\n _.assignIn $scope,\n setContext: ->\n $scope.sessionContextId = $scope.module?.id ? $scope.course?.id\n $scope.sessionContextType = $scope.module?.type ? $scope.course?.type\n\n loadScopeFromModalOptions: ->\n $scope.user = this.modalOptions.user\n $scope.course = this.modalOptions.course\n $scope.module = this.modalOptions.module\n\n # listen for module being selected in the knowledge bank so we can change the scoping\n # for the learn button. If no module is selected (i.e. zoom out in knowledge bank), reset\n # to the default scope provided by modalOptions\n $scope.$on \"memoryBank:setCurrentModule\", (e, module) ->\n $scope.learnButtonLoaded = false\n if !module\n $scope.loadScopeFromModalOptions()\n else\n module.type = if module.module_type == 'set' then 'sets' else 'series'\n $scope.module = module\n $scope.setContext()\n])\n","ceregoCommon.controller(\"instructionalItemViewerModal\", ['$scope' , 'DebugHelper', 'SessionSettings', 'V3InstructionalPresentationsResource', ($scope, DebugHelper, SessionSettings, V3InstructionalPresentationsResource) ->\n\n DebugHelper.register(\"instructionalItemViewerModal\", $scope)\n\n _.assignIn $scope,\n uiState: {}\n\n getCurrentTime: () ->\n now = new Date()\n now.toISOString()\n\n setUIState: ->\n pdfAnnotation = _.find($scope.item.relationships?.annotations.data, (annotation) ->\n annotation.relationships.document.data?.attributes['content-type'] == \"application/pdf\"\n )\n\n embedItemType = $scope.item.attributes[\"ic-subtype\"] == \"instructional_embed\"\n\n if pdfAnnotation || embedItemType\n $scope.uiState.fullInstructionalEmbed = true\n\n if $scope.item?.meta['already-seen']\n $scope.uiState.alreadySeen = true\n\n markAsDone: () ->\n\n params = {}\n params.study_time_millis = $scope.getStudyDuration()\n params.session_guid = SessionSettings.studySessionId\n params.item_id = $scope.item.id\n params.occurred_at = $scope.getCurrentTime()\n\n V3InstructionalPresentationsResource.create params\n , (success) ->\n $scope.item.meta ||= {}\n $scope.item.meta['already-seen'] = true\n $scope.uiState.alreadySeen = true\n\n getStudyDuration: () ->\n $scope.endTime = Date.now()\n return $scope.endTime - $scope.startTime\n\n initialize: () ->\n $scope.item = $scope.modalOptions.item\n $scope.startTime = Date.now()\n $scope.setUIState()\n\n $scope.initialize()\n])\n","learnApp.directive(\"chromeMenus\", [->\n restrict: \"E\"\n\n scope:\n useShortcuts: \"=\"\n showNavigation: \"=?\"\n\n templateUrl: Packs.iKnowRoutes.learn_v2_templates_path(\"chrome_menus\")\n\n controller: ['$scope', '$analytics', '$compile', 'DebugHelper', 'ContextService', 'UserSettings', 'UserManager', 'SessionSettings', 'ChromeMenuHelper', 'WrapUpHelper', 'ModalService', 'LtiService', ($scope, $analytics, $compile, DebugHelper, ContextService, UserSettings, UserManager, SessionSettings, ChromeMenuHelper, WrapUpHelper, ModalService, LtiService) ->\n DebugHelper.register(\"chromeMenus\", $scope)\n\n _.assignIn $scope,\n ChromeMenuHelper: ChromeMenuHelper\n ContextService: ContextService\n UserManager: UserManager\n UserSettings: UserSettings\n WrapUpHelper: WrapUpHelper\n ModalService: ModalService\n SessionSettings: SessionSettings\n LtiService: LtiService,\n UserManager: UserManager\n\n currentTab: \"about\"\n\n keys: _.keys\n\n tabs:\n about: \"js.learn_app_message.tabs.about\"\n howItWorks: \"js.learn_app_message.tabs.how_it_works\"\n learning: \"js.learn_app_message.tabs.learning\"\n faq: \"js.learn_app_message.tabs.faq\"\n support: \"js.learn_app_message.tabs.support\"\n\n showModal: (name, options) ->\n $analytics.eventTrack(\"learn_modal_\" + name + \"_shown\")\n ModalService.showModal(name, options)\n\n setTab: (tab) ->\n $analytics.eventTrack(\"learn_tab_\" + tab + \"_select\")\n $scope.currentTab = tab\n\n toggleHelp: ($event) ->\n $analytics.eventTrack(\"learn_app_help\")\n $event.preventDefault()\n $event.stopPropagation()\n $scope.$emit('toggleMenuContent');\n ChromeMenuHelper.currentMenu = if ChromeMenuHelper.currentMenu == \"help\" then null else \"help\"\n\n toggleSettings: ($event) ->\n $analytics.eventTrack(\"learn_app_settings\")\n $event.preventDefault()\n $event.stopPropagation()\n $scope.$emit('toggleMenuContent');\n ChromeMenuHelper.currentMenu = if ChromeMenuHelper.currentMenu == \"settings\" then null else \"settings\"\n\n supportMailSubject: ->\n encodeURIComponent(\"LearnApp Support for \" + ContextService.contentType + \": \" + ContextService.contextId)\n\n supportMailBody: ->\n nativeAudio = soundManager.supported()\n codec = { mp3: soundManager.canPlayMIME('audio/mp3'), ogg: soundManager.canPlayMIME('audio/ogg') }\n flashVersion = soundManager.flashVersion\n\n encodeURIComponent(\"\\n\\n\\n\" +\n \"\\n\\n=== DEBUG INFO ===\" +\n \"\\nContext ID: \" + ContextService.contextId +\n \"\\nContext Type: \" + ContextService.contextType +\n \"\\nUser ID: \" + (UserManager.currentUser && UserManager.currentUser.id) +\n \"\\nContent Audio: \" + UserSettings.settings.contentAudio +\n \"\\nEffect Audio: \" + UserSettings.settings.effectAudio +\n \"\\nAudio Questions: \" + UserSettings.settings.audioQuestions +\n \"\\nSpelling Questions: \" + UserSettings.settings.spellingQuestions +\n \"\\nNative Audio: \" + nativeAudio +\n \"\\nMP3 support: \" + codec.mp3 +\n \"\\nOGG support: \" + codec.ogg +\n \"\\nFlashVersion: \" + flashVersion #+\n# \"\\n\\n=== DEBUG LOG ===\" + SessionSettings.logOutput # since this is used in the DOM, it can cause too many dom updates\n )\n\n $scope.$watch \"showNavigation\", ->\n ChromeMenuHelper.currentMenu = null;\n\n ]\n])\n","import * as angular from 'angular';\nimport { IFrameMessageService } from 'app/assets/javascripts/v3/modules/common/services/iframe-message-service';\nimport * as _ from 'lodash';\n\ndeclare const Packs: any;\n\nimport { IHttpParamSerializer } from 'angular';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\n\nexport interface ICloseButton extends ng.IScope {\n setLoadingMessage: (message: string, isError?: boolean) => void;\n closeWindow: () => void;\n onClose: () => void;\n}\n\ninterface IFilter extends ng.IFilterService {\n (name: 'translate'): (key: string) => string;\n}\n\nangular.module('cerego.learnApp').directive('closeButton', [\n () => ({\n restrict: 'E',\n\n templateUrl: Packs.iKnowRoutes.learn_v2_templates_path('close_button'),\n\n controller: [\n '$scope',\n '$window',\n '$filter',\n '$location',\n '$httpParamSerializer',\n 'WindowHelper',\n 'LtiService',\n 'UserManager',\n 'StudyQueue',\n 'DebugHelper',\n 'PresentationManager',\n 'WindowManager',\n 'SessionSettings',\n 'SummaryHelper',\n 'ChromeMenuHelper',\n 'WrapUpHelper',\n 'ContentMemoryManager',\n 'iFrameMessageService',\n (\n $scope: ICloseButton,\n $window: ng.IWindowService,\n $filter: IFilter,\n $location: ng.ILocationService,\n $httpParamSerializer: ng.IHttpParamSerializer,\n WindowHelper,\n LtiService,\n UserManager,\n StudyQueue,\n DebugHelper: IDebugHelper,\n PresentationManager,\n WindowManager,\n SessionSettings,\n SummaryHelper,\n ChromeMenuHelper,\n WrapUpHelper,\n ContentMemoryManager,\n iFrameMessageService: IFrameMessageService\n ) => {\n DebugHelper.register('closeButton', $scope);\n\n const postMessageEndSession = () => {\n iFrameMessageService.postMessage({ messageType: 'end-session', data: {} });\n };\n const postMessageExitLearnApp = () => {\n iFrameMessageService.postMessage({ messageType: 'exit-learn-app', data: {} });\n };\n // This does not guarantee a redirect, so make sure you leave a message for the user in case the window stays open\n $scope.closeWindow = () => {\n WindowManager.disableCloseWarning();\n postMessageEndSession();\n postMessageExitLearnApp();\n\n if (SessionSettings.returnURL) {\n if (SessionSettings.isPreview) {\n $window.location.href = SessionSettings.returnURL;\n } else {\n $window.location.href =\n $window.location.protocol +\n '//' +\n $window.location.host +\n SessionSettings.returnURL +\n '?' +\n $httpParamSerializer(SummaryHelper.pathParams);\n }\n } else if (WindowHelper.inIframe() || LtiService.ltiClientId) {\n $scope.setLoadingMessage($filter('translate')('js.learn_app_message.progress_saved'), true);\n } else {\n $window.location.href = SummaryHelper.homePath;\n }\n };\n\n $scope.onClose = () => {\n if (ChromeMenuHelper.currentMenu) {\n // This is for them to close an open menu\n ChromeMenuHelper.currentMenu = null;\n } else if (SessionSettings.isPreview) {\n $scope.setLoadingMessage($filter('translate')('js.learn_app_message.finishing_up'));\n $scope.closeWindow();\n } else {\n WrapUpHelper.requestClose()\n .catch(fail => {\n // NOOP, failure means they chose to wrap up and not quit\n })\n .then(() => {\n $scope.setLoadingMessage($filter('translate')('js.learn_app_message.saving_progress'));\n\n return PresentationManager.uploadStudyData();\n })\n .then(() => {\n // TODO: remove me after LASS on course/series/study_all\n ContentMemoryManager.reset();\n\n return ContentMemoryManager.load();\n })\n .then(memoryAggregate => {\n if (WrapUpHelper.enabled && (SessionSettings.forceSplash || !UserManager.currentUser)) {\n postMessageEndSession();\n $location.url(SummaryHelper.signUpPath);\n } else if (WrapUpHelper.enabled && memoryAggregate.last_study_time) {\n postMessageEndSession();\n $location.url(SummaryHelper.summaryPath);\n } else {\n $scope.closeWindow();\n }\n })\n .catch(fail => {\n postMessageEndSession();\n $scope.setLoadingMessage($filter('translate')('js.learn_app_message.result_submit_error'));\n });\n }\n };\n\n return $scope;\n }\n ]\n })\n]);\n","learnApp.directive('flexibleConcept', [->\n restrict: \"A\"\n\n scope:\n concept: \"=flexibleConcept\"\n facet: \"=withTransliteration\"\n studyCorrect: \"=studyCorrect\"\n withPartOfSpeech: \"@\"\n\n templateUrl: Packs.iKnowRoutes.learn_v2_templates_path(\"flexible_concept\")\n\n controller: ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"flexibleConcept\", $scope)\n\n _.assignIn $scope,\n toggleActive: (value) ->\n $scope.active = value\n ]\n])\n","learnApp.directive('flexibleRegion', [->\n restrict: \"A\"\n\n scope:\n image: \"=flexibleRegion\"\n facets: \"=\"\n size: \"@\"\n noZoom: \"=?\"\n allowTooltip: \"=?\"\n\n templateUrl: Packs.iKnowRoutes.learn_v2_templates_path(\"flexible_region\")\n\n controller: ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"flexibleRegion\", $scope)\n\n $scope.enableZoom = ->\n $scope.zoom = true\n\n $scope.disableZoom = ->\n $scope.zoom = false\n ]\n\n link: ($scope, element, attr) ->\n element.addClass(\"flexible-region\")\n])\n","learnApp.directive('sequenceStudyScrollableFacet', [->\n restrict: \"A\"\n\n controller: ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"sequenceStudyScrollableFacet\", $scope)\n ]\n\n link: ($scope, element, attrs) ->\n $scope.$watch \"currentQuiz.currentStep\", ->\n if $scope.$index == $scope.currentQuiz.currentStep - 1 + Math.min($scope.currentQuiz.lastStudiedStep - $scope.currentQuiz.currentStep, 2)\n element[0].scrollIntoView()\n])\n","learnApp.directive(\"topNavigationHeader\", [->\n restrict: \"E\"\n\n scope:\n progressPercent: \"=\"\n currentMode: \"=\"\n item: \"=\"\n\n templateUrl: Packs.iKnowRoutes.learn_v2_templates_path(\"top_navigation_header\")\n\n controller: ['$scope', '$analytics', '$compile', 'DebugHelper', 'AssignmentDetailsService', 'ContentService', 'SessionSettings', 'ModalService', 'LtiService', 'UserManager', ($scope, $analytics, $compile, DebugHelper, AssignmentDetailsService, ContentService, SessionSettings, ModalService, LtiService, UserManager) ->\n DebugHelper.register(\"topNavigationHeader\", $scope)\n\n _.assignIn $scope,\n AssignmentDetailsService: AssignmentDetailsService\n ContentService: ContentService\n SessionSettings: SessionSettings\n LtiService: LtiService\n UserManager: UserManager\n stateUI:\n currentItemCount: 0,\n isMenuContentOpen: false\n\n initialize: () ->\n $scope.stateUI.currentItemCount = _.indexOf(ContentService.items, $scope.item) + 1\n\n # This is for the close button to work. Can refactor but it will touch too many things.\n setLoadingMessage: (message, isError) ->\n $scope.$parent.setLoadingMessage(message, isError)\n\n updateNavigation: () ->\n $scope.stateUI.showNavigation = !$scope.stateUI.showNavigation\n if !$scope.stateUI.showNavigation\n $scope.stateUI.isMenuContentOpen = false\n\n $scope.$watch \"item\", ->\n $scope.initialize()\n\n $scope.$on \"toggleMenuContent\", ->\n $scope.stateUI.isMenuContentOpen = !$scope.stateUI.isMenuContentOpen\n ]\n])\n","learnApp.controller('allFacetsCtrl', ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"allFacetsCtrl\", $scope)\n\n _.assignIn $scope,\n facets: $scope.item[$scope.item.template_type].facets\n\n if $scope.item.template_type == \"cloze_container\"\n $scope.cloze_nodes = _.map $scope.facets, (facet) -> facet.anchor.cloze_node\n])\n","import roundLevelGoal from 'javascripts/util/round-level-goal.coffee';\n\nlearnApp.controller('assignedGoalCtrl', ['$scope', '$filter', '$routeParams', '$location', 'DebugHelper', 'ContextService', 'SummaryHelper', 'MemoryBankLevelsService', 'ModalService', ($scope, $filter, $routeParams, $location, DebugHelper, ContextService, SummaryHelper, MemoryBankLevelsService, ModalService) ->\n DebugHelper.register(\"assignedGoalCtrl\", $scope)\n\n _.assignIn $scope,\n ContextService: ContextService\n ModalService: ModalService\n step: 1\n numSteps: 5\n dirty: true\n\n ctaCopy: ->\n if $scope.step < $scope.numSteps\n $filter(\"translate\")(\"js.learn_app_message.next\")\n else\n $filter(\"translate\")(\"js.assigned_goal.start_this_context_type\", { context_type: _.capitalize(ContextService.contextType)} )\n\n startQuiz: ->\n $location.path SummaryHelper.quizPath\n\n timeToAchieve: ->\n \"js.assigned_goal.time_to_achieve.target_\" + Math.round($scope.roundedLevelGoal)\n\n nextStep: ->\n if $scope.step < $scope.numSteps\n $scope.step += 1\n else\n $scope.startQuiz()\n\n setLoadingMessage: (message, isError)->\n $scope.dirty = true\n $scope.loadingMessage = message\n $scope.error = isError\n\n ContextService.loadContext().then (module) ->\n SummaryHelper.loadPaths()\n $scope.module = module\n $scope.dirty = false\n $scope.memoriesCount = module.memories_count\n $scope.roundedLevelGoal = roundLevelGoal($scope.module.scoring_goal)\n $scope.level_slug = MemoryBankLevelsService.slugLevel($scope.roundedLevelGoal)\n])\n","learnApp.controller('correctConfirmationCtrl', ['$scope', '$timeout', 'DebugHelper', 'SoundFXManager', 'AnimationManager', ($scope, $timeout, DebugHelper, SoundFXManager, AnimationManager) ->\n DebugHelper.register(\"correctConfirmationCtrl\", $scope)\n\n SoundFXManager.play(\"correct\").then ->\n if $scope.sentence && $scope.sentence.sound\n SoundFXManager.play($scope.sentence.sound.url)\n else if $scope.concept && $scope.concept.sound\n SoundFXManager.play($scope.concept.sound.url)\n\n $timeout ->\n AnimationManager.cancel(\"opacity\")\n AnimationManager.cancel(\"region\")\n angular.element(\".confirmation--correct\").removeClass(\"confirmation--correct\")\n angular.element(\".study--correct\").removeClass(\"study--correct\")\n])\n","learnApp.controller('explanationQuestionCtrl', ['$scope', '$filter', '$timeout', 'DebugHelper', 'SoundFXManager', 'AssetPreloader', 'AnimationManager', 'ContextService', 'InstructionalContentService', 'HotKeyManager', 'SessionSettings', 'Cheating', ($scope, $filter, $timeout, DebugHelper, SoundFXManager, AssetPreloader, AnimationManager, ContextService, InstructionalContentService, HotKeyManager, SessionSettings, Cheating) ->\n DebugHelper.register(\"explanationQuestionCtrl\", $scope)\n\n _.assignIn $scope,\n hintUsed: false\n flaggingContent: false\n submitted: false\n stateUI: {\n showQuestion: false\n }\n\n choiceToPresentation: (choice) ->\n data = {\n correct: choice.correct\n }\n data.text_html = choice.text_html if $filter('presence')(choice.text_html)\n data.image = choice.image.url if choice.image\n data\n\n showInstructionalContentItem: (item) ->\n $scope.showInstructionalContent = true\n InstructionalContentService.showItem(item)\n\n toggleQuestionShow: ->\n $scope.stateUI.showQuestion = !$scope.stateUI.showQuestion\n\n getCorrectnessResult: ->\n # how many choices were correctly selected/not selected\n correctChoicesCount = _.filter($scope.choices, (choice) -> choice.correct == choice.selected).length\n # how many correct choices were selected\n correctAnswersCount = _.filter($scope.choices, (choice) -> choice.correct && choice.selected).length\n\n if $scope.choices.length == correctChoicesCount\n retVal = \"correct\"\n # Q&A gets partial credit if over half are correctly selected/not selected and we selected at least one right answer\n else if $scope.item.template_type == \"question_and_answer\" && correctChoicesCount > $scope.choices.length / 2 && correctAnswersCount >= 1\n retVal = \"almost_correct\"\n else\n retVal = \"incorrect\"\n retVal\n\n selectChoice: (choice, fromHotKey) ->\n if $scope.item[$scope.item.template_type].answer_type == 'multi_correct'\n choice.selected = !choice.selected\n else\n _.map $scope.choices, (c) ->\n c.selected = false\n choice.selected = true\n # selected by mouse. Set hotkey index to the current selected index so you can switch to using hotkey\n if !fromHotKey\n currentCorrectIndex = _.findIndex($scope.choices, choice)\n HotKeyManager.setHotkeyIndex($scope, currentCorrectIndex.toString())\n\n\n submitAnswerHotKey: (event, hotkey) ->\n $scope.submitAnswer() if event.key == \"Enter\"\n\n submitDisabled: ->\n !SessionSettings.isPreview && !Cheating.enabled && _.isEmpty($scope.selectedChoices())\n\n selectedChoices: () ->\n _.filter($scope.choices, (c) -> c.selected)\n\n submitAnswer: ->\n return if $scope.submitted\n $scope.submitted = true\n\n if (SessionSettings.isPreview || Cheating.enabled) && _.isEmpty($scope.selectedChoices())\n _.map $scope.choices, (choice) ->\n choice.selected = choice.correct\n\n result = $scope.getCorrectnessResult()\n\n if result == 'incorrect' || result == 'almost_correct'\n $scope.initializeIncorrectScreen(result)\n\n $scope.answerQuiz result,\n choices: _.map $scope.choices, $scope.choiceToPresentation\n choices_made: _.map($scope.selectedChoices(), (selectedChoice) ->\n _.findIndex($scope.choices, (choice) -> choice.id == selectedChoice.id)\n )\n\n initializeIncorrectScreen: (result) ->\n if $scope.item[$scope.item.template_type].answer_type == 'multi_correct'\n numCorrect = $scope.item[$scope.item.template_type].facets.length\n numSelected = _.filter($scope.choices, { selected: true } ).length\n numSelectedAndCorrect = _.filter($scope.choices, { selected: true, correct: true} ).length\n # Partner correct only if missing 1 or more correct answer\n if $scope.item.template_type == \"question_and_answer\"\n if result == \"incorrect\"\n $scope.incorrectMessage = \"js.learnApp.incorrect_confirmation.application_question.multi_select_incorrect_combo\"\n else\n $scope.incorrectMessage = \"js.learnApp.incorrect_confirmation.question_and_answer.multi_select_almost_correct\"\n else if (numSelected < numCorrect) && (numSelected == numSelectedAndCorrect)\n $scope.incorrectMessage = \"js.learnApp.incorrect_confirmation.application_question.multi_select_incorrect_partly\"\n else\n $scope.incorrectMessage = \"js.learnApp.incorrect_confirmation.application_question.multi_select_incorrect_combo\"\n else\n $scope.incorrectMessage = \"js.learnApp.incorrect_confirmation.application_question.single_select_incorrect\"\n\n buildChoices: ->\n choices = []\n for fc in _.map(_.map($scope.item[$scope.item.template_type].facets, \"association\"), \"concept\")\n choices = choices.concat(_.assignIn(_.pick(fc, ['id', 'text_html', 'explanation_html', 'image']), { correct: true, selected: false } ))\n for dc in $scope.item[$scope.item.template_type].concept.distractors\n choices = choices.concat(_.assignIn(_.pick(dc, ['id', 'text_html', 'explanation_html', 'image']), { correct: false, selected: false } ))\n\n _.shuffle(choices)\n\n $scope.choices = $scope.buildChoices()\n\n defineAction = (i) ->\n actions[i] = ->\n $scope.selectChoice($scope.choices[i], true)\n\n actions = {}\n for choice, i in $scope.choices\n defineAction(i)\n HotKeyManager.registerActionNavigator $scope, actions, 1\n\n if SessionSettings.isPreview || Cheating.enabled\n for correctAnswerIndex in _.filter($scope.choices, { correct: true })\n $scope.selectChoice(correctAnswerIndex, false)\n\n $scope.$watch \"hotkeySelection\", (newVal, oldVal) ->\n if (newVal != oldVal) && !$scope.submitted\n if $scope.item[$scope.item.template_type].answer_type != 'multi_correct'\n $scope.selectChoice($scope.choices[parseInt($scope.hotkeySelection)], true)\n\n $scope.$on \"instructionalContent:hideList\", () ->\n $scope.showInstructionalContent = false\n\n $scope.$watch \"step\", (newVal, oldVal) ->\n if newVal == \"correct_confirmation\"\n SoundFXManager.play(\"correct\")\n])\n","learnApp.controller('fillInTheBlankCtrl', ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"fillInTheBlankCtrl\", $scope)\n\n _.assignIn $scope,\n answer: []\n\n setAnswer: (newAnswer) ->\n $scope.answer = newAnswer\n])\n","learnApp.controller('instructionalContentCtrl', ['$scope', 'DebugHelper', 'InstructionalContentService', ($scope, DebugHelper, InstructionalContentService) ->\n DebugHelper.register(\"instructionalContentCtrl\", $scope)\n\n _.assignIn $scope,\n showInstructionalItem: InstructionalContentService.currentItem?\n\n showSeeInstructional: ->\n !!$scope.showInstructionalItem\n\n showItem: (item) ->\n $scope.showInstructionalItem = true\n $scope.item = item\n\n #show item immediately on load\n if InstructionalContentService.currentItem?\n $scope.showItem(InstructionalContentService.currentItem)\n\n $scope.$on \"instructionalContent:showList\", () ->\n # handle bottom chrome button click\n $scope.showInstructionalItem = false\n\n $scope.$on 'instructionalContent:showItem', (event, item) ->\n $scope.showItem(item)\n])\n","import * as angular from 'angular';\nimport * as $ from 'jquery';\nimport * as _ from 'lodash';\nimport { ILtiRedirectService } from 'v2/modules/common/lti-redirect-service';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\n\nangular.module('cerego.learnApp').controller('learnLtiRedirectCtrl', [\n '$scope',\n 'LtiRedirectService',\n ($scope: v3.controller.ILtiRedirectCtrl, LtiRedirectService: ILtiRedirectService) => {\n $scope.stateUI = {\n error: null\n };\n\n try {\n LtiRedirectService.exchangeTokenAndRedirect();\n } catch (error) {\n $scope.stateUI.error = error;\n }\n }\n]);\n","learnApp.controller('learnMoreCtrl', ['$scope', '$routeParams', 'DebugHelper', ($scope, $routeParams, DebugHelper) ->\n DebugHelper.register(\"learnMoreCtrl\", $scope)\n\n _.assignIn $scope,\n orbs: []\n unlockedLevels: [1]\n showHeader: false\n memoryBankStep: 1\n currentStep: 1\n positions: [[0,50], [80,10],[0,140],[80,100], [80, 190]]\n screenWidth: Math.floor(angular.element(\"body\").width() * 0.8)\n itemTypes:\n association:\n class: \"association\"\n name: \"js.learn_app_message.splash.association.name\"\n title: \"js.learn_app_message.splash.association.title\"\n description: [ \"js.learn_app_message.splash.association.description_1\", \"js.learn_app_message.splash.association.description_2\" , \"js.learn_app_message.splash.association.description_3\"]\n regions:\n class: \"regions\"\n name: \"js.learn_app_message.splash.regions.name\"\n title: \"js.learn_app_message.splash.regions.title\"\n description: [\"js.learn_app_message.splash.regions.description_1\", \"js.learn_app_message.splash.regions.description_2\", \"\"]\n languages:\n class: \"languages\"\n name: \"js.learn_app_message.splash.languages.name\"\n title: \"js.learn_app_message.splash.languages.title\"\n description: [\"js.learn_app_message.splash.languages.description_1\", \"js.learn_app_message.splash.languages.description_2\", \"js.learn_app_message.splash.languages.description_3\" ]\n passages:\n class: \"passages\"\n name: \"js.learn_app_message.splash.passages.name\"\n title: \"js.learn_app_message.splash.passages.title\"\n description: [\"js.learn_app_message.splash.passages.description_1\", \"js.learn_app_message.splash.passages.description_2\", \"js.learn_app_message.splash.passages.description_3\" ]\n sequences:\n class: \"sequences\"\n name: \"js.learn_app_message.splash.sequences.name\"\n title: \"js.learn_app_message.splash.sequences.title\"\n description: [\"js.learn_app_message.splash.sequences.description_1\", \"js.learn_app_message.splash.sequences.description_2\", \"\"]\n patterns:\n class: \"patterns\"\n name: \"js.learn_app_message.splash.patterns.name\"\n title: \"js.learn_app_message.splash.patterns.title\"\n description: [\"js.learn_app_message.splash.patterns.description_1\", \"js.learn_app_message.splash.patterns.description_2\", \"js.learn_app_message.splash.patterns.description_3\" ]\n\n enlargeOrb: (element) ->\n element.selectAll(\"text.text-expanded\").style(\"opacity\", 0)\n element.select(\"g\").style(\"opacity\", 0)\n image = element.select(\"image\")\n image.attr\n height: 0\n width: 0\n x: 80\n y: 40\n element.attr\n width: 800\n height: 300\n x: 180\n y: 0\n element.style(\"opacity\", 1)\n element.select(\"circle\").transition().duration(1000).attr\n cy: 300\n cx: 250\n r: 250\n image.transition().duration(1000).attr\n x: 200\n y: 70\n height: $scope.imageScale\n width: $scope.imageScale\n element.select(\"g\").style(\"display\", \"block\")\n element.select(\"g\").transition().duration(500).style(\"opacity\", 1)\n element.select(\".swap-description\").style(\"display\", \"none\")\n for animate_element in element.selectAll(\"animate\")[0]\n animate_element.beginElement()\n element.selectAll(\"text.text-expanded\").style(\"display\", \"block\")\n element.selectAll(\"text.text-expanded\").transition().duration(1200).style(\"opacity\", 1)\n element.classed(\"selected-orb\", true)\n element.classed(\"minimized\", false)\n\n\n getImageUrl: (type) ->\n url = angular.element(\"#learn-app-splash-orbs-step-1\").data(type.class + \"-icon\")\n url\n\n updateCurrentStep: (num) ->\n $scope.currentStep = $scope.currentStep + num\n\n if $scope.currentStep == 2\n $scope.$broadcast(\"learnMoreMemoryBank:setStep\", $scope.memoryBankStep)\n\n updateMemoryBankStep: (num) ->\n $scope.memoryBankStep = $scope.memoryBankStep + num\n $scope.$broadcast(\"learnMoreMemoryBank:setStep\", $scope.memoryBankStep)\n\n resetOrbs: ->\n idx = 0\n for orb in d3.selectAll(\".learn--app-splash-orb\")[0]\n orb = d3.select(orb)\n orb.attr\n width: 200\n height: 250\n x: 200 * idx\n y: 0\n orb.classed(\"minimized\", false)\n orb.classed(\"selected-orb\", false)\n orb.selectAll(\"text\").style(\"display\", \"none\")\n orb.selectAll(\"g\").style(\"display\", \"none\")\n orb.select(\".orb-description\").style(\"display\", \"block\")\n orb.select(\"circle\").attr\n cx: 100\n cy: 100\n r: 65\n orb.select(\"image\").attr\n width: 70\n height: 70\n x: 65\n y: 65\n idx = idx + 1\n\n minimizeOrb: (currentOrb, x, y) ->\n currentOrb.attr\n x: x\n y: y\n width: 80\n height: 80\n currentOrb.select(\"circle\").attr\n cx: 40\n cy: 40\n r: 40\n currentOrb.selectAll(\"text\").style(\"display\", \"none\")\n currentOrb.selectAll(\"g\").style(\"display\", \"none\")\n currentOrb.select(\"image\").attr\n width: 40\n height: 40\n x: 20\n y: 20\n currentOrb.classed(\"minimized\", true)\n currentOrb.select(\".swap-description\").attr({x: -40})\n\n swapImage: (event, swap) ->\n parent = event.target.parentNode\n return if parent.classList.contains(\"selected-orb\")\n if parent.classList.contains(\"minimized\")\n image = d3.select(parent).select(\"image\")\n text = d3.select(parent).select(\".swap-description\")\n if swap\n text.style(\"display\", \"block\")\n text.transition().duration(400).attr({x: 40})\n image.transition().duration(400).attr({x: 100})\n else\n image.transition().duration(400).attr({x: 20})\n text.transition().duration(400).attr({x: -40}).each(\"end\", ->\n text.style(\"display\", \"none\")\n )\n else\n circle = d3.select(parent).select(\"circle\")\n image = d3.select(parent).select(\"image\")\n if swap\n circle.transition().duration(100).attr({r: 75})\n else\n circle.transition().duration(100).attr({r: 65})\n return true\n\n finishAndReset: ->\n $scope.currentStep = 1\n $scope.memoryBankStep = 1\n $scope.resetOrbs()\n $('.learn-app--splash').animate({scrollTop: 0}, \"slow\", ->\n $scope.learnMore.visible = false\n )\n true\n\n startAnimation: (event) ->\n if event.target.parentNode.classList.contains(\"selected-orb\")\n return\n selectedElement = d3.select(event.target.parentNode)\n index = 0\n #if none is selected yet. Move everything to left and enlarge the selected\n if d3.select(\".selected-orb\").size() == 0\n selectedElement.classed(\"selected-orb\", true)\n for orb in d3.selectAll(\".learn--app-splash-orb\")[0]\n element = d3.select(orb)\n element.selectAll(\"text\").style(\"display\", \"none\")\n if orb.classList.contains(\"selected-orb\")\n element.style(\"opacity\", 0)\n $scope.enlargeOrb(element)\n else\n $scope.minimizeOrb(element, $scope.positions[index][0], $scope.positions[index][1])\n\n index = index + 1\n # if one is selected, get that position, swap position, make selected one big\n else\n element = selectedElement\n element.style(\"opacity\", 0)\n currentOrb = d3.select(\".selected-orb\")\n $scope.minimizeOrb(currentOrb, element.attr(\"x\"), element.attr(\"y\"))\n currentOrb.classed(\"selected-orb\", false)\n $scope.enlargeOrb(element)\n\n calculateSizes: ->\n $scope.sectionSize = $scope.screenWidth / 6\n $scope.orbSize = $scope.sectionSize * 0.8\n $scope.circleSize = $scope.orbSize / 2\n $scope.smallCircle = $scope.circleSize * 0.8\n $scope.spacing = ($scope.sectionSize - $scope.orbSize) / 2\n $scope.imageScale = $scope.circleSize\n $scope.imageSize = $scope.orbSize / 4\n $scope.circleCenter = 100\n $scope.circleCirc = 65\n $scope.imagePos = 70\n $scope.imageSize = 60\n\n $scope.calculateSizes()\n\n $scope.$on \"memoryBank:demoStarted\", ->\n $scope.updateMemoryBankStep(1)\n])\n","learnApp.controller('ltiWrapperCtrl', ['$scope', '$routeParams', 'DebugHelper', 'LtiService', ($scope, $routeParams, DebugHelper, LtiService) ->\n DebugHelper.register(\"ltiWrapperCtrl\", $scope)\n\n _.assignIn $scope,\n ltiClientId: LtiService.ltiClientId\n\n skipToMainContent: ($event) ->\n angular.element(\"#learn-app--main-content\").focus()\n $event.preventDefault()\n\n setLtiWrapper: () ->\n return if _.includes(process.env.RAILS_ENV, 'govcloud')\n if LtiService.ltiClientId == 9\n window.document.title = \"Elsevier Cerego Study\"\n $scope.ltiWrapper = \"elsevier\"\n else if LtiService.ltiClientId == 14\n $scope.ltiWrapper = \"cengage\"\n else if LtiService.ltiClientId == 183 || LtiService.ltiClientId == 198 || $routeParams.isBBC == \"true\"\n $scope.ltiWrapper = \"bbc\"\n\n\n $scope.setLtiWrapper()\n\n $scope.$on '$routeChangeSuccess', () ->\n $scope.setLtiWrapper()\n])\n","learnApp.controller(\"mobileAppModal\", ['$analytics', '$scope', '$q', 'DebugHelper', 'EmailsResource', 'MyMailersResource', 'UserManager', 'UsersResource', ($analytics, $scope, $q, DebugHelper, EmailsResource, MyMailersResource, UserManager, UsersResource) ->\n DebugHelper.register(\"mobileAppModal\", $scope)\n\n debouncedSendEmail = _.debounce ->\n MyMailersResource.sendMobileLoginInfo().$promise\n .then -> $scope.sentEmail = true\n .catch (error) -> $scope.errorMessage = error.data.response\n , 5000, true\n\n _.assignIn $scope,\n errorMessage:null\n isEmailSaved:false\n model:\n email:null\n password:null\n passwordInputType:\"password\"\n sentEmail:false\n showPassword:false\n stateUI:\n currentState: null\n \n #state: (get_info|success|had_info|confirm_merge_accounts|merge_account_sent)\n\n addEmailIfShould: ->\n return $q.resolve() if $scope.isEmailSaved\n EmailsResource.create({ email_address: $scope.model.email }).$promise\n .then (response) ->\n $scope.isEmailSaved = true\n $analytics.eventTrack('saved login email', { category: 'mobileAppModal' })\n .catch (error) ->\n if _.isArray(error.data.response.match(\"error-email-already-taken\"))\n $scope.stateUI.currentState = 'confirm_merge_accounts'\n $q.reject(error)\n\n sendMergeAccountEmail: ->\n EmailsResource.create({ email_address: $scope.model.email, merge: true }).$promise\n .then (response) ->\n $scope.stateUI.currentState = 'merge_account_sent'\n\n saveLoginDetails: ->\n $scope.errorMessage = null\n $scope.addEmailIfShould()\n .then -> $scope.updatePassword()\n .then ->\n UserManager.resetUser()\n $scope.stateUI.currentState = \"success\"\n $scope.trackPageView()\n $scope.sendMobileInfoEmail()\n .catch (error) -> $scope.errorMessage = error.data.response\n\n sendMobileInfoEmail: ->\n return $q.resolve() if $scope.sentEmail\n debouncedSendEmail()\n\n toggleShowPassword: ->\n $scope.showPassword = !$scope.showPassword\n $scope.passwordInputType = if $scope.showPassword then \"text\" else \"password\"\n\n trackPageView: ->\n $analytics.pageTrack('/mobileAppModal/' + $scope.stateUI.currentState);\n\n updatePassword: ->\n password = $scope.model.password\n password_confirmation = $scope.model.password_confirmation\n UsersResource.save({ id: $scope.user.id }, { password:password, password_confirmation:password_confirmation, skip_password_validation:true }).$promise\n .then -> $analytics.eventTrack('saved login password', { category: 'mobileAppModal' })\n\n getIcon: ->\n if $scope.stateUI.currentState == 'merge_account_sent' then 'icon-mail' else 'icon-phone'\n\n $scope.errorMessage = null\n $scope.sentEmail = false\n UserManager.loadUser().then (currentUser) ->\n $scope.user = currentUser\n if currentUser\n $scope.model.email = currentUser.attributes.email\n $scope.isEmailSaved = currentUser.attributes.email != null\n hasInfo = currentUser.attributes[\"has-password\"] && $scope.isEmailSaved\n $scope.stateUI.currentState = if hasInfo then \"had_info\" else \"get_info\"\n else\n $scope.stateUI.currentState = \"had_info\"\n\n $scope.trackPageView()\n])\n","import * as angular from 'angular';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\n\ninterface ICtrl extends ng.IScope {\n closeModal: () => void;\n}\n\nangular.module('cerego.learnApp').controller('onboardingModal', [\n '$scope',\n 'DebugHelper',\n ($scope: ICtrl, DebugHelper: IDebugHelper) => {\n DebugHelper.register('onboardingModal', $scope);\n\n angular.element('body').on('keydown', e => {\n e.stopPropagation();\n if (e.keyCode === 13) {\n // enter\n return $scope.closeModal();\n }\n });\n\n $scope.$on('$destroy', () => {\n angular.element('body').unbind('keydown');\n });\n }\n]);\n","learnApp.controller(\"personalizationModal\", ['$scope', '$interval', 'ContextService', '$routeParams', '$filter', 'PresentationManager', 'MemoryBankResource', 'DebugHelper', ($scope, $interval, ContextService, $routeParams, $filter, PresentationManager, MemoryBankResource, DebugHelper) ->\n DebugHelper.register(\"personalizationModal\", $scope)\n\n _.assignIn $scope,\n experimentTypes:\n CONTROL: 'control'\n SERIES: 'series'\n FADING: 'all_fading'\n INTRINSIC: 'intrinsic'\n EXTRINSIC: 'extrinsic'\n\n _.assignIn $scope,\n STAT_INTERVAL_MILLIS: 50 # Interval between how often stats count up\n PROGRESS_SPEED: 20 # How fast the progress bar increases\n COUNT_SPEED: 50 # The speed at which counts increase (If there are 134 things to count, the speed would be 3 since Math.ceil(134/50) = 3)\n DOTS_PER_SECTION: 10\n\n # The amount of different titles in js/en.yml to choose from (can't do .sample since it's js)\n titleAmounts:\n 'control': 8\n 'intrinsic': 9\n 'extrinsic': 10\n\n # The counts for the concepts that are displayed to the user, they count up and are required for animation\n stateUI:\n loaded: false # True if the user, experiment, and memory aggregate data has loaded\n total: 0 # The total amount of concepts in the assignment\n active: 0 # The amount of active concepts in the assignment\n unstarted: 0 # The amount of unstarted concepts in the assignment\n fading: 0 # The amount of fading concepts in the assignment\n progress: 0 # The current progress of the assignment (0 is the lowest, 100 is the highest)\n\n # The source of truth for the concept counts\n conceptCounts:\n total: 0\n active: 0\n unstarted: 0\n fading: 0\n progress: 0\n\n score: 0 # Score of the current assignment\n titleIndex: 0 # The index of the title that was chosen to be displayed at random\n assignmentName: '' # The name of the set / series\n realName: $scope.modalOptions.user.attributes.name # The name of the user\n\n setId: $routeParams.setId\n seriesId: $routeParams.seriesId\n\n experimentType: $scope.experimentTypes.CONTROL # Default to control, should be overwritten unless the user not in an experiment segment\n\n # Increases counts on stateUI so the user can watch the numbers count upward\n countStats: ->\n statsToCount = ['active', 'unstarted', 'fading']\n for stat in statsToCount\n $scope.stateUI[stat] += Math.ceil(($scope.conceptCounts[stat] - $scope.stateUI[stat]) / $scope.COUNT_SPEED) if $scope.stateUI[stat] < $scope.conceptCounts[stat] # Only counts up by 1 at the end so no risk of skipping over the number\n\n $scope.stateUI.progress += Math.ceil(($scope.conceptCounts.progress - $scope.stateUI.progress) / $scope.PROGRESS_SPEED)\n\n getNumFading: ->\n PresentationManager.previousSessionStats.numFading || 0\n\n getTitleString: ->\n 'js.personalization.' + $scope.getPersonalizationTitleSlug() + '.title.' + $scope.titleIndex\n\n getTipCardString: (part) ->\n \"js.personalization.\" + $scope.experimentType + \".\" + $scope.getTipCardType() + \".\" + part\n\n getVisualizationCardString: (part) ->\n 'js.personalization.' + $scope.experimentType + '.visualization_card.' + part\n\n getLargeCardString: (part) ->\n \"js.personalization.\" + $scope.experimentType + \".\" + $scope.getAllFadingOrSeriesCardType() + \".\" + part\n\n getPersonalizationTitleSlug: ->\n # Default to control titles when the experiment type is FADING or SERIES\n switch $scope.experimentType\n when $scope.experimentTypes.FADING\n $scope.experimentTypes.CONTROL\n when $scope.experimentTypes.SERIES\n $scope.experimentTypes.CONTROL\n else\n $scope.experimentType\n\n goodForNow: ->\n ($scope.conceptCounts.unstarted == 0 || $scope.experimentType == $scope.experimentTypes.FADING) && $scope.conceptCounts.fading == 0\n \n # Determines which text to use for FADING and SERIES experiment types based on conceptCounts\n getAllFadingOrSeriesCardType: ->\n if $scope.experimentType == $scope.experimentTypes.FADING\n if $scope.conceptCounts.fading == 0\n 'finished'\n else\n 'unstarted_fading'\n else if $scope.experimentType == $scope.experimentTypes.SERIES\n if $scope.conceptCounts.unstarted > 0\n 'unstarted_fading'\n else if $scope.conceptCounts.fading > 0\n 'fading'\n else\n 'finished'\n\n # Determines which text to use for EXTRINSIC, INTRINSIC, and FADING experiement types based on conceptCounts\n getTipCardType: ->\n if $scope.experimentType == $scope.experimentTypes.EXTRINSIC && $scope.conceptCounts.progress == 100 && $scope.conceptCounts.fading == 0\n 'finished'\n else if $scope.experimentType == $scope.experimentTypes.EXTRINSIC && $scope.conceptCounts.progress == 100 && $scope.conceptCounts.fading > 0\n 'finished_fading'\n else if $scope.conceptCounts.fading > 0 && $scope.conceptCounts.unstarted > 0\n 'unstarted_fading'\n else if $scope.conceptCounts.unstarted > 0\n 'unstarted'\n else if $scope.conceptCounts.fading > 0\n 'fading'\n else\n if $scope.score >= 1\n 'finished_l1_above'\n else\n 'finished_l1_below'\n\n showSmallTipCard: ->\n _.includes([$scope.experimentTypes.CONTROL, $scope.experimentTypes.INTRINSIC, $scope.experimentTypes.EXTRINSIC], $scope.experimentType)\n\n showLargeTipCard: ->\n _.includes([$scope.experimentTypes.FADING, $scope.experimentTypes.SERIES], $scope.experimentType)\n\n ensureExperimentTypeIsPossible: (hasProgress) ->\n if $scope.experimentType == $scope.experimentTypes.EXTRINSIC && !hasProgress # Extrinsic requires progress to be present\n $scope.experimentType = $scope.experimentTypes.CONTROL\n if $scope.seriesId # If you're in a series context, ignore the experimentType and show series display\n $scope.experimentType = $scope.experimentTypes.SERIES\n unless $scope.setId || $scope.seriesId # Default to fading if there is no context\n $scope.experimentType = $scope.experimentTypes.FADING\n\n setContext: ->\n $scope.contextType = 'sets' if $scope.setId\n $scope.contextType = 'series' if $scope.seriesId\n $scope.contextId = $scope.setId || $scope.seriesId\n\n if ContextService.contextType == \"courses\"\n $scope.contextType = 'courses'\n $scope.contextId = ContextService.contextId \n\n setConceptCountStats: (memoryAggregate) ->\n $scope.conceptCounts.total = $scope.stateUI.total = memoryAggregate.items_count\n $scope.conceptCounts.active = memoryAggregate.studied_items_count - memoryAggregate.eligible_items_count\n $scope.conceptCounts.unstarted = $scope.conceptCounts.total - memoryAggregate.studied_items_count\n $scope.conceptCounts.fading = memoryAggregate.eligible_items_count\n $scope.conceptCounts.progress = $filter(\"convertProgressToInteger\")(memoryAggregate.progress)\n\n setStudyType: ->\n $scope.studyType = CeregoSharedLib.studyTypes.RECOMMENDED\n if $scope.experimentType == $scope.experimentTypes.FADING\n $scope.studyType = CeregoSharedLib.studyTypes.FADING\n\n setNextSessionSize: ->\n percentStarted = ($scope.conceptCounts.active + $scope.conceptCounts.fading)/ Math.max($scope.conceptCounts.total, 1)\n $scope.nextSessionSize = CeregoSharedLib.sessionSize($scope.conceptCounts.unstarted, $scope.conceptCounts.fading, $scope.studyType, percentStarted, $scope.progress)\n\n getData: ->\n segment = $scope.modalOptions.experimentSegment\n $scope.experimentType = segment.attributes.slug if segment?\n\n params =\n user_id: $scope.modalOptions.user.id\n\n if ContextService.contextType == \"courses\"\n params.group_id = ContextService.contextId\n\n if $scope.setId || $scope.seriesId\n params.module_id = $scope.setId || $scope.seriesId\n\n setModal = (success) ->\n memoryAggregate = success.response[0]\n $scope.ensureExperimentTypeIsPossible(memoryAggregate.progress?)\n\n $scope.setConceptCountStats(memoryAggregate)\n $scope.score = memoryAggregate.score\n $scope.progress = memoryAggregate.progress\n $scope.assignmentName = memoryAggregate.name\n\n $scope.titleIndex = _.random($scope.titleAmounts[$scope.getPersonalizationTitleSlug()] - 1)\n\n # Prepare Learn Button\n $scope.setContext()\n $scope.setStudyType()\n\n $scope.setNextSessionSize()\n\n $scope.stateUI.loaded = true\n\n resourceCall = MemoryBankResource.userAggregate\n resourceCall = MemoryBankResource.userSetAggregate if $scope.setId\n resourceCall = MemoryBankResource.userSeriesAggregate if $scope.seriesId\n\n resourceCall params\n , setModal\n , (error) ->\n DebugHelper.logError(error, \"MemoryBankResource GET error\")\n\n getDotSetAmount: ->\n $scope.range(1, Math.floor($scope.stateUI.total / $scope.DOTS_PER_SECTION) + 1)\n\n getDotAmount: (index) ->\n $scope.range(1, Math.min($scope.DOTS_PER_SECTION, $scope.stateUI.total - ((index - 1) * $scope.DOTS_PER_SECTION) ))\n\n range: (min, max, step) ->\n step = step or 1\n input = []\n i = min\n while i <= max\n input.push i\n i += step\n input\n\n $scope.getData()\n stopCountStatsPromise = $interval $scope.countStats, $scope.STAT_INTERVAL_MILLIS\n\n $scope.$on \"$destroy\", ->\n $interval.cancel stopCountStatsPromise\n])\n","learnApp.controller('quizCtrl', ['$scope', '$location', '$route', '$timeout', '$filter', '$q', '$window', 'DebugHelper', 'hotkeys', 'ContextService', 'iFrameMessageService', 'SessionSettings', 'StudyQueue', 'QuizTimer', 'PresentationManager', 'PassageHighlightingService', 'MCLBuilder', 'AssetPreloader', 'SoundFXManager', 'UserManager', 'ContextSwitcher', 'ContentService', 'QuizNameService', 'SummaryHelper', 'TypingGuideHelper', 'WrapUpHelper', 'InstructionalContentService', 'SurveyHelper', 'OnboardingService', 'milestoneService', 'WindowManager', 'AssignmentDetailsService', 'LtiService', 'UserSettings', 'V3SetsResource', 'setLearnURLService', ($scope, $location, $route, $timeout, $filter, $q, $window, DebugHelper, hotkeys, ContextService, iFrameMessageService, SessionSettings, StudyQueue, QuizTimer, PresentationManager, PassageHighlightingService, MCLBuilder, AssetPreloader, SoundFXManager, UserManager, ContextSwitcher, ContentService, QuizNameService, SummaryHelper, TypingGuideHelper, WrapUpHelper, InstructionalContentService, SurveyHelper, OnboardingService, milestoneService, WindowManager, AssignmentDetailsService, LtiService, UserSettings, V3SetsResource, setLearnURLService) ->\n DebugHelper.register(\"quizCtrl\", $scope)\n\n _.assignIn $scope,\n dirty: true\n queue_loading: true\n assets_loading: true\n tab: \"learn\"\n routes: Packs.iKnowRoutes\n passageService: PassageHighlightingService\n QuizNameService: QuizNameService\n SurveyHelper : SurveyHelper\n progressPercentage: StudyQueue.progress\n InstructionalContentService: InstructionalContentService\n OnboardingService: OnboardingService\n WrapUpHelper: WrapUpHelper\n SessionSettings: SessionSettings\n LtiService: LtiService\n\n showSeeInstructional: ->\n $scope.item?.template_type == \"instructional_content\" && $scope.tab != \"instructional_content\"\n\n shouldShowPreview: ->\n SessionSettings.isPreview && !(($scope.step == \"incorrect_confirmation\") || ($scope.step == \"correct_confirmation\"))\n\n shouldStudyHorizontal: ->\n if ($scope.facet.item && $scope.facet.item.template_type == \"instructional_content\")\n return false\n else\n ($scope.facet.anchor.concept && $scope.facet.anchor.concept.image) ||\n ($scope.facet.association.concept && $scope.facet.association.concept.image)\n\n forceStudy: ->\n studyQuiz = _.clone($scope.currentQuiz)\n studyQuiz.quiz_type = \"Study\"\n studyQuiz.forcedStudy = true\n if studyQuiz.item.study_type == \"none\"\n studyQuiz.item.study_type = \"study\"\n StudyQueue.push(studyQuiz, true)\n rescheduledQuiz = _.clone($scope.currentQuiz)\n rescheduledQuiz.quiz_type = $scope.currentQuiz.original_quiz_type\n StudyQueue.push(rescheduledQuiz)\n\n nextQuizHotkey: (event, hotkey) ->\n $scope.nextQuiz()\n\n nextQuiz: (skipSave) ->\n return if $scope.step == 'quiz' || $scope.submitted\n $scope.submitted = true\n\n hotkeys.purgeHotkeys() # unbind all hotkeys immediately since $destroy won't be called until new keys are already bound\n\n if !skipSave\n presentations = []\n switch $scope.quiz_type\n when \"SequenceStudy\"\n facets = $scope.item.sequence.facets\n when \"PassageStudy\"\n facets = $scope.item.cloze_container.facets\n when \"ApplicationQuestion\"\n else\n facets = [$scope.facet]\n\n quizTimeData = QuizTimer.finalize(facets.length)\n\n for facet in facets\n if $scope.quiz_type == 'InstructionalStudy'\n quiz_type = $scope.quiz_type\n else\n quiz_type = $scope.original_quiz_type\n\n if facet?.item\n item_id = facet.item.id\n else\n item_id = \"\"\n\n presentations.push _.assignIn {}, quizTimeData,\n item_id: item_id # LE will ignore this, instructional items depend on it\n learning_engine_guid: facet?.learning_engine_guid\n session_guid: SessionSettings.studySessionId\n is_new_memory: $scope.is_new_memory\n quiz_type: quiz_type\n quiz_result: $scope.quiz_result\n quiz_data_attributes: $scope.quiz_data_attributes\n\n PresentationManager.record presentations\n\n SoundFXManager.stop()\n $route.reload()\n\n # Correct can be a boolean or a string in the set: [\"incorrect\", \"correct\", \"almost_correct\"]\n answerQuiz: (correct, quiz_data_attributes) ->\n return if $scope.step != 'quiz'\n $scope.quiz_data_attributes = quiz_data_attributes\n $scope.quiz_data_attributes.returned_to_recall = $scope.quiz_return_to_recall\n TypingGuideHelper.reset()\n\n if correct == \"almost_correct\"\n SoundFXManager.play(\"incorrect\")\n $scope.quiz_result = \"AlmostCorrect\"\n $scope.step = \"incorrect_confirmation\"\n else if (correct != \"incorrect\") && correct\n $scope.quiz_result = \"Correct\"\n $scope.step = \"correct_confirmation\"\n else\n SoundFXManager.play(\"incorrect\")\n if $scope.item.template_type != \"application_question\"\n $scope.forceStudy()\n $scope.quiz_result = \"Incorrect\"\n $scope.step = \"incorrect_confirmation\"\n\n yieldQuiz: ->\n return if $scope.step != 'recall'\n $scope.forceStudy()\n $scope.quiz_result = \"YieldOnRecall\"\n $timeout ->\n OnboardingService.showOnboardingScreen(\"yield\")\n $scope.nextQuiz(false)\n\n beginQuiz: ->\n return if $scope.step != 'recall'\n $scope.step = \"quiz\"\n\n goBackToRecall: ->\n return unless $scope.step == 'quiz'\n $scope.step = 'recall'\n $scope.quiz_return_to_recall = true\n hotkeys.purgeHotkeys()\n\n showTabs: ->\n $scope.original_quiz_type == 'Study' || $scope.step == 'correct_confirmation' || $scope.step == 'incorrect_confirmation'\n\n showTypingGuideTab: ->\n !!TypingGuideHelper.map\n\n showNotesTab: ->\n return false if !$scope.item || ($scope.item.template_type == 'pattern' && $scope.currentQuiz.quiz_type == 'PatternStudy') || $scope.item.template_type == \"instructional_content\"\n $scope.showTabs() && (($scope.item.note_type == 'item' && ($scope.item.annotations || []).length > 0) ||\n ($scope.item.note_type == 'facet' && ($scope.facet.annotations || []).length > 0))\n\n showSentencesTab: ->\n $scope.showTabs() && $scope.step != 'correct_confirmation' && $scope.item.sentences.length > 0\n\n showAllFacetsTab: ->\n $scope.showTabs() && $scope.item.template_type != 'sequence' &&\n $scope.item.template_type != \"pattern\" &&\n $scope.item.template_type != \"instructional_content\" &&\n $scope.item.template_type != \"application_question\" &&\n $scope.item.template_type != \"question_and_answer\" &&\n $scope.item[$scope.item.template_type].facets.length > 1\n\n setLoadingMessage: (message, isError)->\n $scope.dirty = true\n $scope.loadingMessage = message\n $scope.error = isError\n\n setAllFacetsTab: ->\n $scope.showAllFacetsTab() && $scope.tab = 'all_facets'\n\n setSentencesTab: ->\n $scope.showSentencesTab() && $scope.tab = 'sentences'\n\n noteTabText: ->\n return if _.isEmpty($scope.item)\n note = if $scope.item.note_type == 'item' then $scope.item.note_tab_text else $scope.facet.note_tab_text\n if _.isEmpty(note)\n note = \"js.item_editor.default_note_tab\"\n note\n\n setNotesTab: ->\n $scope.showNotesTab() && $scope.tab = 'notes'\n\n setLearnTab: ->\n ($scope.showTabs() || $scope.tab == 'typing_guide') && $scope.tab = 'learn'\n\n setTypingGuideTab: ->\n $scope.showTypingGuideTab && $scope.tab = \"typing_guide\"\n\n updateTitle: () ->\n $timeout ->\n angular.element(\".learn-app-quiz-inner-container\").focus()\n text = switch $scope.step\n when 'incorrect_confirmation'\n 'js.learnApp.hidden.incorrect_confirmation'\n when 'correct_confirmation'\n 'js.learnApp.hidden.correct_confirmation'\n when 'recall'\n 'js.learnApp.hidden.recall'\n when 'quiz'\n QuizNameService.quizzes[_.snakeCase($scope.currentQuiz.quiz_type)].title\n when 'study'\n 'js.learnApp.hidden.study'\n $scope.quizHeaderText = $filter('translate')(text)\n\n initialStep: () ->\n if SessionSettings.forceStep\n SessionSettings.forceStep\n else\n switch $scope.original_quiz_type\n when \"Study\"\n \"study\"\n #AQ, Q&A dont have recall screen\n when \"ApplicationQuestionSelect\", \"QuestionAndAnswerSelect\"\n \"quiz\"\n when \"MultipleChoiceLimited\"\n \"recall\"\n else\n \"recall\"\n\n endSession: ->\n iFrameMessageService.postMessage({ messageType: \"end-session\", data: {}})\n SoundFXManager.play(\"done\")\n SummaryHelper.reset()\n if SessionSettings.forceSplash || !UserManager.currentUser?.id\n WindowManager.disableCloseWarning()\n $window.location.href = Packs.iKnowRoutes.v3_free_trial_path()\n else if SessionSettings.isPreview\n $location.path SummaryHelper.summaryPath\n else if SessionSettings.hasSurvey\n $scope.tab = 'take_survey'\n else if LtiService.isBBC\n $location.url SummaryHelper.summaryPath\n else\n $location.path SummaryHelper.summaryPath\n\n finalizeLoad: ->\n # can only load instructional content after context is loaded\n # happy path will already have context service loaded\n # TODO: load synchronously with loadQueue if Context is already loaded\n InstructionalContentService.setContext(ContextService.context)\n # get milestone before quiz so we know if they unlock something for the first time\n if $scope.module.module_type == \"set\"\n $scope.module.type = \"sets\"\n milestoneService.loadMilestones($scope.module)\n InstructionalContentService.getInstructionalContent().then () ->\n $scope.queue_loading = false\n $scope.dirty = $scope.assets_loading\n\n if $scope.currentQuiz\n _.assignIn $scope, $scope.currentQuiz\n if $scope.currentQuiz.original_quiz_type == \"Study\"\n $scope.currentQuizName = \"Study\"\n else\n $scope.currentQuizName = QuizNameService.quizzes[_.snakeCase($scope.currentQuiz.quiz_type)].title\n _.assignIn $scope,\n sentence: _.sample($scope.item.sentences || [])\n quiz_result: \"Seen\"\n step: $scope.initialStep()\n\n if SessionSettings.isPreview && !SessionSettings.returnURL\n SessionSettings.returnURL = Packs.iKnowRoutes.edit_v3_create_set_item_path(ContextService.contextId, $scope.currentQuiz.item.id, facetId: $scope.currentQuiz.facet?.id, embed: SessionSettings.embed)\n\n $scope.MCLBuilder = MCLBuilder($scope.currentQuiz)\n\n $scope.$watch \"dirty\", (newVal, oldval) ->\n if !$scope.dirty\n QuizTimer.initialize()\n $scope.updateTitle()\n\n $timeout ->\n $scope.progressPercentage = StudyQueue.updateProgress()\n iFrameMessageService.postMessage({ messageType: \"next-quiz\", data: {quizProgress: StudyQueue.progress, quizSize: StudyQueue.totalStudySessionSize } })\n else\n # No quizzes left\n if PresentationManager.sessionHistory.length == 0 && InstructionalContentService.instructionalContent.length > 0\n # If we didn't actually show any quizzes but we have IC let's show that instead\n InstructionalContentService.showInstructionalContent()\n else\n $timeout ->\n $scope.progressPercentage = 100\n # Otherwise we're done, let's go back to summary\n $scope.endSession()\n\n SurveyHelper.loadSurvey().then (survey) ->\n SessionSettings.hasSurvey = !_.isUndefined(survey)\n\n # make sure to reset SessionSettings to get new studySessionId\n SessionSettings.reset()\n\n # required to load before we start quizzes\n $q.allSettled([StudyQueue.loadQueue(), ContextService.loadContext(), AssignmentDetailsService.initialize(), OnboardingService.initialize()]).then (responses) ->\n SessionSettings.inQuiz = true\n queue = responses[0]\n\n if queue.state != \"fulfilled\"\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.loading_queue_error_html\"), true)\n return\n\n if AssignmentDetailsService.assignment.attributes['learn-version'] == 4\n learnPath = setLearnURLService.getUrl({ id: AssignmentDetailsService.assignment.id, version: 4 }, { studyType: $location.search().studyType })\n $window.location.href = learnPath\n\n $scope.currentQuiz = StudyQueue.pop()\n WrapUpHelper.enable()\n $scope.enableHotkeys = UserSettings.settings.keyboardShortcut\n\n module = responses[1].value\n $scope.module = module\n $scope.finalizeLoad()\n\n AssetPreloader.preloadSoundEffects().then ->\n AssetPreloader.preloadAssets().then ->\n $scope.assets_loading = false\n $scope.dirty = $scope.queue_loading\n SessionSettings.log \"Asset preloading completed\"\n , (fail) ->\n # TODO: this can't happen yet, but let's future proof\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.loading_content_error_html\"), true)\n , (notify) ->\n return if $scope.error\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.loading_content\", { percent: notify } ))\n\n $scope.$watch \"item.study_type\", ->\n if $scope.original_quiz_type == \"Study\" && !$scope.forcedStudy\n # TODO: this may not be correct business logic\n switch $scope.item.study_type\n when \"notes\"\n $scope.tab = \"notes\"\n when \"none\"\n $scope.nextQuiz(true)\n else\n # DEFAULT\n else if $scope.original_quiz_type == \"ApplicationQuestionSelect\"\n $scope.tab = \"application_question\"\n else if $scope.item?.template_type == \"question_and_answer\"\n $scope.tab = \"question_and_answer\"\n\n $scope.$watch \"step\", (newVal, oldVal) ->\n SoundFXManager.stop() if newVal != oldVal\n QuizTimer.setStep($scope.step)\n $scope.updateTitle()\n $timeout ->\n angular.element(\"#learn-app--main-content\").focus()\n OnboardingService.showOnboardingScreen($scope.step, $scope.quiz_type)\n\n QuizTimer.$on \"autoPause\", ($event, autoPause) ->\n $scope.autoPause = autoPause\n\n $scope.$on \"$routeChangeStart\", ->\n SoundFXManager.stop()\n\n $scope.$on \"registerSoundHotkey\", ($event, soundURL) ->\n $scope.soundURLs ||= []\n $scope.currentSoundIndex ||= 0\n $scope.soundURLs.push(soundURL)\n hotkeys.bindTo($scope)\n .add({\n combo: 'ctrl+space',\n description: 'Play Sound',\n callback: ->\n $.stopSounds()\n $.playSound($scope.soundURLs[$scope.currentSoundIndex++])\n $scope.currentSoundIndex%=$scope.soundURLs.length\n })\n\n $scope.$on \"$locationChangeStart\", (e, oldUrl, newUrl) ->\n if !!$location.search().preview\n # If we are referring to somewhere from a quiz with preview in params, let next place we go know we're coming from preview\n ContextService.fromPreview = true\n\n $scope.$on \"instructionalContent:showList\", () ->\n $scope.tab = \"instructional_content\"\n\n $scope.$on \"instructionalContent:hideList\", () ->\n if $scope.currentQuiz\n unless $scope.item?.template_type == \"application_question\" || $scope.item?.template_type == \"question_and_answer\"\n $scope.tab = \"notes\"\n else\n $scope.endSession()\n\n $scope.$watch \"tab\", (newVal, oldVal) ->\n if newVal != oldVal\n SoundFXManager.stop()\n])\n","learnApp.controller('quizFIBCtrl', ['$scope', '$document', '$timeout', '$window', 'DebugHelper', 'Cheating', 'SessionSettings', 'IME', 'FuzzyMatcher', 'TypingGuideHelper', 'CombiningMarksService', ($scope, $document, $timeout, $window, DebugHelper, Cheating, SessionSettings, IME, FuzzyMatcher, TypingGuideHelper, CombiningMarksService) ->\n DebugHelper.register(\"quizFIBCtrl\", $scope)\n\n keys =\n backspace: 8\n tab: 9\n enter: 13\n escape: 27\n space: 32\n\n $scope.$watch \"concept\", ->\n return if !$scope.concept\n\n $scope.ime = IME($scope.concept.language)\n if $scope.concept.language.code != \"en\"\n TypingGuideHelper.setMap($scope.ime, $scope.concept.language)\n $scope.isEq = FuzzyMatcher($scope.concept.language).isEq\n\n if $scope.concept.sentence_text_html\n $scope.concept.sentence_text_html.replace /^(.*)(.*)<\\/b>(.*)$/, ($0, $1, $2, $3) ->\n $scope.prefix_words = _.words($1)\n $scope.concept.text_html = $2\n $scope.suffix_words = _.words($3)\n\n #normalize html and convert newlines to spaces\n normalizedHTML = angular.element(\"
\").html($scope.concept.text_html).html().replace(/\\n/, \"
\").replace(/\\/g, \" \")\n\n # Strip HTML, trailing/leading whitespace, left-to-right, and right-to-left mark\n sanitizedText = angular.element(\"
\").html(normalizedHTML).text().trim().replace(/[\\u2000-\\u200F]/g, \"\")\n\n # If we have the normalize function, lets's use it (not available in IE)\n # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n if typeof sanitizedText.normalize == 'function'\n sanitizedText = sanitizedText.normalize()\n\n $scope.expectedAnswer = CombiningMarksService.splitIntoCombinedLetters(sanitizedText)\n strippedText = CombiningMarksService.stripMarks(sanitizedText)\n\n # Break into words so we don't wrap in the middle of a word\n offset = 0\n\n $scope.text_words = _.map(_.words(strippedText, /[^\\s]+/g), (text, index) ->\n word =\n offset: offset\n text: $scope.expectedAnswer.slice(offset, offset + text.length)\n offset += text.length + 1\n word\n )\n\n $scope.hintAvailable = $scope.expectedAnswer.length > 1\n\n _.assignIn $scope,\n hintUsed: false\n hintAvailable: true\n previousValue: \"\"\n\n push: (letter) ->\n if $scope.answer.length < $scope.expectedAnswer.length\n $scope.setAnswer($scope.answer.concat(letter))\n\n last: ->\n $scope.answer[$scope.answer.length - 1]\n\n pop: ->\n letter = $scope.last()\n $scope.setAnswer($scope.answer.slice(0, $scope.answer.length - 1))\n letter\n\n isAnswerCorrect: ->\n if $scope.answer.length == 0 && (SessionSettings.isPreview || Cheating.enabled)\n $scope.setAnswer($scope.expectedAnswer)\n\n if $scope.answer.length != $scope.expectedAnswer.length\n return \"incorrect\"\n\n correctChars = _.filter $scope.expectedAnswer, (correctChar, index) ->\n $scope.isEq(correctChar, $scope.answer[index])\n\n if correctChars.length == $scope.expectedAnswer.length\n \"correct\"\n else if correctChars.length >= .9 * $scope.expectedAnswer.length\n \"almost_correct\"\n else\n \"incorrect\"\n\n submitAnswer: ->\n return if $scope.submitted\n $scope.submitted = true\n\n $document.off \"keydown\", $scope.onKeyDown\n $document.off \"keypress\", $scope.onKeyPress\n\n # finalize out ime\n if $scope.ime.last()\n $scope.push($scope.ime.last(), $scope.concept.text_html.length)\n\n # pad any extra whitespace/punctuation\n while $scope.answer.length < $scope.expectedAnswer.length && $scope.isIgnored($scope.expectedAnswer[$scope.answer.length])\n $scope.push($scope.expectedAnswer[$scope.answer.length])\n\n result = $scope.isAnswerCorrect()\n isCorrect = result != \"incorrect\"\n\n $scope.answerQuiz result,\n hint_used: $scope.hintUsed\n entered_text: $scope.answer.join(\"\")\n\n isIgnored: (letter) ->\n isSpecialChar = /[\\s\\.,,،、\\\\\\/⁄#\\^&\\*@•\\^†‡°№÷ª%‰‱¶\\+ק\\|‖¦;:\\[\\]()(){}⟨⟩=\\-–—_~`\\'\\\"‘’“”′″‴«»「」!¡\\?¿©℗®℠™…]/.test(letter)\n\n if _.includes([\"grc\", \"he\"], $scope.concept.language.code)\n return isSpecialChar || letter.match(/[A-Za-z᾽]/)\n\n isSpecialChar\n\n popLetter: ->\n if $scope.ime.buffer.length > 0\n $scope.ime.clear()\n else\n letter = $scope.pop()\n while (!_.isUndefined(letter) && $scope.isIgnored(letter))\n true\n letter = $scope.pop()\n\n onKeyDown: (e) ->\n keyCode = e.which || e.keyCode\n if keyCode == keys.backspace\n e.preventDefault()\n $scope.$apply ->\n $scope.popLetter()\n\n answerChar: ($index) ->\n if $scope.answer.length > $index\n $scope.answer[$index]\n else if $index == 0 && $scope.hintUsed\n $scope.expectedAnswer[0]\n else if $scope.isIgnored($scope.expectedAnswer[$index])\n $scope.expectedAnswer[$index]\n else if $scope.answer.length == $index\n $scope.ime && $scope.ime.last()\n useHint: ->\n $scope.pushLetter($scope.text_words[0].text[0])\n $scope.hintUsed = true\n $timeout ->\n angular.element(\".fib--letter-container\").focus()\n\n submitAnswerHotKey: (event, hotkey) ->\n $scope.submitAnswer()\n\n # https://code.google.com/p/chromium/issues/detail?id=118639 -- android doesnt support keypress events\n onAndroidInput: (e) ->\n value = $(\".fib--mobile-input\").val()\n sameCharIndex = 0\n while(sameCharIndex < value.length && sameCharIndex < $scope.previousValue.length && value[sameCharIndex] == $scope.previousValue[sameCharIndex])\n sameCharIndex++\n diffCharIndex = sameCharIndex\n while(diffCharIndex < $scope.previousValue.length)\n $scope.popLetter()\n diffCharIndex++\n while(sameCharIndex < value.length)\n $scope.pushLetter(value[sameCharIndex], {altKey: null, shiftKey: null})\n sameCharIndex++\n $scope.previousValue = value\n\n pushLetter: (letter, e) ->\n isValid = _.includes($scope.ime.validChars,letter)\n if $scope.isIgnored(letter) && !isValid\n # noop\n else if /[\\S]/.test(letter) || isValid\n alt = if e then e.altKey else false\n shift = if e then e.shiftKey else false \n \n char = $scope.ime.push(letter, alt: alt, shift: shift)\n if char\n $scope.push(char, $scope.concept.text_html.length)\n else\n SessionSettings.log \"non matching character\"\n return\n\n # Pad over whitespace in text so we don't have to type it\n while ((!_.isUndefined($scope.expectedAnswer[$scope.answer.length])) && ($scope.isIgnored($scope.expectedAnswer[$scope.answer.length])))\n $scope.push($scope.expectedAnswer[$scope.answer.length])\n\n onKeyPress: (e) ->\n keyCode = e.which || e.keyCode\n return if (keys.space == keyCode || keys.enter == keyCode)\n letter = String.fromCharCode(keyCode)\n e.preventDefault()\n\n $scope.$apply ->\n $scope.hintAvailable = false\n $scope.pushLetter(letter, e)\n\n $timeout ->\n angular.element(\".fib--letter-container\").focus()\n if SessionSettings.debug\n console.log \"binding document level handlers\"\n if bowser.android\n $(\".fib--mobile-input\").on \"input\", $scope.onAndroidInput\n else\n element = angular.element(\".fib--letter-container\")\n\n element.on \"keydown\", $scope.onKeyDown\n # see: http://msdn.microsoft.com/en-us/library/ms537509.aspx\n if bowser.msie && bowser.version == 10\n element.on \"keyup\", $scope.onKeyPress\n else\n element.on \"keypress\", $scope.onKeyPress\n\n $scope.$on '$destroy', ->\n element.off \"keydown\", $scope.onKeyDown\n element.off \"keyup\", $scope.onKeyPress\n element.off \"keypress\", $scope.onKeyPress\n])\n","learnApp.controller('quizMCLCtrl', ['$scope', '$filter', 'DebugHelper', 'HotKeyManager', 'Cheating', 'SessionSettings', ($scope, $filter, DebugHelper, HotKeyManager, Cheating, SessionSettings) ->\n DebugHelper.register(\"quizMCLCtrl\", $scope)\n\n _.assignIn $scope,\n isImageMC6: ->\n !!$scope.concept.image\n\n choiceToPresentation: (choice) ->\n data = {\n correct: choice.correct\n }\n data.text_html = choice.text_html if $filter('presence')(choice.text_html)\n data.image = choice.image.url if choice.image\n data\n\n isCorrect: (choice) ->\n choice && choice.id == $scope.concept.id\n\n choose: (index) ->\n return if $scope.answer\n # When choosing with JAWS, it will not have called setActive\n # Need to pick the element that has a focus on it\n if document.activeElement.dataset[\"choiceIndex\"]\n index = parseInt(document.activeElement.dataset[\"choiceIndex\"])\n $scope.active = index\n answer = $scope.choices[$scope.active]\n\n $scope.answer = answer\n isCorrect = $scope.isCorrect(answer)\n angular.element(\".multiple-choice--option\").blur()\n\n $scope.answerQuiz isCorrect,\n choices: _.map $scope.choices, $scope.choiceToPresentation\n choices_made: [ _.indexOf(_.map($scope.choices, 'id'), $scope.answer.id) ]\n\n isNOTADisabled: ->\n $scope.conceptDirection && $scope.facet.nota_settings && !$scope.facet.nota_settings[$scope.conceptDirection]\n\n noneOfTheAboveText: (answer, $last) ->\n if ($scope.step == 'incorrect_confirmation' && answer.id == $scope.concept.id) || $scope.isImageMC6() || !$last || $scope.isNOTADisabled()\n answer.text_html\n else\n $filter(\"translate\")(\"js.learnApp.quiz.nota\")\n\n setActive: ($index) ->\n return if $scope.answer\n $scope.hotkeySelection = $index.toString()\n $scope.active = $index\n\n choiceClasses: (choice, $index) ->\n classes = {}\n if $scope.step == \"quiz\"\n if $scope.active == $index\n classes[\"active\"] = true\n else\n if $scope.isCorrect(choice)\n classes[\"multiple-choice--correct\"] = true\n else if $scope.answer && $scope.answer.id == choice.id\n classes[\"multiple-choice--incorrect\"] = true\n\n if $scope.top_row_size == 1\n classes[\"one-option\"] = true\n else if $scope.top_row_size == 2\n classes[\"two-options\"] = true\n else if $scope.top_row_size == 3\n classes[\"three-options\"] = true\n\n classes\n\n switch $scope.quiz_type\n when \"TransliterationMultipleChoiceLimited\"\n $scope.concept =\n id: $scope.facet.id\n text_html: $scope.facet.transliteration_html\n distractors: $scope.facet.transliteration_distractors\n when \"ReverseMultipleChoiceLimited\", \"ReverseTransliterationMultipleChoiceLimited\", \"RegionReverseMultipleChoiceLimited\", \"SentenceMultipleChoiceLimited\"\n $scope.conceptDirection = \"anchor\"\n $scope.concept = $scope.facet.anchor.concept\n when \"MultipleChoiceLimited\", \"ListeningMultipleChoiceLimited\", \"ClozeMultipleChoiceLimited\", \"RegionMultipleChoiceLimited\"\n $scope.conceptDirection = \"association\"\n $scope.concept = $scope.facet.association.concept\n\n $scope.choices = $scope.MCLBuilder.buildChoices($scope.concept, $scope.isImageMC6())\n $scope.active = 0\n $scope.top_row_size = if $scope.choices.length > 3 then Math.ceil($scope.choices.length / 2) else $scope.choices.length\n\n choiceTextLength = _.reduce _.map($scope.choices, \"text_html\"), (memo, choice) ->\n memo + (choice || \"\").length\n , 0\n\n $scope.shrinkText = choiceTextLength > 900\n\n actions = {}\n defineAction = (i) ->\n actions[i] = ->\n $scope.choose(i)\n\n for choice, i in $scope.choices\n defineAction(i)\n skip = if $scope.isImageMC6() then $scope.top_row_size else 1\n HotKeyManager.registerActionNavigator $scope, actions, skip\n\n if SessionSettings.isPreview || Cheating.enabled\n $scope.setActive(_.indexOf(_.map($scope.choices, 'id'), $scope.concept.id))\n\n $scope.$watch \"hotkeySelection\", (newVal, oldVal) ->\n if newVal != oldVal\n $scope.active = parseInt($scope.hotkeySelection)\n angular.element(\".multiple-choice--option\").removeClass(\"active\")\n])\n","learnApp.controller('quizRegionCITDCtrl', ['$scope', 'DebugHelper', 'HotKeyManager', 'Cheating', 'SessionSettings', ($scope, DebugHelper, HotKeyManager, Cheating, SessionSettings) ->\n DebugHelper.register(\"quizRegionCITDCtrl\", $scope)\n\n $scope.setAnswer(null)\n \n _.assignIn $scope,\n facetToPresentation: (facet) ->\n polygon: facet.anchor.image_map_node.region_polygon\n\n chooseRegion: (answer, scaledOffsets) ->\n $scope.answer = answer\n isCorrect = answer && answer.id == $scope.facet.id\n\n if !isCorrect\n answer.region_type = \"wrong\"\n $scope.choose(isCorrect, scaledOffsets)\n\n chooseOffsets: (scaledOffsets) ->\n $scope.answer = scaledOffsets\n $scope.$broadcast \"addWrongMarker\", scaledOffsets\n $scope.choose(false, scaledOffsets)\n\n choose: (isCorrect, scaledOffsets) ->\n $scope.facet.region_type = \"correct\"\n\n $scope.answerQuiz isCorrect,\n hint_used: false\n target_text: $scope.facet.anchor.image_map_node.region_polygon\n entered_text: scaledOffsets\n\n $scope.$on \"regionClicked\", ($event, region, scaledOffsets) ->\n return if $scope.answer\n\n if region\n $scope.chooseRegion(region.facet, scaledOffsets)\n else\n $scope.chooseOffsets(scaledOffsets)\n\n if SessionSettings.isPreview || Cheating.enabled\n HotKeyManager.registerActionNavigator $scope,\n continue: ->\n $scope.chooseRegion($scope.facet, {x: -1, y: -1})\n\n $scope.$on \"$destroy\", ->\n for facet in $scope.item.image_map.facets\n facet.region_type = null\n])\n","learnApp.controller('quizRegionMCCtrl', ['$scope', 'DebugHelper', 'HotKeyManager', 'Cheating', 'SessionSettings', ($scope, DebugHelper, HotKeyManager, Cheating, SessionSettings) ->\n DebugHelper.register(\"quizRegionMCCtrl\", $scope)\n\n _.assignIn $scope,\n choices: $scope.item.image_map.facets\n\n facetToPresentation: (facet) ->\n polygon: facet.anchor.image_map_node.region_polygon\n\n choose: (answer) ->\n return if $scope.answer\n\n $scope.answer = answer\n isCorrect = answer.id == $scope.facet.id\n\n if !isCorrect\n $scope.facet.region_type = \"correct\"\n $scope.answer.region_type = \"wrong\"\n\n $scope.answerQuiz isCorrect,\n choices: _.map $scope.choices, $scope.facetToPresentation\n choices_made: [ _.indexOf(_.map($scope.choices, 'id'), $scope.answer.id) ]\n\n $scope.$on \"regionClicked\", ($event, region, scaledOffsets) ->\n return if !region # TODO: probably shouldn't be firing FIB events in this case\n $scope.choose(region.facet)\n\n actions = {}\n\n defineAction = (choice, i) ->\n actions[i] = ->\n $scope.choose(choice)\n\n for choice, i in $scope.choices\n defineAction(choice, i)\n\n HotKeyManager.registerActionNavigator $scope, actions\n\n $scope.$watch \"hotkeySelection\", (newVal, oldVal) ->\n return if newVal == oldVal\n if $scope.choices[oldVal].region_type == \"blue\"\n $scope.choices[oldVal].region_type = \"grey\"\n if $scope.choices[newVal]\n $scope.choices[newVal].region_type = \"blue\"\n\n if SessionSettings.isPreview || Cheating.enabled\n HotKeyManager.setHotkeyIndex($scope, _.indexOf(_.map($scope.choices, 'id'), $scope.facet.id).toString())\n\n $scope.$on \"$destroy\", ->\n for facet in $scope.choices\n facet.region_type = null\n])\n","learnApp.controller('quizSequenceInjectionCtrl', ['$scope', '$window', 'DebugHelper', 'Cheating', 'HotKeyManager', 'SessionSettings', 'SoundFXManager', ($scope, $window, DebugHelper, Cheating, HotKeyManager, SessionSettings, SoundFXManager) ->\n DebugHelper.register(\"quizSequenceInjectionCtrl\", $scope)\n\n # WARNING: Watch out for off-by-1 errors!\n # xIndex - 0 indexed\n # xPosition - 1 indexed\n\n # TODO: keyboard shortcuts\n\n numDistractors = 4\n\n _.assignIn $scope,\n answer: 0\n sortableOptions:\n cursor: \"move\"\n tolerance: \"pointer\"\n forcePlaceholderSize: true\n placeholder: \"sequence--drag-placeholder\"\n axis: \"x\"\n 'ui-floating': true\n handle: \".sequence--draggable\"\n update: (e, ui) ->\n $scope.$apply ->\n $scope.answerIndex = ui.item.sortable.dropindex\n\n choiceToPresentation: (index) ->\n {\n 'sequence-position': index + 1 # position is 1 indexed, choices are 0 indexed\n correct: $scope.isCorrect()\n }\n\n\n isCorrect: ->\n $scope.answerIndex == $scope.correctAnswer\n\n choose: ->\n isCorrect = $scope.isCorrect()\n\n $scope.answerQuiz isCorrect,\n choices: _.range($scope.minIndex, $scope.maxIndex).map($scope.choiceToPresentation)\n choices_made: [ $scope.answerIndex ]\n\n select: (index) ->\n $scope.answerIndex = index\n newChoices = _.without($scope.choices,$scope.facet)\n newChoices.splice(index, 0, $scope.facet)\n $scope.choices = newChoices\n\n setSortableAxis: ->\n if $window.innerWidth <= 767\n $scope.sortableOptions.axis = \"y\"\n else\n $scope.sortableOptions.axis = \"x\"\n\n nextSequenceInjectionStep: ->\n if $scope.step == \"quiz\"\n $scope.choose()\n else\n $scope.nextQuiz()\n\n preselectDistractors: ->\n numDistractors = Math.min(4, $scope.item.sequence.facets.length - 1)\n absoluteIndex = _.indexOf($scope.item.sequence.facets,$scope.facet) # == $scope.facet.anchor.sequence_node.position - 1\n absoluteMin = Math.max(absoluteIndex - numDistractors, 0)\n absoluteMax = Math.min(absoluteIndex + numDistractors, $scope.item.sequence.facets.length - 1)\n $scope.minIndex = absoluteMin + Math.floor(Math.random()*(absoluteMax - absoluteMin - numDistractors + 1))\n $scope.correctAnswer = absoluteIndex - $scope.minIndex\n $scope.maxIndex = $scope.minIndex + numDistractors + 1\n distractors = _.without($scope.item.sequence.facets.slice($scope.minIndex, $scope.minIndex + numDistractors + 1),$scope.facet)\n $scope.answerIndex = _.random(0, distractors.length)\n randomizeChoices = _.concat(_.slice(distractors, 0, $scope.answerIndex),$scope.facet,_.slice(distractors, $scope.answerIndex, distractors.length))\n\n $scope.choices = $scope.preselectDistractors()\n\n actions = {}\n for choice, i in $scope.choices\n actions[i] = false\n HotKeyManager.registerActionNavigator $scope, actions, 1\n\n if SessionSettings.isPreview || Cheating.enabled\n $scope.hotkeySelection = $scope.correctAnswer.toString()\n $scope.select($scope.correctAnswer)\n\n $scope.$watch \"hotkeySelection\", (newVal, oldVal) ->\n if newVal != oldVal && $scope.step == 'quiz'\n $scope.select(parseInt($scope.hotkeySelection))\n\n $scope.$watch \"step\", (newVal, oldVal) ->\n if newVal == \"correct_confirmation\"\n SoundFXManager.play(\"correct\")\n\n $scope.setSortableAxis()\n\n angular.element($window).on('resize', () ->\n $scope.$apply -> (\n $scope.setSortableAxis()\n )\n )\n\n])\n","learnApp.controller('recallCtrl', ['$scope', '$filter', 'DebugHelper', 'SoundFXManager', 'AssetPreloader', 'AnimationManager', ($scope, $filter, DebugHelper, SoundFXManager, AssetPreloader, AnimationManager) ->\n DebugHelper.register(\"recallCtrl\", $scope)\n\n _.assignIn $scope,\n selection: \"begin\"\n animating: true\n showTransliteration: $scope.quiz_type == \"MultipleChoiceLimited\" || $scope.quiz_type == \"FillInTheBlank\"\n\n customQuestion: ->\n switch $scope.quiz_type\n when \"MultipleChoiceLimited\", \"FillInTheBlank\", \"ListeningMultipleChoiceLimited\", \"RegionMultipleChoiceLimited\", \"RegionFillInTheBlank\", \"ClozeMultipleChoiceLimited\", \"ClozeFillInTheBlank\"\n $scope.facet.anchor_question_html\n when \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\", \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"ReverseTransliterationMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"ReverseTransliterationFillInTheBlank\", \"RegionReverseClickInTheDark\", \"RegionReverseMultipleChoice\", \"SequenceInjection\"\n $scope.facet.association_question_html\n\n defaultQuestion: ->\n switch $scope.quiz_type\n when \"ListeningMultipleChoiceLimited\"\n $filter(\"translate\")(\"js.learnApp.recall.listening\")\n when \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"DictationFillInTheBlank\"\n $filter(\"translate\")(\"js.learnApp.recall.sentence\")\n when \"ReverseTransliterationMultipleChoiceLimited\"\n $filter(\"translate\")(\"js.learnApp.recall.reverse_transliteration\")\n when \"TransliterationFillInTheBlank\"\n $filter(\"translate\")(\"js.learnApp.recall.transliteration\")\n when \"ClozeMultipleChoiceLimited\", \"ClozeFillInTheBlank\"\n $filter(\"translate\")(\"js.learnApp.recall.cloze\")\n when \"RegionMultipleChoiceLimited\", \"RegionFillInTheBlank\"\n $filter(\"translate\")(\"js.learnApp.recall.region\")\n when \"RegionReverseClickInTheDark\"\n $filter(\"translate\")(\"js.learnApp.recall.region_citd\")\n when \"SequenceInjection\"\n $filter(\"translate\")(\"js.learnApp.recall.sequence_injection\", sequence_title: $scope.item.sequence.title)\n else\n if $scope.item.template_type == \"pattern\"\n $filter(\"translate\")(\"js.learnApp.recall.pattern\")\n else\n $filter(\"translate\")(\"js.learnApp.recall.default\")\n\n recallPromptCopy: ->\n $scope.customQuestion() || $scope.facet.association_label || $scope.defaultQuestion()\n\n recallPromptIsLabel: ->\n !$scope.customQuestion() && !!$scope.facet.association_label\n\n sentenceWithBlanks: (text) ->\n # TODO: this hints to the length, maybe have fixed width?\n text = text || $scope.sentence.text_html\n text.replace /(.*)<\\/b>/, ($0, $1) ->\n \"\" +\n \" Blank \"\n\n toggleSelection: ->\n if $scope.selection == \"begin\"\n $scope.selection = \"yield\"\n else\n $scope.selection = \"begin\"\n\n finishRecall: ->\n if $scope.selection == \"begin\"\n $scope.beginQuiz()\n else\n $scope.yieldQuiz()\n\n AssetPreloader.preloadAssets().then ->\n sound = switch $scope.quiz_type\n when \"DictationFillInTheBlank\"\n $scope.sentence && $scope.sentence.sound\n when \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\"\n null\n else\n $scope.concept && $scope.concept.sound\n\n if sound\n SoundFXManager.play(sound.url)\n else\n SoundFXManager.play(\"recall\")\n\n AnimationManager.fadeIn(\"region\").then ->\n $scope.animating = false\n])\n","learnApp.controller('sentencesCtrl', ['$scope', 'DebugHelper', 'SoundFXManager', ($scope, DebugHelper, SoundFXManager) ->\n DebugHelper.register(\"sentencesCtrl\", $scope)\n\n max = $scope.item.sentences.length\n\n _.assignIn $scope,\n nextSentence: ->\n $scope.sentenceIndex = ($scope.sentenceIndex + 1) % max\n\n prevSentence: ->\n $scope.sentenceIndex = ($scope.sentenceIndex + max - 1) % max\n\n if $scope.sentence\n $scope.sentenceIndex = _.indexOf(_.map($scope.item.sentences, 'id'), $scope.sentence.id)\n\n $scope.$watch \"sentenceIndex\", (newVal, oldVal) ->\n $scope.sentence = $scope.item.sentences[$scope.sentenceIndex]\n if $scope.autoPlaySound || newVal != oldVal\n SoundFXManager.stop()\n if $scope.sentence && $scope.sentence.sound\n SoundFXManager.play($scope.sentence.sound.url)\n])\n","learnApp.controller('studyCtrl', ['$scope', 'DebugHelper', 'SoundFXManager', 'AssetPreloader', 'AnimationManager', 'ContextService', ($scope, DebugHelper, SoundFXManager, AssetPreloader, AnimationManager, ContextService) ->\n DebugHelper.register(\"studyCtrl\", $scope)\n\n if $scope.item[$scope.item.template_type].facets\n max_steps = $scope.item[$scope.item.template_type].facets.length\n else\n max_steps = 1\n $scope.currentQuiz.maxStudySteps ||= max_steps\n $scope.currentQuiz.lastStudiedStep ||= 1\n $scope.currentQuiz.currentStep ||= 1\n\n _.assignIn $scope,\n animating: true\n\n studyCompleted: ->\n switch $scope.item.template_type\n when \"sequence\"\n $scope.currentQuiz.lastStudiedStep >= $scope.item.sequence.facets.length\n else\n true\n\n incrementLastStudiedStep: ->\n $scope.currentQuiz.lastStudiedStep = Math.min($scope.currentQuiz.maxStudySteps, $scope.currentQuiz.lastStudiedStep + 1)\n $scope.currentQuiz.currentStep = $scope.currentQuiz.lastStudiedStep\n\n decrementCurrentStep: ->\n $scope.currentQuiz.currentStep = Math.max(1, $scope.currentQuiz.currentStep - 1)\n\n incrementCurrentStep: ->\n $scope.currentQuiz.currentStep = Math.min($scope.currentQuiz.maxStudySteps, $scope.currentQuiz.currentStep + 1)\n $scope.currentQuiz.lastStudiedStep = Math.max($scope.currentQuiz.lastStudiedStep, $scope.currentQuiz.currentStep)\n\n nextQuiz: ->\n if $scope.animating\n AnimationManager.cancel(\"opacity\")\n AnimationManager.cancel(\"region\")\n AnimationManager.cancel(\"background-color\")\n $scope.animating = false\n else\n $scope.$parent.nextQuiz()\n\n nextQuizHotkey: ->\n if $scope.studyCompleted()\n $scope.nextQuiz()\n else\n $scope.incrementLastStudiedStep()\n\n customQuestion: ->\n $scope.facet.anchor_question_html || $scope.facet.association_question_html\n\n studyPromptCopy: ->\n if ContextService.hasOverride(\"v1_custom_questions\")\n $scope.customQuestion() || $scope.facet.association_label\n else\n if $scope.item.template_type == \"pattern\"\n $scope.item.pattern.title\n else\n $scope.facet.association_label\n\n studyPromptIsLabel: ->\n if ContextService.hasOverride(\"v1_custom_questions\")\n !$scope.customQuestion()\n else\n true\n\n if $scope.forcedStudy && $scope.item.template_type == \"sequence\"\n $scope.currentQuiz.lastStudiedStep = $scope.currentQuiz.maxStudySteps\n $scope.currentQuiz.currentStep = _.indexOf($scope.item.sequence.facets,$scope.facet) + 1\n\n AssetPreloader.preloadAssets().then ->\n AnimationManager.fadeIn(\"region\").then ->\n if $scope.facet.anchor && $scope.facet.anchor.concept && $scope.facet.anchor.concept.sound\n SoundFXManager.play($scope.facet.anchor.concept.sound.url).then ->\n if $scope.facet.association.concept && $scope.facet.association.concept.sound\n SoundFXManager.play($scope.facet.association.concept.sound.url)\n else if $scope.item.template_type == \"sequence\"\n $scope.$watch \"currentQuiz.currentStep\", (newVal, oldVal) ->\n facet = $scope.item.sequence.facets[newVal - 1]\n concept = facet.association.concept\n if concept && concept.sound\n SoundFXManager.play(concept.sound.url)\n else if $scope.facet.association && $scope.facet.association.concept && $scope.facet.association.concept.sound\n SoundFXManager.play($scope.facet.association.concept.sound.url)\n\n AnimationManager.fadeIn(\"opacity\").then ->\n $scope.animating = false\n])\n","learnApp.controller('studyRegionCtrl', ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"studyRegionCtrl\", $scope)\n\n _.assignIn $scope,\n\n $scope.$on \"$destroy\", ->\n for facet in $scope.item.image_map.facets\n facet.region_type = null\n\n for facet in $scope.item.image_map.facets\n if facet != $scope.facet\n facet.region_type = \"hidden\"\n\n $scope.coloredFacets = $scope.item.image_map.facets\n])\n","import roundLevelGoal from 'javascripts/util/round-level-goal.coffee';\n\nlearnApp.controller('summaryCtrl', ['$analytics', '$scope', '$filter', '$location', '$timeout', '$compile', 'WindowManager', 'DebugHelper', '$window', 'ExperimentSegmentsResource', 'ModalService', 'SessionSettings', 'AssetPreloader', 'WrapUpHelper', 'ContextService', 'StudyQueue', 'SessionLimits', 'UserManager', 'ContentMemoryManager', 'PresentationManager', 'ContextSwitcher', 'MessageService', 'LtiService', 'MemoryBankLevelsService', 'NextUpService', 'EmailsResource', 'MemoryStorage', 'SummaryHelper', 'UsersResource', 'LearnAppConstants', 'PartnersResource', 'InstructionalContentService', 'AssignmentDetailsService', ($analytics, $scope, $filter, $location, $timeout, $compile, WindowManager, DebugHelper, $window, ExperimentSegmentsResource, ModalService, SessionSettings, AssetPreloader, WrapUpHelper, ContextService, StudyQueue, SessionLimits, UserManager, ContentMemoryManager, PresentationManager, ContextSwitcher, MessageService, LtiService, MemoryBankLevelsService, NextUpService, EmailsResource, MemoryStorage, SummaryHelper, UsersResource, LearnAppConstants, PartnersResource, InstructionalContentService, AssignmentDetailsService) ->\n DebugHelper.register(\"summaryCtrl\", $scope)\n\n _.assignIn $scope,\n routes: Packs.iKnowRoutes\n uiState:\n dirty: true\n state: \"loading\"\n progress: 0\n loadingMessage: $filter('translate')(\"js.learn_app_message.accessing_mem_bank\")\n SessionSettings: SessionSettings\n sessionSize: SessionSettings.sessionSize\n sessionContextType: SessionSettings.contextType\n sessionContextId: SessionSettings.contextId\n sessionReturnURL: SessionSettings.returnURL\n sessionFromV3Learn: SessionSettings.fromV3Learn\n defaultGoalImage: angular.element(\"#container\").data(\"defaultGoalImage\")\n defaultUserImage: angular.element(\"#container\").data(\"defaultUserImage\")\n fromPreview: ContextService.fromPreview\n hasLoadedAtLeastOnce: ContextService.hasLoadedAtLeastOnce\n instructionalContent: []\n lastStudyTime: SummaryHelper.lastStudyTime\n sessionSizes: [5,10]\n nextV3StudyType: if SessionSettings.v3StudyType == 'force_review' then 'recommended' else SessionSettings.v3StudyType\n oldMemoryAgg: ContentMemoryManager.memoryAggregate\n newEmail: {}\n form: {}\n learnMore:\n visible: false\n SummaryHelper: SummaryHelper\n ltiClientName: LtiService.ltiClientName\n LtiService: LtiService\n InstructionalContentService: InstructionalContentService\n\n addEmail: (email) ->\n $scope.form.newEmailForm.submitted = true\n if $scope.form.newEmailForm.$valid\n EmailsResource.create $scope.newEmail,\n merge: true\n , (success) ->\n $scope.currentUser.emails.push(success.response)\n $scope.setStateAfterLoad()\n , (error) ->\n $scope.error = true\n $scope.uiState.dirty = true\n if (error.data.response == \"Validation failed: Address error-email-already-taken\")\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.email_taken_error_html\"), true)\n else\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.email_save_error_html\"), true)\n\n autoStartQuiz: ->\n !$scope.fromPreview && !$scope.hasLoadedAtLeastOnce && SessionSettings.skipSessionSelect\n\n replayPreview: ->\n $scope.startQuiz()\n\n setState: (state) ->\n $scope.uiState.state = state\n\n setStateAfterLoad: ->\n if LtiService.paymentRequired\n # this branch should only be called for admins trying to access paid content;\n # for non admins, ContextService will 403 and finalizeLoad() will never fire\n $scope.showPayportal()\n else if SessionSettings.isPreview && $scope.fromPreview\n $scope.uiState.state = \"preview_completed\"\n else if _.includes(LearnAppConstants.LTI_CLIENT_IDS_FOR_EMAIL,LtiService.ltiClientId) && $scope.currentUser && $scope.currentUser.relationships.emails.data.length == 0\n #UT Austin should say 'edX' on email splash page\n $scope.ltiClientName = \"edX\" if LtiService.ltiClientId == 8\n $scope.uiState.state = \"get_email\"\n else if $scope.showMemoryBank()\n $scope.uiState.state = \"summary\"\n else\n $scope.uiState.state = \"splash\"\n if !$scope.currentUser?.id && (SessionSettings.forceSignUp || $scope.hasLoadedAtLeastOnce)\n WindowManager.disableCloseWarning()\n $window.location.href = Packs.iKnowRoutes.v3_free_trial_path()\n else\n $scope.sessionSize = LearnAppConstants.DEFAULT_SESSION_SIZE\n\n ContextService.hasLoadedAtLeastOnce = true\n\n seeNextAt: ->\n ContentMemoryManager.memoryAggregate.see_next_at\n\n launchLearnMore: ->\n $scope.learnMore.visible = true\n $timeout ->\n offset = angular.element(\"#learn-app--splash-content-learn-more\").offset().top\n angular.element('.learn-app--splash').animate({scrollTop: offset}, \"slow\")\n true\n\n computeGoalLevel: ->\n $scope.levelGoal = roundLevelGoal(SessionSettings.levelGoal || $scope.module.scoring_goal)\n\n setIntegerPercentLevel = (float_percent) ->\n $scope.percentLevel = $filter('convertProgressToInteger')(float_percent)\n\n if $scope.module.module_type == \"study_all\"\n # Refresh fading memories\n $scope.targetLevel = \"fading\"\n $scope.targetCopy = \"js.learn_app_message.your_goal\"\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.refresh_all_fading\")\n $scope.targetLevelSlug = 'level-' + $scope.targetLevel\n setIntegerPercentLevel(1 - ContentMemoryManager.memoryAggregate.eligible_items_count / ContentMemoryManager.memoryAggregate.studied_items_count)\n else if !_.isUndefined($scope.levelGoal)\n # with assigned goal\n $scope.targetLevel = $scope.levelGoal\n $scope.targetCopy = $filter('translate')(\"js.learn_app_message.progress_to_goal\")\n if ContentMemoryManager.memoryAggregate.progress == 1\n # Goal reached\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.goal_reached_html\")\n else if (ContentMemoryManager.memoryAggregate.studied_items_count >= ContentMemoryManager.memoryAggregate.items_count)\n # Goal not reached, has no unstarted items\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.stick_to_schedule_html\", { level: $filter('levelRoundDown')($scope.levelGoal)})\n else\n # Goal not reached, has unstarted items\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.start_all_your_items_html\")\n\n if $scope.targetLevel >= 1\n $scope.targetLevelSlug = 'level-' + Math.floor($scope.targetLevel)\n else\n $scope.targetLevelSlug = 'level-new'\n setIntegerPercentLevel(ContentMemoryManager.memoryAggregate.progress)\n else if ContentMemoryManager.memoryAggregate.studied_items_count < ContentMemoryManager.memoryAggregate.items_count\n # Get all items started\n $scope.targetLevel = 1\n $scope.targetLevelSlug = 'level-new'\n $scope.targetCopy = \"js.learn_app_message.first_goal\"\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.get_all_item_started\")\n setIntegerPercentLevel(ContentMemoryManager.memoryAggregate.studied_items_count / ContentMemoryManager.memoryAggregate.items_count)\n else\n # Get all items to next level\n # Have to keep targetLevel a whole number until we change the messages logic in the purple bar\n $scope.targetLevel = Math.min(Math.ceil(ContentMemoryManager.memoryAggregate.score), 5)\n actualLevel = Math.min(ContentMemoryManager.memoryAggregate.score, 5)\n $scope.targetCopy = \"js.learn_app_message.next_goal\"\n if actualLevel >= 5\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.get_all_item_mastered\")\n $scope.targetLevelSlug = 'level-' + Math.ceil($scope.targetLevel)\n else if actualLevel < 0.3\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.get_all_item_building\")\n $scope.targetLevelSlug = 'level-building'\n else\n $scope.targetDescription = $filter('translate')(\"js.learn_app_message.get_all_item_to_level\", { level: $filter('levelRoundDown')($scope.targetLevel) })\n $scope.targetLevelSlug = 'level-' + Math.ceil($scope.targetLevel)\n\n setIntegerPercentLevel(ContentMemoryManager.memoryAggregate.score - Math.floor(ContentMemoryManager.memoryAggregate.score))\n\n $timeout ->\n angular.element(\".radial-progress\").attr(\"data-progress\", $scope.percentLevel)\n angular.element(\".learn-app--progress-bar-meter .fill\").attr(\"style\", \"width:\" + $scope.percentLevel + \"%\")\n\n memoriesCount: ->\n if ContextService.contextType == \"study_all\"\n StudyQueue.queue.length\n else if $scope.sessionSize == 'eligible' && ContentMemoryManager.memoryAggregate.eligible_items_count > 0\n SessionLimits.cappedSessionSize(ContentMemoryManager.memoryAggregate.eligible_items_count)\n else\n $scope.sessionSize = LearnAppConstants.DEFAULT_SESSION_SIZE if $scope.sessionSize == 'eligible'\n _.min([$scope.sessionSize, $scope.totalItemsCount || LearnAppConstants.DEFAULT_SESSION_SIZE])\n\n finishStudyAll: ->\n $location.path SummaryHelper.homePath\n\n startQuiz: ->\n if $scope.levelGoal && ($scope.uiState.state == \"splash\")\n $location.path SummaryHelper.assignedGoalPath\n else\n $analytics.eventTrack(\"summary_screen_start_quiz\")\n $location.path SummaryHelper.quizPath\n\n setSessionSize: (sessionSize) ->\n $scope.sessionSize = sessionSize\n SessionSettings.sessionSize = sessionSize\n\n showMemoryBank: ->\n ContentMemoryManager.memoryAggregate && ContentMemoryManager.memoryAggregate.studied_items_count > 0 && !(SessionSettings.forceSplash || SessionSettings.forceSignUp)\n\n setLoadingMessage: (message, isError)->\n $scope.uiState.dirty = true\n $scope.loadingMessage = message\n $scope.error = isError\n\n setPersonalMessage: ->\n progressData = {\n hasLoadedAtLeastOnce: $scope.hasLoadedAtLeastOnce,\n firstTimeStudy: $scope.firstTimeStudy,\n memoryAggregate: ContentMemoryManager.memoryAggregate,\n targetLevel: $scope.targetLevel,\n progressDelta: $scope.progressDelta\n }\n if $scope.module.requires_lti_outcome && !$scope.module.settings?.can_report_lti_outcome && !LtiService.ltiClientId\n $scope.personalMessage = $filter(\"translate\")(\"js.learn_app_message.personal_message.no_lti_grading\")\n else\n $scope.personalMessage = MessageService.getMessage(progressData)\n\n eligibleItemsDisplayValue: ->\n eligibleItemsCount = ContentMemoryManager.memoryAggregate.eligible_items_count\n cappedItemCount = SessionLimits.cappedSessionSize(eligibleItemsCount)\n if eligibleItemsCount == cappedItemCount\n return eligibleItemsCount\n else\n return cappedItemCount + \"+\"\n\n initNextSet: ->\n queue = _.reject(NextUpService.nextUpQueue, (module) ->\n return ((module.id == parseInt(ContextService.context.id)) && (module.module_type == ContextService.contextType))\n )\n\n if (queue.length < 1 || LtiService.ltiClientId)\n $scope.nextModule = null\n else\n $scope.nextModule = queue.shift()\n\n nextUp: ->\n $analytics.eventTrack(\"summary_screen_next_up\")\n MemoryStorage.reset()\n if $scope.nextModule.module_type == \"set\"\n $window.location.href = Packs.iKnowRoutes.v2_set_learn_path($scope.nextModule.id)\n else\n $window.location.href = Packs.iKnowRoutes.v2_series_learn_path($scope.nextModule.id)\n\n processMemoryAggregate: ->\n return if SessionSettings.isPreview\n\n newMemAgg = ContentMemoryManager.memoryAggregate\n return if (_.isEmpty(newMemAgg) || SessionSettings.isPreview)\n\n $scope.progressDelta = (newMemAgg.score || 0) - ($scope.oldMemoryAgg.score || 0)\n initial =\n eligibleItemsCount: ($scope.oldMemoryAgg && $scope.oldMemoryAgg.eligible_items_count) || 0\n totalItemsCount: ($scope.oldMemoryAgg && $scope.oldMemoryAgg.items_count) || 0\n studiedItemsCount: ($scope.oldMemoryAgg && $scope.oldMemoryAgg.studied_items_count) || 0\n\n final =\n eligibleItemsCount: newMemAgg.eligible_items_count || 0\n totalItemsCount: newMemAgg.items_count || 0\n studiedItemsCount: newMemAgg.studied_items_count || 0\n\n $scope.module.old_score = $scope.oldMemoryAgg.score\n\n if !$scope.oldMemoryAgg.last_study_time && $scope.hasLoadedAtLeastOnce\n $scope.firstTimeStudy = true\n\n $scope.upForReview = new Date($scope.seeNextAt()) <= (new Date())\n $scope.tickStats(initial, final, 0)\n $scope.computeGoalLevel()\n $scope.setPersonalMessage()\n $scope.initNextSet()\n return true\n\n tickStats: (initial, final, stepsTaken) ->\n for key, val of initial\n $scope[key] = val + Math.round((final[key] - val) * 1.0 * stepsTaken / LearnAppConstants.STATS_MAX_TICKS)\n\n if stepsTaken < LearnAppConstants.STATS_MAX_TICKS\n $timeout ->\n $scope.tickStats(initial, final, stepsTaken + 1)\n , LearnAppConstants.STATS_TICK_DELAY_MSEC\n\n\n checkMemberId: ->\n PartnersResource.get\n id: $scope.module.partner_id\n , (success) ->\n $scope.partner = success.response\n if $scope.partner && $scope.partner.partner_settings && $scope.partner.partner_settings.member_id_enabled\n UserManager.loadUser().then (user) ->\n $scope.user = user\n\n if !(user.relationships && !!_.find user.relationships['user-partner-member-ids']?.data, (member_id) ->\n parseInt(member_id.relationships?.partner?.data?.id) == parseInt($scope.partner.id)\n )\n $scope.user_partner_member_id = {user_id: $scope.user.id, partner_id: $scope.partner.id, member_id: \"\"}\n $scope.uiState.forceGetMemberId = true\n\n createUserMemberId: ->\n if $scope.user_partner_member_id.member_id.length > 0\n $scope.updateUser()\n\n updateUser: ->\n UsersResource.save { id: $scope.user.id }\n , { user_partner_member_ids: $scope.user_partner_member_id }\n , (success) ->\n UserManager.resetUser()\n $scope.uiState.forceGetMemberId = false\n , (error) ->\n $scope.showError = true\n\n # FIXME: DRY this out\n showModal: (name, options) ->\n $scope.modalOptions = options\n modal = angular.element(document.createElement('v3-modal')).attr(\"modal-name\", name).attr(\"modal-options\", \"modalOptions\")\n el = $compile(modal)($scope)\n angular.element(document.body).append(el)\n false\n\n calculateDateString: ->\n dueDate = new Date($scope.module.due_at)\n timeNow = new Date()\n locale = angular.element(\"body\").data(\"locale\") || \"en\"\n $scope.localizedDateString = $filter(\"localizeDateFormat\")($scope.module.due_at)\n $scope.toolTipOptionalVars = { localizedDateString: $scope.localizedDateString }\n if (dueDate < timeNow) && ($scope.module.progress_percent < 1)\n $scope.dueDateString = $filter('translate')(\"js.learn_app_message.due_date.overdue\")\n $scope.dueDateClass = \"warning\"\n else\n $scope.dueDateString = $filter('translate')((\"js.learn_app_message.due_date.due_on\"), { due_date_string: $scope.localizedDateString })\n $scope.dueDateClass = \"success\" if ($scope.module.progress_percent == 1)\n\n showPayportal: ->\n UserManager.loadUser().then (user) ->\n $scope.user = user\n $scope.setState('payment_required')\n $scope.uiState.dirty = false\n\n paymentSuccessCallback: ->\n WindowManager.disableCloseWarning()\n $window.location.reload()\n\n loadPersonalizationModal: ->\n return if SessionSettings.isPreview\n UserManager.loadUser().then (user) ->\n ExperimentSegmentsResource.get {}\n , (segments) ->\n segment = segments.data?[0]\n ModalService.showModal('personalization-modal', {modalType: 'transparent', user: user, experimentSegment: segment})\n , (error) ->\n DebugHelper.logError(error, \"ExperimentSegmentResource GET error\")\n\n finalizeLoad: ->\n $scope.processMemoryAggregate()\n\n $scope.uiState.dirty = false\n $scope.currentUser = UserManager.currentUser\n $scope.sessionSize = SessionSettings.sessionSize\n\n if $scope.sessionFromV3Learn\n WindowManager.disableCloseWarning() # TODO Remove this and call reset on contentService and studyQueue and do a soft reload on the summary screen\n\n if $scope.hasLoadedAtLeastOnce && PresentationManager.previousSessionStats.numCorrect > 0\n $scope.loadPersonalizationModal()\n\n if ContentMemoryManager.memoryAggregate.eligible_items_count == 0 && SessionSettings.sessionSize == \"eligible\"\n SessionSettings.sessionSize = LearnAppConstants.DEFAULT_SESSION_SIZE\n\n $scope.setStateAfterLoad()\n\n if $scope.autoStartQuiz()\n $scope.startQuiz()\n\n if $scope.uiState.state == \"splash\"\n $analytics.eventTrack('splash_screen_displayed') # Track viewings of the initial splash screen with prominent mobile CTA\n else\n $analytics.eventTrack(\"summary_screen_displayed\")\n\n initialize: ->\n # Step 1: Preload sound effects\n AssetPreloader.preloadSoundEffects().then ->\n # Step 2: Load module or study all context\n ContextService.loadContext().then (module) ->\n # Need this for top bar to work since it for converted to v3\n AssignmentDetailsService.initialize()\n NextUpService.getNextUpQueue()\n # Step 3: Upload any existing presentations\n InstructionalContentService.setContext(ContextService.context)\n InstructionalContentService.getInstructionalContent()\n SummaryHelper.loadPaths()\n PresentationManager.uploadStudyData().then ->\n $scope.module = module\n # Step 4: Load aggregate memory stats\n ContentMemoryManager.load().then (memoryAggregate) ->\n if ContextService.contextType == \"study_all\"\n # simulate a couple knowledge bank properties\n $scope.module.studied_items_count = memoryAggregate.studied_items_count\n $scope.module.items_count = memoryAggregate.items_count\n\n $scope.setSessionSize('eligible') if memoryAggregate.eligible_items_count > 0\n # Step 5: Load study queue (STUDY ALL ONLY)\n # We used to do this to load the memories, but now that's not necessary, maybe leave it off until Quiz?\n StudyQueue.loadQueue().then (queue) ->\n SummaryHelper.lastStudyTime = new Date()\n $scope.finalizeLoad()\n AssetPreloader.preloadAssets() # Start preloading in the background\n , (fail) ->\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.course_load_error_html\"), true)\n , (notify) ->\n return if $scope.error\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.preparing_course_html\"))\n else\n $scope.module.score = memoryAggregate.score\n $scope.module.scoring_goal = memoryAggregate.scoring_goal\n $scope.module.level_slug = MemoryBankLevelsService.slugLevel($scope.module.score)\n $scope.module.scoring_goal_slug = MemoryBankLevelsService.slugLevel($scope.module.scoring_goal)\n $scope.module.progress_percent = ContentMemoryManager.memoryAggregate.progress\n if $scope.module.due_at\n $scope.calculateDateString()\n $scope.finalizeLoad()\n , (fail) ->\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.course_load_error_html\"), true)\n , (fail) ->\n if fail.status == 403 && LtiService.paymentRequired\n $scope.showPayportal()\n else\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.course_load_error_html\"), true)\n\n if SessionSettings.deloitteDemo\n UserManager.loadDeloitteUser(\"learn\").then (user) ->\n $scope.currentUser = user\n $scope.initialize()\n else\n $scope.initialize()\n\n if $scope.autoStartQuiz()\n $scope.setLoadingMessage($filter('translate')(\"js.learn_app_message.loading\"), false)\n\n StudyQueue.reset()\n ContentMemoryManager.reset()\n WrapUpHelper.disable()\n\n if LtiService.ltiGroupId\n $scope.myGroup = { id: LtiService.ltiGroupId }\n\n $scope.$on \"instructionalContent:showList\", () ->\n $scope.uiState.state = \"instructional_content\"\n\n $scope.$on \"instructionalContent:hideList\", () ->\n $scope.setStateAfterLoad()\n\n $scope.$on \"memoryBank:loadingCompleted\", ->\n $scope.computeGoalLevel()\n $scope.setPersonalMessage()\n\n])\n","learnApp.controller('typingGuideCtrl', ['$scope', 'DebugHelper', 'TypingGuideHelper', ($scope, DebugHelper, TypingGuideHelper) ->\n DebugHelper.register(\"typingGuideCtrl\", $scope)\n\n _.assignIn $scope,\n typing_guide: TypingGuideHelper.map\n\n $scope\n])\n","learnApp.controller(\"unscheduleAssignmentModal\", ['$analytics', '$scope', 'DebugHelper', ($analytics, $scope, DebugHelper) ->\n DebugHelper.register(\"unscheduleAssignmentModal\", $scope)\n\n _.assignIn $scope,\n unschedule: ->\n $scope.modalOptions.confirmUnschedule()\n $scope.closeModal()\n\n $analytics.pageTrack('/unscheduleAssignmentModal');\n])\n","learnApp.controller('unsupportedQuizCtrl', ['$scope', 'DebugHelper', ($scope, DebugHelper) ->\n DebugHelper.register(\"unsupportedQuizCtrl\", $scope)\n])\n\n","import * as angular from 'angular';\nimport * as _ from 'lodash';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\n\nexport interface IWrapUpHelper extends ng.IScope {\n quizzesInWorkingMemory: () => any[];\n reset: () => void;\n disable: () => void;\n enable: () => void;\n quitEarly: () => void;\n beginWrapUp: () => void;\n requestClose: () => void;\n deferred: ng.IDeferred<{}>;\n enabled: boolean;\n numMemories: number;\n}\n\nangular.module('cerego.learnApp').service('WrapUpHelper', [\n '$rootScope',\n '$q',\n '$analytics',\n 'DebugHelper',\n 'PresentationManager',\n 'StudyQueue',\n 'SummaryHelper',\n 'QuizTimer',\n 'SessionSettings',\n 'ModalService',\n (\n $rootScope: ng.IRootScopeService,\n $q,\n $analytics: angulartics.IAnalyticsService,\n DebugHelper: IDebugHelper,\n PresentationManager,\n StudyQueue,\n SummaryHelper,\n QuizTimer,\n SessionSettings,\n ModalService\n ) => {\n const $scope = $rootScope.$new() as IWrapUpHelper;\n\n DebugHelper.register('WrapUpHelper', $scope);\n\n $scope.enabled = false;\n\n $scope.quizzesInWorkingMemory = () => {\n return _.filter(StudyQueue.queue, quiz =>\n _.includes(PresentationManager.sessionHistory, quiz.facet.learning_engine_guid)\n );\n };\n\n $scope.reset = () => {\n if ($scope.deferred) {\n $scope.deferred.reject();\n }\n return ($scope.deferred = null);\n };\n\n $scope.disable = () => {\n $scope.reset();\n return ($scope.enabled = false);\n };\n\n $scope.enable = () => {\n return ($scope.enabled = true);\n };\n\n $scope.quitEarly = () => {\n $analytics.eventTrack('wrap_up_quit_early');\n SummaryHelper.reset();\n return $scope.deferred.resolve();\n };\n\n $scope.beginWrapUp = () => {\n // TODO: filter ISS + StudyQueue here\n $scope.deferred = null;\n $analytics.eventTrack('wrap_up_begin');\n return QuizTimer.unpause();\n };\n\n $scope.requestClose = () => {\n QuizTimer.pause();\n\n if (!$scope.deferred) {\n StudyQueue.queue = $scope.quizzesInWorkingMemory();\n $scope.numMemories = StudyQueue.queue.length;\n\n $scope.deferred = $q.defer();\n if ($scope.numMemories === 0 || !$scope.enabled) {\n SummaryHelper.reset();\n $scope.deferred.resolve();\n } else {\n $analytics.eventTrack('wrap_up_request_to_close');\n ModalService.showModal('wrap-up-modal', { modalType: 'transparent', closeCallback: $scope.beginWrapUp });\n }\n }\n\n return $scope.deferred.promise;\n };\n\n return $scope;\n }\n]);\n","import * as angular from 'angular';\nimport { IDebugHelper } from 'v2/modules/core/debug-helper';\n\ninterface ICtrl extends ng.IScope {\n beginWrapUp: () => void;\n quitEarly: () => void;\n closeModal: () => void;\n}\n\nangular.module('cerego.learnApp').controller('wrapUpModal', [\n '$scope',\n 'DebugHelper',\n 'WrapUpHelper',\n 'SessionSettings',\n 'LtiService',\n ($scope: ICtrl, DebugHelper: IDebugHelper, WrapUpHelper, SessionSettings, LtiService) => {\n DebugHelper.register('wrapUpModal', $scope);\n\n $scope.beginWrapUp = () => {\n WrapUpHelper.beginWrapUp();\n $scope.closeModal();\n };\n\n $scope.quitEarly = () => {\n WrapUpHelper.quitEarly();\n $scope.closeModal();\n };\n }\n]);\n","ceregoCommon.factory('TipsResource', ['$resource', ($resource) ->\n $resource \"\",{},\n index:\n method: 'GET'\n isArray: false\n url: APIRoutes.v3_my_tips_path()\n update:\n method: 'PUT'\n isArray: false\n url: APIRoutes.v3_my_tip_path(\":tip_id\")\n params:\n tip_id: \"@tip_id\"\n])\n","/**\n * This Cerego Shared Library will be shared across iOS, Android, and web front end.\n * Functions that must live in the front end, but we don't want to duplicate in 3 places should go here.\n * The intrasession scheduler is one thing in the future that should be shared in another self contained js file like this.\n * */\nCeregoSharedLib = {};\n\n(function() {\n var UNSTARTED_ITEM_BURDEN = 2.0;\n var MAX_BURDEN = 25;\n var FADING_COUNT_CUTOFF = 12;\n var NEW_COUNT_CUTOFF = 3;\n var MAX_NEW_ITEMS = Math.floor(MAX_BURDEN / UNSTARTED_ITEM_BURDEN);\n\n CeregoSharedLib.studyTypes = {\n FADING: 'fading_only',\n RECOMMENDED: 'recommended'\n };\n\n /** Given the number of items unstarted, the number of items fading, and the study type for a smart_module,\n * returns the total number of items that v3/my/study_items will recommend be studied in a session.\n * This is used for displaying \"Learn 8\", or \"Review 12\" on an assignment card and having it match up with what\n * will be studied, without the need for actually fetching a study session.\n * studyType can be either recommended or fading\n * */\n CeregoSharedLib.sessionSizeParts = function(unstarted, fading, studyType, percentStarted, progress) {\n studyType = studyType || CeregoSharedLib.studyTypes.RECOMMENDED;\n var new_item_count = 0;\n var fading_item_count = 0;\n\n if (studyType == CeregoSharedLib.studyTypes.RECOMMENDED) {\n if (UNSTARTED_ITEM_BURDEN * unstarted + fading <= MAX_BURDEN) {\n new_item_count = unstarted;\n fading_item_count = fading;\n } else if (percentStarted == progress) {\n new_item_count = Math.min(MAX_NEW_ITEMS, unstarted);\n // NOTE: the math here is a little backwards, but that's because MAX_BURDEN is odd, this prevents us from always\n // padding a random fading item to the end of an all-new session\n fading_item_count = Math.min((MAX_NEW_ITEMS - new_item_count) * UNSTARTED_ITEM_BURDEN, fading);\n } else if (unstarted >= NEW_COUNT_CUTOFF && fading >= FADING_COUNT_CUTOFF) {\n new_item_count = NEW_COUNT_CUTOFF;\n fading_item_count = FADING_COUNT_CUTOFF;\n } else if (unstarted >= NEW_COUNT_CUTOFF && fading < FADING_COUNT_CUTOFF) {\n new_item_count =\n NEW_COUNT_CUTOFF + Math.ceil((MAX_BURDEN - FADING_COUNT_CUTOFF - fading) / UNSTARTED_ITEM_BURDEN);\n fading_item_count = fading;\n } else {\n // implied that unstarted < 3, and fading > 20\n new_item_count = unstarted;\n fading_item_count = FADING_COUNT_CUTOFF + UNSTARTED_ITEM_BURDEN * (NEW_COUNT_CUTOFF - unstarted);\n }\n } else if (studyType == CeregoSharedLib.studyTypes.FADING) {\n new_item_count = 0;\n fading_item_count = Math.min(fading, MAX_BURDEN);\n } else {\n // Will return an empty study session\n }\n\n // The below shouldn't be necessary, but just in case\n new_item_count = Math.min(new_item_count, unstarted);\n fading_item_count = Math.min(fading_item_count, fading);\n\n return { unstarted: new_item_count, fading: fading_item_count };\n };\n\n CeregoSharedLib.sessionSize = function(unstarted, fading, studyType, percentStarted, progress) {\n var parts = CeregoSharedLib.sessionSizeParts(unstarted, fading, studyType, percentStarted, progress);\n\n return parts.fading + parts.unstarted;\n };\n})();\n","export default __webpack_public_path__ + \"app/assets/sounds/v2/modules/learn-app/correct.mp3\";","export default __webpack_public_path__ + \"app/assets/sounds/v2/modules/learn-app/done.mp3\";","export default __webpack_public_path__ + \"app/assets/sounds/v2/modules/learn-app/incorrect.mp3\";","export default __webpack_public_path__ + \"app/assets/sounds/v2/modules/learn-app/recall.mp3\";","var map = {\n\t\"./ar\": 15,\n\t\"./ar-dz\": 16,\n\t\"./ar-dz.js\": 16,\n\t\"./ar-kw\": 17,\n\t\"./ar-kw.js\": 17,\n\t\"./ar-ly\": 18,\n\t\"./ar-ly.js\": 18,\n\t\"./ar-ma\": 19,\n\t\"./ar-ma.js\": 19,\n\t\"./ar-sa\": 20,\n\t\"./ar-sa.js\": 20,\n\t\"./ar-tn\": 21,\n\t\"./ar-tn.js\": 21,\n\t\"./ar.js\": 15,\n\t\"./de\": 22,\n\t\"./de-at\": 23,\n\t\"./de-at.js\": 23,\n\t\"./de-ch\": 24,\n\t\"./de-ch.js\": 24,\n\t\"./de.js\": 22,\n\t\"./es\": 25,\n\t\"./es-do\": 26,\n\t\"./es-do.js\": 26,\n\t\"./es-us\": 27,\n\t\"./es-us.js\": 27,\n\t\"./es.js\": 25,\n\t\"./fr\": 28,\n\t\"./fr-ca\": 29,\n\t\"./fr-ca.js\": 29,\n\t\"./fr-ch\": 30,\n\t\"./fr-ch.js\": 30,\n\t\"./fr.js\": 28,\n\t\"./ja\": 31,\n\t\"./ja.js\": 31\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 = 57;","# This app contains the actual learn/quiz app\n\n# Dependencies\nrequire('../../../vendor/assets/javascripts/v2/jquery-ui-1.10.4.custom')\nrequire('../../../vendor/assets/javascripts/v2/jquery-ui-touch-punch')\nrequire('../../../lib/assets/javascripts/cerego_sdk/shared_lib')\n\nwindow.learnApp = angular.module(\"cerego.learnApp\", [\n \"ngRoute\"\n \"ngAria\"\n \"ngPromiseExtras\"\n \"LocalStorageModule\"\n \"ui.sortable\"\n \"angular-uuid\"\n \"cerego.common\"\n \"cerego.memoryBank\"\n \"cerego.navigations\"\n]).config(['localStorageServiceProvider','$routeProvider', 'hotkeysProvider', (localStorageServiceProvider, $routeProvider, hotkeysProvider) ->\n localStorageServiceProvider.setStorageCookie(0, '/')\n hotkeysProvider.includeCheatSheet = false\n $routeProvider\n .when Packs.iKnowRoutes.v3_set_learn_path(\":setId\"),\n templateUrl : Packs.iKnowRoutes.learn_v3_templates_path(\"summary\")\n controller : 'setSummaryCtrl'\n .when Packs.iKnowRoutes.v2_learn_path(),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"summary\")\n controller : 'summaryCtrl'\n .when Packs.iKnowRoutes.v2_set_learn_path(\":setId\"),\n templateUrl : Packs.iKnowRoutes.learn_v3_templates_path(\"summary\")\n controller : 'setSummaryCtrl'\n resolve:\n $assignment_type: -> 'set'\n .when Packs.iKnowRoutes.v2_series_learn_path(\":seriesId\"),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"summary\")\n controller : 'summaryCtrl'\n resolve:\n $assignment_type: -> 'series'\n # TODO: move assignment level /lti/study (with custom set id) to LASS\n .when \"/lti/study\",\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"summary\")\n controller : 'summaryCtrl'\n .when \"/lti/study/series\",\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"summary\")\n controller : 'summaryCtrl'\n # TODO: redirect to v3 set study\n .when Packs.iKnowRoutes.v3_lti_redirect_learn_path(),\n templateUrl : Packs.iKnowRoutes.common_v3_templates_path(\"lti_redirect\")\n controller : 'learnLtiRedirectCtrl'\n .when \"/lti/study/:setId\",\n templateUrl : Packs.iKnowRoutes.learn_v3_templates_path(\"summary\")\n controller : 'setSummaryCtrl'\n resolve:\n $assignment_type: -> 'set'\n .when \"/lti/study/series/:seriesId\",\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"summary\")\n controller : 'summaryCtrl'\n .when Packs.iKnowRoutes.assigned_goal_v2_set_learn_path(\":setId\"),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"assigned_goal\")\n controller : 'assignedGoalCtrl'\n .when Packs.iKnowRoutes.assigned_goal_v2_series_learn_path(\":seriesId\"),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"assigned_goal\")\n controller : 'assignedGoalCtrl'\n .when Packs.iKnowRoutes.quiz_v2_learn_path(),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"quiz\")\n controller : 'quizCtrl'\n .when Packs.iKnowRoutes.quiz_v2_set_learn_path(\":setId\"),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"quiz\")\n controller : 'quizCtrl'\n .when Packs.iKnowRoutes.quiz_v2_series_learn_path(\":seriesId\"),\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"quiz\")\n controller : 'quizCtrl'\n .when \"/lti/custom/mhe_sso\",\n templateUrl : Packs.iKnowRoutes.learn_v2_templates_path(\"summary\")\n controller : 'summaryCtrl'\n])\n\n\n# replace these with explicit import\nreq = require.context('../../assets/javascripts/v2/modules/learn-app/ime', false, /\\.js$/)\nreq.keys().forEach(req)\nreq = require.context('../../assets/javascripts/v2/modules/learn-app/resources', false, /\\.js$/)\nreq.keys().forEach(req)\n\nrequire('../../assets/javascripts/v2/modules/learn-app/chrome-menu-helper.js')\n\nreq = require.context('../../assets/javascripts/v2/modules/learn-app/directives', false)\nreq.keys().forEach(req)\n\nrequire('../../assets/javascripts/v3/modules/common/resources/tips-resource.js')\nrequire('../../assets/javascripts/v3/modules/common/resources/course-items-resource.ts')\nrequire('../../assets/javascripts/v3/modules/common/directives/tooltip.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/goal-triangle.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/learner-dashboard-card.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/mini-memory-bank.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/progress-card.js')\nrequire('../../assets/javascripts/v3/modules/common/helpers/goal-math-helper.ts')\nrequire('../../assets/javascripts/v3/modules/common/services/assignment-details-service.js')\nrequire('../../assets/javascripts/v3/modules/common/services/iframe-message-service.ts')\nrequire('../../assets/javascripts/v3/modules/common/services/paginated-instructional-items-service.js')\nrequire('../../assets/javascripts/v3/modules/common/modals/memory-bank-modal.js')\nrequire('../../assets/javascripts/v3/modules/common/modals/instructional-item-viewer-modal.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/milestone-service.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/milestones-list.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/milestone.js')\nrequire('../../assets/javascripts/v3/modules/common/directives/progress-bar.js')\n\nrequire('../../assets/javascripts/v2/modules/learn-app/animation-manager.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/asset-loader.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/asset-preloader.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/cheating.js.coffee.erb')\nrequire('../../assets/javascripts/v2/modules/learn-app/content-service.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/content-memory-manager.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/context-switcher.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/fuzzy-matcher.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/hotkey-manager.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/ime.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/ime-support-helper.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/intra-session-scheduler.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/learn-app-message-service.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/mcl-builder.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/nextup-service.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/onboarding-service.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/presentation-manager.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/session-limits.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/session-settings.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/sound-fx-manager.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/summary-helper.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/study-queue.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/study-queue-compressor')\nrequire('../../assets/javascripts/v2/modules/learn-app/quiz-replacer.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/quiz-timer.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/typing-guide-helper.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/user-settings.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/window-manager.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/survey-helper.js')\nrequire('../../assets/javascripts/v2/modules/learn-app/learn-app-constants.js')\n\nrequire('../../assets/javascripts/v3/modules/learn-app/controllers/set-summary-controller.js')\n\nreq = require.context('../../assets/javascripts/v2/modules/learn-app/controllers', false)\nreq.keys().forEach(req)\n","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n * jquery.ui.widget.js\n * jquery.ui.mouse.js\n */\n(function ($) {\n\n // Detect touch support\n $.support.touch = 'ontouchend' in document;\n\n // Ignore browsers without touch support\n if (!$.support.touch) {\n return;\n }\n\n var mouseProto = $.ui.mouse.prototype,\n _mouseInit = mouseProto._mouseInit,\n _mouseDestroy = mouseProto._mouseDestroy,\n touchHandled;\n\n /**\n * Simulate a mouse event based on a corresponding touch event\n * @param {Object} event A touch event\n * @param {String} simulatedType The corresponding mouse event\n */\n function simulateMouseEvent (event, simulatedType) {\n\n // Ignore multi-touch events\n if (event.originalEvent.touches.length > 1) {\n return;\n }\n\n event.preventDefault();\n\n var touch = event.originalEvent.changedTouches[0],\n simulatedEvent = document.createEvent('MouseEvents');\n\n // Initialize the simulated mouse event using the touch event's coordinates\n simulatedEvent.initMouseEvent(\n simulatedType, // type\n true, // bubbles\n true, // cancelable\n window, // view\n 1, // detail\n touch.screenX, // screenX\n touch.screenY, // screenY\n touch.clientX, // clientX\n touch.clientY, // clientY\n false, // ctrlKey\n false, // altKey\n false, // shiftKey\n false, // metaKey\n 0, // button\n null // relatedTarget\n );\n\n // Dispatch the simulated event to the target element\n event.target.dispatchEvent(simulatedEvent);\n }\n\n /**\n * Handle the jQuery UI widget's touchstart events\n * @param {Object} event The widget element's touchstart event\n */\n mouseProto._touchStart = function (event) {\n\n var self = this;\n\n // Ignore the event if another widget is already being handled\n if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {\n return;\n }\n\n // Set the flag to prevent other widgets from inheriting the touch event\n touchHandled = true;\n\n // Track movement to determine if interaction was a click\n self._touchMoved = false;\n\n // Simulate the mouseover event\n simulateMouseEvent(event, 'mouseover');\n\n // Simulate the mousemove event\n simulateMouseEvent(event, 'mousemove');\n\n // Simulate the mousedown event\n simulateMouseEvent(event, 'mousedown');\n };\n\n /**\n * Handle the jQuery UI widget's touchmove events\n * @param {Object} event The document's touchmove event\n */\n mouseProto._touchMove = function (event) {\n\n // Ignore event if not handled\n if (!touchHandled) {\n return;\n }\n\n // Interaction was not a click\n this._touchMoved = true;\n\n // Simulate the mousemove event\n simulateMouseEvent(event, 'mousemove');\n };\n\n /**\n * Handle the jQuery UI widget's touchend events\n * @param {Object} event The document's touchend event\n */\n mouseProto._touchEnd = function (event) {\n\n // Ignore event if not handled\n if (!touchHandled) {\n return;\n }\n\n // Simulate the mouseup event\n simulateMouseEvent(event, 'mouseup');\n\n // Simulate the mouseout event\n simulateMouseEvent(event, 'mouseout');\n\n // If the touch interaction did not move, it should trigger a click\n if (!this._touchMoved) {\n\n // Simulate the click event\n simulateMouseEvent(event, 'click');\n }\n\n // Unset the flag to allow other widgets to inherit the touch event\n touchHandled = false;\n };\n\n /**\n * A duck punch of the $.ui.mouse _mouseInit method to support touch events.\n * This method extends the widget with bound touch event handlers that\n * translate touch events to mouse events and pass them to the widget's\n * original mouse event handling methods.\n */\n mouseProto._mouseInit = function () {\n\n var self = this;\n\n // Delegate the touch handlers to the widget's element\n self.element.bind({\n touchstart: $.proxy(self, '_touchStart'),\n touchmove: $.proxy(self, '_touchMove'),\n touchend: $.proxy(self, '_touchEnd')\n });\n\n // Call the original $.ui.mouse init method\n _mouseInit.call(self);\n };\n\n /**\n * Remove the touch event handlers\n */\n mouseProto._mouseDestroy = function () {\n\n var self = this;\n\n // Delegate the touch handlers to the widget's element\n self.element.unbind({\n touchstart: $.proxy(self, '_touchStart'),\n touchmove: $.proxy(self, '_touchMove'),\n touchend: $.proxy(self, '_touchEnd')\n });\n\n // Call the original $.ui.mouse destroy method\n _mouseDestroy.call(self);\n };\n\n})(jQuery);\n","var map = {\n\t\"./am.js\": 709,\n\t\"./bo.js\": 710,\n\t\"./el.js\": 711,\n\t\"./grc.js\": 712,\n\t\"./he.js\": 713,\n\t\"./ja.js\": 714,\n\t\"./ru.js\": 715,\n\t\"./tr.js\": 716,\n\t\"./zh.js\": 717\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 = 708;","learnApp.service(\"imeAM\", [->\n # see: http://www.lexilogos.com/keyboard/amharic.htm\n {\n 'he': 'ሀ', 'hu': 'ሁ', 'hi': 'ሂ', 'ha': 'ሃ', 'hee': 'ሄ', 'h': 'ህ', 'ho': 'ሆ'\n 'le': 'ለ', 'lu': 'ሉ', 'li': 'ሊ', 'la': 'ላ', 'lee': 'ሌ', 'l': 'ል', 'lo': 'ሎ', 'laa': 'ሏ'\n 'Le': 'ለ', 'Lu': 'ሉ', 'Li': 'ሊ', 'La': 'ላ', 'Lee': 'ሌ', 'L': 'ል', 'Lo': 'ሎ', 'Laa': 'ሏ'\n 'hhe': 'ሐ', 'hhu': 'ሑ', 'hhi': 'ሒ', 'hha': 'ሓ', 'hhee': 'ሔ', 'hh': 'ሕ', 'hho': 'ሖ', 'hhaa': 'ሗ'\n 'He': 'ሐ', 'Hu': 'ሑ', 'Hi': 'ሒ', 'Ha': 'ሓ', 'Hee': 'ሔ', 'H': 'ሕ', 'Ho': 'ሖ', 'Haa': 'ሗ'\n 'me': 'መ', 'mu': 'ሙ', 'mi': 'ሚ', 'ma': 'ማ', 'mee': 'ሜ', 'm': 'ም', 'mo': 'ሞ', 'maa': 'ሟ'\n 'Me': 'መ', 'Mu': 'ሙ', 'Mi': 'ሚ', 'Ma': 'ማ', 'Mee': 'ሜ', 'M': 'ም', 'Mo': 'ሞ', 'Maa': 'ሟ'\n 'sze': 'ሠ', 'szu': 'ሡ', 'szi': 'ሢ', 'sza': 'ሣ', 'szee': 'ሤ', 'sz': 'ሥ', 'szo': 'ሦ', 'szaa': 'ሧ'\n 're': 'ረ', 'ru': 'ሩ', 'ri': 'ሪ', 'ra': 'ራ', 'ree': 'ሬ', 'r': 'ር', 'ro': 'ሮ', 'raa': 'ሯ'\n 'Re': 'ረ', 'Ru': 'ሩ', 'Ri': 'ሪ', 'Ra': 'ራ', 'Ree': 'ሬ', 'R': 'ር', 'Ro': 'ሮ', 'Raa': 'ሯ'\n 'se': 'ሰ', 'su': 'ሱ', 'si': 'ሲ', 'sa': 'ሳ', 'see': 'ሴ', 's': 'ስ', 'so': 'ሶ', 'saa': 'ሷ'\n 'she': 'ሸ', 'shu': 'ሹ', 'shi': 'ሺ', 'sha': 'ሻ', 'shee': 'ሼ', 'sh': 'ሽ', 'sho': 'ሾ', 'shaa': 'ሿ'\n 'qe': 'ቀ', 'qu': 'ቁ', 'qi': 'ቂ', 'qa': 'ቃ', 'qee': 'ቄ', 'q': 'ቅ', 'qo': 'ቆ', 'qaa': 'ቇ'\n 'qhe': 'ቐ', 'qhu': 'ቑ', 'qhi': 'ቒ', 'qha': 'ቓ', 'qhee': 'ቔ', 'qh': 'ቕ', 'qho': 'ቖ'\n 'be': 'በ', 'bu': 'ቡ', 'bi': 'ቢ', 'ba': 'ባ', 'bee': 'ቤ', 'b': 'ብ', 'bo': 'ቦ', 'baa': 'ቧ'\n 'Be': 'በ', 'Bu': 'ቡ', 'Bi': 'ቢ', 'Ba': 'ባ', 'Bee': 'ቤ', 'B': 'ብ', 'Bo': 'ቦ', 'Baa': 'ቧ'\n 've': 'ቨ', 'vu': 'ቩ', 'vi': 'ቪ', 'va': 'ቫ', 'vee': 'ቬ', 'v': 'ቭ', 'vo': 'ቮ', 'vaa': 'ቯ'\n 'Ve': 'ቨ', 'Vu': 'ቩ', 'Vi': 'ቪ', 'Va': 'ቫ', 'Vee': 'ቬ', 'V': 'ቭ', 'Vo': 'ቮ', 'Vaa': 'ቯ'\n 'te': 'ተ', 'tu': 'ቱ', 'ti': 'ቲ', 'ta': 'ታ', 'tee': 'ቴ', 't': 'ት', 'to': 'ቶ', 'taa': 'ቷ'\n 'ce': 'ቸ', 'cu': 'ቹ', 'ci': 'ቺ', 'ca': 'ቻ', 'cee': 'ቼ', 'c': 'ች', 'co': 'ቾ', 'caa': 'ቿ'\n 'xe': 'ኀ', 'xu': 'ኁ', 'xi': 'ኂ', 'xa': 'ኃ', 'xee': 'ኄ', 'x': 'ኅ', 'xo': 'ኆ', 'xaa': 'ኋ'\n 'Xe': 'ኀ', 'Xu': 'ኁ', 'Xi': 'ኂ', 'Xa': 'ኃ', 'Xee': 'ኄ', 'X': 'ኅ', 'Xo': 'ኆ', 'Xaa': 'ኋ'\n 'ne': 'ነ', 'nu': 'ኑ', 'ni': 'ኒ', 'na': 'ና', 'nee': 'ኔ', 'n': 'ን', 'no': 'ኖ', 'naa': 'ኗ'\n 'Ne': 'ኘ', 'Nu': 'ኙ', 'Ni': 'ኚ', 'Na': 'ኛ', 'Nee': 'ኜ', 'N': 'ኝ', 'No': 'ኞ', 'Naa': 'ኟ'\n 'e': 'አ', 'u': 'ኡ', 'i': 'ኢ', 'a': 'ኣ', 'ee': 'ኤ', 'o': 'ኦ', 'aa': 'ኧ'\n \"'e\": \"አ\", \"'u\": \"ኡ\", \"'i\": \"ኢ\", \"'a\": \"ኣ\", \"'ee\": \"ኤ\", \"'\": \"እ\", \"'o\": \"ኦ\", \"'aa\": \"ኧ\"\n 'ke': 'ከ', 'ku': 'ኩ', 'ki': 'ኪ', 'ka': 'ካ', 'kee': 'ኬ', 'k': 'ክ', 'ko': 'ኮ', 'kaa': 'ኳ'\n 'Ke': 'ኻ', 'Ku': 'ኹ', 'Ki': 'ኺ', 'Ka': 'ኻ', 'Kee': 'ኼ', 'K': 'ኽ', 'Ko': 'ኾ'\n 'kxe': 'ኻ', 'kxu': 'ኹ', 'kxi': 'ኺ', 'kxa': 'ኻ', 'kxee': 'ኼ', 'kx': 'ኽ', 'kxo': 'ኾ'\n 'we': 'ወ', 'wu': 'ዉ', 'wi': 'ዊ', 'wa': 'ዋ', 'wee': 'ዌ', 'w': 'ው', 'wo': 'ዎ'\n '\"e': 'ዐ', '\"u': 'ዑ', '\"i': 'ዒ', '\"a': 'ዓ', '\"ee': 'ዔ', '\"': 'ዕ', '\"o': 'ዖ'\n 'E': 'ዐ', 'U': 'ዑ', 'I': 'ዒ', 'A': 'ዓ', 'EE': 'ዔ', 'A': 'ዖ'\n 'ze': 'ዘ', 'zu': 'ዙ', 'zi': 'ዚ', 'za': 'ዛ', 'zee': 'ዜ', 'z': 'ዝ', 'zo': 'ዞ', 'zaa': 'ዟ'\n 'Ze': 'ዠ', 'Zu': 'ዡ', 'Zi': 'ዢ', 'Za': 'ዣ', 'Zee': 'ዤ', 'Z': 'ዥ', 'Zo': 'ዦ', 'Zaa': 'ዧ'\n 'zhe': 'ዠ', 'zhu': 'ዡ', 'zhi': 'ዢ', 'zha': 'ዣ', 'zhee': 'ዤ', 'zh': 'ዥ', 'zho': 'ዦ', 'zhaa': 'ዧ'\n 'ye': 'የ', 'yu': 'ዩ', 'yi': 'ዪ', 'ya': 'ያ', 'yee': 'ዬ', 'y': 'ይ', 'yo': 'ዮ', 'yaa': 'ዯ'\n 'Ye': 'የ', 'Yu': 'ዩ', 'Yi': 'ዪ', 'Ya': 'ያ', 'Yee': 'ዬ', 'Y': 'ይ', 'Yo': 'ዮ', 'Yaa': 'ዯ'\n 'de': 'ደ', 'du': 'ዱ', 'di': 'ዲ', 'da': 'ዳ', 'dee': 'ዴ', 'd': 'ድ', 'do': 'ዶ', 'daa': 'ዷ'\n 'De': 'ዸ', 'Du': 'ዹ', 'Di': 'ዺ', 'Da': 'ዻ', 'Dee': 'ዼ', 'D': 'ዽ', 'Do': 'ዾ', 'Daa': 'ዿ'\n 'dde': 'ዸ', 'ddu': 'ዹ', 'ddi': 'ዺ', 'dda': 'ዻ', 'ddee': 'ዼ', 'dd': 'ዽ', 'ddo': 'ዾ', 'ddaa': 'ዿ'\n 'je': 'ጀ', 'ju': 'ጁ', 'ji': 'ጂ', 'ja': 'ጃ', 'jee': 'ጄ', 'j': 'ጅ', 'jo': 'ጆ', 'jaa': 'ጇ'\n 'Je': 'ጀ', 'Ju': 'ጁ', 'Ji': 'ጂ', 'Ja': 'ጃ', 'Jee': 'ጄ', 'J': 'ጅ', 'Jo': 'ጆ', 'Jaa': 'ጇ'\n 'ge': 'ገ', 'gu': 'ጉ', 'gi': 'ጊ', 'ga': 'ጋ', 'gee': 'ጌ', 'g': 'ግ', 'go': 'ጎ', 'gaa': 'ጏ'\n 'Ge': 'ጘ', 'Gu': 'ጙ', 'Gi': 'ጚ', 'Ga': 'ጛ', 'Gee': 'ጜ', 'G': 'ጝ', 'Go': 'ጞ', 'Gaa': 'ጟ'\n 'gge': 'ጘ', 'ggu': 'ጙ', 'ggi': 'ጚ', 'gga': 'ጛ', 'ggee': 'ጜ', 'gg': 'ጝ', 'ggo': 'ጞ', 'ggaa': 'ጟ'\n 'the': 'ጠ', 'thu': 'ጡ', 'thi': 'ጢ', 'tha': 'ጣ', 'thee': 'ጤ', 'th': 'ጥ', 'tho': 'ጦ', 'thaa': 'ጧ'\n 'Te': 'ጠ', 'Tu': 'ጡ', 'Ti': 'ጢ', 'Ta': 'ጣ', 'Tee': 'ጤ', 'T': 'ጥ', 'To': 'ጦ', 'Taa': 'ጧ'\n 'Ce': 'ጨ', 'Cu': 'ጩ', 'Ci': 'ጪ', 'Ca': 'ጫ', 'Cee': 'ጬ', 'C': 'ጭ', 'Co': 'ጮ', 'Caa': 'ጯ'\n 'che': 'ጨ', 'chu': 'ጩ', 'chi': 'ጪ', 'cha': 'ጫ', 'chee': 'ጬ', 'ch': 'ጭ', 'cho': 'ጮ', 'chaa': 'ጯ'\n 'Pe': 'ጰ', 'Pu': 'ጱ', 'Pi': 'ጲ', 'Pa': 'ጳ', 'Pee': 'ጴ', 'P': 'ጵ', 'Po': 'ጶ', 'Paa': 'ጷ'\n 'phe': 'ጰ', 'phu': 'ጱ', 'phi': 'ጲ', 'pha': 'ጳ', 'phee': 'ጴ', 'ph': 'ጵ', 'pho': 'ጶ', 'phaa': 'ጷ'\n 'tse': 'ጸ', 'tsu': 'ጹ', 'tsi': 'ጺ', 'tsa': 'ጻ', 'tsee': 'ጼ', 'ts': 'ጽ', 'tso': 'ጾ', 'tsaa': 'ጿ'\n 'Se': 'ጸ', 'Su': 'ጹ', 'Si': 'ጺ', 'Sa': 'ጻ', 'See': 'ጼ', 'S': 'ጽ', 'So': 'ጾ', 'Saa': 'ጿ'\n 'tze': 'ፀ', 'tzu': 'ፁ', 'tzi': 'ፂ', 'tza': 'ፃ', 'tzee': 'ፄ', 'tz': 'ፅ', 'tzo': 'ፆ', 'tzaa': 'ፇ'\n 'fe': 'ፈ', 'fu': 'ፉ', 'fi': 'ፊ', 'fa': 'ፋ', 'fee': 'ፌ', 'f': 'ፍ', 'fo': 'ፎ', 'faa': 'ፏ'\n 'Fe': 'ፈ', 'Fu': 'ፉ', 'Fi': 'ፊ', 'Fa': 'ፋ', 'Fee': 'ፌ', 'F': 'ፍ', 'Fo': 'ፎ', 'Faa': 'ፏ'\n 'pe': 'ፐ', 'pu': 'ፑ', 'pi': 'ፒ', 'pa': 'ፓ', 'pee': 'ፔ', 'p': 'ፕ', 'po': 'ፖ', 'paa': 'ፗ'\n\n 'qwe': 'ቈ', 'qwi': 'ቊ', 'qwa': 'ቋ', 'qwee': 'ቌ', 'qw': 'ቍ'\n 'qhwe': 'ቘ', 'qhwi': 'ቚ', 'qhwa': 'ቛ', 'qhwee': 'ቜ', 'qhw': 'ቝ'\n 'xwe': 'ኈ', 'xwi': 'ኊ', 'xwa': 'ኋ', 'xwee': 'ኌ', 'xw': 'ኍ'\n 'kwe': 'ኰ', 'kwi': 'ኲ', 'kwa': 'ኳ', 'kwee': 'ኴ', 'kw': 'ኵ'\n 'kxwe': 'ዀ', 'kxwi': 'ዂ', 'kxwa': 'ዃ', 'kxwee': 'ዄ', 'kxw': 'ዅ'\n 'gwe': 'ጐ', 'gwi': 'ጒ', 'gwa': 'ጓ', 'gwee': 'ጔ', 'gw': 'ጕ'\n\n '1': '፩', '2': '፪', '3': '፫', '4': '፬', '5': '፭', '6': '፮', '7': '፯', '8': '፰', '9': '፱'\n '10': '፲', '20': '፳', '30': '፴', '40': '፵', '50': '፶', '60': '፷', '70': '፸', '80': '፹', '90': '፺', '100': '፻', '10000': '፼'\n\n ',': '፣', '.': '።', '?': '፧', '-': '፡', ';': '፤', ':': '፥', '/': '፨', '!': '፦'\n }\n])\n","learnApp.service(\"imeBO\", [->\n # 30 basic radicals (single consonant)\n 'k':'ཀ', 'ka':'ཀ', 'ki':'ཀི', 'ku':'ཀུ', 'ke':'ཀེ', 'ko':'ཀོ'\n 'kh':'ཁ', 'kha':'ཁ', 'khi':'ཁི', 'khu':'ཁུ', 'khe':'ཁེ', 'kho':'ཁོ'\n 'g':'ག', 'ga':'ག', 'gi':'གི', 'gu':'གུ', 'ge':'གེ', 'go':'གོ'\n 'ng':'ང', 'nga':'ང', 'ngi':'ངི', 'ngu':'ངུ', 'nge':'ངེ', 'ngo':'ངོ'\n 'c':'ཅ', 'ca':'ཅ', 'ci':'ཅི', 'cu':'ཅུ', 'ce':'ཅེ', 'co':'ཅོ'\n 'ch':'ཆ', 'cha':'ཆ', 'chi':'ཆི', 'chu':'ཆུ', 'che':'ཆེ', 'cho':'ཆོ'\n 'j':'ཅ', 'ja':'ཅ', 'ji':'ཅི', 'ju':'ཅུ', 'je':'ཅེ', 'jo':'ཅོ'\n 'ny':'ཉ', 'nya':'ཉ', 'nyi':'ཉི', 'nyu':'ཉུ', 'nye':'ཉེ', 'nyo':'ཉོ'\n 't':'ཏ', 'ta':'ཏ', 'ti':'ཏི', 'tu':'ཏུ', 'te':'ཏེ', 'to':'ཏོ'\n 'th':'ཐ', 'tha':'ཐ', 'thi':'ཐི', 'thu':'ཐུ', 'the':'ཐེ', 'tho':'ཐོ'\n 'd':'ད', 'da':'ད', 'di':'དི', 'du':'དུ', 'de':'དེ', 'do':'དོ'\n 'n':'ན', 'na':'ན', 'ni':'ནི', 'nu':'ནུ', 'ne':'ནེ', 'no':'ནོ'\n 'p':'པ', 'pa':'པ', 'pi':'པི', 'pu':'པུ', 'pe':'པེ', 'po':'པོ'\n 'ph':'ཕ', 'pha':'ཕ', 'phi':'ཕི', 'phu':'ཕུ', 'phe':'ཕེ', 'pho':'ཕོ'\n 'b':'བ', 'ba':'བ', 'bi':'བི', 'bu':'བུ', 'be':'བེ', 'bo':'བོ'\n 'm':'མ', 'ma':'མ', 'mi':'མི', 'mu':'མུ', 'me':'མེ', 'mo':'མོ'\n 'ts':'ཙ', 'tsa':'ཙ', 'tsi':'ཙི', 'tsu':'ཙུ', 'tse':'ཙེ', 'tso':'ཙོ'\n 'tsh':'ཚ', 'tsha':'ཚ', 'tshi':'ཚི', 'tshu':'ཚུ', 'tshe':'ཚེ', 'tsho':'ཚོ'\n 'dz':'ཛ', 'dza':'ཛ', 'dzi':'ཛི', 'dzu':'ཛུ', 'dze':'ཛེ', 'dzo':'ཛོ'\n 'w':'ཝ', 'wa':'ཝ', 'wi':'ཝི', 'wu':'ཝུ', 'we':'ཝེ', 'wo':'ཝོ'\n 'zh':'ཞ', 'zha':'ཞ', 'zhi':'ཞི', 'zhu':'ཞུ', 'zhe':'ཞེ', 'zho':'ཞོ'\n 'z':'ཟ', 'za':'ཟ', 'zi':'ཟི', 'zu':'ཟུ', 'ze':'ཟེ', 'zo':'ཟོ'\n \"'\":'འ', \"'a\":'འ', \"'i\":'འི', \"'u\":'འུ', \"'e\":'འེ', \"'o\":'འོ'\n 'y':'ཡ', 'ya':'ཡ', 'yi':'ཡི', 'yu':'ཡུ', 'ye':'ཡེ', 'yo':'ཡོ'\n 'r':'ར', 'ra':'ར', 'ri':'རི', 'ru':'རུ', 're':'རེ', 'ro':'རོ'\n 'l':'ལ', 'la':'ལ', 'li':'ལི', 'lu':'ལུ', 'le':'ལེ', 'lo':'ལོ'\n 'sh':'ཤ', 'sha':'ཤ', 'shi':'ཤི', 'shu':'ཤུ', 'she':'ཤེ', 'sho':'ཤོ'\n 's':'ས', 'sa':'ས', 'si':'སི', 'su':'སུ', 'se':'སེ', 'so':'སོ'\n 'h':'ཧ', 'ha':'ཧ', 'hi':'ཧི', 'hu':'ཧུ', 'he':'ཧེ', 'ho':'ཧོ'\n 'a':'ཨ', 'i':'ཨཻ', 'u':'ཨུ', 'e':'ཨེ', 'o':'ཨོ'\n\n # R L S can be used as a prefixed superscript\n 'rk':'རྐ', 'rka':'རྐ', 'rki':'རྐི', 'rku':'རྐུ', 'rke':'རྐེ', 'rko':'རྐོ'\n 'rg':'རྒ', 'rga':'རྒ', 'rgi':'རྒི', 'rgu':'རྒུ', 'rge':'རྒེ', 'rgo':'རྒོ'\n 'rng':'རྔ', 'rnga':'རྔ', 'rngi':'རྔི', 'rngu':'རྔུ', 'rnge':'རྔེ', 'rngo':'རྔོ'\n 'rj':'རྗ', 'rja':'རྗ', 'rji':'རྗི', 'rju':'རྗུ', 'rje':'རྗེ', 'rjo':'རྗོ'\n 'rny':'རྙ', 'rnya':'རྙ', 'rnyi':'རྙི', 'rnyu':'རྙུ', 'rnye':'རྙེ', 'rnyo':'རྙོ'\n 'rt':'རྟ', 'rta':'རྟ', 'rti':'རྟི', 'rtu':'རྟུ', 'rte':'རྟེ', 'rto':'རྟོ'\n 'rd':'རྡ', 'rda':'རྡ', 'rdi':'རྡི', 'rdu':'རྡུ', 'rde':'རྡེ', 'rdo':'རྡོ'\n 'rn':'རྣ', 'rna':'རྣ', 'rni':'རྣི', 'rnu':'རྣུ', 'rne':'རྣེ', 'rno':'རྣོ'\n 'rp':'རྤ', 'rpa':'རྤ', 'rpi':'རྤི', 'rpu':'རྤུ', 'rpe':'རྤེ', 'rpo':'རྤོ'\n 'rb':'རྦ', 'rba':'རྦ', 'rbi':'རྦི', 'rbu':'རྦུ', 'rbe':'རྦེ', 'rbo':'རྦོ'\n 'rm':'རྨ', 'rma':'རྨ', 'rmi':'རྨ', 'rmu':'རྨུ', 'rme':'རྨེ', 'rmo':'རྨོ'\n 'rts':'རྟ', 'rtsa':'རྟ', 'rtsi':'རྩི', 'rtsu':'རྩུ', 'rtse':'རྩེ', 'rtso':'རྩོ'\n 'rdz':'རྫ', 'rdza':'རྫ', 'rdzi':'རྫི', 'rdzu':'རྫུ', 'rdze':'རྫེ', 'rdzo':'རྫོ'\n\n 'lk':'ལྐ', 'lka':'ལྐ', 'lki':'ལྐི', 'lku':'ལྐུ', 'lke':'ལྐེ', 'lko':'ལྐོ'\n 'lg':'ལྒ', 'lga':'ལྒ', 'lgi':'ལྒི', 'lgu':'ལྒུ', 'lge':'ལྒེ', 'lgo':'ལྒོ'\n 'lng':'ལྔ', 'lnga':'ལྔ', 'lngi':'ལྔ', 'lngu':'ལྔུ', 'lnge':'ལྔེ', 'lngo':'ལྔོ'\n 'lc':'ལྕ', 'lca':'ལྕ', 'lci':'ལྕི', 'lcu':'ལྕུ', 'lce':'ལྕེ', 'lco':'ལྕོ'\n 'lj':'ལྗ', 'lja':'ལྗ', 'lji':'ལྗི', 'lju':'ལྗུ', 'lje':'ལྗེ', 'ljo':'ལྗོ'\n 'lt':'ལྟ', 'lta':'ལྟ', 'lti':'ལྟི', 'ltu':'ལྟུ', 'lte':'ལྟེ', 'lto':'ལྟོ'\n 'ld':'ལྡ', 'lda':'ལྡ', 'ldi':'ལྡི', 'ldu':'ལྡུ', 'lde':'ལྡེ', 'ldo':'ལྡོ'\n 'lp':'ལྤ', 'lpa':'ལྤ', 'lpi':'ལྤི', 'lpu':'ལྤུ', 'lpe':'ལྤེ', 'lpo':'ལྤོ'\n 'lb':'ལྦ', 'lba':'ལྦ', 'lbi':'ལྦི', 'lbu':'ལྦུ', 'lbe':'ལྦེ', 'lbo':'ལྦོ'\n 'lh':'ལྷ', 'lha':'ལྷ', 'lhi':'ལྷི', 'lhu':'ལྷུ', 'lhe':'ལྷེ', 'lho':'ལྷོ'\n\n 'sk':'སྐ', 'ska':'སྐ', 'ski':'སྐི', 'sku':'སྐུ', 'ske':'སྐེ', 'sko':'སྐོ'\n 'sg':'སྒ', 'sga':'སྒ', 'sgi':'སྒི', 'sgu':'སྒུ', 'sge':'སྒེ', 'sgo':'སྒོ'\n 'sng':'སྔ', 'snga':'སྔ', 'sngi':'སྔི', 'sngu':'སྔུ', 'snge':'སྔེ', 'sngo':'སྔོ'\n 'sny':'སྙ', 'snya':'སྙ', 'snyi':'སྙི', 'snyu':'སྙུ', 'snye':'སྙེ', 'snyo':'སྙོ'\n 'st':'སྟ', 'sta':'སྟ', 'sti':'སྟི', 'stu':'སྟུ', 'ste':'སྟེ', 'sto':'སྟོ'\n 'sd':'སྡ', 'sda':'སྡ', 'sdi':'སྡི', 'sdu':'སྡུ', 'sde':'སྡེ', 'sdo':'སྡོ'\n 'sn':'སྣ', 'sna':'སྣ', 'sni':'སྣི', 'snu':'སྣུ', 'sne':'སྣེ', 'sno':'སྣོ'\n 'sp':'སྤ', 'spa':'སྤ', 'spi':'སྤི', 'spu':'སྤུ', 'spe':'སྤེ', 'spo':'སྤོ'\n 'sb':'སྦ', 'sba':'སྦ', 'sbi':'སྦི', 'sbu':'སྦུ', 'sbe':'སྦེ', 'sbo':'སྦོ'\n 'sm':'སྨ', 'sma':'སྨ', 'smi':'སྨི', 'smu':'སྨུ', 'sme':'སྨེ', 'smo':'སྨོ'\n 'sts':'སྩ', 'stsa':'སྩ', 'stsi':'སྩི', 'stsu':'སྩུ', 'stse':'སྩེ', 'stso':'སྩོ'\n\n # Y R L W can be used as a postfixed subscript (although slightly modified visually)\n 'ky':'ཀྱ', 'kya':'ཀྱ', 'kyi':'ཀྱི', 'kyu':'ཀྱུ', 'kye':'ཀྱེ', 'kyo':'ཀྱོ'\n 'khy':'ཁྱ', 'khya':'ཁྱ', 'khyi':'ཁྱི', 'khyu':'ཁྱུ', 'khye':'ཁྱེ', 'khyo':'ཁྱོ'\n 'gy':'གྱ', 'gya':'གྱ', 'gyi':'གྱི', 'gyu':'གྱུ', 'gye':'གྱེ', 'gyo':'གྱོ'\n 'py':'པྱ', 'pya':'པྱ', 'pyi':'པྱི', 'pyu':'པྱུ', 'pye':'པྱེ', 'pyo':'པྱོ'\n 'phy':'ཕྱ', 'phya':'ཕྱ', 'phyi':'ཕྱི', 'phyu':'ཕྱུ', 'phye':'ཕྱེ', 'phyo':'ཕྱོ'\n 'by':'བྱ', 'bya':'བྱ', 'byi':'བྱི', 'byu':'བྱུ', 'bye':'བྱེ', 'byo':'བྱོ'\n 'my':'མྱ', 'mya':'མྱ', 'myi':'མྱི', 'myu':'མྱུ', 'mye':'མྱེ', 'myo':'མྱོ'\n 'hy':'ཧྱ', 'hya':'ཧྱ', 'hyi':'ཧྱི', 'hyu':'', 'hye':'ཧྱེ', 'hyo':'ཧྱོ'\n\n 'kr':'ཀྲ', 'kra':'ཀྲ', 'kri':'ཀྲི', 'kru':'ཀྲུ', 'kre':'ཀྲེ', 'kro':'ཀྲོ'\n 'khr':'ཁྲ', 'khra':'ཁྲ', 'khri':'ཁྲི', 'khru':'ཁྲུ', 'khre':'ཁྲེ', 'khro':'ཁྲོ'\n 'gr':'གྲ', 'gra':'གྲ', 'gri':'གྲི', 'gru':'གྲུ', 'gre':'གྲེ', 'gro':'གྲོ'\n 'tr':'ཏྲ', 'tra':'ཏྲ', 'tri':'ཏྲི', 'tru':'ཏྲུ', 'tre':'ཏྲེ', 'tro':'ཏྲོ'\n 'thr':'ཐྲ', 'thra':'ཐྲ', 'thri':'ཐྲི', 'thru':'ཐྲུ', 'thre':'ཐྲེ', 'thro':'ཐྲོ'\n 'dr':'དྲ', 'dra':'དྲ', 'dri':'དྲི', 'dru':'དྲུ', 'dre':'དྲེ', 'dro':'དྲོ'\n 'nr':'ནྲ', 'nra':'ནྲ', 'nri':'ནྲི', 'nru':'ནྲུ', 'nre':'ནྲེ', 'nro':'ནྲོ'\n 'pr':'པྲ', 'pra':'པྲ', 'pri':'པྲི', 'pru':'པྲུ', 'pre':'པྲེ', 'pro':'པྲོ'\n 'phr':'ཕྲ', 'phra':'ཕྲ', 'phri':'ཕྲི', 'phru':'ཕྲུ', 'phre':'ཕྲེ', 'phro':'ཕྲོ'\n 'br':'བྲ', 'bra':'བྲ', 'bri':'བྲི', 'bru':'བྲུ', 'bre':'བྲེ', 'bro':'བྲོ'\n 'mr':'མྲ', 'mra':'མྲ', 'mri':'མྲི', 'mru':'མྲུ', 'mre':'མྲེ', 'mro':'མྲོ'\n 'sr':'སྲ', 'sra':'སྲ', 'sri':'སྲི', 'sru':'སྲུ', 'sre':'སྲེ', 'sro':'སྲོ'\n 'hr':'ཧྲ', 'hra':'ཧྲ', 'hri':'ཧྲི', 'hru':'ཧྲུ', 'hre':'ཧྲེ', 'hro':'ཧྲོ'\n\n 'kl':'ཀླ', 'kla':'ཀླ', 'kli':'ཀླི', 'klu':'ཀླུ', 'kle':'ཀླེ', 'klo':'ཀློ'\n 'gl':'གླ', 'gla':'གླ', 'gli':'གླི', 'glu':'གླུ', 'gle':'གླེ', 'glo':'གློ'\n 'bl':'བླ', 'bla':'བླ', 'bli':'བླི', 'blu':'བླུ', 'ble':'བླེ', 'blo':'བློ'\n 'rl':'རླ', 'rla':'རླ', 'rli':'རླི', 'rlu':'རླུ', 'rle':'རླེ', 'rlo':'རློ'\n 'sl':'སླ', 'sla':'སླ', 'sli':'སླི', 'slu':'སླུ', 'sle':'སླེ', 'slo':'སློ'\n 'zl':'ཟླ', 'zla':'ཟླ', 'zli':'ཟླི', 'zlu':'ཟླུ', 'zle':'ཟླེ', 'zlo':'ཟློ'\n\n 'kw':'ཀྭ', 'kwa':'ཀྭ', 'kwi':'ཀྭི', 'kwe':'ཀྭེ', 'kwo':'ཀྭོ'\n 'khw':'ཁྭ', 'khwa':'ཁྭ', 'khwi':'ཁྭི', 'khwe':'ཁྭེ', 'khwo':'ཁྭོ'\n 'gw':'གྭ', 'gwa':'གྭ', 'gwi':'གྭི', 'gwe':'གྭེ', 'gwo':'གྭོ'\n 'nyw':'ཉྭ', 'nywa':'ཉྭ', 'nywi':'ཉྭི', 'nywe':'ཉྭེ', 'nywo':'ཉྭོ'\n 'dw':'དྭ', 'dwa':'དྭ', 'dwi':'དྭི', 'dwe':'དྭེ', 'dwo':'དྭོ'\n 'tsw':'ཙྭ', 'tswa':'ཙྭ', 'tswi':'ཙྭི', 'tswe':'ཙྭེ', 'tswo':'ཙྭོ'\n 'tshw':'ཚྭ', 'tshwa':'ཚྭ', 'tshwi':'ཚྭི', 'tshwe':'ཚྭེ', 'tshwo':'ཚྭོ'\n 'zhw':'ཞྭ', 'zhwa':'ཞྭ', 'zhwi':'ཞྭི', 'zhwe':'ཞྭེ', 'zhwo':'ཞྭོ'\n 'zw':'ཟྭ', 'zwa':'ཟྭ', 'zwi':'ཟྭི', 'zwe':'ཟྭེ', 'zwo':'ཟྭོ'\n 'rw':'རྭ', 'rwa':'རྭ', 'rwi':'རྭི', 'rwe':'རྭེ', 'rwo':'རྭོ'\n 'lw':'ལྭ', 'lwa':'ལྭ', 'lwi':'ལྭི', 'lwe':'ལྭེ', 'lwo':'ལྭོ'\n 'shw':'ཤྭ', 'shwa':'ཤྭ', 'shwi':'ཤྭི', 'shwe':'ཤྭེ', 'shwo':'ཤྭོ'\n 'hw':'ཧྭ', 'hwa':'ཧྭ', 'hwi':'ཧྭི', 'hwe':'ཧྭེ', 'hwo':'ཧྭོ'\n\n # Stacks\n 'rpy':'རྤྱ', 'rpya':'རྤྱ', 'rpyi':'རྤྱི', 'rpyu':'རྤྱུ', 'rpye':'རྤྱེ', 'rpyo':'རྤྱོ'\n 'rby':'རྦྱ', 'rbya':'རྦྱ', 'rbyi':'རྦྱི', 'rbyu':'རྦྱུ', 'rbye':'རྦྱེ', 'rbyo':'རྦྱོ'\n 'rmy':'རྨྱ', 'rmya':'རྨྱ', 'rmyi':'རྨྱི', 'rmyu':'རྨྱུ', 'rmye':'རྨྱེ', 'rmyo':'རྨྱོ'\n 'sky':'སྐྱ', 'skya':'སྐྱ', 'skyi':'སྐྱི', 'skyu':'སྐྱུ', 'skye':'སྐྱེ', 'skyo':'སྐྱོ'\n 'skr':'སྐྲ', 'skra':'སྐྲ', 'skri':'སྐྲི', 'skru':'སྐྲུ', 'skre':'སྐྲེ', 'skro':'སྐྲོ'\n 'spr':'སྤྲ', 'spra':'སྤྲ', 'spri':'སྤྲི', 'spru':'སྤྲུ', 'spre':'སྤྲེ', 'spro':'སྤྲོ'\n 'spy':'སྤྱ', 'spya':'སྤྱ', 'spyi':'སྤྱི', 'spyu':'སྤྱུ', 'spye':'སྤྱེ', 'spyo':'སྤྱོ'\n 'sgy':'སྒྱ', 'sgya':'སྒྱ', 'sgyi':'སྒྱི', 'sgyu':'སྒྱུ', 'sgye':'སྒྱེ', 'sgyo':'སྒྱོ'\n 'sgr':'སྒྲ', 'sgra':'སྒྲ', 'sgri':'སྒྲི', 'sgru':'སྒྲུ', 'sgre':'སྒྲེ', 'sgro':'སྒྲོ'\n 'sdr':'སྡྲ', 'sdra':'སྡྲ', 'sdri':'སྡྲི', 'sdru':'སྡྲུ', 'sdre':'སྡྲེ', 'sdro':'སྡྲོ'\n 'sbr':'སྦྲ', 'sbra':'སྦྲ', 'sbri':'སྦྲི', 'sbru':'སྦྲུ', 'sbre':'སྦྲེ', 'sbro':'སྦྲོ'\n 'sby':'སྦྱ', 'sbya':'སྦྱ', 'sbyi':'སྦྱི', 'sbyu':'སྦྱུ', 'sbye':'སྦྱེ', 'sbyo':'སྦྱོ'\n 'snr':'སྣྲ', 'snra':'སྣྲ', 'snri':'སྣྲི', 'snru':'སྣྲུ', 'snre':'སྣྲེ', 'snro':'སྣྲོ'\n 'smy':'སྨྱ', 'smya':'སྨྱ', 'smyi':'སྨྱི', 'smyu':'སྨྱུ', 'smye':'སྨྱེ', 'smyo':'སྨྱོ'\n 'smr':'སྨྲ', 'smra':'སྨྲ', 'smri':'སྨྲི', 'smru':'སྨྲུ', 'smre':'སྨྲེ', 'smro':'སྨྲོ'\n 'rgy':'རྒྱ', 'rgya':'རྒྱ', 'rgyi':'རྒྱི', 'rgyu':'རྒྱུ', 'rgye':'རྒྱེ', 'rgyo':'རྒྱོ'\n\n ' ':'་'\n])\n","learnApp.service(\"imeEL\", [->\n # see: http://www.teknia.com/freegreekfont/greek-standard-mapping\n {\n 'A':'Α', 'B':'Β', 'G':'Γ', 'D':'Δ', 'E':'Ε', 'Z':'Ζ', 'H':'Η'\n 'U':'Θ', 'I':'Ι', 'K':'Κ', 'L':'Λ', 'M':'Μ', 'N':'Ν', 'J':'Ξ'\n 'O':'Ο', 'P':'Π', 'Ρ':'ρ', 'S':'Σ', 'T':'Τ', 'Y':'Υ', 'F':'Φ'\n 'X':'Χ', 'C':'Ψ', 'V':'Ω'\n 'a':'α', 'b':'β', 'g':'γ', 'd':'δ', 'e':'ε', 'z':'ζ', 'h':'η'\n 'u':'θ', 'i':'ι', 'k':'κ', 'l':'λ', 'm':'μ', 'n':'ν', 'j':'ξ'\n 'o':'ο', 'p':'π', 'r':'ρ', 's':'σ', 't':'τ', 'y':'υ', 'f':'φ'\n 'x':'χ', 'c':'ψ', 'v':'ω'\n \"'A\":'Ά', \"'E\":'Έ', \"'H\":'Ή', \"'I\":'Ί', \"'O\":'Ό', \"'Y\":'Ύ', \"'V\":'Ώ'\n , '\"I':'Ϊ' , '\"Y':'Ϋ'\n \"'a\":'ά', \"'e\":'έ', \"'h\":'ή', \"'i\":'ί', \"'o\":'ό', \"'y\":'ύ', \"'v\":'ώ'\n '`a':'ὰ', '`e':'ὲ', '`h':'ὴ', '`i':'ὶ', '`o':'ὸ', '`y':'ὺ', '`v':'ὼ'\n , '\n # see: http://www.lexilogos.com/keyboard/greek_ancient.htm\n {\n 'A':'Α', 'B':'Β', 'G':'Γ', 'D':'Δ', 'E':'Ε', 'Z':'Ζ', 'H':'Η'\n 'U':'Θ', 'I':'Ι', 'K':'Κ', 'L':'Λ', 'M':'Μ', 'N':'Ν', 'J':'Ξ'\n 'O':'Ο', 'P':'Π', 'Ρ':'ρ', 'S':'Σ', 'T':'Τ', 'Y':'Υ', 'F':'Φ'\n 'X':'Χ', 'C':'Ψ', 'V':'Ω'\n 'a':'α', 'b':'β', 'g':'γ', 'd':'δ', 'e':'ε', 'z':'ζ', 'h':'η'\n 'u':'θ', 'i':'ι', 'k':'κ', 'l':'λ', 'm':'μ', 'n':'ν', 'j':'ξ'\n 'o':'ο', 'p':'π', 'r':'ρ', 's':'σ', 't':'τ', 'y':'υ', 'f':'φ'\n 'x':'χ', 'c':'ψ', 'v':'ω', 'w':'ς'\n\n \"'A\":'Ἀ', \"'E\":'Ἐ', \"'H\":'Ἠ', \"'I\":'Ἰ', \"'O\":'Ὀ', \"'Y\":'Ύ', \"'V\":'Ὠ'\n \"'a\":'ἀ', \"'e\":'ἐ', \"'h\":'ἠ', \"'i\":'ἰ', \"'o\":'ὀ', \"'y\":'ὐ', \"'v\":'ὠ'\n\n '\"A':'Ἁ', '\"E':'Ἑ', '\"H':'Ἡ', '\"I':'Ἱ', '\"O':'Ὁ', '\"Y':'Ὑ', '\"V':'Ὡ'\n '\"a':'ἁ', '\"e':'ἑ', '\"h':'ἡ', '\"i':'ἱ', '\"o':'ὁ', '\"y':'ὑ', '\"v':'ὡ'\n\n '/A':'Ἄ', '/E':'Ἔ', '/H':'Ἤ', '/I':'Ἴ', '/O':'Ὄ', '/Y':'Ὓ', '/V':'Ὤ'\n '/a':'ἄ', '/e':'ἔ', '/h':'ἤ', '/i':'ἴ', '/o':'ὄ', '/y':'ὔ', '/v':'ὤ'\n\n '?A':'Ἅ', '?E':'Ἕ', '?H':'Ἥ', '?I':'Ἵ', '?O':'Ὅ', '?Y':'Ὕ', '?V':'Ὥ'\n '?a':'ἅ', '?e':'ἕ', '?h':'ἥ', '?i':'ἵ', '?o':'ὅ', '?y':'ὕ', '?v':'ὥ'\n\n ']A':'Ὰ', ']E':'Ὲ', ']H':'Ὴ', ']I':'Ὶ', ']O':'Ὸ', ']Y':'Ὺ', ']V':'Ὼ'\n ']a':'ὰ', ']e':'ὲ', ']h':'ὴ', ']i':'ὶ', ']o':'ὸ', ']y':'ὺ', ']v':'ὼ'\n\n ';A':'Ά', ';E':'Έ', ';H':'Ή', ';I':'Ί', ';O':'Ό', ';Y':'Ύ', ';V':'Ώ'\n ';a':'ά', ';e':'έ', ';h':'ή', ';i':'ί', ';o':'ό', ';y':'ύ', ';v':'ώ'\n\n '[a':'ᾶ', '[h':'ῆ', '[i':'ῖ', '[y':'ῦ', '[v':'ῶ'\n '{a':'ᾳ', '{h':'ῃ', '{v':'ῳ'\n \"'r\":'ῤ', '\"r':'ῥ' , '\n hebrew =\n '[alt]«':'־', '[alt]\\\\': '־'\n\n consonants =\n 't':'א', 'c':'ב',\t'd':'ג', 's':'ד',\t'v':'ה', 'u':'ו', 'z':'ז', 'j':'ח', 'y':'ט', 'h':'י', 'l':'ך', 'f':'כ',\t'k':'ל', 'o':'ם', 'n':'מ', 'i':'ן'\n 'b':'נ', 'x':'ס',\t'g':'ע', ';':'ף',\t'p':'פ', '.':'ץ', 'm':'צ', 'e':'ק', 'r':'ר', 'a':'ש', ',':'ת'\n 'M':'שׁ', 'A':'שׂ', 'U':'וֹ', 'K':'לֹ', 'C':'לֹ'\n 't[alt]≤':'אּּ', 'c[alt]≤':'בּ',\t'd[alt]≤':'גּ', 's[alt]≤':'דּ',\t'v[alt]≤':'הּ', 'u[alt]≤':'וּ', 'z[alt]≤':'זּ', 'j[alt]≤':'חּ', 'y[alt]≤':'טּ', 'h[alt]≤':'יּ', 'l[alt]≤':'ךּ', 'f[alt]≤':'כּ',\t'k[alt]≤':'לּ', 'o[alt]≤':'םּ', 'n[alt]≤':'מּ', 'i[alt]≤':'ןּ'\n 'b[alt]≤':'נּ', 'x[alt]≤':'סּ',\t'g[alt]≤':'עּ', ';[alt]≤':'ףּ',\t'p[alt]≤':'פּ', '.[alt]≤':'ץּ', 'm[alt]≤':'צּ', 'e[alt]≤':'קּ', 'r[alt]≤':'רּ', 'a[alt]≤':'שּ', ',[alt]≤':'תּ'\n 't[alt],':'אּּ', 'c[alt],':'בּ',\t'd[alt],':'גּ', 's[alt],':'דּ',\t'v[alt],':'הּ', 'u[alt],':'וּ', 'z[alt],':'זּ', 'j[alt],':'חּ', 'y[alt],':'טּ', 'h[alt],':'יּ', 'l[alt],':'ךּ', 'f[alt],':'כּ',\t'k[alt],':'לּ', 'o[alt],':'םּ', 'n[alt],':'מּ', 'i[alt],':'ןּ'\n 'b[alt],':'נּ', 'x[alt],':'סּ',\t'g[alt],':'עּ', ';[alt],':'ףּ',\t'p[alt],':'פּ', '.[alt],':'ץּ', 'm[alt],':'צּ', 'e[alt],':'קּ', 'r[alt],':'רּ', 'a[alt],':'שּ', ',[alt],':'תּ'\n '[alt]µ':'שׁ', '[alt]å':'שׂ', '[alt]¨':'וּ', '[alt]¨[alt]≤':'וֹּ', 'U[alt]≤':'וֹּ'\n '[alt]m':'שׁ', '[alt]a':'שׂ', '[alt]u':'וּ', '[alt]u[alt],':'וֹּ', 'U[alt],':'וֹּ'\n '[alt]µ[alt]≤':'שּׁ', '[alt]å[alt]≤':'שּׂ', 'M[alt]≤':'שּׁ', 'A[alt]≤':'שּׂ'\n '[alt]m[alt],':'שּׁ', '[alt]a[alt],':'שּׂ', 'M[alt],':'שּׁ', 'A[alt],':'שּׂ'\n\n niqqud =\n '0':'ְ', '1':'ֲ', '2':'ֳ', '3':'ֱ', '4':'ִ', '5':'ֵ', '6':'ַ', '7':'ָ', '8':'ֻ', '9':'ֶ', '=':'ֹ'\n '[alt]º':'ְ', '[alt]¡':'ֲ', '[alt]™':'ֳ', '[alt]£':'ֱ', '[alt]¢':'ִ', '[alt]∞':'ֵ', '[alt]§':'ַ', '[alt]¶':'ָ', '[alt]•':'ֻ', '[alt]ª':'ֶ', '[alt]≠':'ֹ'\n '[alt]€':'ֳ', '[alt]#':'ֱ'\n '[alt]0':'ְ', '[alt]1':'ֲ', '[alt]2':'ֳ', '[alt]3':'ֱ', '[alt]4':'ִ', '[alt]5':'ֵ', '[alt]6':'ַ', '[alt]7':'ָ', '[alt]8':'ֻ', '[alt]9':'ֶ', '[alt]=':'ֹ'\n\n for l1c, l2c of consonants\n hebrew[l1c] = l2c\n for l1n, l2n of niqqud\n hebrew[l1c + l1n] = l2c + l2n\n\n # Properly compose on native keyboards\n for l2c in _.uniq(_.values(consonants))\n hebrew[l2c] = l2c\n for l2n in _.uniq(_.values(niqqud))\n hebrew[l2c + l2n] = l2c + l2n\n hebrew[l2c + \"[alt]\" + l2n] = l2c + l2n\n\n hebrew\n])\n","learnApp.service(\"imeJA\", [->\n hiragana =\n 'a' :'あ', 'i' :'い', 'u' :'う', 'e' :'え', 'o' :'お'\n 'na':'な', 'ni':'に', 'nu':'ぬ', 'ne':'ね', 'no':'の'\n 'n':'ん'\n 'xa':'ぁ', 'xi':'ぃ', 'xu':'ぅ', 'xe':'ぇ', 'xo':'ぉ'\n 'xya':'ゃ' , 'xyu':'ゅ' , 'xyo':'ょ'\n 'xwa':'ゎ'\n 'xtu':'っ','xtsu':'っ'\n '-':'ー', '\\.':'。'\n\n katakana =\n 'a' :'ア', 'i' :'イ', 'u' :'ウ', 'e' :'エ', 'o' :'オ'\n 'na':'ナ', 'ni':'ニ', 'nu':'ヌ', 'ne':'ネ', 'no':'ノ'\n 'n':'ン'\n 'xa':'ァ', 'xi':'ィ', 'xu':'ゥ', 'xe':'ェ', 'xo':'ォ'\n 'xya':'ャ' , 'xyu':'ュ' , 'xyo':'ョ'\n 'xwa':'ヮ'\n 'xtu':'ッ','xtsu':'ッ'\n '-':'ー', '\\.':'。'\n\n # Read https://en.wikipedia.org/wiki/Sokuon for more reference\n # The sokuon cannot appear at the beginning of a word, before a vowel kana (a, i, u, e, or o)\n # or before kana that begin with the consonants n, m, r, w, or y. However we are following\n # the OS X and windows IME behavior for sokuon, which does permit sokuon before those consonants\n hiraganaPrefixableBySokuon =\n 'ka':'か', 'ki':'き', 'ku':'く', 'ke':'け', 'ko':'こ'\n 'ga':'が', 'gi':'ぎ', 'gu':'ぐ', 'ge':'げ', 'go':'ご'\n 'sa':'さ', 'si':'し', 'su':'す', 'se':'せ', 'so':'そ'\n 'za':'ざ', 'zi':'じ', 'zu':'ず', 'ze':'ぜ', 'zo':'ぞ'\n 'ta':'た', 'ti':'ち', 'tu':'つ', 'te':'て', 'to':'と'\n 'da':'だ', 'di':'ぢ', 'du':'づ', 'de':'で', 'do':'ど'\n 'ha':'は', 'hi':'ひ', 'hu':'ふ', 'he':'へ', 'ho':'ほ'\n 'ba':'ば', 'bi':'び', 'bu':'ぶ', 'be':'べ', 'bo':'ぼ'\n 'pa':'ぱ', 'pi':'ぴ', 'pu':'ぷ', 'pe':'ぺ', 'po':'ぽ'\n 'ma':'ま', 'mi':'み', 'mu':'む', 'me':'め', 'mo':'も'\n 'ra':'ら', 'ri':'り', 'ru':'る', 're':'れ', 'ro':'ろ'\n 'la':'ら', 'li':'り', 'lu':'る', 'le':'れ', 'lo':'ろ'\n 'ya':'や' , 'yu':'ゆ', 'ye':'いぇ', 'yo':'よ'\n 'wa':'わ', 'wyi':'ゐ' , 'wye':'ゑ', 'wo':'を'\n\n katakanaPrefixableBySokuon =\n 'ka':'カ', 'ki':'キ', 'ku':'ク', 'ke':'ケ', 'ko':'コ'\n 'ga':'ガ', 'gi':'ギ', 'gu':'グ', 'ge':'ゲ', 'go':'ゴ'\n 'sa':'サ', 'si':'シ', 'su':'ス', 'se':'セ', 'so':'ソ'\n 'za':'ザ', 'zi':'ジ', 'zu':'ズ', 'ze':'ゼ', 'zo':'ゾ'\n 'ta':'タ', 'ti':'チ', 'tu':'ツ', 'te':'テ', 'to':'ト'\n 'da':'ダ', 'di':'ヂ', 'du':'ヅ', 'de':'デ', 'do':'ド'\n 'ha':'ハ', 'hi':'ヒ', 'hu':'フ', 'he':'ヘ', 'ho':'ホ'\n 'ba':'バ', 'bi':'ビ', 'bu':'ブ', 'be':'ベ', 'bo':'ボ'\n 'pa':'パ', 'pi':'ピ', 'pu':'プ', 'pe':'ペ', 'po':'ポ'\n 'ma':'マ', 'mi':'ミ', 'mu':'ム', 'me':'メ', 'mo':'モ'\n 'ra':'ラ', 'ri':'リ', 'ru':'ル', 're':'レ', 'ro':'ロ'\n 'la':'ラ', 'li':'リ', 'lu':'ル', 'le':'レ', 'lo':'ロ'\n 'ya':'ヤ' , 'yu':'ユ', 'ye':'イェ', 'yo':'ヨ'\n 'wa':'ワ', 'wyi':'ヰ' , 'wye':'ヱ', 'wo':'ヲ'\n\n _.assignIn hiragana, hiraganaPrefixableBySokuon\n\n for consonant, kana of hiraganaPrefixableBySokuon\n hiragana[consonant[0] + consonant] = [hiragana['xtu'], kana]\n\n _.assignIn katakana, katakanaPrefixableBySokuon\n\n for consonant, kana of katakanaPrefixableBySokuon\n katakana[consonant[0] + consonant] = [katakana['xtu'], kana]\n\n hiraStandardDigraphConsonants =\n 'sh':'し', 'j': 'じ', 'ch':'ち', 'th':'て', 'dh':'で'\n 'vy':'ゔ', 'ky':'き', 'gy':'ぎ', 'sy':'し', 'jy':'じ', 'zy':'じ', 'cy':'ち', 'ty':'ち', 'dy':'ぢ'\n 'ny':'に', 'hy':'ひ', 'by':'び', 'py':'ぴ', 'fy':'ふ', 'my':'み', 'ry':'り', 'ly':'り'\n\n hiraStandardDigraphVowels =\n 'a':'ゃ', 'i':'ぃ', 'u':'ゅ', 'e':'ぇ', 'o':'ょ'\n\n kataStandardDigraphConsonants =\n 'sh':'シ', 'j': 'ジ', 'ch':'チ', 'th':'テ', 'dh':'デ'\n 'vy':'ヴ', 'ky':'キ', 'gy':'ギ', 'sy':'シ', 'jy':'ジ', 'zy':'ジ', 'cy':'チ', 'ty':'チ', 'dy':'ヂ'\n 'ny':'ニ', 'hy':'ヒ', 'by':'ビ', 'py':'ピ', 'fy':'フ', 'my':'ミ', 'ry':'リ', 'ly':'リ'\n\n kataStandardDigraphVowels =\n 'a':'ャ', 'i':'ィ', 'u':'ュ', 'e':'ェ', 'o':'ョ'\n\n for consonantPrefix, consonant of hiraStandardDigraphConsonants\n for vowelSuffix, vowel of hiraStandardDigraphVowels\n hiragana[consonantPrefix[0] + consonantPrefix + vowelSuffix] = [hiragana['xtu'], consonant, vowel]\n hiragana[consonantPrefix + vowelSuffix] = [consonant, vowel]\n\n for consonantPrefix, consonant of kataStandardDigraphConsonants\n for vowelSuffix, vowel of kataStandardDigraphVowels\n katakana[consonantPrefix[0] + consonantPrefix + vowelSuffix] = [katakana['xtu'], consonant, vowel]\n katakana[consonantPrefix + vowelSuffix] = [consonant, vowel]\n\n hiraAlternateDigraphConsonants =\n 'v': 'ゔ', 'f':'ふ', 'ts':'つ', 'kw':'く', 'qw':'く', 'gw':'ぐ', 'sw':'す', 'tw':'と', 'dw':'ど'\n\n hiraAlternateDigraphVowels =\n 'a':'ぁ', 'i':'ぃ', 'u':'ぅ', 'e':'ぇ', 'o':'ぉ'\n\n kataAlternateDigraphConsonants =\n 'v': 'ヴ', 'f':'フ', 'ts':'ツ', 'kw':'ク', 'qw':'ク', 'gw':'グ', 'sw':'ス', 'tw':'ト', 'dw':'ド'\n\n kataAlternateDigraphVowels =\n 'a':'ァ', 'i':'ィ', 'u':'ゥ', 'e':'ェ', 'o':'ォ'\n\n for consonantPrefix, consonant of hiraAlternateDigraphConsonants\n for vowelSuffix, vowel of hiraAlternateDigraphVowels\n hiragana[consonantPrefix[0] + consonantPrefix + vowelSuffix] = [hiragana['xtu'], consonant, vowel]\n hiragana[consonantPrefix + vowelSuffix] = [consonant, vowel]\n\n for consonantPrefix, consonant of kataAlternateDigraphConsonants\n for vowelSuffix, vowel of kataAlternateDigraphVowels\n katakana[consonantPrefix[0] + consonantPrefix + vowelSuffix] = [katakana['xtu'], consonant, vowel]\n katakana[consonantPrefix + vowelSuffix] = [consonant, vowel]\n\n hiragana = _.assignIn hiragana,\n 'wi':['う','ぃ'], 'we':['う','ぇ'], 'nn':'ん'\n 'vu':'ゔ', 'fu':'ふ', 'fyu':'ふ', 'tsu':'つ', 'dzu':'づ'\n 'shi':'し', 'ji':'じ', 'ci':'ち', 'chi':'ち', 'cyi':'ち'\n 'vvu':['っ','ゔ'], 'ffu':['っ','ふ'], 'ffyu':['っ','ふ'], 'ttsu':['っ','つ'], 'ddzu':['っ','づ']\n 'sshi':['っ','し'], 'jji':['っ','じ'], 'cci':['っ','ち'], 'cchi':['っ','ち'], 'ccyi':['っ','ち']\n 'qwa':['く','ゎ']\n\n katakana = _.assignIn katakana,\n 'wi':['ウ','ィ'], 'we':['ウ','ェ'], 'nn':'ン'\n 'vu':'ゔ', 'fu':'ふ', 'fyu':'ふ', 'tsu':'つ', 'dzu':'づ'\n 'shi':'し', 'ji':'じ', 'ci':'ち', 'chi':'ち', 'cyi':'ち'\n 'vvu':['ッ','ゔ'], 'ffu':['ッ','ふ'], 'ffyu':['ッ','ふ'], 'ttsu':['ッ','つ'], 'ddzu':['ッ','づ']\n 'sshi':['ッ','し'], 'jji':['ッ','じ'], 'cci':['ッ','ち'], 'cchi':['ッ','ち'], 'ccyi':['ッ','ち']\n 'qwa':['ク','ヮ']\n\n [hiragana, katakana]\n])\n","learnApp.service(\"imeRU\", [->\n # see: http://en.wikipedia.org/wiki/File:KB_Russian_wiki_phonetic.svg\n {\n 'A':'А', 'B':'Б', 'W':'В', 'G':'Г', 'D':'Д', 'E':'Е', '$':'Ё'\n 'V':'Ж', 'Z':'З', 'I':'И', 'J':'Й', 'K':'К', 'L':'Л', 'M':'М'\n 'N':'Н', 'O':'О', 'P':'П', 'R':'Р', 'S':'С', 'T':'Т', 'U':'У'\n 'F':'Ф', 'H':'Х', 'C':'Ц', '+':'Ч', '{':'Ш', '}':'Щ', '^':'Ъ'\n 'Y':'Ы', 'X':'Ь', '|':'Э', '~':'Ю', 'Q':'Я'\n 'a':'а', 'b':'б', 'w':'в', 'g':'г', 'd':'д', 'e':'е', '#':'ё'\n 'v':'ж', 'z':'з', 'i':'и', 'j':'й', 'k':'к', 'l':'л', 'm':'м'\n 'n':'н', 'o':'о', 'p':'п', 'r':'р', 's':'с', 't':'т', 'u':'у'\n 'f':'ф', 'h':'х', 'c':'ц', '=':'ч', '[':'ш', ']':'щ', '%':'ъ'\n 'y':'ы', 'x':'ь', '\\\\':'э', '`':'ю', 'q':'я'\n }\n])\n","learnApp.service(\"imeTR\", [->\n # see http://www.katpatuka.org/pub/doc/keyboard/trq.html\n {\n '[':'ğ', '{':'Ğ', ']':'ü', '}':'Ü', ';':'ş', ':':'Ş', ',':'ö'\n '<':'Ö', '.':'ç', '>':'Ç', \"'\":'i', '\"':'İ', 'i':'ı', 'I':'I'\n }\n])\n","learnApp.service(\"imeZH\", [->\n 'a1':'ā', 'e1':'ē', 'i1':'ī', 'o1':'ō', 'u1':'ū', 'v1':'ǖ', 'ü1':'ǖ'\n 'a2':'á', 'e2':'é', 'i2':'í', 'o2':'ó', 'u2':'ú', 'v2':'ǘ', 'ü2':'ǘ'\n 'a3':'ǎ', 'e3':'ě', 'i3':'ǐ', 'o3':'ǒ', 'u3':'ǔ', 'v3':'ǚ', 'ü3':'ǚ'\n 'a4':'à', 'e4':'è', 'i4':'ì', 'o4':'ò', 'u4':'ù', 'v4':'ǜ', 'ü4':'ǜ'\n])\n","var map = {\n\t\"./experiment_segments_resource.js\": 719,\n\t\"./learn-survey-resource.js\": 720,\n\t\"./series-content-resource.js\": 721,\n\t\"./series-study-resource.js\": 722,\n\t\"./set-content-resource.js\": 723,\n\t\"./set-study-resource.js\": 724,\n\t\"./study-all-resource.js\": 725\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 = 718;","learnApp.factory('ExperimentSegmentsResource', ['$resource', ($resource) ->\n $resource \"\", {},\n get:\n method: 'GET'\n isArray: false\n url: APIRoutes.v3_my_experiment_segments_path()\n])\n","learnApp.factory('LearnSurveyResource', ['$resource', ($resource) ->\n $resource \"\",{},\n query:\n method: 'GET'\n isArray: false\n url: APIRoutes.v3_my_surveys_path()\n save:\n method: 'PUT'\n isArray: false\n url: APIRoutes.v3_my_survey_path(\":id\")\n params:\n id: \"@id\"\n])\n","learnApp.factory('SeriesContentResource', ['$resource', ($resource) ->\n $resource \"\",{},\n get:\n method: 'GET'\n isArray: false\n url: APIRoutes.v2_series_content_path(\":id\")\n params:\n id: \"@id\"\n])\n","learnApp.factory('SeriesStudyResource', ['$resource', ($resource) ->\n $resource \"\",{},\n query:\n method: 'GET'\n isArray: false\n url: APIRoutes.v2_series_study_index_path(\":id\")\n params:\n id: \"@id\"\n save:\n method: 'POSt'\n isArray: false\n url: APIRoutes.v2_series_study_index_path(\":id\")\n params:\n id: \"@id\"\n])\n","learnApp.factory('SetContentResource', ['$resource', ($resource) ->\n $resource \"\",{},\n get:\n method: 'GET'\n isArray: false\n url: APIRoutes.v2_set_content_path(\":id\")\n params:\n id: \"@id\"\n])\n","learnApp.factory('SetStudyResource', ['$resource', ($resource) ->\n $resource \"\",{},\n query:\n method: 'GET'\n isArray: false\n url: APIRoutes.v2_set_study_index_path(\":id\")\n params:\n id: \"@id\"\n save:\n method: 'POSt'\n isArray: false\n url: APIRoutes.v2_set_study_index_path(\":id\")\n params:\n id: \"@id\"\n])\n","learnApp.factory('StudyAllResource', ['$resource', ($resource) ->\n $resource \"\",{},\n query:\n method: 'GET'\n isArray: false\n url: APIRoutes.v2_study_index_path()\n save:\n method: 'POST'\n isArray: false\n url: APIRoutes.v2_study_index_path()\n])\n","learnApp.factory(\"ChromeMenuHelper\", ['$rootScope', 'DebugHelper', ($rootScope, DebugHelper) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"ChromeMenuHelper\", $scope)\n\n _.assignIn $scope,\n currentMenu: null\n\n $scope\n])\n","var map = {\n\t\"./chrome-menus.js\": 319,\n\t\"./chrome-menus.js.coffee\": 319,\n\t\"./close-button\": 320,\n\t\"./close-button.ts\": 320,\n\t\"./flexible-concept.js\": 321,\n\t\"./flexible-concept.js.coffee\": 321,\n\t\"./flexible-region.js\": 322,\n\t\"./flexible-region.js.coffee\": 322,\n\t\"./sequence-study-scrollable-facet.js\": 323,\n\t\"./sequence-study-scrollable-facet.js.coffee\": 323,\n\t\"./top-navigation-header.js\": 324,\n\t\"./top-navigation-header.js.coffee\": 324\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 = 727;","learnApp.factory(\"AnimationManager\", ['$rootScope', '$q', '$timeout', 'DebugHelper', ($rootScope, $q, $timeout, DebugHelper) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"AnimationManager\", $scope)\n\n ANIMATION_DELAY_MSEC = 1500\n\n _.assignIn $scope,\n cancel: (modifier) ->\n angular.element(\".fade--\" + modifier).removeClass(\"fade--\" + modifier)\n\n fadeIn: (modifier) ->\n animation = $q.defer()\n $timeout ->\n el = angular.element(\".fade--\" + modifier)\n\n doAnimate = ->\n el.addClass(\"in\")\n $timeout ->\n animation.resolve()\n , ANIMATION_DELAY_MSEC\n\n if el.length > 0\n if modifier == \"region\"\n # Wait for region to finish rendering before starting animation\n regionReady = ->\n el.find(\".image-maps-regions\").length > 0\n unwatcher = $scope.$watch regionReady, ->\n if regionReady()\n $timeout doAnimate\n unwatcher()\n else\n doAnimate()\n else\n animation.resolve()\n\n animation.promise\n\n $scope\n])\n","learnApp.factory(\"AssetLoader\", ['$rootScope', '$q', '$timeout', 'DebugHelper', ($rootScope, $q, $timeout, DebugHelper) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"AssetLoader\", $scope)\n\n ASSET_TIMEOUT_MSEC = 15 * 1000\n\n _.assignIn $scope,\n loadUrls: (deferred, imageUrls, soundUrls, SessionSettings, returnPromise) ->\n imageUrls = _.uniq(imageUrls || [])\n soundUrls = _.uniq(soundUrls || [])\n\n resolved = false\n loadedAssets = 0\n totalAssets = imageUrls.length + soundUrls.length\n\n SessionSettings.log \"wanna preload \" + totalAssets + \" assets\"\n SessionSettings.log imageUrls\n SessionSettings.log soundUrls\n\n onAssetLoad = ->\n loadedAssets = loadedAssets + 1\n deferred.notify(Math.floor(loadedAssets * 100.0 / totalAssets))\n if loadedAssets == totalAssets && !resolved\n resolved = true\n deferred.resolve()\n\n # http://stackoverflow.com/questions/5313646/how-to-preload-a-sound-in-javascript\n for url in imageUrls\n image = new Image()\n image.onload = onAssetLoad\n image.onerror = onAssetLoad\n image.src = url\n\n for url in soundUrls\n sound = new Audio()\n sound.src = url\n sound.preload = \"auto\"\n $(sound).on('loadeddata', onAssetLoad)\n sound.onerror = onAssetLoad\n\n if totalAssets == 0\n resolved = true\n deferred.resolve()\n else\n $timeout ->\n if !resolved\n if !!SessionSettings.logOutput\n SessionSettings.log \"Asset preloading timed out, still waiting on: \" + (totalAssets - loadedAssets) + \" assets\"\n resolved = true\n deferred.resolve() # TODO: find out why this is happening\n , ASSET_TIMEOUT_MSEC\n\n if returnPromise\n deferred.promise\n\n $scope\n])\n","learnApp.factory(\"AssetPreloader\", ['$rootScope', '$q', '$filter', 'DebugHelper', 'AssetLoader', 'SessionSettings', 'StudyQueue', 'SoundFXManager', ($rootScope, $q, $filter, DebugHelper, AssetLoader, SessionSettings, StudyQueue, SoundFXManager) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"AssetPreloader\", $scope)\n\n _.assignIn $scope,\n loadUrls: (deferred, imageUrls, soundUrls) ->\n AssetLoader.loadUrls(deferred, imageUrls, soundUrls, SessionSettings, false)\n\n preloadSoundEffects: ->\n if !$scope.effectsDeferred\n $scope.effectsDeferred = $q.defer()\n $scope.loadUrls($scope.effectsDeferred, [], _.values(SoundFXManager.sounds))\n\n $scope.effectsDeferred.promise\n\n preloadAssets: ->\n if !$scope.deferred\n $scope.deferred = $q.defer()\n\n StudyQueue.loadQueue().then (queue) ->\n imageUrls = []\n soundUrls = []\n\n checkForAssets = (object) ->\n if object && object.image\n object.image.url = $filter(\"transcode\")(object.image)\n imageUrls.push object.image.url\n if object && object.sound\n soundUrls.push object.sound.url\n true\n\n for item in _.map(queue, \"item\")\n checkForAssets(item.image_map)\n for annotation in [].concat(item.annotations)\n checkForAssets(annotation)\n checkForAssets(item.concept)\n for sentence in [].concat(item.sentences)\n checkForAssets(sentence)\n for facet in item[item.template_type].facets\n checkForAssets(facet.anchor.concept)\n if facet.anchor.concept\n for distractor in facet.anchor.concept.distractors\n checkForAssets(distractor)\n checkForAssets(facet.association.concept)\n if facet.association.concept\n for distractor in facet.association.concept.distractors\n checkForAssets(distractor)\n\n $scope.loadUrls($scope.deferred, imageUrls, soundUrls)\n\n $scope.deferred.promise\n\n $scope\n])\n","learnApp.factory(\"Cheating\", ['$rootScope', 'DebugHelper', ($rootScope, DebugHelper) ->\n $scope = $rootScope.$new()\n\n \n\n $scope\n])\n","learnApp.factory(\"ContentService\", ['$rootScope', '$routeParams', '$q', '$timeout', '$filter', 'DebugHelper', 'ContextService', 'SessionLimits', 'SessionSettings', 'SetContentResource', 'SeriesContentResource', 'ContentMemoryManager', ($rootScope, $routeParams, $q, $timeout, $filter, DebugHelper, ContextService, SessionLimits, SessionSettings, SetContentResource, SeriesContentResource, ContentMemoryManager) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"ContentService\", $scope)\n\n CACHE_GENERATION_TIMEOUT_MSEC = 5 * 1000\n MAX_CACHE_GENERATION_TIMEOUT_MSEC = 30 * 1000\n\n _.assignIn $scope,\n sanitizeConcept: (concept) ->\n return unless concept\n # Filter out sound only distractors\n concept.distractors = _.filter concept.distractors, (distractor) ->\n (_.isString(distractor.text_html) && distractor.text_html.length > 0) || distractor.image\n\n sanitizeItems: (items) ->\n for item in items\n if item.template_type == \"sequence\"\n item.sequence.facets = $filter('sortedForSequence')(item.sequence.facets)\n for facet in item.sequence.facets\n distractors = facet.association.concept.distractors\n distractors = _.filter(distractors, (d) ->\n d.image || d.text_html\n )\n facet.association.concept.distractors = distractors\n\n else if item.template_type == \"cloze_container\"\n for facet in item[item.template_type].facets\n $scope.sanitizeConcept(facet.anchor.concept)\n $scope.sanitizeConcept(facet.association.concept)\n items\n\n # Forces a dependency on ContentMemoryManager.load\n fetchContent: ->\n switch ContextService.contextType\n when \"set\"\n resource = SetContentResource.get(id: ContextService.contextId)\n when \"series\"\n resource = SeriesContentResource.get(id: ContextService.contextId, full_content: !!SessionSettings.isPreview)\n else\n # Fail\n throw new Error(\"Preview requires a context\")\n\n\n SessionSettings.log \">>> Requesting new content\"\n\n resource.$promise.then (success) ->\n if success.meta.status == 202\n $scope.deferred.notify(success)\n SessionSettings.log \"!!! Cache generation in progress, will retry in \" + CACHE_GENERATION_TIMEOUT_MSEC / 1000 + \"sec\"\n $timeout ->\n CACHE_GENERATION_TIMEOUT_MSEC = _.min [CACHE_GENERATION_TIMEOUT_MSEC*2, MAX_CACHE_GENERATION_TIMEOUT_MSEC]\n $scope.fetchContent()\n , CACHE_GENERATION_TIMEOUT_MSEC\n else\n success.response\n , $scope.deferred.reject\n\n # Returns a promise, with content as parameter, forces an update to the memory aggregate\n loadContent: (study_facets) ->\n unless $scope.deferred\n $scope.deferred = $q.defer()\n ContextService.loadContext().then ->\n\n if study_facets # always true now\n items = _.uniqBy(_.map(study_facets, \"item\"), (item) -> item.id)\n\n $scope.items = $scope.sanitizeItems(items)\n if ContextService.contextType == 'set'\n # non-blocking load of full initial memory bank before study, so we can animate the orbs up after study\n # if memory bank doesn't load in time, no matter -- just animate from zero in LASS instead\n ContentMemoryManager.load()\n $scope.deferred.resolve($scope.items)\n # TODO: remove me when everything is on new LASS\n else\n ContentMemoryManager.load().then (memoryAggregate) ->\n $scope.deferred.resolve($scope.items)\n\n\n $scope.deferred.promise\n\n reset: ->\n $scope.deferred = null\n $scope.items = []\n\n findContentByFacetId: (id) ->\n content = {}\n content.item = _.find $scope.items, (item) ->\n content.facet = _.find item[item.template_type].facets, (facet) ->\n facet.id == id\n\n content\n\n findContentByItemId: (id) ->\n content = {}\n content.item = _.find $scope.items, (item) ->\n item.id == id\n\n content\n\n findContentByGuid: (guid) ->\n facets = _.flatten(_.map($scope.items, (item) ->\n item[item.template_type].facets\n ))\n facet = _.sample(_.filter(facets, learning_engine_guid: guid))\n if facet\n $scope.findContentByFacetId(facet.id)\n else\n {}\n\n $scope.reset()\n\n $scope\n])\n","learnApp.factory(\"ContentMemoryManager\", ['$rootScope', '$location', 'DebugHelper', 'ContextService', 'LtiService', 'UserManager', 'MemoryStorage', 'SessionSettings', ($rootScope, $location, DebugHelper, ContextService, LtiService, UserManager, MemoryStorage, SessionSettings) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"ContentMemoryManager\", $scope)\n\n _.assignIn $scope,\n memoryAggregate: {}\n\n memoryConstraints: (user) ->\n params =\n user_id: user.id\n\n # TODO: once we move over to new LASS, no more aggregate memories loaded\n if (ContextService.contextType == \"set\")\n params.module_id = ContextService.context.id\n params.module_type = ContextService.context.module_type\n # Cengage legacy content uses /lti/study, which doesnt use LASS\n # grab aggregate memories to our old summary screen appears for those links\n # TODO: remove me when we move cengage assignments fully over to LASS\n if $location.path() == \"/lti/study\"\n params.aggregate = true\n else if (ContextService.contextType == \"series\")\n params.module_id = ContextService.context.id\n params.module_type = ContextService.context.module_type\n params.aggregate = true\n else if ContextService.contextType == \"courses\"\n params.my_group_id = ContextService.contextId\n params.aggregate = true\n else\n params.aggregate = true\n\n if LtiService.ltiGroupId\n params.my_group_id = LtiService.ltiGroupId\n\n params\n\n reset: ->\n UserManager.loadUser().then (user) ->\n ContextService.loadContext().then (context) ->\n unless context.type == \"sets\"\n MemoryStorage.cache[MemoryStorage.cacheKey($scope.memoryConstraints(user))] = null\n\n # Loads the memory aggregate for given content\n load: ->\n UserManager.loadUser().then (user) ->\n ContextService.loadContext().then (context) ->\n if user\n MemoryStorage.load($scope.memoryConstraints(user)).then (response) ->\n $scope.memoryAggregate = response.memories[0] || {}\n else\n false\n\n $scope\n])\n","learnApp.factory(\"ContextSwitcher\", ['$rootScope', '$location', 'DebugHelper', 'ContentService', 'ContextService', 'StudyQueue', 'SummaryHelper', ($rootScope, $location, DebugHelper, ContentService, ContextService, StudyQueue, SummaryHelper) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"ContextSwitcher\", $scope)\n\n _.assignIn $scope,\n switchContext: (module_type, module_id) ->\n ContextService.setContext(module_type, module_id)\n\n ContentService.reset()\n StudyQueue.reset()\n SummaryHelper.loadPaths()\n\n $location.path Packs.iKnowRoutes[\"v2_\" + module_type + \"_learn_path\"](module_id)\n\n window.switchLearnContext = $scope.switchContext\n\n $scope\n])\n","learnApp.service(\"FuzzyMatcher\", ['$rootScope', 'DebugHelper', ($rootScope, DebugHelper) ->\n (language) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"FuzzyMatcher\", $scope)\n\n # Remember: umlauts can be written with extended ASCII or with a combining diacretic\n $scope.map = switch language && language.code\n when \"zh-Hans\", \"zh-Hant\" # Chinese - Pinyin\n 'a': 'āáǎà'\n 'e': 'ēéěè'\n 'i': 'īíǐì'\n 'o': 'ōóǒò'\n 'u': 'ūúǔù'\n 'v': 'ǖǘǚǜ'\n 'ü': 'ǖǘǚǜ\\u0075\\u0308'\n '\\u0075\\u0308': '\\u00FC'\n '\\u00FC': '\\u0075\\u0308'\n when \"ja\" # Japanese\n 'n': 'ん'\n when \"grc\", \"el\" # Greek and Ancient greek\n 'α': \"άἀἁἂἃἄἅἆἇὰάᾀᾁᾂᾃᾄᾅᾆᾇᾰᾱᾲᾳᾴᾶᾷ\" # [ 940, 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, 8048, 8049, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8112, 8113, 8114, 8115, 8116, 8118, 8119]\n 'ε': \"έἐἑἒἓἔἕὲέ\" # [ 941, 7952, 7953, 7954, 7955, 7956, 7957, 8050, 8051]\n 'η': \"ήἠἡἢἣἤἥἦἧὴήᾐᾑᾒᾓᾔᾕᾖᾗῂῃῄῆῇ\" # [ 942, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 8052, 8053, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8130, 8131, 8132, 8134, 8135]\n 'ι': \"ΐίϊἰἱἲἳἴἵἶἷὶίῐῑῒΐῖῗ\" # [912, 943, 970, 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, 8054, 8055, 8144, 8145, 8146, 8147, 8150, 8151]\n 'ο': \"όὀὁὂὃὄὅὸό\" # [ 972, 8000, 8001, 8002, 8003, 8004, 8005, 8056, 8057]\n 'υ': \"ΰϋύὐὑὒὓὔὕὖὗὺύῠῡῢΰῦῧ\" # [ 944, 971, 973, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8058, 8059, 8160, 8161, 8162, 8163, 8166, 8167]\n 'ω': \"ώὠὡὢὣὤὥὦὧὼώᾠᾡᾢᾣᾤᾥᾦᾧῲῳῴῶῷ\" # [ 974, 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, 8060, 8061, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8178, 8179, 8180, 8182, 8183]\n 'ρ': \"ῤῥ\" # [ 8164, 8165]\n '᾽': '᾿'\n when \"ru\" # Russian\n 'а': 'а́'\n 'е': 'ёе́'\n 'и': 'и́'\n 'о': 'о́'\n 'у': 'у́'\n 'ы': 'ы́'\n 'э': 'э́'\n 'ю': 'ю́'\n 'я': 'я́'\n when 'sv' # Swedish\n 'a': 'äå\\u0061\\u0308'\n 'o': 'ö\\u006F\\u0308'\n '\\u0061\\u0308': '\\u00E4'\n '\\u00E4': '\\u0061\\u0308'\n '\\u006F\\u0308': '\\u00F6'\n '\\u00F6': '\\u006F\\u0308'\n else\n 'a': 'ẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ\\u0061\\u0308'\n 'b': 'ḃḅḇƀƃɓ'\n 'c': 'ćĉċčçḉƈȼꜿↄ'\n 'd': 'ḋďḍḑḓḏđƌɖɗ'\n 'e': 'èéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ\\u0065\\u0308'\n 'f': 'ḟƒ'\n 'g': 'ǵĝḡğġǧģǥɠ'\n 'h': 'ĥḣḧȟḥḩḫẖħⱨɥ'\n 'i': 'ìíîĩīĭïḯỉǐȉȋịįḭɨı\\u0069\\u0308'\n 'j': 'ĵǰɉ'\n 'k': 'ḱǩḳķḵƙⱪ'\n 'l': 'ŀĺľḷḹļḽḻſłƚɫ'\n 'm': 'ḿṁṃɱɯ'\n 'n': 'ǹńñṅňṇņṋṉƞɲʼn'\n 'o': 'òóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋɵ\\u006F\\u0308'\n 'p': 'ṕṗƥᵽ'\n 'q': 'ɋ'\n 'r': 'ŕṙřȑȓṛṝŗṟɍɽꞃ'\n 's': 'ßśṥŝṡšṧṣṩșşȿ'\n 't': 'ṫẗťṭțţṱṯŧƭʈⱦ'\n 'u': 'ùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ\\u0075\\u0308'\n 'v': 'ṽṿʋʌ'\n 'w': 'ẁẃŵẇẅẘẉⱳ'\n 'x': 'ẋẍ'\n 'y': 'ỳýŷỹȳẏÿỷẙỵƴɏ'\n 'z': 'źẑżžẓẕƶȥɀⱬ'\n 'ae': 'æǽǣ'\n '\\u0061\\u0308': '\\u00E4'\n '\\u00E4': '\\u0061\\u0308'\n '\\u0065\\u0308': '\\u00EB'\n '\\u00EB': '\\u0065\\u0308'\n '\\u0069\\u0308': '\\u00EF'\n '\\u00EF': '\\u0069\\u0308'\n '\\u006F\\u0308': '\\u00F6'\n '\\u00F6': '\\u006F\\u0308'\n '\\u0075\\u0308': '\\u00FC'\n '\\u00FC': '\\u0075\\u0308'\n\n interchangeable_symbols = {\n # these mathematical symbols are equivalent to their greek counterparts, in forward and reverse\n 'σ': '∑',\n 'π': '∏',\n '∅': 'Ø',\n '∆': 'δ',\n '∊': 'ϵ',\n '∍': '϶'\n }\n\n for key, value of interchangeable_symbols\n $scope.map[key] ||= \"\"\n $scope.map[key] += value\n $scope.map[value] ||= \"\"\n $scope.map[value] += key\n\n _.assignIn $scope,\n isWhitespace: (letter) ->\n /\\s/.test(letter)\n\n # A is the correct letter, potentially capitalized or with an accent\n # B is the answer letter, without an accent\n isEq: (A, B) ->\n a = A.toLowerCase() # correct\n b = B.toLowerCase() # input\n\n # TODO: these should probably have toggles\n if a == b\n true\n else if ($scope.map[b] || \"\").match(a.replace(/[\\[\\]\\.\\-\\+\\?\\'\\\"\\(\\)]/g, \"\\\\$&\"))\n true\n else if $scope.isWhitespace(a) && $scope.isWhitespace(b)\n true\n else if a.length > 1 || b.length > 1\n # For muliple codepoint letters, order shouldn't matter\n sortedA = _.sortBy(a, (codepoint) -> codepoint.charCodeAt(0)).join(\"\")\n sortedB = _.sortBy(b, (codepoint) -> codepoint.charCodeAt(0)).join(\"\")\n sortedA == sortedB\n else if a.length > 1 && b.length == 1\n # If the correct answer is a decomposed string, try removing all the diacritic marks and then check for equivalency\n a.replace(/[\\u0300-\\u036F\\u0591-\\u05BD\\u05BF-\\u05C7\\u0F70-\\u0FBC\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/g, \"\") == b\n else\n false\n\n $scope\n])\n","learnApp.factory(\"HotKeyManager\", ['$rootScope', '$document', 'DebugHelper', 'hotkeys', 'ModalService', 'SessionSettings', 'UserSettings', ($rootScope, $document, DebugHelper, hotkeys, ModalService, SessionSettings, UserSettings) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"HotKeyManager\", $scope)\n\n navigateArray = (el, arr, delta) ->\n arr[(_.indexOf(arr, el) + arr.length + delta) % arr.length]\n\n _.assignIn $scope,\n disabled: false\n\n setHotkeyIndex: (owner, index) ->\n owner.hotkeySelection = index\n\n registerActionNavigator: (owner, actions, skip) ->\n return unless UserSettings.settings.keyboardShortcut\n $scope.disabled = false\n owner.hotkeySelection = _.keys(actions)[0]\n for key in ['enter', 'left', 'up', 'right', 'down']\n if hotkeys.get(key)\n hotkeys.del(key)\n\n skip = skip || 1\n hotkeys.bindTo(owner)\n .add\n combo: 'enter'\n description: 'Continue'\n persistent: false\n callback: ->\n actions[owner.hotkeySelection]()\n .add\n combo: ['left']\n persistent: false\n callback: ->\n owner.hotkeySelection = navigateArray(owner.hotkeySelection, _.keys(actions), -1)\n .add\n combo: ['right']\n persistent: false\n callback: ->\n owner.hotkeySelection = navigateArray(owner.hotkeySelection, _.keys(actions), 1)\n .add\n combo: ['up']\n persistent: false\n callback: ->\n owner.hotkeySelection = navigateArray(owner.hotkeySelection, _.keys(actions), - skip)\n .add\n combo: ['down']\n persistent: false\n callback: ->\n owner.hotkeySelection = navigateArray(owner.hotkeySelection, _.keys(actions), skip)\n\n $scope\n])\n","learnApp.service(\"IME\", ['$rootScope', 'DebugHelper', 'SessionSettings', 'imeAM', 'imeBO', 'imeEL', 'imeGRC', 'imeHE', 'imeJA', 'imeRU', 'imeZH', 'imeTR', ($rootScope, DebugHelper, SessionSettings, imeAM, imeBO, imeEL, imeGRC, imeHE, imeJA, imeRU, imeZH, imeTR) ->\n (language) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"IME\", $scope)\n\n # For most languages, the map is just a map from keypresses to output values\n # When output is composed into a single unicode character, it is returned as a string (see: Hebrew)\n # When output is not composed, but expected to map to multiple characters, it is returned as an array of strings (see: Japanese)\n # Alt key can be captured with [alt] (see: Hebrew)\n # Multiple registers are supported, such that pressing shift at any point in the sequences shifts to the upper register.\n # This is handled by returning an array of maps [lowerRegister, upperRegister] (see: Japanese)\n # RTL languages will have the RTL flag set to true\n $scope.map = switch language.code\n when \"am\" # Amharic\n imeAM\n when \"bo\" # Tibetan\n imeBO\n when \"el\" # Modern Greek\n imeEL\n when \"grc\" # Ancient Greek\n imeGRC\n when \"he\" # Hebrew\n imeHE\n when \"ja\" # Japanese\n imeJA\n when \"tr\"\n imeTR\n when \"no\" # Norwegian\n ':': 'Æ', '\"': 'Ø', '{': 'Å'\n ';': 'æ', \"'\": 'ø', '[': 'å'\n when \"ru\" # Russian\n imeRU\n when \"sv\" # Swedish\n ':': 'Ö', '\"': 'Ä', '{': 'Å'\n ';': 'ö', \"'\": 'ä', '[': 'å'\n when \"uga\" # Ugaritic\n \"''\":\"ʿ\",\"[alt]'\":\"ʾ\",\"[alt]æ\":\"ʾ\"\n \"[alt]d\":\"ḏ\",\"[alt]∂\":\"ḏ\"\n \"[alt]h\":\"ḥ\",\"[alt]H\":\"ḫ\",\"[alt]˙\":\"ḥ\",\"[alt]Ó\":\"ḫ\"\n \"[alt]t\":\"ṭ\",\"[alt]T\":\"ṯ\",\"[alt]†\":\"ṭ\",\"[alt]ˇ\":\"ṯ\"\n \"[alt]z\":\"ẓ\",\"[alt]Ω\":\"ẓ\"\n \"[alt]g\":\"ǵ\",\"[alt]©\":\"ǵ\"\n \";\":\"ṣ\",\"[alt]s\":\"š\",\"[alt]ß\":\"š\"\n when \"zh-Hans\", \"zh-Hant\" # Chinese - Pinyin\n imeZH\n else\n \"'a\":'á', \"'e\":'é', \"'i\":'í', \"'o\":'ó', \"'u\":'ú'\n '`a':'à', '`e':'è', '`i':'ì', '`o':'ò', '`u':'ù'\n '\"a':'ä', '\"e':'ë', '\"i':'ï', '\"o':'ö', '\"u':'ü'\n '~a':'ã', '~n':'ñ', '~o':'õ'\n\n $scope.validChars = _.uniq(_.map([].concat($scope.map), (map) -> _.keys(map)).join())\n $scope.validResults = _.uniq(_.map([].concat($scope.map), (map) -> _.values(map)).join())\n\n _.assignIn $scope,\n buffer: []\n keys: _.uniq(_.flatten(_.map([].concat($scope.map), (map) -> _.keys(map))))\n useRegisters: $scope.map instanceof Array\n RTL: _.includes(['ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'ku', 'mzn', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi'], language.code)\n\n clear: ->\n $scope.buffer = []\n\n combo: (buffer) ->\n _.map(buffer || $scope.buffer, (key) ->\n usedModifiers = _.filter(_.keys(key.modifiers), (mod) -> mod != \"shift\" && key.modifiers[mod])\n letter = if $scope.useRegisters then key.input.toLowerCase() else key.input\n _.map(usedModifiers, (mod) -> \"[\" + mod + \"]\").join(\"\") + letter\n ).join(\"\")\n\n lookup: (buffer) ->\n buffer = buffer || $scope.buffer\n return if buffer.length < 1\n combo = $scope.combo(buffer)\n if SessionSettings.debugIME\n console.log \"(lookup) combo: \" + combo\n if $scope.useRegisters\n shift = _.some(buffer, (key) -> key.modifiers.shift)\n if SessionSettings.debugIME\n if shift\n console.log \"(lookup) using upper register\"\n else\n console.log \"(lookup) using lower register\"\n map = if shift then $scope.map[1] else $scope.map[0]\n else\n if SessionSettings.debugIME\n console.log \"(lookup) using default register\"\n map = $scope.map\n map.hasOwnProperty(combo) && map[combo]\n\n # return converted character, previous character or null if still awaiting more input\n push: (input, modifiers) ->\n previous = $scope.buffer\n $scope.buffer = $scope.buffer.concat([\n input: input\n modifiers: modifiers\n ])\n\n combo = $scope.combo()\n numMatches = _.filter($scope.keys, (key) -> key.match(\"^\" + combo.replace('\\\\', '\\\\\\\\').replace(/[\\[\\]\\.\\-\\+\\?\\'\\\"\\(\\)]/g, \"\\\\$&\"))).length\n\n if SessionSettings.debugIME\n console.log \"(push) combo:\" + combo\n console.log \"(push) matches: \" + numMatches\n\n if numMatches > 1\n # some input still possible\n null\n else if numMatches == 1\n # match\n output = $scope.lookup()\n if output\n $scope.clear()\n output\n else\n # No match, return previous match or buffer and save input for future processing\n $scope.buffer = [\n input: input\n modifiers: modifiers\n ]\n $scope.lookup(previous) || _.map(previous, (key) -> key.input)\n\n # for printing\n last: ->\n lastKey = ($scope.buffer.length > 0 && $scope.buffer[$scope.buffer.length - 1]) || {}\n $scope.lookup() || lastKey.input\n\n # backspace\n pop: ->\n letter = $scope.last()\n $scope.buffer = $scope.buffer.slice(0, $scope.buffer.length - 1)\n letter\n\n $scope\n])\n","learnApp.service(\"IMESupportHelper\", [->\n\n service =\n # latinAlphabetLanguages source: http://www.omniglot.com/writing/langalph.htm#latin\n latinAlphabetLanguages: [\"aa\", \"af\", \"ak\", \"an\", \"ay\", \"ba\", \"bm\", \"be\", \"bi\", \"br\", \"ca\", \"cs\", \"ch\", \"ce\", \"kw\", \"co\", \"cy\", \"da\", \"de\", \"en\", \"eo\", \"et\", \"eu\", \"ee\", \"fo\", \"fj\", \"fi\", \"fr\", \"fy\", \"ga\", \"gv\", \"gn\", \"ha\", \"hz\", \"hr\", \"hu\", \"ig\", \"io\", \"ia\", \"id\", \"ik\", \"is\", \"it\", \"jv\", \"kr\", \"kk\", \"ki\", \"rw\", \"ku\", \"la\", \"lv\", \"ln\", \"lt\", \"lg\", \"mg\", \"mt\", \"mi\", \"ms\", \"nv\", \"nl\", \"no\", \"oc\", \"pl\", \"pt\", \"qu\", \"ro\", \"sg\", \"sk\", \"se\", \"sm\", \"sn\", \"so\", \"es\", \"sq\", \"sc\", \"sw\", \"sv\", \"ty\", \"tt\", \"tl\", \"tn\", \"ts\", \"tk\", \"tr\", \"tw\", \"uz\", \"ve\", \"vi\", \"vo\", \"wa\", \"wo\", \"xh\", \"za\", \"zu\"]\n imeSupportedLanguages: [\"am\", \"zh-Hans\", \"zh-Hant\", \"ja\", \"el\", \"grc\", \"ru\", \"sv\", \"he\", \"bo\", \"tr\", \"uga\"]\n\n getAllSupportedLanguages: ->\n _.union(service.latinAlphabetLanguages,service.imeSupportedLanguages)\n\n service\n])\n","learnApp.service(\"IntraSessionScheduler\", ['$rootScope', 'DebugHelper', 'SessionSettings', 'PresentationManager', 'ContentService', ($rootScope, DebugHelper, SessionSettings, PresentationManager, ContentService) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"IntraSessionScheduler\", $scope)\n\n WORKING_MEMORY_CAP = 5\n\n _.assignIn $scope,\n # TODO: this should eventually live in the LE\n weightedMemoryBurden: (guids) ->\n _.reduce guids, (burden, guid) ->\n content = ContentService.findContentByGuid(guid)\n switch content.item.template_type\n when \"pattern\", \"sequence\"\n burden + 3\n else\n if content.item.study_type == \"notes\" && content.item.note_type == 'item'\n burden + content.item[content.item.template_type].facets.length\n else\n burden + 1\n , 0\n\n bestQuiz: (queue, forceStudy) ->\n return null if queue.length < 1\n # ie: right after incorrect confirmation\n if forceStudy && queue[0].original_quiz_type == \"Study\"\n return queue[0]\n if SessionSettings.isPreview && !SessionSettings.forceScheduler\n return queue[0]\n\n quizzesRemaining = _.countBy(queue, (quiz) -> quiz.facet.learning_engine_guid)\n quizzesSeen = _.countBy(PresentationManager.sessionHistory)\n\n workingMemory = _.uniq(_.filter(PresentationManager.sessionHistory, (guid) ->\n quizzesRemaining.hasOwnProperty(guid) && quizzesRemaining[guid] > 0\n ))\n\n # If we've saturated the working memory, let's not introduce new content\n if $scope.weightedMemoryBurden(workingMemory) >= WORKING_MEMORY_CAP\n eligibleQuizzes = _.filter(queue, (quiz) -> _.includes(workingMemory, quiz.facet.learning_engine_guid))\n else\n eligibleQuizzes = queue\n\n # If we can, filter out the most recent GUID\n if PresentationManager.sessionHistory.length > 0 && _.uniq(_.map(eligibleQuizzes, (quiz) -> quiz.facet.learning_engine_guid)).length > 1\n justSeen = _.last(PresentationManager.sessionHistory)\n eligibleQuizzes = _.filter eligibleQuizzes, (quiz) ->\n quiz.facet.learning_engine_guid != justSeen\n\n SessionSettings.log \"=== IntraSessionScheduler summary === \"\n SessionSettings.log _.keys(quizzesRemaining).length + \" quizzes remaining\"\n SessionSettings.log _.keys(quizzesSeen).length + \" quizzes seen\"\n SessionSettings.log workingMemory.length + \" working memory length\"\n SessionSettings.log eligibleQuizzes.length + \" eligible quizzes\"\n\n eligibleQuizzesByGuid = _.groupBy eligibleQuizzes, (quiz) -> quiz.facet.learning_engine_guid\n\n # Select the first quiz with a guid that hasn't been seen\n if _.difference(_.keys(eligibleQuizzesByGuid), _.keys(quizzesSeen)).length > 0\n quiz = _.find eligibleQuizzes, (quiz) ->\n _.isUndefined(quizzesSeen[quiz.facet.learning_engine_guid])\n # Already seen all the guids in the queue\n else\n # Prioritize quizzes with many variations and those that haven't been seen in a while\n scores = _.map eligibleQuizzes, (quiz) ->\n guid = quiz.facet.learning_engine_guid\n lastSeenDelta = workingMemory.length - _.indexOf(workingMemory, guid) - 1\n lastSeenModifier = [1,2,3,8,16][lastSeenDelta]\n if lastSeenDelta > 4\n lastSeenModifier = 16\n quizzesRemaining[guid] * lastSeenModifier\n\n totalScore = _.reduce(scores, (sum, i) ->\n sum + i\n , 0)\n targetScore = _.random(totalScore - 1)\n\n cumulativeScore = 0\n winningScore = 0\n quiz = _.find eligibleQuizzes, (quiz, idx) ->\n winningScore = scores[idx]\n cumulativeScore += winningScore\n cumulativeScore > targetScore\n\n SessionSettings.log \"Found a prioritized quiz with a score of: \" + winningScore\n\n SessionSettings.log \"QUIZ: \" + quiz.original_quiz_type + \"/\" + quiz.quiz_type + \", Item: \" + quiz.item.id + \", Facet: \" + quiz.facet.id\n\n quiz\n\n $scope\n])\n","learnApp.service(\"MessageService\", ['$filter', 'SessionSettings', 'ContextService', ($filter, SessionSettings, ContextService) ->\n getMessage: (progressData) ->\n\n LOWER_ITEMS_COUNT = 20\n UPPER_ITEMS_COUNT = 40\n hasLoadedAtLeastOnce = progressData.hasLoadedAtLeastOnce\n firstTimeStudy = progressData.firstTimeStudy\n memoryAggregate = progressData.memoryAggregate\n targetLevel = progressData.targetLevel\n progressDelta = progressData.progressDelta\n unstartedItemsCount = memoryAggregate.items_count - memoryAggregate.studied_items_count\n itemsInLevel1 = memoryAggregate.items_in_level?[1] || 0\n\n if SessionSettings.debug\n console.log(\"hasLoadedAtLeastOnce: \" + hasLoadedAtLeastOnce)\n console.log(\"firstTimeStudy: \" + firstTimeStudy)\n console.log(\"memoryAggregate: \")\n console.log(memoryAggregate)\n console.log(\"targetLevel: \" + targetLevel)\n console.log(\"progressDelta: \" + progressDelta)\n console.log(\"unstartedItemsCount: \" + unstartedItemsCount)\n\n if ContextService.contextType == \"study_all\"\n if hasLoadedAtLeastOnce\n if memoryAggregate.eligible_items_count > 0\n $filter(\"translate\")(\"js.learn_app_message.personal_message.study_all.in_progress\")\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.study_all.completed\")\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.study_all.begin\")\n else if memoryAggregate.progress == 1.0 # Goal reached\n $filter(\"translate\")(\"js.learn_app_message.personal_message.goal_reached\", { level: $filter(\"levelRoundDown\")(targetLevel) })\n else if firstTimeStudy #end of first session ever\n if targetLevel\n $filter(\"translate\")(\"js.learn_app_message.personal_message.first_time_with_goal\", { level: $filter(\"levelRoundDown\")(targetLevel) })\n else if unstartedItemsCount == 0\n $filter(\"translate\")(\"js.learn_app_message.personal_message.first_time_no_unstarted\")\n else if unstartedItemsCount < LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.first_time_keep_going\", { studied_items_count: memoryAggregate.studied_items_count })\n else if unstartedItemsCount >= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.first_time_solid\", { studied_items_count: memoryAggregate.studied_items_count })\n else if !hasLoadedAtLeastOnce && targetLevel <= 1\n if unstartedItemsCount && (memoryAggregate.eligible_items_count >= LOWER_ITEMS_COUNT)\n $filter(\"translate\")(\"js.learn_app_message.personal_message.welcome_back_urgent\")\n else if unstartedItemsCount && (itemsInLevel1 < UPPER_ITEMS_COUNT) && (memoryAggregate.eligible_items_count < LOWER_ITEMS_COUNT)\n $filter(\"translate\")(\"js.learn_app_message.personal_message.welcome_back_session\")\n else if unstartedItemsCount && (itemsInLevel1 >= UPPER_ITEMS_COUNT) && (memoryAggregate.eligible_items_count < LOWER_ITEMS_COUNT)\n $filter(\"translate\")(\"js.learn_app_message.personal_message.welcome_back_level1\")\n else if !unstartedItemsCount && memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.scheduled_review\", { items: memoryAggregate.eligible_items_count })\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.no_review\")\n else if hasLoadedAtLeastOnce && targetLevel <= 1 #returning\n if progressDelta == 0\n if unstartedItemsCount && memoryAggregate.eligible_items_count >= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.review_all_items\")\n else if unstartedItemsCount && (itemsInLevel1 < UPPER_ITEMS_COUNT) && memoryAggregate.eligible_items_count <= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.keep_it_up\")\n else if unstartedItemsCount && (itemsInLevel1 >= UPPER_ITEMS_COUNT) && !memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.take_a_break\")\n else if !unstartedItemsCount && !memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.take_a_break_level1\")\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.more_items_review\", { items: memoryAggregate.eligible_items_count })\n else if progressDelta > 0\n if unstartedItemsCount && (itemsInLevel1 < UPPER_ITEMS_COUNT) && memoryAggregate.eligible_items_count <= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.progress_bump\")\n else if unstartedItemsCount && (itemsInLevel1 >= UPPER_ITEMS_COUNT) && !memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.nice_work_break\")\n else if unstartedItemsCount && memoryAggregate.eligible_items_count >= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.progress_bump_urgent\")\n else if !unstartedItemsCount && !memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.strong_memory\")\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.nice_work_more_review\", { items: memoryAggregate.eligible_items_count })\n else #progress went down\n if unstartedItemsCount && memoryAggregate.eligible_items_count > LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.forgot_urgent\")\n else if unstartedItemsCount && memoryAggregate.eligible_items_count >= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.forgot_urgent\")\n else if unstartedItemsCount && (itemsInLevel1 < UPPER_ITEMS_COUNT) && memoryAggregate.eligible_items_count <= LOWER_ITEMS_COUNT\n $filter(\"translate\")(\"js.learn_app_message.personal_message.forgot_schedule\")\n else if unstartedItemsCount && (itemsInLevel1 >= UPPER_ITEMS_COUNT) && !memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.forgot_daily_study\")\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.forgot_review_daily\")\n else if !hasLoadedAtLeastOnce && targetLevel > 1\n if memoryAggregate.eligible_items_count\n $filter(\"translate\")(\"js.learn_app_message.personal_message.welcome_back_recommend\", { items: memoryAggregate.eligible_items_count })\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.no_item_review\")\n else if hasLoadedAtLeastOnce && targetLevel > 1\n if memoryAggregate.eligible_items_count && progressDelta >= 0\n $filter(\"translate\")(\"js.learn_app_message.personal_message.good_job_goal\", { level: $filter(\"levelRoundDown\")(targetLevel) })\n else if memoryAggregate.eligible_items_count && progressDelta < 0\n $filter(\"translate\")(\"js.learn_app_message.personal_message.progress_drop\")\n else if !memoryAggregate.eligible_items_count && progressDelta >= 0\n $filter(\"translate\")(\"js.learn_app_message.personal_message.good_job_strength\", { level: $filter(\"levelRoundDown\")(targetLevel) })\n else\n $filter(\"translate\")(\"js.learn_app_message.personal_message.progress_drop\")\n])\n","learnApp.service(\"MCLBuilder\", ['$rootScope', '$filter', 'DebugHelper', 'SessionSettings', ($rootScope, $filter, DebugHelper, SessionSettings) ->\n (quiz) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"MCLBuilder\", $scope)\n\n _.assignIn $scope,\n conceptType: (concept) ->\n if concept.image && $filter('presence')(concept.text_html)\n \"text-image\"\n else if concept.image\n \"image\"\n else\n \"text\"\n\n preselectDistractors: (concept, isImageMC6) ->\n numDistractors = if isImageMC6 && (concept.distractors.length > 4)\n 5\n else\n 4\n\n if concept.distractors.length < numDistractors\n console.error \"Not enough distractors to quiz MC5, this should've been dropped in the quiz replacer\"\n\n optimumType = $scope.conceptType(concept)\n\n # We like distractors with perfectly matching content, otherwise settle if they have similar content\n partitions = _.groupBy(concept.distractors, (distractor) ->\n switch $scope.conceptType(distractor)\n when optimumType\n return \"great\"\n when \"text-image\"\n return \"good\"\n when \"image\"\n if optimumType == \"text\" then \"bad\" else \"good\"\n when \"text\"\n if optimumType == \"image\" then \"bad\" else \"good\"\n )\n\n # Pad the winners while slowly lowering the bar\n distractors = []\n for type in [\"great\", \"good\", \"bad\"]\n if distractors.length < numDistractors\n distractors = distractors.concat(_.take(_.shuffle(partitions[type] || []), numDistractors - distractors.length))\n true\n\n SessionSettings.log \"Filtered down from: \" + concept.distractors.length + \" distractors down to \" + distractors.length + \" while looking for \" + optimumType\n\n _.take(_.shuffle(distractors), numDistractors)\n\n buildChoices: (concept, isImageMC6) ->\n concept.correct = true\n unless $scope.choices\n # Get enough distractors\n distractors = $scope.preselectDistractors(concept, isImageMC6)\n _.each(distractors, (distractor) -> distractor.correct = false)\n\n # Add in correct answer, and shuffle again\n $scope.choices = _.shuffle(distractors.concat([_.pick(concept, ['id', 'text_html', 'image', 'correct'])]))\n $scope.choices\n\n $scope\n])\n","learnApp.factory(\"NextUpService\", ['$rootScope', '$routeParams', 'DebugHelper', 'LibraryResource', 'SessionSettings', 'ContextService', ($rootScope, $routeParams, DebugHelper, LibraryResource, SessionSettings, ContextService) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"NextUpService\", $scope)\n\n _.assignIn $scope,\n nextUpQueue: null\n\n getNextUpQueue: ()->\n options = {}\n ContextService.loadContext().then (module) ->\n promise = LibraryResource.nextUp(options, ->\n $scope.nextUpQueue = _.reject promise.response, (module) ->\n module.items_count < 1\n )\n\n $scope\n])\n","learnApp.factory(\"OnboardingService\", ['$rootScope', '$routeParams', '$q', '$timeout', '$filter', 'DebugHelper', 'localStorageService', 'SessionSettings', 'TipsResource', 'ModalService', ($rootScope, $routeParams, $q, $timeout, $filter, DebugHelper, localStorageService, SessionSettings, TipsResource, ModalService) ->\n\n $scope = $rootScope.$new()\n DebugHelper.register(\"OnBoardingService\", $scope)\n\n _.assignIn $scope,\n screenKey: (type) ->\n \"Cerego::Onboarding::\" + type\n\n markAsSeen: (type) ->\n # mark locally and save in DB\n tip = _.find $scope.tips, [ \"attributes.slug\", type ]\n if tip\n tip.meta = {\"is-dismissed\": true}\n TipsResource.update({ tip_id: type }, { status: \"dismissed\" })\n else\n # logged out study\n $scope.tips.push({\n attributes:\n slug: type\n meta:\n \"is-dismissed\": true\n })\n\n\n showTipTypeIfNotSeen: (tipType) ->\n tip = _.find $scope.tips, [ \"attributes.slug\", tipType ]\n unless tip?.meta[\"is-dismissed\"]\n\n # old tip types are camelCase in localStorage\n camelCaseTipType = _.camelCase(tipType)\n\n # don't show onboarding if we have tips in localStorage -- instead, mark as seen in BE\n if localStorageService.get($scope.screenKey(camelCaseTipType))\n $scope.markAsSeen(tipType)\n # otherwise, show onboarding and mark as seen\n else\n $scope.markAsSeen(tipType)\n ModalService.showModal('onboarding-modal', { modalType: 'transparent', screen: tipType, description: 'This is an onboarding modal that will guide you how to use Cerego.' } )\n\n showOnboardingScreen: (step, quiz_type) ->\n SessionSettings.log(\"step: \" + step + \"quiz_type: \" + quiz_type)\n return if SessionSettings.isPreview || _.isUndefined(step)\n switch step\n when \"yield\" then $scope.showTipTypeIfNotSeen('first_time_dont_know')\n when \"recall\" then $scope.showTipTypeIfNotSeen('before_first_quiz')\n when 'incorrect_confirmation' then $scope.showTipTypeIfNotSeen('first_time_wrong')\n when 'correct_confirmation' then $scope.showTipTypeIfNotSeen('first_time_right')\n when 'study' \n if quiz_type == 'InstructionalStudy'\n $scope.showTipTypeIfNotSeen('first_time_IC')\n else\n $scope.showTipTypeIfNotSeen('first_foundational_item')\n\n initialize: () ->\n unless $scope.deferred\n $scope.deferred = $q.defer()\n TipsResource.index { 'filter[category]': 'onboarding' }\n , (success) ->\n $scope.tips = success.data\n $scope.deferred.resolve($scope.tips)\n # logged out\n , (failure) ->\n $scope.tips = []\n $scope.deferred.reject()\n $scope.deferred.promise\n\n $scope\n])\n","learnApp.factory(\"PresentationManager\", ['$rootScope', '$q', '$routeParams', '$analytics', 'DebugHelper', 'localStorageService', 'ContextService', 'LtiService', 'SessionSettings', 'SetStudyResource', 'SeriesStudyResource', 'StudyAllResource', 'UserManager', 'AmplitudeService', ($rootScope, $q, $routeParams, $analytics, DebugHelper, localStorageService, ContextService, LtiService, SessionSettings, SetStudyResource, SeriesStudyResource, StudyAllResource, UserManager, AmplitudeService) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"PresentationManager\", $scope)\n flushThreshold = 5\n\n switch ContextService.contextType\n when \"set\"\n $scope.key = \"presentations_set_\" + ContextService.contextId\n when \"series\"\n $scope.key = \"presentations_series_\" + ContextService.contextId\n else\n $scope.key = \"presentations_study_all\"\n\n _.assignIn $scope,\n presentations: localStorageService.get($scope.key) || []\n sessionStats:\n numCorrect: 0\n numFading: 0\n numNew: 0\n numStudyFacets: null\n uploadInProgress: false\n previousSessionStats: {} #record of how many new/fading we have just studied\n sessionHistory: [] # record of which guids have come up this session\n\n resetSessionStats: () ->\n $scope.sessionStats = {\n numCorrect: 0\n numFading: 0\n numNew: 0\n numStudyFacets: null\n firstPerformedQuiz: false\n }\n setNumStudyFacets: (num) ->\n $scope.sessionStats.numStudyFacets = num\n\n record: (presentations) ->\n for presentation in presentations\n if _.includes [\"Seen\", \"Correct\"], presentation.quiz_result\n $scope.sessionStats.numCorrect += 1\n\n if !_.includes($scope.sessionHistory, presentation.learning_engine_guid)\n if presentation.is_new_memory\n $scope.sessionStats.numNew += 1\n else\n $scope.sessionStats.numFading +=1\n $scope.sessionHistory.push(presentation.learning_engine_guid)\n\n if !SessionSettings.isPreview && !SessionSettings.noSave\n SessionSettings.log \"Recording presentations:\"\n SessionSettings.log presentations\n\n if !$scope.sessionStats.firstPerformedQuiz\n $scope.sessionStats.firstPerformedQuiz = true\n $analytics.eventTrack('first_quiz_of_study_session')\n AmplitudeService.logEvent('first_quiz_of_study_session', { learn_app_version: 3 })\n\n $scope.presentations = $scope.presentations.concat(presentations)\n $scope.uploadStudyData() if $scope.presentations.length > flushThreshold\n\n # Attempt to upload study data. If an upload is in progress, tell it wait and try again when finished.\n # Next try uses same promise; when no more calls are queued up, resolve and clear out that promise\n\n markUploadCompleted: ->\n $scope.uploadInProgress = false\n if $scope.retryOnCompletion\n $scope.retryOnCompletion = false\n $scope.uploadStudyData()\n else\n $scope.deferred.resolve()\n $scope.deferred = null\n\n # Tries to upload the study data\n # Forces a dependence on UserManager.loadUser\n uploadStudyData: ->\n if $scope.uploadInProgress && $scope.presentations.length > 0\n $scope.retryOnCompletion = true\n else\n unless $scope.deferred\n $scope.deferred = $q.defer()\n\n UserManager.loadUser().then (user) ->\n # called on first study -- if there is nothing uploaded/to upload, carry on to quiz or summary\n if $scope.presentations.length == 0 && !$scope.uploadInProgress\n $scope.markUploadCompleted()\n # allow logged out user study\n else if !user\n $scope.markUploadCompleted()\n else if $scope.presentations.length > 0 && user\n $scope.uploadInProgress = true\n SessionSettings.log \">>> Found \" + $scope.presentations.length + \" presentations requiring an upload\"\n\n # wipe presentations array so we never attempt multiple uploads,\n # add them back for retry on failure\n presentationsToUpload = $scope.presentations\n $scope.presentations = []\n\n params =\n item_count: SessionSettings.sessionSize\n presentations: JSON.stringify(presentationsToUpload)\n api_key: CeregoAPI.key\n\n if LtiService.isLtiOutcomeRequest\n _.assignIn params,\n lti_outcome_hash: LtiService.ltiOutcomeHash\n lti_client_id: LtiService.ltiClientName\n group_id: LtiService.ltiGroupId\n\n switch ContextService.contextType\n when \"set\"\n params.id = ContextService.contextId\n resource = SetStudyResource\n when \"series\"\n params.id = ContextService.contextId\n resource = SeriesStudyResource\n else\n resource = StudyAllResource\n\n resource.save(params).$promise.then (success) ->\n $scope.markUploadCompleted()\n , (error) ->\n # Don't let bad presentations ruin our day\n $scope.presentations = presentationsToUpload.concat($scope.presentations)\n $scope.markUploadCompleted()\n\n $scope.deferred.promise\n\n $scope.$watchCollection \"presentations\", ->\n localStorageService.set $scope.key, $scope.presentations\n\n $scope\n])\n","learnApp.factory(\"SessionLimits\", ['$rootScope', '$routeParams', 'DebugHelper', ($rootScope, $routeParams, DebugHelper) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"SessionLimits\", $scope)\n\n #Match with constants on backend in CeregoStudyService\n MAX_REVIEW_SIZE = 50\n MAX_REVIEW_WIGGLE_ROOM = 5\n\n _.assignIn $scope,\n cappedGuids: (guids) ->\n if guids.length > MAX_REVIEW_SIZE + MAX_REVIEW_WIGGLE_ROOM\n return guids.slice(0, MAX_REVIEW_SIZE)\n else return guids\n\n cappedSessionSize: (itemCount) ->\n if itemCount > MAX_REVIEW_SIZE + MAX_REVIEW_WIGGLE_ROOM\n return MAX_REVIEW_SIZE\n else return itemCount\n\n\n $scope\n])\n","learnApp.factory(\"SessionSettings\", ['$rootScope', '$routeParams', '$filter', '$window', 'DebugHelper', 'localStorageService', 'Cheating', 'UserManager', 'LearnAppConstants', 'LtiService', 'uuid', ($rootScope, $routeParams, $filter, $window, DebugHelper, localStorageService, Cheating, UserManager, LearnAppConstants, LtiService, uuid) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"SessionSettings\", $scope)\n\n _.assignIn $scope,\n inQuiz: !!$window.location.href.match(\"quiz\")\n isPreview: !!$routeParams.preview\n debug: !!$routeParams.debug\n debugIME: !!$routeParams.debugIME\n forceFacet: $routeParams.forceFacet && parseInt($routeParams.forceFacet)\n forceItem: $routeParams.forceItem && parseInt($routeParams.forceItem)\n forceQuiz: $routeParams.forceQuiz\n forceStep: $routeParams.forceStep\n forceSplash: !!$routeParams.forceSplash\n forceSignUp: !!$routeParams.signUp\n forceScheduler: !!$routeParams.forceScheduler\n groupId: $routeParams.groupId\n noSave: !!$routeParams.noSave\n levelGoal: $routeParams.levelGoal\n returnURL: $routeParams.returnURL\n embed: $routeParams.embed || !!LtiService.ltiClientId\n fromV3Learn: !!$routeParams.v3StudyType\n contextType: $routeParams.contextType\n contextId: $routeParams.contextId\n setIds: _.castArray($routeParams.setId || $routeParams['setIds[]'])\n skipSessionSelect: $routeParams.skipSessionSelect\n studySessionId: $routeParams.studySessionId || uuid.v4()\n v3StudyType: $routeParams.v3StudyType\n deloitteDemo: $routeParams.deloitte_demo\n isBBC: LtiService.isBBC\n\n logOutput: \"\"\n log: (text) ->\n if $scope.debug\n console.log text\n $scope.logOutput += \"\\n\" + text\n\n reset: () ->\n $scope.fromV3Learn= !!$routeParams.v3StudyType\n $scope.contextType= $routeParams.contextType\n $scope.contextId= $routeParams.contextId\n $scope.setIds= _.castArray($routeParams.setId || $routeParams['setIds[]'])\n $scope.skipSessionSelect= $routeParams.skipSessionSelect\n $scope.studySessionId= $routeParams.studySessionId || $scope.studySessionId\n $scope.v3StudyType= $routeParams.v3StudyType\n\n $scope.fromSetView = $scope.isPreview && $scope.fromSetView\n if $routeParams.eligibleOnly\n $scope.sessionSize = 'eligible'\n\n $scope.$watch \"sessionSize\", (newVal, oldVal) ->\n if newVal != oldVal\n localStorageService.set \"sessionSize\", $scope.sessionSize\n\n loadUserMethod = if $routeParams.deloitte_demo then UserManager.loadDeloitteUser(\"learn\") else UserManager.loadUser()\n loadUserMethod.then (user) ->\n $scope.sessionSize = if user.id then (localStorageService.get(\"sessionSize\") || LearnAppConstants.DEFAULT_SESSION_SIZE) else LearnAppConstants.DEFAULT_SESSION_SIZE\n\n $scope\n])\n","import correct_mp3 from \"sounds/v2/modules/learn-app/correct.mp3\"\nimport done_mp3 from \"sounds/v2/modules/learn-app/done.mp3\"\nimport incorrect_mp3 from \"sounds/v2/modules/learn-app/incorrect.mp3\"\nimport recall_mp3 from \"sounds/v2/modules/learn-app/recall.mp3\"\n\n\nlearnApp.factory(\"SoundFXManager\", ['$rootScope', '$q', '$timeout', 'DebugHelper', 'SessionSettings', 'UserSettings', ($rootScope, $q, $timeout, DebugHelper, SessionSettings, UserSettings) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"SoundFXManager\", $scope)\n\n _.assignIn $scope,\n sounds:\n correct: correct_mp3\n done: done_mp3\n incorrect: incorrect_mp3\n recall: recall_mp3\n\n play: (sound) ->\n deferred = $q.defer()\n if $scope.sounds.hasOwnProperty(sound)\n url = $scope.sounds[sound]\n shouldPlay = UserSettings.shouldPlayEffectAudio()\n else\n url = sound\n shouldPlay = UserSettings.settings.contentAudio\n\n if shouldPlay\n $timeout () ->\n SessionSettings.log \"Playing Audio: \" + url\n $.playSound url, finished: deferred.resolve, volume: UserSettings.settings.effectVolume\n else\n deferred.resolve()\n\n deferred.promise\n\n stop: $.stopSounds\n\n $scope\n])\n","learnApp.service(\"SummaryHelper\", ['$rootScope', '$routeParams', '$q', 'AssignmentDetailsService', 'DebugHelper', 'ContextService', 'UserManager', 'MemoryStorage', 'SessionSettings', 'PresentationManager', 'LtiService', ($rootScope, $routeParams, $q, AssignmentDetailsService, DebugHelper, ContextService, UserManager, MemoryStorage, SessionSettings, PresentationManager, LtiService) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"SummaryHelper\", $scope)\n\n _.assignIn $scope,\n loadPaths: ->\n $scope.pathParams = {}\n newMemoryCount = PresentationManager.previousSessionStats.numNew\n fadingMemoryCount = PresentationManager.previousSessionStats.numFading\n numStudied = newMemoryCount + fadingMemoryCount\n if SessionSettings.setIds?[0] && numStudied > 0 && numStudied == PresentationManager.previousSessionStats.numStudyFacets\n $scope.pathParams =\n 'newMemoryCount': newMemoryCount\n 'fadingMemoryCount': fadingMemoryCount\n 'setIds[]': SessionSettings.setIds\n $scope.homePath = Packs.iKnowRoutes.v3_dashboard_path()\n switch ContextService.contextType\n when \"set\"\n $scope.quizPath = Packs.iKnowRoutes.quiz_v2_set_learn_path(ContextService.contextId)\n $scope.assignedGoalPath = Packs.iKnowRoutes.assigned_goal_v2_set_learn_path(ContextService.contextId)\n $scope.summaryPath = Packs.iKnowRoutes.v2_set_learn_path(ContextService.contextId)\n if LtiService.isBBC\n $scope.summaryPath = Packs.iKnowRoutes.v2_set_learn_path(ContextService.contextId, isBBC: true)\n $scope.signUpPath = Packs.iKnowRoutes.v2_set_learn_path(ContextService.contextId, signUp: true)\n when \"series\"\n $scope.quizPath = Packs.iKnowRoutes.quiz_v2_series_learn_path(ContextService.contextId)\n $scope.assignedGoalPath = Packs.iKnowRoutes.assigned_goal_v2_series_learn_path(ContextService.contextId)\n $scope.summaryPath = Packs.iKnowRoutes.v2_series_learn_path(ContextService.contextId)\n $scope.signUpPath = Packs.iKnowRoutes.v2_series_learn_path(ContextService.contextId, signUp: true)\n else\n $scope.quizPath = Packs.iKnowRoutes.quiz_v2_learn_path()\n $scope.assignedGoalPath = null # NO LTI ON STUDY ALL\n $scope.summaryPath = Packs.iKnowRoutes.v2_learn_path()\n $scope.signUpPath = null # MUST BE LOGGED IN\n\n reset: ->\n SessionSettings.inQuiz = false\n $scope.loadPaths()\n AssignmentDetailsService.reset()\n # don't reset memorystorage on LASS\n # TODO: don't reset memorystorage anywhere with study all/series/course LASS\n unless ContextService.contextType == 'set'\n MemoryStorage.reset()\n\n $scope.reset()\n\n $scope\n])\n","learnApp.factory(\"StudyQueue\", ['$rootScope', '$q', '$window', '$filter', '$timeout', 'DebugHelper', 'SessionSettings', 'SetStudyResource', 'SeriesStudyResource', 'StudyAllResource', 'ContentService', 'ContextService', 'StudyQueueCompressor', 'IntraSessionScheduler', 'QuizReplacer', 'PresentationManager', 'UserManager', ($rootScope, $q, $window, $filter, $timeout, DebugHelper, SessionSettings, SetStudyResource, SeriesStudyResource, StudyAllResource, ContentService, ContextService, StudyQueueCompressor, IntraSessionScheduler, QuizReplacer, PresentationManager, UserManager) ->\n $scope = $rootScope.$new()\n\n DebugHelper.register(\"StudyQueue\", $scope)\n\n CACHE_GENERATION_TIMEOUT_MSEC = 5 * 1000\n MAX_CACHE_GENERATION_TIMEOUT_MSEC = 30 * 1000\n\n _.assignIn $scope,\n queue: []\n forceStudy: false\n progress: 0\n totalStudySessionSize: 0\n\n generateQueueFromStudy: (study_facets) ->\n # Flatten out the facets with quiz sequences into individual quizzes, order matters!\n\n quizzes = []\n for facet in study_facets\n for quiz_type in facet.quiz_sequence\n if facet.item.template_type != \"instructional_content\"\n content = ContentService.findContentByGuid(facet.learning_engine_guid)\n if content.item && content.facet\n quizzes.push\n item: content.item\n facet: content.facet\n quiz_type: quiz_type\n is_new_memory: facet.is_new_memory\n else\n quizzes.push\n item: facet.item\n facet: facet\n quiz_type: quiz_type\n is_new_memory: facet.is_new_memory\n else\n quizzes.push\n item: facet.item\n facet: facet\n quiz_type: quiz_type\n is_new_memory: facet.is_new_memory\n\n $scope.push(quizzes)\n\n # NOTE: Don't call this directly, it's potentially recursive and meant to be called by loadStudyData only\n fetchStudy: (deferred) ->\n UserManager.loadUser().then (user) ->\n SessionSettings.log \">>> Requesting study queue\"\n params =\n include_items: true\n\n if SessionSettings.v3StudyType\n if SessionSettings.studySessionId\n params['study_session_id'] = SessionSettings.studySessionId\n params['v3_study_type'] = SessionSettings.v3StudyType\n params['group_id'] = SessionSettings.groupId\n else\n params['item_count'] = SessionSettings.sessionSize # item_count only matters for v2 study service\n\n params.anonymous = true if !user\n\n resource = switch ContextService.contextType\n when \"set\"\n params.id = ContextService.contextId\n\n if SessionSettings.isPreview\n if SessionSettings.forceFacet\n params.facetPreviewId = SessionSettings.forceFacet\n else if SessionSettings.forceItem\n params.itemPreviewId = SessionSettings.forceItem\n else\n params.setPreviewId = ContextService.contextId\n\n SetStudyResource\n when \"series\"\n params.id = ContextService.contextId\n SeriesStudyResource\n else\n StudyAllResource\n\n resource.query(params).$promise.then (success) ->\n if success.meta.status == 202\n deferred.notify(success)\n SessionSettings.log \"!!! Cache generation in progress, will retry in \" + CACHE_GENERATION_TIMEOUT_MSEC / 1000 + \"sec\"\n $timeout ->\n CACHE_GENERATION_TIMEOUT_MSEC = _.min [CACHE_GENERATION_TIMEOUT_MSEC*2, MAX_CACHE_GENERATION_TIMEOUT_MSEC]\n $scope.fetchStudy(deferred)\n , CACHE_GENERATION_TIMEOUT_MSEC\n else\n deferred.resolve(success.response)\n\n , deferred.reject\n , deferred.notify\n\n # Returns a promise, with study facets as parameter\n # Forces a dependence on loadUser and tries to uploadStudyData\n # NOTE: Don't call this directly unless you actually need to force a hit on study#create\n loadStudyData: ->\n deferred = $q.defer()\n\n PresentationManager.uploadStudyData().then ->\n $scope.fetchStudy(deferred)\n , deferred.reject\n , deferred.notify\n\n deferred.promise\n\n # Call this in between study sessions to force a rebuild\n reset: ->\n $scope.deferred = null\n\n PresentationManager.previousSessionStats = _.clone(PresentationManager.sessionStats)\n PresentationManager.resetSessionStats()\n $scope.queue = []\n $scope.progress = 0\n PresentationManager.sessionHistory = []\n\n # Returns a promise, with queue as parameter\n loadQueue: ->\n unless $scope.deferred\n $scope.deferred = $q.defer()\n\n if $scope.queue.length > 0\n $scope.deferred.resolve($scope.queue)\n else\n $scope.loadStudyData().then (study_facets) ->\n ContentService.reset()\n ContentService.loadContent(study_facets).then ->\n PresentationManager.setNumStudyFacets(study_facets.length)\n $scope.generateQueueFromStudy(study_facets)\n if $scope.queue.length < 1 && study_facets.length > 0\n debugData = _.map study_facets, (facet) ->\n \"facet_id:\" + facet.facet_id + \" quiz_sequence:\" + facet.quiz_sequence.join(\",\")\n $scope.deferred.resolve($scope.queue)\n , $scope.deferred.reject\n , $scope.deferred.notify\n\n $scope.deferred.promise\n\n # Takes either an array of quizzes, or a single quiz, runs substitutions, then runs the intra session scheduler once\n push: (quizOrQuizzes, atFront) ->\n # Push at end\n for quiz in [].concat(quizOrQuizzes)\n if SessionSettings.forceQuiz\n quiz.quiz_type = SessionSettings.forceQuiz\n\n replacedQuiz = QuizReplacer.replace(quiz)\n if replacedQuiz\n if atFront\n SessionSettings.log \"Pushing at front of queue: \" + replacedQuiz.quiz_type\n $scope.forceStudy = true\n $scope.queue.unshift(replacedQuiz)\n else\n SessionSettings.log \"Pushing at back of queue: \" + replacedQuiz.quiz_type\n $scope.queue.push(replacedQuiz)\n else\n SessionSettings.log \"Dropping unreplaceable quiz: \"\n if SessionSettings.debug\n console.log quiz\n else\n SessionSettings.log \"QUIZ: \" + quiz.original_quiz_type + \"/\" + quiz.quiz_type + \", Item: \" + quiz.item.id + \", Facet: \" + quiz.facet.id\n\n if QuizReplacer.skippedFacets\n $window.alert($filter('translate')(\"js.learn_app_message.skipped_facets\"))\n $scope.queue = StudyQueueCompressor($scope.queue)\n\n pop: ->\n # Pop from front\n quiz = IntraSessionScheduler.bestQuiz($scope.queue, $scope.forceStudy)\n $scope.queue = _.without($scope.queue, quiz)\n $scope.forceStudy = false\n\n if quiz\n SessionSettings.log \"### SHOWING: \" + quiz.quiz_type + \" for facet: \" + quiz.facet?.id\n quiz\n\n updateProgress: ->\n # can grow as we get items wrong\n $scope.totalStudySessionSize = $scope.queue.length + PresentationManager.sessionStats.numCorrect + 1 # for the current quiz\n newProgress = if $scope.totalStudySessionSize < 1 then 0 else Math.min(Math.floor(PresentationManager.sessionStats.numCorrect * 100.0 / $scope.totalStudySessionSize), 100)\n $scope.progress = _.max([newProgress, $scope.progress]) # don't let progress go down\n\n peek: ->\n $scope.queue[0]\n\n $scope\n])\n","declare const APIRoutes: v3.service.AppRoutes;\n\nangular.module('cerego.common').factory('V3CourseItemsResource', [\n '$resource',\n ($resource: ng.resource.IResourceService) =>\n $resource(\n '',\n {},\n {\n query: {\n method: 'GET',\n isArray: false,\n url: APIRoutes.v3_course_items_path(':course_id'),\n params: {\n course_id: '@course_id'\n }\n }\n }\n )\n]);\n","learnApp.service(\"StudyQueueCompressor\", ['$rootScope', 'SessionSettings', ($rootScope, SessionSettings) ->\n (study_queue) ->\n # TODO: implement me\n SessionSettings.log \"StudyQueueCompressor called with a queue of: \" + study_queue.length\n\n study_queue = _.reject study_queue, (quiz) ->\n quiz.original_quiz_type == \"Study\" &&\n quiz.item.study_type == \"none\"\n\n isNotesFirstStudy = (quiz) ->\n quiz.original_quiz_type == \"Study\" && quiz.item.study_type == \"notes\" && quiz.item.note_type == 'item'\n\n study_queue = _.uniqBy study_queue, (quiz) ->\n if quiz.quiz_type == \"PassageStudy\" || quiz.quiz_type == \"SequenceStudy\" || isNotesFirstStudy(quiz) || quiz.quiz_type == \"InstructionalStudy\" || quiz.quiz_type == \"ApplicationQuestionSelect\" || quiz.item.template_type == \"question_and_answer\"\n quiz.quiz_type + \"|\" + quiz.item.id\n else\n quiz.quiz_type + \"|\" + quiz.facet.id + \"|\" + quiz.item.id\n\n SessionSettings.log \"StudyQueueCompressor reduced queue down to: \" + study_queue.length\n\n study_queue\n])\n","learnApp.service(\"QuizReplacer\", ['$rootScope', '$filter', 'SessionSettings', 'UserSettings', 'IMESupportHelper', ($rootScope, $filter, SessionSettings, UserSettings, IMESupportHelper) ->\n $scope = $rootScope.$new()\n\n $scope.allSupportedLanguages = IMESupportHelper.getAllSupportedLanguages()\n\n hasText = (concept) ->\n concept && $filter('presence')(concept.text_html)\n\n hasSound = (object) ->\n object && object.sound\n\n hasImage = (object) ->\n object && object.image\n\n hasTransliteration = (object) ->\n object && $filter('presence')(object.transliteration_html)\n\n hasEnoughDistractors = (concept, numDistractors = 4) ->\n return if !concept\n (concept.distractors || []).length >= numDistractors\n\n hasEnoughTransliterationDistractors = (facet) ->\n (facet.transliteration_distractors || []).length >= 4\n\n hasEnoughNodes = (region) ->\n region.split(\" \").length > 2\n\n hasSentence = (item) ->\n (item.sentences || []).length > 0\n\n hasSentenceSound = (item) ->\n hasSentence(item) && _.some item.sentences, hasSound\n\n hasIME = (concept) ->\n _.includes($scope.allSupportedLanguages, concept.language.code)\n\n allowedQuizTypes = (quiz) ->\n if quiz.item.template_type == \"image_map\"\n quiz.facet.quiz_settings.enabled = _.union(quiz.facet.quiz_settings.enabled, [\"region_multiple_choice_limited\"]) if _.includes(quiz.facet.quiz_settings.enabled, \"multiple_choice_limited\")\n quiz.facet.quiz_settings.enabled = _.union(quiz.facet.quiz_settings.enabled, [\"region_fill_in_the_blank\"]) if _.includes(quiz.facet.quiz_settings.enabled, \"fill_in_the_blank\")\n\n if quiz.item.template_type == \"instructional_content\"\n return [\"Study\"]\n else\n quiz.facet.quiz_settings ||= {}\n [\"Study\"].concat _.map(quiz.facet.quiz_settings.enabled, (quiz_type) -> _.upperFirst(_.camelCase(quiz_type)))\n\n $scope.demoteQuiz = (quiz) ->\n quiz.invalid_quizzes ||= []\n quiz.invalid_quizzes.push quiz.quiz_type\n allowed_quizzes = _.difference(allowedQuizTypes(quiz), quiz.invalid_quizzes)\n\n ranked_replacements = switch quiz.item.template_type\n when \"association_collection\", \"pattern\", \"instructional_content\"\n switch quiz.quiz_type\n when \"MultipleChoiceLimited\", \"FillInTheBlank\"\n # Association Collection Forward\n [\"MultipleChoiceLimited\", \"FillInTheBlank\", \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"]\n when \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"\n # Association Collection Reverse\n [\"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\", \"MultipleChoiceLimited\", \"FillInTheBlank\"]\n else\n []\n when \"vocabulary\"\n switch quiz.quiz_type\n when \"MultipleChoiceLimited\", \"FillInTheBlank\"\n # Vocabulary Forward\n [\"MultipleChoiceLimited\", \"FillInTheBlank\", \"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\", \"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"ReverseTransliterationMultipleChoiceLimited\", \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"]\n when \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"\n # Vocabulary Reverse\n [\"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\", \"ReverseTransliterationMultipleChoiceLimited\", \"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\", \"MultipleChoiceLimited\", \"FillInTheBlank\"]\n when \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\"\n # Vocabulary Sentence\n [\"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\", \"MultipleChoiceLimited\", \"FillInTheBlank\", \"ReverseTransliterationMultipleChoiceLimited\", \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"]\n when \"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\"\n # Vocabulary Audio\n [\"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\", \"MultipleChoiceLimited\", \"FillInTheBlank\", \"ReverseTransliterationMultipleChoiceLimited\", \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"]\n when \"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\"\n # Vocabulary Transliteration Forward\n [\"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\", \"ReverseTransliterationMultipleChoiceLimited\", \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"MultipleChoiceLimited\", \"FillInTheBlank\", \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\"]\n when \"ReverseTransliterationMultipleChoiceLimited\"\n # Vocabulary Transliteration Reverse\n [\"ReverseTransliterationMultipleChoiceLimited\", \"TransliterationMultipleChoiceLimited\", \"TransliterationFillInTheBlank\", \"SentenceMultipleChoiceLimited\", \"SentenceFillInTheBlank\", \"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\", \"ReverseMultipleChoiceLimited\", \"ReverseFillInTheBlank\", \"MultipleChoiceLimited\", \"FillInTheBlank\"]\n else\n []\n when \"cloze_container\"\n switch quiz.quiz_type\n when \"ClozeFillInTheBlank\", \"ClozeMultipleChoiceLimited\"\n # Cloze Forward\n [\"ClozeMultipleChoiceLimited\", \"ClozeFillInTheBlank\"]\n else\n []\n when \"image_map\"\n switch quiz.quiz_type\n when \"RegionMultipleChoiceLimited\", \"RegionFillInTheBlank\"\n [\"RegionMultipleChoiceLimited\", \"RegionFillInTheBlank\", \"RegionReverseMultipleChoice\", \"RegionReverseClickInTheDark\"]\n when \"RegionReverseMultipleChoice\", \"RegionReverseClickInTheDark\"\n [\"RegionReverseMultipleChoice\", \"RegionReverseClickInTheDark\", \"RegionMultipleChoiceLimited\", \"RegionFillInTheBlank\"]\n else\n []\n when \"sequence\"\n switch quiz.quiz_type\n when \"SequenceInjection\"\n [\"SequenceInjection\"]\n else\n []\n when \"application_question\"\n [\"ApplicationQuestionSelect\"]\n when \"question_and_answer\"\n [\"QuestionAndAnswerSelect\"]\n else\n throw new Error(\"Unknown item type in quiz replacer: \" + quiz.item.template_type)\n\n best_replacement = _.intersection(allowed_quizzes, ranked_replacements)[0]\n SessionSettings.log \"Demoting \" + quiz.quiz_type + \" to \" + best_replacement\n best_replacement && (quiz.quiz_type = best_replacement)\n\n $scope.replace = (quiz) ->\n # TODO: plug into the QuizService\n\n quiz.original_quiz_type = quiz.quiz_type\n\n valid = switch quiz.item.template_type\n when \"association_collection\", \"vocabulary\"\n switch quiz.quiz_type\n when \"Study\"\n true\n when \"MultipleChoiceLimited\"\n hasEnoughDistractors(quiz.facet.association.concept) && (hasText(quiz.facet.association.concept) || hasImage(quiz.facet.association.concept))\n when \"ReverseMultipleChoiceLimited\"\n hasEnoughDistractors(quiz.facet.anchor.concept) && (hasText(quiz.facet.anchor.concept) || hasImage(quiz.facet.anchor.concept))\n when \"FillInTheBlank\"\n hasText(quiz.facet.association.concept) && UserSettings.settings.spellingQuestions && hasIME(quiz.facet.association.concept)\n when \"ReverseFillInTheBlank\"\n if hasTransliteration(quiz.facet)\n quiz.quiz_type = \"ReverseTransliterationFillInTheBlank\" # front end only\n UserSettings.settings.spellingQuestions && hasIME(quiz.facet.anchor.concept)\n else\n hasText(quiz.facet.anchor.concept) && UserSettings.settings.spellingQuestions && hasIME(quiz.item[quiz.item.template_type].concept)\n when \"ListeningMultipleChoiceLimited\"\n quiz.quiz_type = \"ListeningMultipleChoiceLimited\"\n hasSound(quiz.facet.anchor.concept) && UserSettings.settings.audioQuestions && UserSettings.settings.contentAudio\n when \"SentenceMultipleChoiceLimited\"\n hasSentence(quiz.item) && hasEnoughDistractors(quiz.facet.anchor.concept)\n when \"TransliterationMultipleChoiceLimited\"\n hasTransliteration(quiz.facet) && hasEnoughTransliterationDistractors(quiz.facet)\n when \"ReverseTransliterationMultipleChoiceLimited\"\n hasTransliteration(quiz.facet) && hasEnoughDistractors(quiz.facet.anchor.concept)\n when \"SentenceFillInTheBlank\"\n hasSentence(quiz.item) && UserSettings.settings.spellingQuestions && hasIME(quiz.item[quiz.item.template_type].concept)\n when \"TransliterationFillInTheBlank\"\n hasTransliteration(quiz.facet) && UserSettings.settings.spellingQuestions\n when \"DictationFillInTheBlank\"\n hasSentenceSound(quiz.item) && UserSettings.settings.spellingQuestions && UserSettings.settings.audioQuestions && UserSettings.settings.contentAudio && hasIME(quiz.item[quiz.item.template_type].concept)\n else\n false\n when \"cloze_container\"\n switch quiz.quiz_type\n when \"Study\"\n quiz.quiz_type = \"PassageStudy\" # front end only\n true\n when \"ClozeMultipleChoiceLimited\"\n hasEnoughDistractors(quiz.facet.association.concept)\n when \"ClozeFillInTheBlank\"\n hasText(quiz.facet.association.concept) && UserSettings.settings.spellingQuestions\n else\n false\n when \"image_map\"\n switch quiz.quiz_type\n when \"Study\"\n quiz.quiz_type = \"RegionStudy\" # front end only\n true\n when \"MultipleChoiceLimited\"\n quiz.quiz_type = \"RegionMultipleChoiceLimited\" # front end only\n hasEnoughDistractors(quiz.facet.association.concept)\n when \"RegionMultipleChoiceLimited\"\n quiz.original_quiz_type = \"MultipleChoiceLimited\"\n hasEnoughDistractors(quiz.facet.association.concept)\n when \"RegionReverseMultipleChoice\"\n quiz.item.image_map.facets.length > 1\n when \"FillInTheBlank\"\n quiz.quiz_type = \"RegionFillInTheBlank\" # front end only\n hasText(quiz.facet.association.concept) && UserSettings.settings.spellingQuestions\n when \"RegionReverseClickInTheDark\"\n hasEnoughNodes(quiz.facet.anchor.image_map_node.region_polygon)\n else\n false\n when \"sequence\"\n switch quiz.quiz_type\n when \"Study\"\n quiz.quiz_type = \"SequenceStudy\" # front end only\n true\n when \"SequenceInjection\"\n true\n else\n false\n when \"pattern\"\n switch quiz.quiz_type\n when \"Study\"\n quiz.quiz_type = \"PatternStudy\" # front end only\n quiz.item.annotations.length > 0\n when \"MultipleChoiceLimited\"\n hasEnoughDistractors(quiz.facet.association.concept)\n when \"ReverseMultipleChoiceLimited\"\n hasEnoughDistractors(quiz.facet.anchor.concept)\n when \"FillInTheBlank\"\n hasText(quiz.facet.association.concept) && UserSettings.settings.spellingQuestions\n when \"ReverseFillInTheBlank\"\n hasText(quiz.facet.anchor.concept) && UserSettings.settings.spellingQuestions\n when \"application_question\"\n switch quiz.quiz_type\n when \"ApplicationQuestionSelect\"\n true\n else\n false\n when \"question_and_answer\"\n switch quiz.quiz_type\n when \"QuestionAndAnswerSelect\"\n true\n else\n false\n when \"instructional_content\"\n switch quiz.quiz_type\n when \"Study\"\n quiz.quiz_type = \"InstructionalStudy\"\n else\n false\n\n allowed_quizzes = allowedQuizTypes(quiz)\n if allowed_quizzes.length > 1\n if !UserSettings.settings.spellingQuestions\n allowed_quizzes = _.filter(allowed_quizzes, (quiz_type) -> !quiz_type.match(\"FillInTheBlank\"))\n if !UserSettings.settings.audioQuestions\n audio_types = [\"ListeningMultipleChoiceLimited\", \"DictationFillInTheBlank\"]\n allowed_quizzes = _.filter(allowed_quizzes, (quiz_type) -> !_.includes(audio_types, quiz_type))\n $scope.skippedFacets = (allowed_quizzes.length == 1)\n\n if _.includes(allowedQuizTypes(quiz),quiz.original_quiz_type) && valid\n $scope.replaceItemStudyType(quiz)\n quiz\n else if SessionSettings.forceQuiz || SessionSettings.forceFacet || !$scope.demoteQuiz(quiz)\n # Drop if we'ry trying to force a quiz or we can't demote further\n false\n else\n # Otherwise demote and recurse\n $scope.replace(quiz)\n\n $scope.replaceItemStudyType = (quiz) ->\n if (quiz.item.template_type != \"instructional_content\") && (quiz.item.study_type == \"notes\" && (!_.has(quiz.item, \"annotations\") || quiz.item.annotations.length == 0) && (!_.has(quiz.facet, \"annotations\") || quiz.facet.annotations.length == 0))\n quiz.item.study_type = \"default\"\n\n $scope\n])\n","learnApp.factory(\"QuizTimer\", ['$rootScope', '$timeout', 'DebugHelper', 'SessionSettings', ($rootScope, $timeout, DebugHelper, SessionSettings) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"QuizTimer\", $scope)\n\n AUTO_PAUSE_TIMEOUT_MSEC = 5*60*1000\n MAX_TIME_MSEC = 10*60*1000\n\n _.assignIn $scope,\n initialize: ->\n $scope.touch()\n $scope.timers =\n study: 0\n recall: 0\n quiz: 0\n confirmation: 0\n\n finalize: (facets = 1) ->\n $scope.pause()\n study_time_millis = $scope.timers.study + _.reduce(_.values($scope.timers), (memo, num) ->\n memo + num\n , 0)\n if $scope.step == \"study\"\n {\n recall_time_millis: null\n quiz_time_millis: null\n confirmation_time_millis: null\n study_time_millis: Math.min(Math.round(study_time_millis/facets), MAX_TIME_MSEC)\n occurred_at: $scope.getCurrentTime()\n }\n else\n {\n recall_time_millis: Math.min($scope.timers.recall, MAX_TIME_MSEC)\n quiz_time_millis: Math.min($scope.timers.quiz, MAX_TIME_MSEC)\n confirmation_time_millis: Math.min($scope.timers.confirmation, MAX_TIME_MSEC)\n study_time_millis: Math.min(Math.round(study_time_millis/facets), MAX_TIME_MSEC)\n occurred_at: $scope.getCurrentTime()\n }\n\n\n setStep: (step) ->\n return if !step\n step = 'confirmation' if step == 'correct_confirmation' || step == 'incorrect_confirmation'\n $scope.pause() if !$scope.isPaused()\n $scope.step = step\n $scope.unpause()\n\n isPaused: ->\n !$scope.startedAt\n\n pause: ->\n if $scope.isPaused()\n console.error \"Tried to pause a paused timer\"\n return\n\n if $scope.step\n old_timers = _.clone($scope.timers)\n $scope.timers[$scope.step] = $scope.timers[$scope.step] + Math.abs(new Date() - $scope.startedAt)\n\n $scope.startedAt = null\n\n unpause: ->\n $scope.startedAt = new Date()\n\n getCurrentTime: ->\n now = new Date()\n # TODO: account for server offset maybe? see: study_data_manager.js:166\n now.toISOString()\n\n touch: ->\n # Auto pause will break e2e specs\n unless process.env.RAILS_ENV == \"test\"\n $timeout.cancel($scope.autoPauseInterval) if $scope.autoPauseInterval\n $scope.autoPauseInterval = $timeout ->\n return if $scope.isPaused()\n\n $scope.pause()\n $scope.$emit \"autoPause\", true\n SessionSettings.log \"Triggering Auto Pause\"\n , AUTO_PAUSE_TIMEOUT_MSEC\n\n clearAutoPause: ->\n $scope.$emit \"autoPause\", false\n $scope.unpause() if $scope.isPaused()\n $scope.touch()\n\n angular.element(document).on \"touchstart\", () ->\n $scope.$apply () ->\n $scope.clearAutoPause()\n angular.element(document).on \"click\", () ->\n $scope.$apply () ->\n $scope.clearAutoPause()\n angular.element(document).on \"keyup\", () ->\n $scope.$apply () ->\n $scope.clearAutoPause()\n $scope.initialize()\n\n $scope\n])\n","learnApp.service(\"TypingGuideHelper\", ['$rootScope', 'DebugHelper', ($rootScope, DebugHelper) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"TypingGuideHelper\", $scope)\n\n _.assignIn $scope,\n map: null\n\n # take language so we can know whether to do any extra handling - just japanese now, but could change\n setMap: (ime, language) ->\n $scope.map = ime.map\n if language.code == \"ja\"\n for key, value of $scope.map[1]\n shift_key = \"[shift]\" + key\n $scope.map[0][shift_key] = value\n $scope.map = $scope.map[0]\n for key, value of $scope.map\n if Array.isArray(value)\n $scope.map[key] = value.join(\" \")\n return $scope.map\n\n reset: ->\n $scope.map = null\n\n $scope\n])\n","learnApp.factory('UserSettings', ['$rootScope', '$routeParams', 'DebugHelper', 'localStorageService', 'UserManager', ($rootScope, $routeParams, DebugHelper, localStorageService, UserManager) ->\n $scope = $rootScope.$new()\n DebugHelper.register('UserSettings', $scope)\n\n $scope.key = 'learn_app_settings'\n DEFAULT_SETTINGS = {\n contentAudio: true\n effectAudio: true\n effectVolume: 100\n audioQuestions: true\n spellingQuestions: true\n keyboardShortcut: false\n }\n\n _.assignIn $scope,\n initialized: false\n settings: DEFAULT_SETTINGS\n availableSettings:\n contentAudio: { label: 'js.learnApp.settings.contentAudio', type: 'radio' }\n effectAudio: { label: 'js.learnApp.settings.effectAudio', type: 'radio' }\n effectVolume: { label: 'js.learnApp.settings.effectVolume', type: 'range' }\n audioQuestions: { label: 'js.learnApp.settings.audioQuestions', type: 'radio' }\n spellingQuestions: { label: 'js.learnApp.settings.spellingQuestions', type: 'radio' }\n keyboardShortcut: { label: 'js.learnApp.settings.keyboardShortcuts', type: 'radio' }\n\n # ensure passing in routeParams sound=false doesn't change the user's settings\n shouldPlayEffectAudio: () ->\n $scope.settings['effectAudio'] && !$scope.audioOff\n\n getSetting: (setting) ->\n $scope.settings[setting]\n\n loadUserMethod = if $routeParams.deloitte_demo then UserManager.loadDeloitteUser('learn') else UserManager.loadUser()\n\n loadUserMethod.then (currentUser) ->\n $scope.settings = _.defaults(localStorageService.get($scope.key), DEFAULT_SETTINGS)\n if currentUser?.attributes?['profile-overrides']?['disable-effect-audio']\n $scope.settings['effectAudio'] = false\n $.setVolume($scope.settings.effectVolume)\n\n $scope.audioOff = $routeParams.sound == 'false'\n $scope.initialized = true\n\n $scope.$watch 'settings', (newVal, oldVal) ->\n return if newVal == oldVal\n localStorageService.set $scope.key, $scope.settings\n , true\n\n $scope\n])\n","learnApp.factory(\"WindowManager\", ['$rootScope', '$window', 'WindowHelper', 'DebugHelper', 'PresentationManager', ($rootScope, $window, WindowHelper, DebugHelper, PresentationManager) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"WindowManager\", $scope)\n\n $window.onbeforeunload = ->\n if PresentationManager.presentations.length > 0\n \"Using your browser's close button will prevent us from saving your progress. Are you sure you wish to close anyway?\"\n else\n null\n\n _.assignIn $scope,\n disableCloseWarning: ->\n $window.onbeforeunload = null\n\n $scope\n])\n","learnApp.service(\"SurveyHelper\", ['$rootScope','$timeout','$location', '$anchorScroll', '$q', 'DebugHelper', 'LearnSurveyResource', 'V3ModelHelper', 'SummaryHelper', ($rootScope, $timeout, $location, $anchorScroll, $q, DebugHelper, LearnSurveyResource, V3ModelHelper, SummaryHelper) ->\n $scope = $rootScope.$new()\n DebugHelper.register(\"SurveyHelper\", $scope)\n\n _.assignIn $scope,\n stateUI:\n currentPage: 'surveyForm'\n deferred: null\n\n reset: () ->\n $scope.deferred = null\n $scope.survey = null\n $scope.stateUI.currentPage = 'surveyForm'\n\n recordStudentsResponse: (form) ->\n form.studentSurveyForm.$submitted = true\n if form.studentSurveyForm.$valid\n answers = _.flatten(_.map($scope.surveyContent.sections, (section) ->\n section.questions ))\n answers = _.map(answers, (answer) -> _.pick(answer, ['answer', 'prompt', 'type']))\n answers = _.map(answers, (answer) -> _.defaults(answer, { answer: \"null\", platform: \"Web\" }))\n LearnSurveyResource.save id: $scope.survey.id\n , is_dismissed: true, response: JSON.stringify(answers)\n , (success) ->\n form.studentSurveyForm.$submitted = false\n $scope.stateUI.currentPage = 'confirmation'\n else\n $scope.surveyErrors = angular.copy($scope.surveyContent.sections)\n $timeout ->\n $anchorScroll(\"survey-error-list\")\n\n finishSurvey: () ->\n $scope.reset()\n $location.path SummaryHelper.summaryPath\n\n dismiss: () ->\n LearnSurveyResource.save id: $scope.survey.id\n , is_dismissed: true\n , (success) ->\n $scope.finishSurvey()\n\n loadSurvey: () ->\n if !$scope.deferred\n $scope.deferred = $q.defer()\n LearnSurveyResource.query {}\n , (success) ->\n $scope.survey = V3ModelHelper.parse(success)[0]\n if $scope.survey\n $scope.surveyContent = JSON.parse($scope.survey.attributes['json-content'])\n $scope.deferred.resolve($scope.survey)\n , $scope.deferred.reject\n\n $scope.deferred.promise\n\n])\n","learnApp.service(\"LearnAppConstants\", [->\n service =\n STATS_MAX_TICKS: 50\n STATS_TICK_DELAY_MSEC: 20\n DEFAULT_SESSION_SIZE: 10\n MASTERY_LEVEL: 6\n MAX_PERCENT_UNTIL_NEXT_LEVEL: 100\n LTI_CLIENT_IDS_FOR_EMAIL: [8, 40] #get emails for UT Austin, vst\n\n service\n])\n","/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS103: Rewrite code to no longer use __guard__, or convert again using --optional-chaining\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md\n */\nimport defaultPartnerImage from 'images/default/big/user.jpg';\n\nlearnApp.controller('setSummaryCtrl', ['$analytics', '$filter', '$routeParams', '$location', '$scope', '$window', 'AssignmentDetailsService', 'DebugHelper', 'ExperimentSegmentsResource', 'iFrameMessageService', 'LtiService', 'ModalService', 'paginatedInstructionalItemsService', 'PresentationManager', 'SessionSettings', 'UserManager', 'V3ModelHelper', 'V3SetsResource', 'StudyQueue', 'WrapUpHelper', 'V3PartnersResource', 'UsersResource', 'SummaryHelper', 'WindowManager', 'setLearnURLService', function($analytics, $filter, $routeParams, $location, $scope, $window, AssignmentDetailsService, DebugHelper, ExperimentSegmentsResource, iFrameMessageService, LtiService, ModalService, paginatedInstructionalItemsService, PresentationManager, SessionSettings, UserManager, V3ModelHelper, V3SetsResource, StudyQueue, WrapUpHelper, V3PartnersResource, UsersResource, SummaryHelper, WindowManager, setLearnURLService) {\n\n DebugHelper.register(\"setSummaryCtrl\", $scope);\n\n _.assignIn($scope, {\n routes: Packs.iKnowRoutes,\n stateUI: {\n loading: true,\n bbc: false\n },\n headingTabs: [{\n slug: \"progress\",\n name: \"Progress\"\n }\n , {\n slug: \"more_details\",\n name: \"More Details\"\n }\n ],\n\n SessionSettings,\n LtiService,\n ModalService,\n paginatedInstructionalItemsService,\n paginatedInstructionalContentServiceOptions: { include: \"annotations,annotations.document,annotations.image,annotations.sound,annotations.video\" },\n instructionalItemsHeader: $filter(\"translate\")(\"js.learn.assignments.instructional_items\"),\n instructionalItemListtabs: [\n {slug: \"default\"}\n ],\n instructionalItemCardPath: Packs.iKnowRoutes.common_v3_templates_path('_instructional_item_learn_tile'),\n\n showInstructionalItem(resource) {\n return ModalService.showModal('instructional-item-viewer-modal', {item: resource});\n },\n\n setLoadingMessage(message, isError){\n $scope.stateUI.loading = true;\n $scope.loadingMessage = message;\n return $scope.error = isError;\n },\n\n showPayportal() {\n $scope.stateUI.state = \"payment_required\";\n return UserManager.loadUser().then(function(user) {\n $scope.user = user;\n return $scope.stateUI.loading = false;\n });\n },\n\n paymentSuccessCallback() {\n WindowManager.disableCloseWarning();\n return $window.location.reload();\n },\n\n finalizeLoad() {\n SummaryHelper.loadPaths();\n if (SessionSettings.isPreview) {\n $scope.stateUI.state = \"preview_completed\";\n } else {\n $scope.stateUI.state = \"summary\";\n }\n return $scope.stateUI.loading = false;\n },\n\n setTipCardState() {},\n\n setActiveTab(tab) {\n $analytics.eventTrack(\"lass_switch_tab_\" + tab.slug, { category: 'learn_app_lass'});\n return $scope.activeTab = tab;\n },\n\n replayPreview() {\n return $location.path(SummaryHelper.quizPath);\n },\n\n checkMemberId() {\n const creator = AssignmentDetailsService.assignment.relationships.creator.data;\n\n if ((creator.type === \"partners\") && creator.attributes[\"partner-settings\"][\"member-id-enabled\"]) {\n $scope.partner = creator;\n $scope.stateUI.memberIdSlug = creator.attributes[\"partner-settings\"][\"member-id-slug\"];\n\n return UserManager.loadUser().then(function(user) {\n $scope.user = user;\n if (!(user.relationships && !!_.find(user.relationships['user-partner-member-ids'] != null ? user.relationships['user-partner-member-ids'].data : undefined, member_id => parseInt(__guard__(__guard__(member_id.relationships != null ? member_id.relationships.partner : undefined, x1 => x1.data), x => x.id)) === parseInt(creator.id)))) {\n $scope.user_partner_member_id = {user_id: $scope.user.id, partner_id: creator.id, member_id: \"\"};\n return $scope.stateUI.forceGetMemberId = true;\n }\n });\n }\n },\n\n createUserMemberId() {\n if ($scope.user_partner_member_id.member_id.length > 0) {\n return $scope.updateUser();\n }\n },\n\n updateUser() {\n return UsersResource.save({ id: $scope.user.id }\n , { user_partner_member_ids: $scope.user_partner_member_id }\n , function(success) {\n UserManager.resetUser();\n return $scope.stateUI.forceGetMemberId = false;\n }\n , error => $scope.showError = true);\n },\n\n\n initialize() {\n return PresentationManager.uploadStudyData().then(function() {\n let oldModuleProgress;\n if (AssignmentDetailsService.assignment) {\n oldModuleProgress = $scope.moduleProgress;\n }\n\n return AssignmentDetailsService.initialize().then(function(success) {\n if (AssignmentDetailsService.assignment.attributes['learn-version'] === 4) {\n const path = setLearnURLService.getUrl({ id: AssignmentDetailsService.assignment.id, version: 4 }, {});\n $window.location.href = path;\n }\n $scope.user = UserManager.currentUser;\n $scope.moduleType = AssignmentDetailsService.assignmentType;\n $scope.paginatedInstructionalContentServiceOptions[$scope.moduleType + '_id'] = AssignmentDetailsService.assignment.id;\n $scope.module = AssignmentDetailsService.assignment;\n $scope.setTipCardState();\n if ($scope.module.meta) {\n $scope.moduleProgress = parseInt($scope.module.meta['memory-aggregate'].progress * 100) || 0;\n $scope.moduleNextStudy = new Date($scope.module.meta[\"memory-aggregate\"][\"see-next-at\"]);\n $scope.lastStudyTime = new Date($scope.module.meta[\"memory-aggregate\"][\"last-study-time\"]);\n if (($scope.moduleProgress === 100) && ($scope.moduleProgress !== oldModuleProgress)) {\n $scope.stateUI.firstTimeCompleted = true;\n }\n }\n\n iFrameMessageService.postMessage({\n messageType: \"load-module\",\n context: { id: $scope.module.id, type: $scope.moduleType, name: $scope.module.attributes.name },\n data: {\n progress: $scope.moduleProgress || 0,\n studiedItemsCount: ($scope.module.meta != null ? $scope.module.meta['studied-items-count'] : undefined) || 0,\n totalStudyTime: ($scope.module.meta != null ? $scope.module.meta['total-study-time-millis'] : undefined) || 0,\n itemsCount: $scope.module.attributes['studiable-memories-count']\n }\n });\n\n return $scope.finalizeLoad();\n }\n , function(fail) {\n if (fail.status === 403) {\n return LtiService.loadGroup().then(function() {\n if (LtiService.paymentRequired) {\n return $scope.showPayportal();\n } else {\n // unknown 403, redirect to signin\n return $window.location.href = Packs.iKnowRoutes.v3_signin_path();\n }\n });\n } else {\n return DebugHelper.logError(fail);\n }\n });\n });\n }\n }\n );\n\n $scope.activeTab = $scope.headingTabs[0];\n\n StudyQueue.reset();\n WrapUpHelper.disable();\n\n if (SessionSettings.deloitteDemo) {\n return UserManager.loadDeloitteUser(\"learn\").then(function(user) {\n $scope.user = user;\n return $scope.initialize();\n });\n } else {\n return $scope.initialize();\n }\n}\n\n]);\n\nfunction __guard__(value, transform) {\n return (typeof value !== 'undefined' && value !== null) ? transform(value) : undefined;\n}","var map = {\n\t\"./all-facets-controller.js\": 325,\n\t\"./all-facets-controller.js.coffee\": 325,\n\t\"./assigned-goal-controller.js\": 326,\n\t\"./assigned-goal-controller.js.coffee\": 326,\n\t\"./correct-confirmation-controller.js\": 327,\n\t\"./correct-confirmation-controller.js.coffee\": 327,\n\t\"./explanation-question-controller.js\": 328,\n\t\"./explanation-question-controller.js.coffee\": 328,\n\t\"./fill-in-the-blank-controller.js\": 329,\n\t\"./fill-in-the-blank-controller.js.coffee\": 329,\n\t\"./instructional-content-controller.js\": 330,\n\t\"./instructional-content-controller.js.coffee\": 330,\n\t\"./learn-lti-redirect-controller\": 331,\n\t\"./learn-lti-redirect-controller.ts\": 331,\n\t\"./learn-more-controller.js\": 332,\n\t\"./learn-more-controller.js.coffee\": 332,\n\t\"./lti-wrapper-controller.js\": 333,\n\t\"./lti-wrapper-controller.js.coffee\": 333,\n\t\"./mobile-app-modal.js\": 334,\n\t\"./mobile-app-modal.js.coffee\": 334,\n\t\"./onboarding-modal\": 335,\n\t\"./onboarding-modal.ts\": 335,\n\t\"./personalization-modal.js\": 336,\n\t\"./personalization-modal.js.coffee\": 336,\n\t\"./quiz-controller.js\": 337,\n\t\"./quiz-controller.js.coffee\": 337,\n\t\"./quiz-fib-controller.js\": 338,\n\t\"./quiz-fib-controller.js.coffee\": 338,\n\t\"./quiz-mcl-controller.js\": 339,\n\t\"./quiz-mcl-controller.js.coffee\": 339,\n\t\"./quiz-region-citd-controller.js\": 340,\n\t\"./quiz-region-citd-controller.js.coffee\": 340,\n\t\"./quiz-region-mc-controller.js\": 341,\n\t\"./quiz-region-mc-controller.js.coffee\": 341,\n\t\"./quiz-sequence-injection-controller.js\": 342,\n\t\"./quiz-sequence-injection-controller.js.coffee\": 342,\n\t\"./recall-controller.js\": 343,\n\t\"./recall-controller.js.coffee\": 343,\n\t\"./sentences-controller.js\": 344,\n\t\"./sentences-controller.js.coffee\": 344,\n\t\"./study-controller.js\": 345,\n\t\"./study-controller.js.coffee\": 345,\n\t\"./study-region-controller.js\": 346,\n\t\"./study-region-controller.js.coffee\": 346,\n\t\"./summary-controller.js\": 347,\n\t\"./summary-controller.js.coffee\": 347,\n\t\"./typing-guide-controller.js\": 348,\n\t\"./typing-guide-controller.js.coffee\": 348,\n\t\"./unschedule-assignment-modal.js\": 349,\n\t\"./unschedule-assignment-modal.js.coffee\": 349,\n\t\"./unsupported-quiz-controller.js\": 350,\n\t\"./unsupported-quiz-controller.js.coffee\": 350,\n\t\"./wrap-up-helper\": 351,\n\t\"./wrap-up-helper.ts\": 351,\n\t\"./wrap-up-modal\": 352,\n\t\"./wrap-up-modal.ts\": 352\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 = 759;","ceregoCommon.directive('cgTooltip', ['$window', '$timeout', '$compile', ($window, $timeout, $compile) ->\n restrict: \"A\"\n\n transclude:\n 'textSlot' : '?tooltipText'\n 'tooltipSlot': 'tooltipContent'\n\n templateUrl: Packs?.iKnowRoutes?.common_v3_templates_path(\"_tooltip_content\")\n\n scope:\n direction: \"@direction\"\n toggle: \"@toggle\"\n size: \"@size\"\n\n controller: ['$window', '$scope', '$timeout', 'DebugHelper', ($window, $scope, $timeout, DebugHelper) ->\n DebugHelper.register(\"cgToolTipCtrl\", $scope)\n\n $scope.handleClick = (e) ->\n e.stopPropagation()\n\n $scope.element.toggleClass('visible')\n $scope.toggled = !$scope.toggled\n\n # add listener to body so that when tooltip is toggled, clicking anywhere on body detoggles it\n if $scope.toggled\n $timeout ->\n $(\"body\").click $scope.handleClick\n else\n $(\"body\").unbind('click', $scope.handleClick)\n ]\n\n link: ($scope, element, attrs) ->\n $scope.element = element\n $scope.element.addClass(\"v3-tooltip-container\")\n\n if $scope.toggle == 'click'\n $scope.element.click $scope.handleClick\n else\n $scope.element.hover ->\n $(this).toggleClass('visible')\n])\n","ceregoCommon.directive(\"goalTriangle\", [->\n restrict: \"E\"\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"goal_triangle\")\n\n scope:\n levelValue: \"=\"\n goalReached: \"=\"\n size: \"=\"\n\n controller: [ '$scope', ($scope) ->\n _.assignIn $scope, {\n\n getLevelClass: () ->\n \"level-\" + Math.floor(parseFloat($scope.levelValue))\n }\n ]\n])\n","ceregoCommon.directive(\"cgLearnerDashboardCard\", [ ->\n restrict: \"E\"\n scope:\n contextType: \"=\"\n contextId: \"=\"\n contextProgress: \"=\" # Check if this will be passed in or have study item return it\n contextLevel: \"=\"\n nextStudyTime: \"=\"\n firstTimeCompleted: \"=\"\n\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"learner_dashboard_card\")\n\n controller: ['$window', '$scope', '$location', '$filter', 'DebugHelper', 'UserManager', 'StudyItemsService', 'timeHelper', 'GoalMathHelper', 'MySetsResource', 'ModalService', 'SessionSettings', 'AssignmentDetailsService', 'toastHelper', 'LtiService',\n ($window, $scope, $location, $filter, DebugHelper, UserManager, StudyItemsService, timeHelper, GoalMathHelper, MySetsResource, ModalService, SessionSettings, AssignmentDetailsService, toastHelper, LtiService) ->\n\n DebugHelper.register(\"cgLearnerDashboardCard\", $scope)\n\n _.assignIn $scope, {\n AssignmentDetailsService: AssignmentDetailsService\n LtiService: LtiService\n SessionSettings: SessionSettings\n\n stateUI:\n loaded: false\n currentMode: 0\n\n FIRST_TIME_UNSTARTED: 1\n START_MORE_ITEMS: 2\n GOOD_FOR_NOW: 3\n FADING_ONLY: 4\n PROGRESS_COMPLETED: 5\n ONE_DAY_IN_MS: 24 * 60 * 60 * 1000\n\n launchGoodForNow: () ->\n version = AssignmentDetailsService.assignment.attributes[\"learn-version\"]\n options = { sessionContextType: $scope.contextType, sessionContextId: $scope.contextId, returnUrl: SessionSettings.returnURL, studyItem: { version: version }}\n options.embed = true if SessionSettings.embed\n ModalService.showModal('good-for-now-modal', options)\n\n showGoMobile: () ->\n ModalService.showModal('mobile-app-modal', {modalType: 'transparent' })\n\n startLearning: () ->\n version = AssignmentDetailsService.assignment.attributes[\"learn-version\"]\n if version == 4\n# TODO: pass temp_login_token if in LTI\n $window.location.href = $scope.stateUI.learnPath\n else\n $location.url($scope.stateUI.learnPath)\n\n continueLearning: () ->\n $scope.firstTimeCompleted = false\n $scope.initialize()\n\n toggleSchedule: () ->\n if AssignmentDetailsService.assignment.meta['in-schedule'] then $scope.unSchedule() else $scope.addToSchedule()\n\n confirmUnschedule: () ->\n MySetsResource.removeFromSchedule\n id: $scope.contextId\n , (success) ->\n AssignmentDetailsService.assignment.meta['in-schedule'] = false\n if LtiService.isBBC\n confirm_key = 'js.learn_app_dashboard.progress_completed.bbc_assignment_removed'\n else\n confirm_key = 'js.learn_app_dashboard.progress_completed.assignment_removed'\n toastHelper.showToast('simpleToast', message: $filter(\"translate\")(confirm_key))\n\n unSchedule: () ->\n ModalService.showModal('unschedule-assignment-modal', {modalType: 'transparent', confirmUnschedule: $scope.confirmUnschedule, isBBC: LtiService.isBBC })\n\n addToSchedule: () ->\n MySetsResource.addToSchedule\n id: $scope.contextId\n , (success) ->\n AssignmentDetailsService.assignment.meta['in-schedule'] = true\n if LtiService.isBBC\n confirmation_key = 'js.learn_app_dashboard.progress_completed.bbc_assignment_added'\n else\n confirmation_key = 'js.learn_app_dashboard.progress_completed.assignment_added'\n toastHelper.showToast('simpleToast', message: $filter(\"translate\")(confirmation_key))\n\n setNextRecommendedModule: () ->\n StudyItemsService.loadStudyItem(null, null, \"recommended\", SessionSettings.returnURL).then (studyItem) ->\n $scope.stateUI.nextModule = studyItem.learnPath\n\n initialize: () ->\n # 5 Progress is 100% & completed for the first time\n if $scope.contextProgress == 100 && $scope.firstTimeCompleted\n $scope.stateUI.currentMode = $scope.PROGRESS_COMPLETED\n if LtiService.isBBC\n title_key = 'js.learn_app_dashboard.progress_completed.bbc_title'\n else\n title_key = 'js.learn_app_dashboard.progress_completed.title'\n $scope.stateUI.title = $filter('translate')($filter('randomTranslateStringArray')(title_key))\n $scope.stateUI.loaded = true\n else\n StudyItemsService.loadStudyItem($scope.contextType, $scope.contextId, \"recommended\", SessionSettings.returnURL).then (studyItem) ->\n $scope.stateUI.unstartedCount = studyItem.unstarted\n $scope.stateUI.fadingCount = studyItem.fading\n $scope.stateUI.learnPath = studyItem.learnPath\n $scope.stateUI.durationString = timeHelper.secToString(studyItem.sessionLengthSec)\n\n # 1 First time ever\n # contextProgress is undefined with logged out study\n # studyItem.primaryCollection is undefined for sets with no assignment and it is good for now\n if ($scope.contextProgress == 0 || _.isUndefined($scope.contextProgress)) && studyItem.primaryCollection # undefined with logged out study\n title_key = 'js.learn_app_dashboard.first_time_unstarted.title'\n $scope.stateUI.currentMode = $scope.FIRST_TIME_UNSTARTED\n $scope.stateUI.totalMemoriesCount = studyItem.primaryCollection.attributes[\"studiable-memories-count\"]\n if $scope.contextLevel\n $scope.stateUI.estimatedStudyTimeLower = GoalMathHelper.estimateRangeLower($scope.contextLevel)\n $scope.stateUI.estimatedStudyTimeUpper = GoalMathHelper.levelToDaysConversion($scope.contextLevel)\n # 2 Has anything unstarted\n else if studyItem.unstarted > 0\n $scope.stateUI.currentMode = $scope.START_MORE_ITEMS\n if LtiService.isBBC\n title_key = 'js.learn_app_dashboard.start_more_items.bbc_title'\n else\n title_key = 'js.learn_app_dashboard.start_more_items.title'\n # 3 No fading and no unstarted (good for now)\n else if studyItem.fading == 0 && studyItem.unstarted == 0\n $scope.setNextRecommendedModule()\n $scope.stateUI.currentMode = $scope.GOOD_FOR_NOW\n now = new Date\n # Set to 1 day if next study time is less than 1 day\n duration = Math.max(moment.duration($scope.nextStudyTime - now).asMilliseconds(), $scope.ONE_DAY_IN_MS)\n $scope.stateUI.duration = timeHelper.msecToString(duration)\n if LtiService.isBBC\n title_key = 'js.learn_app_dashboard.good_for_now.bbc_title'\n else\n title_key = 'js.learn_app_dashboard.good_for_now.title'\n # 4 No unstarted and there is fading.\n else if studyItem.fading > 0 && studyItem.unstarted == 0\n $scope.stateUI.currentMode = $scope.FADING_ONLY\n if LtiService.isBBC\n title_key = 'js.learn_app_dashboard.fading_only.bbc_title'\n else\n title_key = 'js.learn_app_dashboard.fading_only.title'\n # Should not be possible\n else\n DebugHelper.logError(\"cgLearnerDashboardCard unexpected value progress: #{progress}, unstarted: #{studyItem.unstarted}, fading: #{studyItem.fading}\")\n\n if title_key\n $scope.stateUI.title = $filter('translate')($filter('randomTranslateStringArray')(title_key))\n\n $scope.stateUI.loaded = true\n }\n\n $scope.initialize()\n ]\n\n])\n","ceregoCommon.directive('miniMemoryBank', [ '$timeout', ($timeout) ->\n restrict : \"E\"\n\n scope:\n showModal: \"=\"\n context: \"=?\"\n course: \"=?\"\n module: \"=?\"\n lastStudyTime: \"=?\"\n\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"mini_memory_bank\")\n\n controller: ['$scope', '$q', 'MemoryBankLevelsService', '$window', '$filter', '$routeParams', 'progressVisual', 'MemoryBankAssetHelper', 'MemoryStorage', 'UserManager', 'DebugHelper', (\n $scope, $q, MemoryBankLevelsService, $window, $filter, $routeParams, progressVisual, MemoryBankAssetHelper, MemoryStorage, UserManager, DebugHelper) ->\n DebugHelper.register(\"miniMemoryBankCtrl\", $scope)\n\n\n _.assignIn $scope,\n MODULE_RADIUS: 30\n WELCOME: 1\n WELCOME_BACK: 2\n ENCOURAGING: 3\n levels: _.drop(MemoryBankLevelsService.levels, 1)\n forMobile: angular.element($window).width() < 768\n preloadedOrbs: []\n\n prepareFacet: (facet, radius) ->\n facet.radius = radius\n facet.orb_type = \"facet\"\n facet.level_slug = MemoryBankLevelsService.binContinuousLevel(facet.level, facet.review_interval).slug\n true\n\n prepareModule: (module, radius) ->\n module.radius = radius\n module.orb_type = \"module\"\n module.level_slug = MemoryBankLevelsService.slugLevel(module.score)\n module.image ||= MemoryBankAssetHelper.defaultModuleOrb()\n true\n\n tick: (selection) ->\n # Reset tick counters\n tick = 0\n $scope.force.on \"start\", ->\n tick = 0\n\n selection.each (d) ->\n d.startTick = Math.round(Math.random()*12)\n\n # Actual tick function\n (e) ->\n alpha = e.alpha\n k = .4\n wiggle = .2\n tick += 1\n\n selection.each (node) ->\n # move closer to target with a little wiggle to prevent local minima (aka local gravity)\n if tick > node.startTick && node.weight == 0\n node.x += (node.target.x - node.x)*k*alpha\n node.y += (node.target.y - node.y)*k*alpha\n\n node.y = Math.max($scope.bb.top, Math.min(node.y, $scope.bb.bottom))\n\n # Finally, update the dom\n selection.call($scope.moveToPosition)\n\n radius: (orb_type) ->\n switch orb_type\n when \"module\"\n $scope.MODULE_RADIUS\n else\n 8\n\n updateSVG: (data) ->\n LEFT_BORDER_WIDTH = 0\n RIGHT_BORDER_WIDTH = 0\n HEADER_HEIGHT = 0\n NEEDS_REVIEW_RETENTION = .85\n if angular.element($window).width() > 768\n $scope.totalLevels = MemoryBankLevelsService.totalLevelsExcludeUnstarted\n else if $scope.module\n $scope.totalLevels = _.max([$scope.levels.length, $scope.module.scoring_goal + 2])\n else\n $scope.totalLevels = $scope.levels.length\n\n radius = $scope.radius($scope.orb_type)\n\n lockedLevelSize = if angular.element($window).width() > 768 then 65 else 40\n\n nextLockedLevel = Math.ceil(_.max(_.map(data, (d) -> d.score || d.level)) || 0.3)\n $scope.unlockedLevels = _.filter($scope.levels, (level) -> level.minLevel < nextLockedLevel)\n\n svgDimensions =\n x: angular.element(\".mini-memory-bank\").width() - (($scope.totalLevels - $scope.unlockedLevels.length) * lockedLevelSize)\n y: angular.element(\".mini-memory-bank\").height()\n\n $scope.bb =\n left: LEFT_BORDER_WIDTH + radius\n right: svgDimensions.x - RIGHT_BORDER_WIDTH - radius\n top: HEADER_HEIGHT + radius + 1\n bottom: svgDimensions.y - radius - 1\n\n for orb in data\n if $scope.orb_type == \"module\"\n $scope.prepareModule(orb, radius)\n else\n $scope.prepareFacet(orb, radius)\n\n domain = _.map($scope.unlockedLevels, \"minLevel\").concat(nextLockedLevel)\n range = [$scope.bb.left]\n _.times $scope.unlockedLevels.length, (i) ->\n range.push($scope.bb.left + ($scope.bb.right - $scope.bb.left) * (i + 1) / $scope.unlockedLevels.length)\n\n $scope.xScale = d3.scale.linear().domain(domain).range(range)\n $scope.yScale = d3.scale.linear().domain([1,NEEDS_REVIEW_RETENTION,0]).range([$scope.bb.top, .5 * ($scope.bb.bottom + $scope.bb.top), $scope.bb.bottom])\n\n selection = $scope.svg.selectAll(\".progress-orb\")\n\n keyFn = (d) ->\n if $scope.orb_type == \"facet\"\n $scope.orb_type + \":\" + d.learning_engine_guid\n else\n $scope.orb_type + \":\" + d.id\n selection = selection.data(data, keyFn)\n\n # Create new nodes\n selection.enter().append(\"g\").call($scope.createOrb)\n\n # Set up clipPath we can use to clip module images to a circle\n # N.B. putting this clipPath in the link function (like in the main knowledge bank) was leading to\n # the clipPath not being applied properly during a soft load of the mini knowledge bank\n defs = $scope.svg.append(\"defs\")\n defs.append \"clipPath\"\n .attr\n id: \"miniMbModuleClipPath\"\n .append \"circle\"\n .attr\n cx: 0\n cy: 0\n r: $scope.MODULE_RADIUS - 4\n\n # Rebuild force layout\n if $scope.force\n $scope.force.stop()\n\n $scope.force = d3.layout.force()\n .nodes(_.filter(selection.data(), (d) -> !_.isUndefined(d)))\n .gravity(0)\n .charge(0)\n .friction(.6)\n .charge (d) ->\n if d.weight > 0\n -20 * d.radius\n else\n 0\n .chargeDistance(100)\n .size [svgDimensions.x, svgDimensions.y]\n\n $scope.force.on \"tick\", $scope.tick(selection)\n\n # Calculate theoretical final position\n selection.call($scope.resetAnimation).call($scope.setTargetPosition)\n\n # Perform animating simulation with timers between ticks\n console.log \"STARTING ANIMATION\"\n selection.call($scope.doAnimate)\n\n doAnimate: (selection) ->\n $scope.force.start() # need to use start and not resume in order to rebuild internal link strengths\n selection.classed\n background: false\n selected: (d) -> d.weight > 0\n if $scope.force.links().length > 0\n selection.classed\n background: (d) -> d.weight == 0\n\n calculateFinalPosition: (d) ->\n x: $scope.xScale(d.score || d.level)\n y: $scope.yScale($scope.orbRetention(d))\n\n setTargetPosition: (selection) ->\n selection.each (d) ->\n finalPosition = $scope.calculateFinalPosition(d)\n d.target =\n x: finalPosition.x\n y: finalPosition.y\n\n orbRetention: (d) ->\n if $scope.orb_type == \"facet\" then d.current_retention else d.average_current_retention\n\n # sets the position of the orb at the beginning of the animation\n setSourcePosition: (preload) ->\n (selection) ->\n height = angular.element(\".mini-memory-bank\").height()\n selection.each (d) ->\n sourceOrb = _.find($scope.preloadedOrbs, (orb) -> orb.learning_engine_guid == d.learning_engine_guid)\n if $scope.preload && sourceOrb\n sourcePosition = $scope.calculateFinalPosition(sourceOrb)\n d.x = sourcePosition.x\n d.y = sourcePosition.y\n else\n # otherwise, recent new memories animate from lower left\n d.x = Math.random() * -100\n d.y = height - (Math.random() * height/4)\n\n moveToPosition: (selection) ->\n selection.attr\n transform: (d) ->\n \"translate(\" + [d.x, d.y] + \")\"\n\n resetAnimation: (selection) ->\n $scope.force.links([])\n selection.each (d) ->\n d.px = d.x\n d.py = d.y\n d.fixed = false\n\n # Called for new nodes\n createOrb: (selection) ->\n # Attach level_slug first so we can do it programmatically without doing string append to the class\n selection.attr(\"class\", (d) -> d.level_slug)\n selection.classed\n \"progress-orb\": true\n \"progress-module\": (d) -> d.orb_type == \"module\"\n \"progress-facet\": (d) -> d.orb_type == \"facet\"\n .call($scope.setSourcePosition($scope.preload))\n .call($scope.moveToPosition)\n .attr\n module_id: (d) -> d.id if d.orb_type == \"module\"\n\n selection.append \"circle\"\n .attr\n cx: 0\n cy: 0\n r: (d) -> d.radius\n\n selection.filter (d) ->\n d.orb_type != \"facet\"\n .each (d) ->\n d3.select(this).append \"image\"\n .attr\n \"xlink:href\": (d) ->\n $filter(\"transcode\")(d.image, 52)\n \"clip-path\": (d) ->\n \"url(#miniMbModuleClipPath)\"\n preserveAspectRatio: \"xMidYMid slice\"\n x: -d.radius + 4\n y: -d.radius + 4\n width: (d.radius - 4)*2\n height: (d.radius - 4)*2\n title: (d) -> d.name\n\n loadData: (constraints) ->\n UserManager.loadUser().then (user) ->\n constraints.user_id = user.id\n $scope.memoryBankModalOptions.user = user\n lastConstraints = MemoryStorage.getLastConstraints()\n\n # if current context is the exact same as last, load from cache + dont animate\n if _.isEqual(lastConstraints, constraints)\n $scope.preload = true\n preloadConstraints = constraints\n # if we just studied the same set we loaded previously,\n # draw previous cache then animate the orbs up\n else if _.isEqual(_.omit(lastConstraints, \"lastStudyTime\"), _.omit(constraints, \"lastStudyTime\"))\n $scope.preload = true\n preloadConstraints = lastConstraints\n # if current context is totally different than the last one, redraw from scratch\n else\n $scope.preload = false\n\n if $scope.preload\n # on preload, load the memory data of where the orbs should start\n $scope.loadMemoryStorageData(preloadConstraints).then () ->\n # save initial starting positions\n $scope.preloadedOrbs = $scope.orbs\n # draw the orbs based on final position constraints\n $scope.drawData(constraints)\n else\n # on no preload, load data once + draw\n $scope.drawData(constraints)\n\n\n loadMemoryStorageData: (constraints) ->\n deferred = $q.defer()\n MemoryStorage.load(constraints).then (response) ->\n $scope.memoriesLength = response.memories.length\n $scope.memoryBankModalOptions.showLearnButton = $scope.memoriesLength > 0\n # filter out unstarted orbs\n $scope.orbs = _.cloneDeep(_.filter(response.memories, (m) ->\n m.level > 0))\n\n deferred.resolve()\n , (error) ->\n deferred.reject()\n $scope.error = (error.data && error.data.meta && error.data.meta.message) || $filter('translate')(\"js.memory_bank.could_not_load\")\n\n drawData: (constraints) ->\n $scope.loadMemoryStorageData(constraints).then ->\n # if we changed memories, reset memories after load\n if $scope.preload && $scope.preloadedOrbs != $scope.orbs\n MemoryStorage.reset()\n $timeout ->\n $scope.updateSVG($scope.orbs)\n\n prepareMiniMemoryBank: (constraints) ->\n promise = $scope.loadData(constraints)\n ]\n\n link: ($scope, element) ->\n $scope.svg = d3.select(element[0].querySelector('svg'))\n\n # TODO use directive inputs to set group, module_type, module_id in constraints passed to loadData\n constraints = {}\n $scope.memoryBankModalOptions = {}\n\n # after study, animate orbs. only reanimate if lastStudyTime has changed\n if $scope.lastStudyTime\n constraints.lastStudyTime = $scope.lastStudyTime\n\n if $scope.context == \"course\"\n constraints.group_id = $scope.course.id\n $scope.orb_type = \"module\"\n $scope.memoryBankModalOptions.course = $scope.course\n $scope.memoryBankModalOptions.forceAssignmentContext = false\n else if $scope.context == \"set\"\n constraints.module_id = $scope.module.id\n constraints.module_type = $scope.context\n $scope.orb_type = \"facet\"\n $scope.memoryBankModalOptions.module = $scope.module\n $scope.memoryBankModalOptions.module.module_type = $scope.module.context_type || constraints.module_type # needed to be v2/v3 compatible with knowledge bank\n $scope.memoryBankModalOptions.forceAssignmentContext = true # already starting in assignment scope, don't allow user to zoom out\n else if $scope.context == \"series\"\n constraints.module_id = $scope.module.id\n constraints.module_type = \"seriesGoals\" # for hitting the right API in MemoryStorage\n $scope.orb_type = \"module\"\n $scope.memoryBankModalOptions.module = $scope.module\n $scope.memoryBankModalOptions.module.module_type = $scope.module.context_type # needed to be v2 compatible with knowledge bank\n $scope.memoryBankModalOptions.forceAssignmentContext = true # already starting in assignment scope, don't allow user to zoom out\n else\n $scope.orb_type = \"module\"\n\n $scope.prepareMiniMemoryBank(constraints)\n])\n","ceregoCommon.directive(\"cgProgressCard\", [ ->\n restrict: \"E\"\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"progress_card\")\n scope:\n context: \"=\"\n\n controller: ['$window', '$scope', '$location', '$filter', 'DebugHelper', 'AssignmentDetailsService', 'CourseContextService', 'GoalMathHelper', ($window, $scope, $location, $filter, DebugHelper, AssignmentDetailsService, CourseContextService, GoalMathHelper) ->\n DebugHelper.register(\"cgProgressCard\", $scope)\n\n _.assignIn $scope, {\n uiState:\n loading: true\n #\n initialize: () ->\n if $scope.context == \"course\"\n CourseContextService.initialize().then (success) ->\n $scope.course = CourseContextService.course\n $scope.percent_progress = $filter('decimalToPercentage')($scope.course.meta.progress)\n $scope.uiState.loading = false\n else if $scope.context == \"assignment\"\n AssignmentDetailsService.initialize().then (success) ->\n $scope.assignment = AssignmentDetailsService.assignment\n if $scope.assignment.type == \"sets\"\n $scope.assignment.context_type = \"set\"\n else\n $scope.assignment.context_type = \"series\"\n $scope.percent_progress = parseInt($scope.assignment.meta?['memory-aggregate'].progress * 100) || 0\n if $scope.assignment.meta?['due-at']\n $scope.pastDue = (new Date() > new Date($scope.assignment.meta['due-at']))\n $scope.score = $filter('levelRoundDown')($scope.assignment.meta?['memory-aggregate'].score) || 0 # Should be rounded to a tenth\n $scope.hasLevelGoal = !_.isUndefined($scope.assignment.meta?['level-goal'])\n if $scope.hasLevelGoal\n $scope.level_goal = $filter('levelRoundDown')($scope.assignment.meta?['level-goal'])\n $scope.days_to_achieve = GoalMathHelper.levelToDaysConversion($scope.level_goal)\n $scope.uiState.loading = false\n }\n\n $scope.initialize()\n ]\n])\n","ceregoCommon.service('milestoneService', ['$rootScope', '$q', 'DebugHelper', 'iFrameMessageService', 'V3MyMilestonesResource', 'V3ModelHelper', ($rootScope, $q, DebugHelper, iFrameMessageService, V3MyMilestonesResource, V3ModelHelper) ->\n\n $scope = $rootScope.$new()\n DebugHelper.register(\"milestoneService\", $scope)\n\n _.assignIn $scope,\n previousMilestones: []\n currentModule: {}\n\n checkNewBadgeUnlocked: () ->\n if $scope.previousMilestones.length > 0\n _.each $scope.milestones, (milestone, index) ->\n milestone.attributes[\"first-time-unlocked\"] = (milestone.attributes[\"reporting-type\"] == \"boolean\" &&\n milestone.attributes.value &&\n !$scope.previousMilestones[index].attributes.value) ||\n (milestone.attributes[\"reporting-type\"] == \"percentage\" &&\n milestone.attributes.value == 1 &&\n $scope.previousMilestones[index].attributes.value < 1)\n if milestone.attributes[\"first-time-unlocked\"]\n iFrameMessageService.postMessage({\n messageType: \"milestone-unlocked\",\n context: {type: $scope.currentModule.type, name: $scope.currentModule.name || $scope.currentModule.attributes.name, id: $scope.currentModule.id},\n data: { milestoneType: milestone.type, value: milestone.attributes.value }\n })\n\n loadMilestones: (module) ->\n if $scope.currentModule.id != module.id || $scope.currentModule.type != module.type\n $scope.currentModule = module\n $scope.previousMilestones = []\n\n params = {}\n switch module.type\n when \"sets\"\n params['set_id'] = module.id\n when \"series\"\n params['series_id'] = module.id\n when \"courses\"\n params['course_id'] = module.id\n\n unless $scope.deferred\n $scope.deferred = $q.defer()\n\n V3MyMilestonesResource.query params\n , (success) ->\n $scope.milestones = V3ModelHelper.parse(success)\n $scope.checkNewBadgeUnlocked()\n $scope.previousMilestones = $scope.milestones\n\n $scope.deferred.resolve($scope.milestones)\n , (error) ->\n $scope.deferred.reject(error)\n $scope.deferred.promise\n\n $scope\n])\n","angular.module('cerego.common').component(\"cgMilestonesList\", {\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"milestones_list\"),\n bindings: {\n context: '<' # this can be optional later in the case of dashboard\n # Add a thing for previous stuff\n },\n\n controllerAs: '$milestonesListCtrl',\n\n controller: ['$filter', '$scope', '$q', 'DebugHelper', 'milestoneService', 'LtiService', ($filter, $scope, $q, DebugHelper, milestoneService, LtiService) ->\n DebugHelper.register(\"milestonesListCtrl\", $scope)\n\n this.isBBC = LtiService.isBBC\n this.$onInit = () ->\n that = this\n this.assignmentProgress = Math.floor(this.context.meta['memory-aggregate'].progress * 100) || null\n this.assignmentLevel = $filter('levelRoundDown')(this.context.meta[\"memory-aggregate\"][\"level\"])\n\n milestoneService.deferred = null\n milestoneService.loadMilestones(this.context).then (milestones) ->\n if _.isNull(that.assignmentProgress)\n milestones = _.reject milestones, (milestone) -> milestone.type == \"milestone-set-goal-reacheds\"\n\n that.milestones = milestones\n\n this # otherwise coffeescript will return the onInit function\n ]\n})\n","angular.module('cerego.common').component(\"cgMilestone\", {\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"milestone\"),\n bindings: {\n data: '<'\n },\n\n controllerAs: '$milestoneCtrl',\n\n controller: ['$filter', '$scope', 'DebugHelper', 'LtiService', ($filter, $scope, DebugHelper, LtiService) ->\n DebugHelper.register(\"milestoneCtrl\", $scope)\n\n this.setMilestoneNameAndType = () ->\n this.isBBC = LtiService.isBBC\n if this.isBBC\n slug = \"bbc_\" + this.data.attributes.slug\n else\n slug = this.data.attributes.slug\n this.name = $filter('translate')(\"js.milestones.names.\" + slug) # snake case fix\n this.milestoneType = this.data.attributes.slug.replace('_', '-')\n\n this.setProgress = () ->\n this.showProgressBar = this.data.attributes['reporting-type'] == 'percentage'\n if this.showProgressBar\n this.percentProgress = $filter('decimalToPercentage')(this.data.attributes['value']) # number for % reporting types\n this.completed = this.percentProgress == '100'\n else\n this.completed = this.data.attributes['value'] # true / false for boolean reporting types\n\n this.firstunlocked = this.data.attributes[\"first-time-unlocked\"]\n\n\n this.$onInit = () ->\n this.setMilestoneNameAndType()\n this.setProgress()\n\n this # otherwise coffeescript will return the onInit function\n ]\n})\n","angular.module('cerego.common').component('cgProgressBar', {\n templateUrl: Packs.iKnowRoutes.common_v3_templates_path(\"progress_bar\"),\n bindings: {\n faded: '=?',\n percentProgress: '=',\n styleType:'='\n },\n controllerAs: '$progressBarCtrl',\n controller: ['$scope', 'DebugHelper', '$interval', ($scope, DebugHelper, $interval) ->\n DebugHelper.register('progressBarCtrl', $scope)\n\n $ctrl = this\n\n _.assignIn $ctrl, {\n\n countProgress: () ->\n if $ctrl.stateUI.progress < $ctrl.percentProgress\n $ctrl.stateUI.progress = $ctrl.stateUI.progress + 1\n else\n $interval.cancel($ctrl.progressCounter)\n\n $onInit: () ->\n $ctrl.stateUI = {}\n $ctrl.stateUI.progress = 0\n $ctrl.progressCounter = $interval $ctrl.countProgress, 30\n }\n\n $ctrl\n ]\n})\n","module.exports = __webpack_public_path__ + \"media/big/user-cdad3d66.jpg\";","export default (rawLevelGoal) ->\n parsedLevelGoal = parseFloat(rawLevelGoal)\n if parsedLevelGoal == parseInt(rawLevelGoal)\n # show int number if it doesn't need to be a float\n parsedLevelGoal = parseInt(rawLevelGoal)\n parsedLevelGoal\n"],"sourceRoot":""}